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:25:17 -0500

If I produce an implementation that does exactly what I mentioned, would
you consider integrating it as the default behavior of HK2? Or did you
omit this functionality on purpose?

Thanks,
Gili

On 05/12/2013 1:16 PM, John Wells wrote:
> There isn't. In fact we have a callback that you can use for exactly
> this sort of purpose:
>
> https://hk2.java.net/2.2.0-b25/apidocs/org/glassfish/hk2/api/JustInTimeInjectionResolver.html
>
>
> You can write a simple JIT resolver that does exactly what you are
> asking for.
>
> This will not work for a direct lookup, so you may need something else
> for that case. It'd be fairly easy to write a small wrapper around
> lookup that would try to add the given class if the underlying service
> locator could not find the service.
>
> On 12/5/2013 1:09 PM, cowwoc wrote:
>> 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
>>>>
>>>
>>
>