| <!DOCTYPE html> |
| |
| |
| <!-- |
| | Generated by Apache Maven Doxia Site Renderer 2.0.0 from src/site/xdoc/docs/ejb-provider.xml at 2025-03-05 |
| | Rendered using Apache Maven Fluido Skin 2.0.0-M11 |
| --> |
| <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" /> |
| <title>Guide to using EJB Provider for Axis2 – Apache Axis2</title> |
| <link rel="stylesheet" href="../css/apache-maven-fluido-2.0.0-M11.min.css" /> |
| <link rel="stylesheet" href="../css/site.css" /> |
| <link rel="stylesheet" href="../css/print.css" media="print" /> |
| <script src="../js/apache-maven-fluido-2.0.0-M11.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> |
| <div class="container-fluid container-fluid-top"> |
| <header> |
| <div id="banner"> |
| <div class="pull-left"><div id="bannerLeft"><h1><a href="http://www.apache.org/"><img class="class java.lang.Object" src="http://www.apache.org/images/asf_logo_wide.png" /> Apache Axis2</a></h1></div></div> |
| <div class="pull-right"><div id="bannerRight"><h1><a href=".././"><img class="class java.lang.Object" src="../images/axis.jpg" /></a></h1></div></div> |
| <div class="clear"><hr/></div> |
| </div> |
| |
| <div id="breadcrumbs"> |
| <ul class="breadcrumb"> |
| <li id="publishDate">Last Published: 2025-03-04<span class="divider">|</span> |
| </li> |
| <li id="projectVersion">Version: 2.0.0<span class="divider">|</span></li> |
| <li><a href="http://www.apache.org" class="externalLink">Apache</a><span class="divider">/</span></li> |
| <li><a href="../index.html">Axis2/Java</a><span class="divider">/</span></li> |
| <li class="active">Guide to using EJB Provider for Axis2</li> |
| </ul> |
| </div> |
| </header> |
| <div class="row-fluid"> |
| <header id="leftColumn" class="span2"> |
| <nav class="well sidebar-nav"> |
| <ul class="nav nav-list"> |
| <li class="nav-header">Axis2/Java</li> |
| <li><a href="../index.html">Home</a></li> |
| <li><a href="../download.html">Downloads</a></li> |
| <li><a href="javascript:void(0)"><span class="icon-chevron-down"></span>Release Notes</a> |
| <ul class="nav nav-list"> |
| <li><a href="../release-notes/1.6.1.html">1.6.1</a></li> |
| <li><a href="../release-notes/1.6.2.html">1.6.2</a></li> |
| <li><a href="../release-notes/1.6.3.html">1.6.3</a></li> |
| <li><a href="../release-notes/1.6.4.html">1.6.4</a></li> |
| <li><a href="../release-notes/1.7.0.html">1.7.0</a></li> |
| <li><a href="../release-notes/1.7.1.html">1.7.1</a></li> |
| <li><a href="../release-notes/1.7.2.html">1.7.2</a></li> |
| <li><a href="../release-notes/1.7.3.html">1.7.3</a></li> |
| <li><a href="../release-notes/1.7.4.html">1.7.4</a></li> |
| <li><a href="../release-notes/1.7.5.html">1.7.5</a></li> |
| <li><a href="../release-notes/1.7.6.html">1.7.6</a></li> |
| <li><a href="../release-notes/1.7.7.html">1.7.7</a></li> |
| <li><a href="../release-notes/1.7.8.html">1.7.8</a></li> |
| <li><a href="../release-notes/1.7.9.html">1.7.9</a></li> |
| <li><a href="../release-notes/1.8.0.html">1.8.0</a></li> |
| <li><a href="../release-notes/1.8.1.html">1.8.1</a></li> |
| <li><a href="../release-notes/1.8.2.html">1.8.2</a></li> |
| <li><a href="../release-notes/2.0.0.html">2.0.0</a></li> |
| </ul></li> |
| <li><a href="../modules/index.html">Modules</a></li> |
| <li><a href="../tools/index.html">Tools</a></li> |
| <li class="nav-header">Documentation</li> |
| <li><a href="../docs/toc.html">Table of Contents</a></li> |
| <li><a href="../docs/installationguide.html">Installation Guide</a></li> |
| <li><a href="../docs/quickstartguide.html">QuickStart Guide</a></li> |
| <li><a href="../docs/userguide.html">User Guide</a></li> |
| <li><a href="../docs/jaxws-guide.html">JAXWS Guide</a></li> |
| <li><a href="../docs/pojoguide.html">POJO Guide</a></li> |
| <li><a href="../docs/spring.html">Spring Guide</a></li> |
| <li><a href="../docs/webadminguide.html">Web Administrator's Guide</a></li> |
| <li><a href="../docs/migration.html">Migration Guide (from Axis1)</a></li> |
| <li class="nav-header">Resources</li> |
| <li><a href="../faq.html">FAQ</a></li> |
| <li><a href="../articles.html">Articles</a></li> |
| <li><a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink">Wiki</a></li> |
| <li><a href="../refLib.html">Reference Library</a></li> |
| <li><a href="../apidocs/index.html">Online Java Docs</a></li> |
| <li class="nav-header">Get Involved</li> |
| <li><a href="../overview.html">Overview</a></li> |
| <li><a href="../git.html">Checkout the Source</a></li> |
| <li><a href="../mail-lists.html">Mailing Lists</a></li> |
| <li><a href="../release-process.html">Release Process</a></li> |
| <li><a href="../guidelines.html">Developer Guidelines</a></li> |
| <li><a href="../siteHowTo.html">Build the Site</a></li> |
| <li class="nav-header">Project Information</li> |
| <li><a href="../team-list.html">Project Team</a></li> |
| <li><a href="../issue-tracking.html">Issue Tracking</a></li> |
| <li><a href="https://github.com/apache/axis-axis2-java-core" class="externalLink">Source Code</a></li> |
| <li><a href="../thanks.html">Acknowledgements</a></li> |
| <li class="nav-header">Apache</li> |
| <li><a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink">License</a></li> |
| <li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink">Sponsorship</a></li> |
| <li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink">Thanks</a></li> |
| <li><a href="http://www.apache.org/security/" class="externalLink">Security</a></li> |
| </ul> |
| </nav> |
| <div class="well sidebar-nav"> |
| <div id="poweredBy"> |
| <div class="clear"></div> |
| <div class="clear"></div> |
| <a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a> |
| </div> |
| </div> |
| </header> |
| <main id="bodyColumn" class="span10"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| |
| <section><a id="Guide_to_using_EJB_Provider_for_Axis2"></a> |
| <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> |
| <section><a id="a1._Creating_a_Simple_Stateless_Session_EJB"></a> |
| <h2>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> |
| |
| <pre> |
| Remote interface (Hello.java) |
| package my.ejb; |
| import javax.ejb.EJBObject; |
| |
| public interface Hello extends EJBObject, HelloBusiness { |
| } |
| </pre> |
| |
| <p>The following interface defines the business methods available |
| in</p> |
| |
| <p><code>1.</code>HelloBusiness.java</p> |
| |
| <pre> |
| package my.ejb; |
| import java.rmi.RemoteException; |
| |
| public interface HelloBusiness { |
| public String sayHello(String name) throws RemoteException; |
| } |
| </pre> |
| |
| <p>2, Remote home interface - HelloHome.java</p> |
| |
| <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> |
| |
| <p>3. Bean class - HelloBean.java</p> |
| |
| <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> |
| |
| <p>4. Deployment descriptor - ejb-jar.xml</p> |
| |
| <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> |
| |
| <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> |
| |
| <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> |
| |
| <p>If you want to test on JBoss, use the following JBoss deployment |
| descriptor (jboss.xml)</p> |
| |
| <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> |
| |
| <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> |
| |
| <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> |
| |
| <p>Next, deploy the HelloEJB.jar file onto the appropriate J2EE |
| application server.</p> |
| </section><section><a id="Creating_the_Axis2_Service_Archive"></a> |
| <h2>Creating the Axis2 Service Archive</h2> |
| |
| <p>Now we need to make the services.xml file.</p> |
| |
| <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> |
| |
| <p>In the above services.xml file, replace the [URL] and [Context |
| Factory Class Name] with valid values as follows:</p> |
| |
| <p><strong>i.e. If the EJB is deployed on Geronimo:</strong></p> |
| |
| <p>Replace [URL] by 127.0.0.1:4201</p> |
| |
| <p>Replace [Context Factory Class Name] by |
| org.openejb.client.JNDIContext</p> |
| |
| <p><strong>For Jboss:</strong></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> |
| |
| <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> |
| |
| <p>The lib directory of HelloBeanService.aar must contain all the |
| libraries needed to access the EJB. If the EJB is deployed on |
| <strong>Geronimo</strong>, 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 <strong>JBoss</strong> 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> |
| |
| <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> |
| </section> |
| </html> </main> |
| </div> |
| </div> |
| <hr/> |
| <footer> |
| <div class="container-fluid"> |
| <div class="row-fluid"> |
| <p>© 2004–2025 |
| <a href="https://www.apache.org/">The Apache Software Foundation</a> |
| </p> |
| </div> |
| </div> |
| </footer> |
| </body> |
| </html> |