Embedding an HTTP server in Equinox
At this step the server side works with the HTTP Server Jetty which is an OSGi bundles. This mode is called Embedding an HTTP server in OSGi container : it means that HTTP server and WEB application are OSGi bundles. The OSGi container starts the HTTP server bundle. Embedding an HTTP server in Equinox explains how this mean is done with Equinox.
You can resume "embedding an HTTP server in OSGi container" like this :
OSGi container -> HTTP Server (bundle) -> WEB Application (bundle).
Equinox in a Servlet Container (ServletBridge)
It works great but sometimes you have not the luck to have an HTTP Server which supports OSGi like Apache Tomcat. For instance in our case, when we wished to deploy our XDocReport RAP Application on CloudBees, whish provides an Non OSGI HTTP Server Apache Tomcat.
Fortunatly, Server-Side Equinox provides Embedding OSGi container in a servlet container mode : it means that it’s a WEB Application which contains the OSGi container (and another bundles) which start the OSGi container. Equinox in a Servlet Container explains how this mean is done with Equinox.
You can resume "embedding OSGi container in a servlet container" like this :
HTTP Server -> WEB Application -> OSGi container.
To manage this mode you must create a classic WAR which hosts your OSGi plugins and ServletBridge. In this article we will explain how to create a WAR with our UserService on server side with the Eclipse Plug-In Libra WAR Product which was created for creating WAR from RAP Application launches. But it can be used too with OSGi launches (like we need in this article).
To create a WAR of CXF DOSGi application (server side), you must :
- register your JAX-RS service with HttpService :
<!-- HttpService --> <entry key="org.apache.cxf.rs.httpservice.context" value="/UserService" />
- create a WAR which hosts OSGi bundles and ServletBridge. WAR Product gives you the capability to create a *.warproduct file from a launch (RAP, RCP, OSGi lanches, etc). This *.warproduct file is used to export it into a WAR to generate WAR.
At the end of this article we will create the the cxf-dosgi-jpa.war WAR. I have deployed this WAR on the CloudBees to see it on action. You can test for instance go at http://cxf-dosgi-war.opensagres.cloudbees.net/UserService/user/findAll to see JSON of the all users.
In [step2] we have created WAR Product files from RAP launches. In this article we will generate WAR by using the export WAR feature of the WAR Product to generates two WARs:
We will deploy generated WARs in a non OSGi HTTP Server Apache Tomcat. You can see the online demo of the rap-jpa.war created with WAR Product deployed on CloudBees which provides an Apache Tomcat at http://rap-war.opensagres.cloudbees.net/eclipsespring.
We will see in this article that projects of eclipsespring_step10.zip contains 2 problems when WAR will be exported and deployed:
- .qualifier must not used in the Host of fragments.
- pay attention with build.properties of Plug-in /Fragments which must include the whole files (META-INF, fragment.xml, plugin.xml, etc).
Those 2 errors are interesting because it works with RAP launch but not with WAR Product.
In the [step1] we have installed (My) WAR Product Plug-in. In this article we will create two WAR products from the 2 RAP launches:
- RAP Client – JPA Dao launch starts RAP Application which displays paginated users list from Database Derby (it uses JPA implementation for Dao).
- RAP Client – Mock Dao launch starts RAP Application which displays paginated users list from Java Map (it uses Mock implementation for Dao).
At the end of this article we will have 2 WAR Products :
- TargetPlatform/warproducts/rap-jpa/rap-jpa.warproduct, the WAR Product created from the RAP Client – JPA Dao.
- TargetPlatform/warproducts/rap-mock/rap-mock.warproduct, the WAR Product created from the RAP Client – Mock Dao.
In the next article [step3] we will generate two WARs from the two WAR Products created in this article by using the Export WAR action.
In the Eclipse RCP/RAP with Spring DM, Spring Data JPA and Remoting [step10] article we have created a RAP Application which displays list of user with pagination :
Now we wish create a classic WAR of the RAP Application to deploy the RAP Application with any HTTP Server (which doesn’t support OSGi, like Apache Tomcat). This WAR will be created by using the Libra WAR Product.
You can see the online demo of the rap-jpa.war created with WAR Product deployed on CloudBees which provides an Apache Tomcat at http://rap-war.opensagres.cloudbees.net/eclipsespring.