| <!DOCTYPE html> |
| <!-- |
| | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2018-11-16 |
| | Rendered using Apache Maven Fluido Skin 1.6 |
| --> |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <meta name="Date-Revision-yyyymmdd" content="20181116" /> |
| <meta http-equiv="Content-Language" content="en" /> |
| <title>Apache Axis2 – Guide to using EJB Provider for Axis2</title> |
| <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" /> |
| <link rel="stylesheet" href="../css/site.css" /> |
| <link rel="stylesheet" href="../css/print.css" media="print" /> |
| <script type="text/javascript" src="../js/apache-maven-fluido-1.6.min.js"></script> |
| <meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /><meta http-equiv="content-type" content="text/html; charset=us-ascii" /><meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/" /> </head> |
| <body class="topBarDisabled"> |
| <div class="container-fluid"> |
| <div id="banner"> |
| <div class="pull-left"><a href="http://www.apache.org/" id="bannerLeft"><img src="http://www.apache.org/images/asf_logo_wide.png" alt="Apache Axis2"/></a></div> |
| <div class="pull-right"><a href=".././" id="bannerRight"><img src="../images/axis.jpg" /></a></div> |
| <div class="clear"><hr/></div> |
| </div> |
| |
| <div id="breadcrumbs"> |
| <ul class="breadcrumb"> |
| <li id="publishDate">Last Published: 2018-11-16<span class="divider">|</span> |
| </li> |
| <li id="projectVersion">Version: 1.7.9<span class="divider">|</span></li> |
| <li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li> |
| <li class=""><a href="../index.html" title="Axis2/Java">Axis2/Java</a><span class="divider">/</span></li> |
| <li class="active ">Guide to using EJB Provider for Axis2</li> |
| </ul> |
| </div> |
| <div class="row-fluid"> |
| <div id="leftColumn" class="span2"> |
| <div class="well sidebar-nav"> |
| <ul class="nav nav-list"> |
| <li class="nav-header">Axis2/Java</li> |
| <li><a href="../index.html" title="Home"><span class="none"></span>Home</a> </li> |
| <li><a href="../download.html" title="Downloads"><span class="none"></span>Downloads</a> </li> |
| <li><a href="javascript:void(0)" title="Release Notes"><span class="icon-chevron-down"></span>Release Notes</a> |
| <ul class="nav nav-list"> |
| <li><a href="../release-notes/1.6.1.html" title="1.6.1"><span class="none"></span>1.6.1</a> </li> |
| <li><a href="../release-notes/1.6.2.html" title="1.6.2"><span class="none"></span>1.6.2</a> </li> |
| <li><a href="../release-notes/1.6.3.html" title="1.6.3"><span class="none"></span>1.6.3</a> </li> |
| <li><a href="../release-notes/1.6.4.html" title="1.6.4"><span class="none"></span>1.6.4</a> </li> |
| <li><a href="../release-notes/1.7.0.html" title="1.7.0"><span class="none"></span>1.7.0</a> </li> |
| <li><a href="../release-notes/1.7.1.html" title="1.7.1"><span class="none"></span>1.7.1</a> </li> |
| <li><a href="../release-notes/1.7.2.html" title="1.7.2"><span class="none"></span>1.7.2</a> </li> |
| <li><a href="../release-notes/1.7.3.html" title="1.7.3"><span class="none"></span>1.7.3</a> </li> |
| <li><a href="../release-notes/1.7.4.html" title="1.7.4"><span class="none"></span>1.7.4</a> </li> |
| <li><a href="../release-notes/1.7.5.html" title="1.7.5"><span class="none"></span>1.7.5</a> </li> |
| <li><a href="../release-notes/1.7.6.html" title="1.7.6"><span class="none"></span>1.7.6</a> </li> |
| <li><a href="../release-notes/1.7.7.html" title="1.7.7"><span class="none"></span>1.7.7</a> </li> |
| <li><a href="../release-notes/1.7.8.html" title="1.7.8"><span class="none"></span>1.7.8</a> </li> |
| <li><a href="../release-notes/1.7.9.html" title="1.7.9"><span class="none"></span>1.7.9</a> </li> |
| </ul> |
| </li> |
| <li><a href="../modules/index.html" title="Modules"><span class="none"></span>Modules</a> </li> |
| <li><a href="../tools/index.html" title="Tools"><span class="none"></span>Tools</a> </li> |
| <li class="nav-header">Documentation</li> |
| <li><a href="../docs/toc.html" title="Table of Contents"><span class="none"></span>Table of Contents</a> </li> |
| <li><a href="../docs/installationguide.html" title="Installation Guide"><span class="none"></span>Installation Guide</a> </li> |
| <li><a href="../docs/quickstartguide.html" title="QuickStart Guide"><span class="none"></span>QuickStart Guide</a> </li> |
| <li><a href="../docs/userguide.html" title="User Guide"><span class="none"></span>User Guide</a> </li> |
| <li><a href="../docs/jaxws-guide.html" title="JAXWS Guide"><span class="none"></span>JAXWS Guide</a> </li> |
| <li><a href="../docs/pojoguide.html" title="POJO Guide"><span class="none"></span>POJO Guide</a> </li> |
| <li><a href="../docs/spring.html" title="Spring Guide"><span class="none"></span>Spring Guide</a> </li> |
| <li><a href="../docs/webadminguide.html" title="Web Administrator's Guide"><span class="none"></span>Web Administrator's Guide</a> </li> |
| <li><a href="../docs/migration.html" title="Migration Guide (from Axis1)"><span class="none"></span>Migration Guide (from Axis1)</a> </li> |
| <li class="nav-header">Resources</li> |
| <li><a href="../faq.html" title="FAQ"><span class="none"></span>FAQ</a> </li> |
| <li><a href="../articles.html" title="Articles"><span class="none"></span>Articles</a> </li> |
| <li><a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki"><span class="none"></span>Wiki</a> </li> |
| <li><a href="../refLib.html" title="Reference Library"><span class="none"></span>Reference Library</a> </li> |
| <li><a href="../apidocs/index.html" title="Online Java Docs"><span class="none"></span>Online Java Docs</a> </li> |
| <li class="nav-header">Get Involved</li> |
| <li><a href="../overview.html" title="Overview"><span class="none"></span>Overview</a> </li> |
| <li><a href="../svn.html" title="Checkout the Source"><span class="none"></span>Checkout the Source</a> </li> |
| <li><a href="../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a> </li> |
| <li><a href="../release-process.html" title="Release Process"><span class="none"></span>Release Process</a> </li> |
| <li><a href="../guidelines.html" title="Developer Guidelines"><span class="none"></span>Developer Guidelines</a> </li> |
| <li><a href="../siteHowTo.html" title="Build the Site"><span class="none"></span>Build the Site</a> </li> |
| <li class="nav-header">Project Information</li> |
| <li><a href="../team-list.html" title="Project Team"><span class="none"></span>Project Team</a> </li> |
| <li><a href="../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a> </li> |
| <li><a href="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" class="externalLink" title="Source Code"><span class="none"></span>Source Code</a> </li> |
| <li><a href="../thanks.html" title="Acknowledgements"><span class="none"></span>Acknowledgements</a> </li> |
| <li class="nav-header">Apache</li> |
| <li><a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License"><span class="none"></span>License</a> </li> |
| <li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship"><span class="none"></span>Sponsorship</a> </li> |
| <li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a> </li> |
| <li><a href="http://www.apache.org/security/" class="externalLink" title="Security"><span class="none"></span>Security</a> </li> |
| </ul> |
| <hr /> |
| <div id="poweredBy"> |
| <div class="clear"></div> |
| <div class="clear"></div> |
| <div class="clear"></div> |
| <div class="clear"></div> |
| <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a> |
| </div> |
| </div> |
| </div> |
| <div id="bodyColumn" class="span10" > |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| |
| |
| <h1>Guide to using EJB Provider for Axis2</h1> |
| |
| <p>The EJB message receiver allows one to access stateless session |
| EJBs (Enterprise JavaBeans) through Web services. The example used |
| in this guide illustrates how to use the EJB provider that ships |
| with Axis2 to access EJBs deployed on a J2EE server such as |
| Geronimo or JBoss.</p> |
| |
| <p>This example explains how to use Geronimo 1.1 and JBoss 4.0.4.GA |
| as application server.</p> |
| |
| <p>The following steps will take you through the example through |
| which we will explain how to use an EJB provider in Axis2</p> |
| |
| <div class="section"> |
| <h2><a name="a1._Creating_a_Simple_Stateless_Session_EJB"></a>1. Creating a Simple Stateless Session EJB</h2> |
| |
| <p>First we need to create a stateless session EJB. Use the |
| following files to make an EJB for testing:</p> |
| |
| <div> |
| <pre> |
| Remote interface (Hello.java) |
| package my.ejb; |
| import javax.ejb.EJBObject; |
| |
| public interface Hello extends EJBObject, HelloBusiness { |
| } |
| </pre></div> |
| |
| <p>The following interface defines the business methods available |
| in</p> |
| |
| <p><tt>1.</tt>HelloBusiness.java</p> |
| |
| <div> |
| <pre> |
| package my.ejb; |
| import java.rmi.RemoteException; |
| |
| public interface HelloBusiness { |
| public String sayHello(String name) throws RemoteException; |
| } |
| </pre></div> |
| |
| <p>2, Remote home interface - HelloHome.java</p> |
| |
| <div> |
| <pre> |
| package my.ejb; |
| import javax.ejb.EJBHome; |
| import javax.ejb.CreateException; |
| import java.rmi.RemoteException; |
| |
| public interface HelloHome extends EJBHome { |
| public Hello create() throws CreateException, RemoteException; |
| } |
| </pre></div> |
| |
| <p>3. Bean class - HelloBean.java</p> |
| |
| <div> |
| <pre> |
| package my.ejb; |
| import javax.ejb.SessionBean; |
| import javax.ejb.SessionContext; |
| import javax.ejb.EJBException; |
| import javax.ejb.CreateException; |
| |
| public class HelloBean implements SessionBean { |
| public void setSessionContext(SessionContext sessionContext) throws |
| EJBException {} |
| |
| public void ejbRemove() throws EJBException {} |
| public void ejbActivate() throws EJBException {} |
| public void ejbPassivate() throws EJBException {} |
| public void ejbCreate() throws CreateException {} |
| |
| public String sayHello(String name) { |
| return "Hello " + name + ", Have a nice day!"; |
| } |
| |
| } |
| </pre></div> |
| |
| <p>4. Deployment descriptor - ejb-jar.xml</p> |
| |
| <div> |
| <pre> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee |
| http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" |
| version="2.1"> |
| |
| <enterprise-beans> |
| <session> |
| <ejb-name>Hello</ejb-name> |
| <home>my.ejb.HelloHome</home> |
| <remote>my.ejb.Hello</remote> |
| <ejb-class>my.ejb.HelloBean</ejb-class> |
| <session-type>Stateless</session-type> |
| <transaction-type>Bean</transaction-type> |
| </session> |
| </enterprise-beans> |
| <assembly-descriptor> |
| <container-transaction> |
| <method> |
| <ejb-name>Hello</ejb-name> |
| <method-name>*</method-name> |
| </method> |
| <trans-attribute>Required</trans-attribute> |
| </container-transaction> |
| </assembly-descriptor> |
| </ejb-jar> |
| </pre></div> |
| |
| <p>Now we have to write application server specific deployment |
| descriptor(s) for the Hello EJB. The following listing shows an |
| example Geronimo/OpenEJB deployment descriptor |
| (openejb-jar.xml)</p> |
| |
| <div> |
| <pre> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <openejb-jar |
| xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1" |
| xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.1" |
| xmlns:security="http://geronimo.apache.org/xml/ns/security-1.1" |
| xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1" |
| xmlns:pkgen="http://www.openejb.org/xml/ns/pkgen-2.0"> |
| <enterprise-beans> |
| <session> |
| <ejb-name>Hello</ejb-name> |
| <jndi-name>my/ejb/HelloBean</jndi-name> |
| </session> |
| </enterprise-beans> |
| </openejb-jar> |
| </pre></div> |
| |
| <p>If you want to test on JBoss, use the following JBoss deployment |
| descriptor (jboss.xml)</p> |
| |
| <div> |
| <pre> |
| <?xml version="1.0"?> |
| <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" |
| "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd"> |
| <jboss> |
| <enterprise-beans> |
| <session> |
| <ejb-name>Hello</ejb-name> |
| <jndi-name>my/ejb/HelloBean</jndi-name> |
| </session> |
| </enterprise-beans> |
| </jboss> |
| </pre></div> |
| |
| <p>Compile the above java classes and bundle the compiled classes |
| and the XML files into a jar file (HelloEJB.jar) as shown |
| below.</p> |
| |
| <div> |
| <pre> |
| |
| HelloEJB.jar |
| | |
| +--META-INF |
| | +--ejb-jar.xml |
| | +--jboss.xml [If you want to deploy on Jboss] |
| | +--openejb-jar.xml [If you want to deploy on Geronimo/Openejb] |
| | |
| +--my |
| +--ejb |
| | |
| +--Hello.class |
| +--HelloBean.class |
| +--HelloBusiness.class |
| +--HelloHome.class |
| |
| </pre></div> |
| |
| <p>Next, deploy the HelloEJB.jar file onto the appropriate J2EE |
| application server.</p> |
| |
| <div class="section"> |
| <h2><a name="Creating_the_Axis2_Service_Archive"></a>Creating the Axis2 Service Archive</h2> |
| |
| <p>Now we need to make the services.xml file.</p> |
| |
| <div> |
| <pre> |
| <serviceGroup> |
| <service name="HelloBeanService"> |
| <description>Hello! web service</description> |
| <messageReceivers> |
| <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" |
| class="org.apache.axis2.rpc.receivers.ejb.EJBInOnlyMessageReceiver"/> |
| <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" |
| class="org.apache.axis2.rpc.receivers.ejb.EJBMessageReceiver"/> |
| </messageReceivers> |
| <parameter name="ServiceClass">my.ejb.HelloBusiness</parameter> |
| <parameter name="remoteInterfaceName">my.ejb.Hello</parameter> |
| <parameter name="homeInterfaceName">my.ejb.HelloHome</parameter> |
| <parameter name="beanJndiName">my/ejb/HelloBean</parameter> |
| <parameter name="providerUrl">[URL]</parameter> |
| <parameter name="jndiContextClass">[Context Factory Class |
| Name]</parameter> |
| </service> |
| </serviceGroup> |
| </pre></div> |
| |
| <p>In the above services.xml file, replace the [URL] and [Context |
| Factory Class Name] with valid values as follows:</p> |
| |
| <p><b>i.e. If the EJB is deployed on Geronimo:</b></p> |
| |
| <p>Replace [URL] by 127.0.0.1:4201</p> |
| |
| <p>Replace [Context Factory Class Name] by |
| org.openejb.client.JNDIContext</p> |
| |
| <p><b>For Jboss:</b></p> |
| |
| <p>Replace [URL] by jnp://localhost:1099</p> |
| |
| <p>Replace [Context Factory Class Name] by |
| org.jnp.interfaces.NamingContextFactory</p> |
| |
| <p>Bundle the HelloBeanService.wsdl, services.xml, remote interface |
| class and home interface class as illustrated below:</p> |
| |
| <div> |
| <pre> |
| |
| HelloBeanService.aar |
| | |
| +--META-INF |
| | +--services.xml |
| | |
| +--lib |
| | +--[jars used by the ejb client eg.initial context factory classes] |
| | |
| +--my |
| +--ejb |
| +--Hello.class |
| +--HelloBusiness.class |
| +--HelloHome.class |
| |
| </pre></div> |
| |
| <p>The lib directory of HelloBeanService.aar must contain all the |
| libraries needed to access the EJB. If the EJB is deployed on |
| <b>Geronimo</b>, add the following jar files to the lib |
| directory.</p> |
| |
| <ul> |
| |
| <li>cglib-nodep-2.1_3.jar</li> |
| |
| <li>geronimo-ejb_2.1_spec-1.0.1.jar</li> |
| |
| <li>geronimo-j2ee-jacc_1.0_spec-1.0.1.jar</li> |
| |
| <li>geronimo-kernel-1.1.jar</li> |
| |
| <li>geronimo-security-1.1.jar</li> |
| |
| <li>openejb-core-2.1.jar</li> |
| </ul> |
| |
| <p>For <b>JBoss</b> add the following jar files.</p> |
| |
| <ul> |
| |
| <li>jnp-client.jar</li> |
| |
| <li>jboss-client.jar</li> |
| |
| <li>jboss-common-client.jar</li> |
| |
| <li>jboss-remoting.jar</li> |
| |
| <li>jboss-serialization.jar</li> |
| |
| <li>jboss-transaction-client.jar</li> |
| |
| <li>concurrent.jar</li> |
| |
| <li>jbosssx-client.jar</li> |
| |
| <li>jboss-j2ee.jar</li> |
| </ul> |
| |
| <p>Deploy HelloBeanService.aar on an Axis2 server.</p> |
| |
| <p>Now you can access the Hello EJB through Web services. Since our |
| EJB message receivers extend RPC message receivers, |
| org.apache.axis2.rpc.client.RPCServiceClient can be used to invoke |
| the service as illustrated in the following code fragment.</p> |
| |
| <div> |
| <pre> |
| ... |
| |
| RPCServiceClient serviceClient = new RPCServiceClient(); |
| Options options = serviceClient.getOptions(); |
| |
| EndpointReference targetEPR = new |
| EndpointReference("http://localhost:8080/axis2/services/HelloBeanService"); |
| |
| options.setTo(targetEPR); |
| QName hello = new QName("http://ejb.my/xsd", "sayHello"); |
| Object[] helloArgs = new Object[] {"John"}; |
| |
| System.out.println(serviceClient.invokeBlocking(hello, |
| helloArgs).getFirstElement().getText()); |
| |
| ... |
| </pre></div> |
| |
| </html> |
| </div> |
| </div> |
| </div> |
| <hr/> |
| <footer> |
| <div class="container-fluid"> |
| <div class="row-fluid"> |
| <p>Copyright ©2004–2018 |
| <a href="https://www.apache.org/">The Apache Software Foundation</a>. |
| All rights reserved.</p> |
| </div> |
| </div> |
| </footer> |
| </body> |
| </html> |