dev@glassfish.java.net

Re: [Glassfish CDI/OSGi Integration]About _at_Publish Feature

From: Tang Yong <tangyong_at_cn.fujitsu.com>
Date: Thu, 02 Aug 2012 12:23:55 +0900

Hi Sahoo, Siva, Hong

I have made some improvements on my prototype,

[Improvements]
1) While starting a plain osgi bundle having beans.xml, registering
osgi services which are exposed using @Publish annotation

2) Within the seconds set on wait timeouts attribute of @OSGiService,
if user starts the service bundle with @Publish again, the service
client will access services successfully again.

[Using Way]
1) building and deploying stockquote_service_usingcdi
- cd stockquote-cdi-osgi-sample\stockquote_service_usingcdi
- maven clean install
- asadmin deploy --type=osgi stockquote_service_usingcdi.jar

2) building and deploying stockquote_cdi_wab
- cd stockquote-cdi-osgi-sample\stockquote_cdi_wab
- maven clean install
- asadmin deploy --type=osgi stockquote_cdi_wab.war

3) access "http://localhost:8080/stockquote/list"
OK!

4) telnet localhost 6666

5) stopping stockquote_service_usingcdi bundle (etc. stop 341)

! stop 341

6) access "http://localhost:8080/stockquote/list" again, at the moment,
if user starts 341 again within 30 seconds, stockquote_cdi_wab will be
accessed successfully, otherwise, service will be unavailable.

[ToDo List]
1) while using felix shell to install bundle with beans.xml, also making
weld container to scan @Publish annotation and register osgi services.

2) validate a hybrid javaee app among which if a module uses @Publish
annotation, whether to support it or not?

--Best Regard!
--Tang

Tang Yong wrote:
> Hi Sahoo, Siva, Hong
>
> Now, A plain OSGi bundle can use @Publish annotation to
> register service into OSGi world not using BundleActivator.
> Taking a stockquote-cdi as a example, user can use the following way
> to publish a osgi service which can be consumed by a servlet of WAB
>
> @Publish
> public class SimpleStockQuoteServiceImpl implements StockQuoteService{
> ...
> }
>
> then, he/she can use "deploy --type=osgi XXX" to publish the service.
>
> ToDo: I will implment the service's publishing on bundle's start rather
> than on deployment.
>
> I have the basic prototype of the feature although still having
> some problems needed to resolve.
>
> The prototype is on https://github.com/tangyong/gf-cdi-osgi-integration
>
> Let me to say integration idea.
>
> 1) getting WeldSniffer if current plain bundle contains beans.xml on
> deploying
>
> I modified the ApplicationLifecycle.prepareSniffersForOSGiDeployment
> method to get WeldSniffer.
>
> 2) adding @Publish Qualifier into osgi-cdi-api module
>
> I evaluated WELD/OSGi project and OSGi RFP 146, and decided to use
> @Publish Qualifier.
>
> ToDo: lately, maybe add some additional properties into @Publish
>
> 3) Making Weld can deploy plain bundle(jar) as BeanDeploymentArchiveImpl
> not only for JavaEE application.
>
> The critical point is that making Weld can load the plain bundle(jar)
> classes and resources, so, I modified
> BeanDeploymentArchiveImpl.getClassLoader() method.
>
> 4) letting Weld BeanManager to discovery bean classes with @Publish
>
> Adding the discovering logic into OSGiServiceExtension.afterProcessBean
> method on osgi-cdi module, and then, registering service into OSGi world.
>
> If you having time, please discuss and review it.
>
> I will continue to improve the prototype and resolve some problems, and
> implement other features such as event integration between osgi and cdi.
>
> --Best Regard!
> --Tang
>
>
>
>
>
>