dev@glassfish.java.net

Re: Debugging Dependency Injection in GlassFish

From: Jerome Dochez <jerome.dochez_at_oracle.com>
Date: Tue, 4 Jan 2011 11:38:08 -0800

is there a dependency on this orb/orb-iiop module with <test> scope in the pom.xml ?

if u do a mvn -X, it will tell you the list of jars used to run tests (yes the output is very prolific)
it's most likely not in that list.

On Jan 4, 2011, at 11:03 AM, Ken wrote:

> On 01/ 4/11 10:59 AM, Jerome Dochez wrote:
>> On Jan 4, 2011, at 10:57 AM, Ken Cavanaugh wrote:
>>
>>
>>> On 01/ 4/11 10:39 AM, Jerome Dochez wrote:
>>>
>>>> On Jan 4, 2011, at 10:25 AM, Ken wrote:
>>>>
>>>>
>>>>
>>>>> On 01/ 4/11 09:58 AM, Jerome Dochez wrote:
>>>>>
>>>>>
>>>>>> On Jan 4, 2011, at 9:36 AM, Ken wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> I've made a few changes in the FOLB code in glassfish-naming, and now some
>>>>>>> of the surefire tests for naming are failing. The scenario is that SerialInitContextFactory
>>>>>>> needs to call GlassFishORBHelper.getORB(). GlassFishORBHelper is annotated
>>>>>>> with @Service and implements PostConstruct and ORBLocator.
>>>>>>> The PostConstruct method calls
>>>>>>>
>>>>>>> orbFactory = habitat.getByContract( GlassFishORBFactory.class ) ;
>>>>>>>
>>>>>>> where habitat was obtained from @Inject on a field.
>>>>>>> The tests are failing because orbFactory is null.
>>>>>>>
>>>>>>> ORBFactory is an @Contract interface, which is implemented
>>>>>>> by GlassFishORBFactoryImpl, which is a class annotated with @Service.
>>>>>>> GlassFishORBFactoryImpl also implements PostConstruct.
>>>>>>>
>>>>>>> So how do I debug this and figure out why getByContract returned null?
>>>>>>> I haven't changed any of the annotations, so presumably something else is failing,
>>>>>>> but what?
>>>>>>>
>>>>>>> A quick look into getByContract seems to indicate that the byContract MultiList
>>>>>>> does not contain GlassFishORBFactory, but why?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> does it contain anything ?
>>>>>>
>>>>>>
>>>>>>
>>>>> Yes, byContract had I think 52 entries in it (just not the one I needed).
>>>>>
>>>>>
>>>> There are 52 implementations of org.glassfish.enterprise.iiop.api.GlassFishORBFactory ?
>>>>
>>>>
>>> No, there were 52 different services in byContract, none of which were the one I needed.
>>>
>>>>
>>>>
>>>>>> the first thing I would check is the content in the META-INF/inhabitants/default file in your implementation module.
>>>>>> does the file exist ?
>>>>>> does it have an entry for your GlassFishORBFactoryImpl service ?
>>>>>>
>>>>>>
>>>>>>
>>>>> It contains 3 entries, one of which is:
>>>>>
>>>>> class=org.glassfish.enterprise.iiop.impl.GlassFishORBFactoryImpl,index=org.glassfish.enterprise.iiop.api.GlassFishORBFactory
>>>>>
>>>>> which I presume is what is needed there.
>>>>>
>>>>>
>>>> yes.
>>>>
>>>>
>>>>> Is there some runtime debugging I can do here?
>>>>>
>>>>>
>>>>>
>>>> can you call this method on the habitat and observe the result ?
>>>>
>>>> public Collection<Inhabitant<?>> getAllInhabitantsByContract(String contractType)
>>>>
>>>> in particular do you find an Inhabitant that describe your service ?
>>>>
>>>>
>>>>
>>>>
>>> I added
>>>
>>> Collection<Inhabitant<?>> objs =
>>> habitat.getAllInhabitantsByContract(
>>> GlassFishORBFactory.class.getName() ) ;
>>>
>>> and when running the tests, objs is an empty collection.
>>>
>> then I would say your jar inhabitant file is not parsed into the habitat. where is it located ? is it in the modules directory ?
>>
>>
> It's in orb/orb-iiop in the workspace. The target directory contains orb-iiop.jar which is copied into the modules directory
> in a GF install. I have no idea how this gets set up for the surefire tests in glassfish-naming: there can't be a
> full GF install for the surefire tests, since the entire GF distribution hasn't been built yet when the tests are
> run.
>
>
> Ken.