users@glassfish.java.net

Re: Can a web service deployed in Grizzly access Felix

From: paulbrickell <paul.brickell_at_evolvedintelligence.com>
Date: Thu, 21 May 2009 03:22:47 -0700 (PDT)

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
>>
>>
>>
>
>

-- 
View this message in context: http://www.nabble.com/Can-a-web-service-deployed-in-Grizzly-access-Felix-tp23634609p23650800.html
Sent from the java.net - glassfish users mailing list archive at Nabble.com.