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 15:31:43 -0500

Done: https://java.net/jira/browse/HK2-170

Gili

On 05/12/2013 2:02 PM, John Wells wrote:
> Sure. I will have to talk to the security team, because there are some
> concerns.
>
> The main concern is this: to someone who does not have privilege to
> look something up a "null" return from getService is what they will
> get. It should not be possible for that person to tell the difference
> between "that service is not there" and "I do not have access to that
> service". We would have to make sure that those semantics were the
> same with this new feature.
>
> On 12/5/2013 1:58 PM, cowwoc wrote:
>> 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
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>