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:58:13 -0500

Okay. So should I file a RFE asking for JustInTimeInjectionResolver to
support lookups?

Gili

On 05/12/2013 1:28 PM, John Wells wrote:
> We ommited this on purpose because there are security concerns about
> adding services kind of at random. However, I think this feature
> would be an excellent candidate for one of the optional features that
> you can add to the system (like @Immediate or @PerThread). There are
> several optional features like this that can be added via
> ServiceLocatorUtilities.
>
> On 12/5/2013 1:25 PM, cowwoc wrote:
>> 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
>>>>>>
>>>>>
>>>>
>>>
>>
>