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:59:14 -0700 (PDT)

1. My preference was always to build an H2K module. I simply could not get it
to work. Given the converation in this thread it seemed it would be worth me
trying this again today. My preference here is marginal, really I am
exploring the alternatives.

2. Ah. I need to use the asadmin tool as Jerome described? I simply
misunderstood this.




Sahoo wrote:
>
> 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
>>>>
>>>>
>>>>
>>>>
>>>
>>
>>
>
> ---------------------------------------------------------------------
> 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-tp23634609p23651285.html
Sent from the java.net - glassfish users mailing list archive at Nabble.com.