users@hk2.java.net

Re: ServiceLocator.getService() failing for _at_Service-annotated classes

From: cowwoc <cowwoc_at_bbs.darktech.org>
Date: Thu, 05 Dec 2013 13:09:34 -0500

John,

I just had a thought: why do we need hk2-inhabitant-generator at all?
When someone tries to inject a class and a binding is not found,
couldn't HK2 automatically add a binding and retry the operation if the
class is annotated with @Service? Meaning, what prevents you from adding
the binding on-the-fly at runtime?

Thanks,
Gili

On 04/12/2013 6:17 PM, cowwoc wrote:
> Thank you. Filed https://java.net/jira/browse/HK2-165
>
> Gili
>
> On 04/12/2013 5:58 PM, John Wells wrote:
>> To use @Service you must
>>
>> a) run the hk2-inhabitant-generator as part of your build in order
>> to produce the META-INF/hk2-locator/default file. You can look at
>> this file to see if it looks reasonable (it should have your services
>> in there)
>>
>> b) Ensure that when you boot hk2 you tell it to read those files in
>> (it does not do this automatically). The easiest way to do this is
>> with this:
>>
>> https://hk2.java.net/2.2.0-b25/apidocs/org/glassfish/hk2/utilities/ServiceLocatorUtilities.html#createAndPopulateServiceLocator%28%29
>>
>>
>> I do not currently monitor stackOverflow for hk2, but I will now!
>>
>> On 12/4/2013 5:37 PM, cowwoc wrote:
>>> Hi,
>>>
>>> I've got something along the lines of:
>>>
>>> @Service
>>> public class TestClass
>>> {
>>> @Inject
>>> public TestClass()
>>> {
>>> }
>>> }
>>>
>>> public class MyApplication extends ResourceConfig
>>> {
>>> @Inject
>>> public MyApplication(ServiceLocator serviceLocator)
>>> {
>>> TestClass test = serviceLocator.getService(TestClass.class);
>>> }
>>> }
>>>
>>> but serviceLocator.getService(TestClass.class) returns null. What am
>>> I missing? Isn't HK2 supposed to auto-bind @Service-annotated
>>> classes somehow?
>>>
>>> PS: Do you monitor the "hk2" tag on Stackoverflow? I think it's a
>>> more efficient way of handling recurring questions.
>>>
>>> Thanks,
>>> Gili
>>
>