6.02 Intermediate - Creating the CXF SU
Wiki Markup |
---|
{scrollbar} |
We are going to create the main SU of our project : the CXF EJB proxy.
First of all, we create the pom.xml :
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.servicemix.examples</groupId> <artifactId>ejb-example</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>org.apache.servicemix.examples</groupId> <artifactId>ejb-cxf-su</artifactId> <packaging>jbi-service-unit</packaging> <name>Apache ServiceMix :: Examples :: EJB :: CXF SU</name> <dependencies> <dependency> <groupId>org.apache.servicemix</groupId> <artifactId>servicemix-cxf-se</artifactId> <version>2008.01</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>2.5.5</version> </dependency> <dependency> <groupId>jboss</groupId> <artifactId>jbossall-client</artifactId> <version>4.2.2.GA</version> </dependency> <dependency> <groupId>my.ejb.provider</groupId> <artifactId>ejb-client</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.apache.servicemix.tooling</groupId> <artifactId>jbi-maven-plugin</artifactId> <version>3.2.3</version> <extensions>true</extensions> </plugin> </plugins> </build> </project> |
We are using EJBs deploying in a JBoss application server : that's why we need the JBoss client dependency.
The EJB provider needs to provide the local and home interfaces (and eventually the stub) for the EJB server side.
Now we can setup the xbean.xml (in the src/main/resources directory) to expose our EJB :
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0" xmlns:myService="http://www.example.com/myService"> <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> <property name="environment"> <props> <prop key="java.naming.factory.initial"> org.jnp.interfaces.NamingContextFactory </prop> <prop key="java.naming.provider.url"> jnp://localhost:1299 </prop> </props> </property> </bean> <bean id="ejbProxy" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"> <property name="jndiName" value="ejb/myEJB"/> <property name="businessInterface" value="com.ejb.provider.MyEJB"/> <property name="homeInterface" value="com.ejb.provider.MyEJBHome"/> <property name="refreshHomeOnConnectFailure" value="true"/> <property name="cacheHome" value="true"/> <property name="lookupHomeOnStartup" value="true"/> <property name="resourceRef" value="false"/> <property name="jndiTemplate" ref="jndiTemplate"/> </bean> <cxfse:endpoint> <cxfse:pojo> <bean class="org.apache.servicemix.examples.MyEJBImpl"> <property name="proxy" ref="ejbProxy"/> </bean> </cxfse:pojo> </cxfse:endpoint> </beans> |
Warning : only EJB Session Stateless can be exposed like this.
You can see in the xbean that we need the service impl and interface for the CXF endpoint.
So we create the MyEJB interface :
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
package org.apache.servicemix.examples; import javax.jws.WebService; @WebService(targetNamespace = "http://www.example.com/myService", name = "MyEJB") public interface MyEJB { public String echo(String message); } |
and the corresponding impl :
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
/** * Service delegate to the AutomaticSimulationSession EJB * * @author <a href="mailto:onofre@fimasys.fr">Jean-Baptiste Onofré</a> */ package org.apache.servicemix.examples; import javax.jws.WebService; import javax.xml.ws.Holder; import com.ejb.provider.MyEJB; @WebService(serviceName = "myService", targetNamespace = "http://www.example.com/myService", endpointInterface = "org.apache.servicemix.examples.MyEJB") public class MyEJBImpl implements MyEJB { // simple Spring remote EJB proxy private AutomaticSimulationSession proxy; // getters and setters public void setProxy(AutomaticSimulationSession proxy) { this.proxy = proxy; } public AutomaticSimulationSession getProxy() { return this.proxy; } // service delegation methods /** * Delegation to the <code>echo</code> method of the <code>MyEJB</code> EJB. */ public String echo(String message) { try { return (proxy.echo(message).toString(); } catch(Exception exception) { exception.printStackTrace(); return "Error occurs : " + exception.getMessage(); } } } |
Our EJB is now available in ServiceMix as a service registered in the NMR.
So now, we use the EJB service via a binding component
Proceed to the next step
Wiki Markup |
---|
{scrollbar} |