users@glassfish.java.net

Re: Can a web service deployed in Grizzly access Felix

From: Sahoo <Sahoo_at_Sun.COM>
Date: Thu, 21 May 2009 16:20:52 +0530

1. Why are you building a HK2 module?

2. Who told you to drop the HK2 module into autodeploy dir? autodeploy
dir is for Java EE applications only.

Sahoo

paulbrickell wrote:
> A quick progress report.
>
> I am using version 0.3.9 of HK2 maven plugin to build an HK2 module.
> Once I have a bundle jar I copy it to the
> glassfishv3/glassfish/domains/domain1/autodeploy directory and restart my
> server.
>
> Currently the bundle will not start, and the following stack trace is
> logged...
>
> SEVERE: Error during deployment : Not able to locate a unique module by name
> com.sun.enterprise:hk2
> com.sun.enterprise.module.ResolveError: Not able to locate a unique module
> by name com.sun.enterprise:hk2
> at
> com.sun.enterprise.v3.server.ClassLoaderHierarchyImpl.createApplicationParentCL(ClassLoaderHierarchyImpl.java:147)
> at
> org.glassfish.deployment.common.DeploymentContextImpl.createClassLoaders(DeploymentContextImpl.java:170)
> at
> com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:209)
> at
> com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:172)
> at
> org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:249)
> at
> com.sun.enterprise.v3.admin.CommandRunnerImpl$4.execute(CommandRunnerImpl.java:424)
> at
> com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:434)
> at
> com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:521)
> at
> com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:154)
> at
> org.glassfish.deployment.autodeploy.AutoOperation.run(AutoOperation.java:121)
> at
> org.glassfish.deployment.autodeploy.AutoDeployer.deploy(AutoDeployer.java:529)
> at
> org.glassfish.deployment.autodeploy.AutoDeployer.deployAll(AutoDeployer.java:415)
> at
> org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:347)
> at
> org.glassfish.deployment.autodeploy.AutoDeployer.run(AutoDeployer.java:332)
> at
> org.glassfish.deployment.autodeploy.AutoDeployService$1.run(AutoDeployService.java:200)
> at java.util.TimerThread.mainLoop(Timer.java:512)
> at java.util.TimerThread.run(Timer.java:462)
>
> Still trying.
>
>
>
> paulbrickell wrote:
>
>> Thats great I love choices.=)
>>
>> I will have another look at this tomorrow. Given the web service issue I
>> will hack together a simple servlet app to try it out.
>>
>> I really would like to use the resource injection approach. very elegant.
>>
>> Thanks again for your help with this. Great community support, very much
>> appreciated.
>> Paul B.
>>
>>
>> Sahoo wrote:
>>
>>> I understand very well you are not developing a HK2 bundle. You don't
>>> have to develop a HK2 bundle - a simple OSGi bundle is good enough. My
>>> understanding is you are registering some service with interface
>>> MyAPI.class in the OSGi service registry. as I told you, we
>>> automatically register it with Habitat under contract called
>>> MyAPI.class. Hope this is clear. Since you have access to Habitat from
>>> your web app, you can access the service by using
>>> Habitat.getByContract().
>>>
>>> About your deployment failure, that seems unrelated. Looks like some
>>> broken web service functionality.
>>>
>>> Thanks,
>>> Sahoo
>>>
>>> paulbrickell wrote:
>>>
>>>> Sahoo,
>>>>
>>>> Just want to check I am doing the right thing here.
>>>>
>>>> I am creating an OSGi bundle, not an H2K module. I have no interfaces in
>>>> this bundle annotated with Contract.
>>>>
>>>> I have taken the latest nightly build and put my bundle in the
>>>> autodeploy-bundles directory. When I start Glassfish I see logging from
>>>> bundle. So that's good.
>>>>
>>>> I am having problems deploying my web application into this server. When
>>>> I
>>>> deploy It I get an error...
>>>>
>>>> cannot Deploy testservice
>>>> Deployment Error for module: test-service: Exception while loading the
>>>> app
>>>> : java.lang.Exception: java.lang.IllegalStateException:
>>>> ContainerBase.addChild: start: LifecycleException:
>>>> java.lang.ClassCastException:
>>>> com.sun.xml.ws.transport.http.servlet.WSServlet cannot be cast to
>>>> javax.servlet.Servlet
>>>>
>>>> Not sure what this all about. Will continue investigating.
>>>>
>>>> Regards,
>>>> Paul B.
>>>>
>>>>
>>>> Sahoo wrote:
>>>>
>>>>
>>>>> Hold on. You are using Habitat.getAllByType(). I asked you to use
>>>>> Habitat.getByContract(). If at all you have to iterate over all the
>>>>> implementations of a contract, you should use
>>>>> Habitat.getAllByContracts(). Oh yes, I understand the method name
>>>>> getAllByType() is not so user friendly. In HK2, type means
>>>>> implementation type!
>>>>>
>>>>> Sahoo
>>>>>
>>>>> paulbrickell wrote:
>>>>>
>>>>>
>>>>>> Sahoo,
>>>>>>
>>>>>> You right of course.
>>>>>>
>>>>>> Anyhoo, using that repository and building my war gives me no
>>>>>> compilation
>>>>>> problems.
>>>>>>
>>>>>> My code is now doing this...
>>>>>>
>>>>>> MessageContext mc = _wsContext.getMessageContext();
>>>>>> ServletContext sCtx = (ServletContext)
>>>>>> mc.get(MessageContext.SERVLET_CONTEXT);
>>>>>> Habitat habitat = (Habitat)
>>>>>> sCtx.getAttribute("org.glassfish.servlet.habitat");
>>>>>> Collection<MyAPI> apis = habitat.getAllByType(MyAPI.class);
>>>>>>
>>>>>> This works OK, but I get a zero length collection. I will get the
>>>>>> latest
>>>>>> build and try dropping my bundle jar in the autodeploy dir as you
>>>>>> suggested.
>>>>>>
>>>>>> I will let you know how I get on.
>>>>>>
>>>>>> Thanks again,
>>>>>> Paul B.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Sahoo wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> May be my understanding of our maven repositories are wrong, but
>>>>>>> AFAIK,
>>>>>>> only artifacts produced by GlassFish build should go to
>>>>>>>
>>>>>>> http://download.java.net/maven/glassfish/,
>>>>>>>
>>>>>>> but, that appears not to be true. So, go ahead and use that repo.
>>>>>>> Anyway, this is not the core of the problems being discussed here.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Sahoo
>>>>>>> paulbrickell wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> but, did find it in...
>>>>>>>>
>>>>>>>> http://download.java.net/maven/glassfish/
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> paulbrickell wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Sahoo,
>>>>>>>>>
>>>>>>>>> Really appreciate your help.
>>>>>>>>>
>>>>>>>>> I'm afraid I do not find com.sun.enterprise.hk2 in either of the
>>>>>>>>> repositories you listed.
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Paul B.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Sahoo wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> OK, thanks for clarifying about the deployment part.
>>>>>>>>>>
>>>>>>>>>> You should be able to do this in your code:
>>>>>>>>>>
>>>>>>>>>> org.jvnet.hk2.component.Habitat =
>>>>>>>>>> org.jvnet.hk2.component.Habitat.class.cast(sCtx.getAttribute("org.glassfish.servlet.habitat"));
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> org.jvnet.hk2.component package is part of HK2 project, so you can
>>>>>>>>>> set
>>>>>>>>>> up your maven dependency like this:
>>>>>>>>>>
>>>>>>>>>> <dependency>
>>>>>>>>>> <groupId>com.sun.enterprise</groupId>
>>>>>>>>>> <artifactId>hk2</artifactId>
>>>>>>>>>> <version>RELEASE</version>
>>>>>>>>>> <scope>provided</scope>
>>>>>>>>>> <dependency>
>>>>>>>>>>
>>>>>>>>>> Ensure that you have added http://download.java.net/maven/2 and
>>>>>>>>>> http://download.java.net/maven/1 as additional maven 2 and maven 1
>>>>>>>>>> repositories either in your pom.xml or in your maven settings.xml.
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Sahoo
>>>>>>>>>>
>>>>>>>>>> paulbrickell wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Sahoo,
>>>>>>>>>>>
>>>>>>>>>>> Sorry. You are of course right about the web service deployment.
>>>>>>>>>>> It's
>>>>>>>>>>> just a
>>>>>>>>>>> war file deployed in glassfish (atually I am debugging in
>>>>>>>>>>> Eclipse).
>>>>>>>>>>>
>>>>>>>>>>> I did try just dropping the bundle in the autodeploy-bundles dir,
>>>>>>>>>>> but
>>>>>>>>>>> it
>>>>>>>>>>> did
>>>>>>>>>>> not seem to start (I saw none of the logging from my
>>>>>>>>>>> BundleActivator.start
>>>>>>>>>>> method) . I suspect I might be behind on the build. I will pick
>>>>>>>>>>> up
>>>>>>>>>>> the
>>>>>>>>>>> latest nightly today.
>>>>>>>>>>>
>>>>>>>>>>> As described in my original post I have pulled the Habitat object
>>>>>>>>>>> from
>>>>>>>>>>> the
>>>>>>>>>>> app context. But I cannot cast it to the right type. I still do
>>>>>>>>>>> not
>>>>>>>>>>> know
>>>>>>>>>>> an
>>>>>>>>>>> appropriate maven dependency I can add to get it.
>>>>>>>>>>>
>>>>>>>>>>> Thanks for your help.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Sahoo wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> Paul,
>>>>>>>>>>>>
>>>>>>>>>>>> 1. You don't have to modify Felix config file. You can drop your
>>>>>>>>>>>> OSGi
>>>>>>>>>>>> bundle in domain1/autodeploy-bundles dir and it will be
>>>>>>>>>>>> automatically
>>>>>>>>>>>> started when server starts. Please use the latest nightly build
>>>>>>>>>>>> as
>>>>>>>>>>>> I
>>>>>>>>>>>> fixed an important bug around this.
>>>>>>>>>>>>
>>>>>>>>>>>> 2. What do you mean by deploying a web service in Grizzly? Can
>>>>>>>>>>>> you
>>>>>>>>>>>> tell
>>>>>>>>>>>> us how you packaged your web service and how you deployed such a
>>>>>>>>>>>> thing?
>>>>>>>>>>>> Did you really mean GlassFish or Grizzly?
>>>>>>>>>>>>
>>>>>>>>>>>> 3. All the registered OSGi services can be accessed via Habitat
>>>>>>>>>>>> object.
>>>>>>>>>>>> The OSGi service interface names are mapped to contract names in
>>>>>>>>>>>> Habitat.
>>>>>>>>>>>> e.g., if you have an OSGi service Foo.class which implements I1
>>>>>>>>>>>> and
>>>>>>>>>>>> I2,
>>>>>>>>>>>> then you can access it via Habitat.getByContract(I1 or I2.class)
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Sahoo
>>>>>>>>>>>>
>>>>>>>>>>>> paulbrickell wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>> I don't know if this is a silly question, but I am having some
>>>>>>>>>>>>> fundamental
>>>>>>>>>>>>> issues understanding the Glassfish v3 architecture and could
>>>>>>>>>>>>> use a
>>>>>>>>>>>>> pointer.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I have created a bundle and added an entry in the
>>>>>>>>>>>>> glassfish/felix.conf
>>>>>>>>>>>>> e.g.
>>>>>>>>>>>>>
>>>>>>>>>>>>> file:///home/me/myworkspace/my-bundle/target/my-bundle-1.0-SNAPSHOT.jar
>>>>>>>>>>>>>
>>>>>>>>>>>>> I see this bundle starting and all is well. It opens a socket
>>>>>>>>>>>>> to
>>>>>>>>>>>>> which
>>>>>>>>>>>>> I
>>>>>>>>>>>>> can
>>>>>>>>>>>>> connect and exchange data, which is nice. The reason I created
>>>>>>>>>>>>> a
>>>>>>>>>>>>> bundle
>>>>>>>>>>>>> and
>>>>>>>>>>>>> not a H2K module is that I want it to be activated at server
>>>>>>>>>>>>> start-up
>>>>>>>>>>>>> time.
>>>>>>>>>>>>> I could not see a way of doing this with H2K. Maybe I missed
>>>>>>>>>>>>> something.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Now I want to reference this service from a web service that I
>>>>>>>>>>>>> have
>>>>>>>>>>>>> deployed
>>>>>>>>>>>>> in Grizzly. I simply cannot figure out how to do this. The docs
>>>>>>>>>>>>> do
>>>>>>>>>>>>> not
>>>>>>>>>>>>> really cover this, which leads me to believe I am doing
>>>>>>>>>>>>> something
>>>>>>>>>>>>> fundamentally wrong.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Do Felix and Grizzly share any kind of context or is there a
>>>>>>>>>>>>> static
>>>>>>>>>>>>> way
>>>>>>>>>>>>> to
>>>>>>>>>>>>> access the Felix services from a web application deployed in
>>>>>>>>>>>>> Grizzly?
>>>>>>>>>>>>>
>>>>>>>>>>>>> I have tried this....
>>>>>>>>>>>>>
>>>>>>>>>>>>> wsContext.getMessageContext();
>>>>>>>>>>>>> ServletContext sCtx = (ServletContext)
>>>>>>>>>>>>> mc.get(MessageContext.SERVLET_CONTEXT);
>>>>>>>>>>>>> Object habitat =
>>>>>>>>>>>>> sCtx.getAttribute("org.glassfish.servlet.habitat");
>>>>>>>>>>>>>
>>>>>>>>>>>>> This, I believe, gets me a reference to the H2K habitat, but my
>>>>>>>>>>>>> bundle
>>>>>>>>>>>>> is
>>>>>>>>>>>>> an
>>>>>>>>>>>>> OSGi bundle deployed in Felix, not an H2K service. Can I
>>>>>>>>>>>>> navigate
>>>>>>>>>>>>> to
>>>>>>>>>>>>> my
>>>>>>>>>>>>> bundle through this habitat? Is it right to try? If so is there
>>>>>>>>>>>>> a
>>>>>>>>>>>>> maven
>>>>>>>>>>>>> dependency I need to pick up the Habitat class as I cannot seem
>>>>>>>>>>>>> to
>>>>>>>>>>>>> find
>>>>>>>>>>>>> it
>>>>>>>>>>>>> anywhere.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I would appreciate any pointers. TIA.
>>>>>>>>>>>>> Paul B.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscribe_at_glassfish.dev.java.net
>>>>>>>>>>>> For additional commands, e-mail:
>>>>>>>>>>>> users-help_at_glassfish.dev.java.net
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>> To unsubscribe, e-mail: users-unsubscribe_at_glassfish.dev.java.net
>>>>>>>>>> For additional commands, e-mail: users-help_at_glassfish.dev.java.net
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: users-unsubscribe_at_glassfish.dev.java.net
>>>>>>> For additional commands, e-mail: users-help_at_glassfish.dev.java.net
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe_at_glassfish.dev.java.net
>>>>> For additional commands, e-mail: users-help_at_glassfish.dev.java.net
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_glassfish.dev.java.net
>>> For additional commands, e-mail: users-help_at_glassfish.dev.java.net
>>>
>>>
>>>
>>>
>>
>
>