<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.9.2 at 2021-08-01 
 | 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="20210801" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; 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: 2021-08-01<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.0<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.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</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>
<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><code>1.</code>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 &quot;Hello &quot; + name + &quot;, Have a nice day!&quot;;
   }

}
</pre></div>

<p>4. Deployment descriptor - ejb-jar.xml</p>

<div>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;ejb-jar xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot;
        xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
        xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd&quot;
        version=&quot;2.1&quot;&gt;

  &lt;enterprise-beans&gt;
     &lt;session&gt;
       &lt;ejb-name&gt;Hello&lt;/ejb-name&gt;
       &lt;home&gt;my.ejb.HelloHome&lt;/home&gt;
       &lt;remote&gt;my.ejb.Hello&lt;/remote&gt;
       &lt;ejb-class&gt;my.ejb.HelloBean&lt;/ejb-class&gt;
       &lt;session-type&gt;Stateless&lt;/session-type&gt;
       &lt;transaction-type&gt;Bean&lt;/transaction-type&gt;
     &lt;/session&gt;
  &lt;/enterprise-beans&gt;
  &lt;assembly-descriptor&gt;
     &lt;container-transaction&gt;
       &lt;method&gt;
          &lt;ejb-name&gt;Hello&lt;/ejb-name&gt;
          &lt;method-name&gt;*&lt;/method-name&gt;
       &lt;/method&gt;
       &lt;trans-attribute&gt;Required&lt;/trans-attribute&gt;
     &lt;/container-transaction&gt;
  &lt;/assembly-descriptor&gt;
&lt;/ejb-jar&gt;
</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>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;openejb-jar 
    xmlns=&quot;http://www.openejb.org/xml/ns/openejb-jar-2.1&quot;
    xmlns:naming=&quot;http://geronimo.apache.org/xml/ns/naming-1.1&quot;
    xmlns:security=&quot;http://geronimo.apache.org/xml/ns/security-1.1&quot;
    xmlns:sys=&quot;http://geronimo.apache.org/xml/ns/deployment-1.1&quot;
    xmlns:pkgen=&quot;http://www.openejb.org/xml/ns/pkgen-2.0&quot;&gt;
    &lt;enterprise-beans&gt;
        &lt;session&gt;
            &lt;ejb-name&gt;Hello&lt;/ejb-name&gt;
            &lt;jndi-name&gt;my/ejb/HelloBean&lt;/jndi-name&gt;
        &lt;/session&gt;
    &lt;/enterprise-beans&gt;
&lt;/openejb-jar&gt;
</pre></div>

<p>If you want to test on JBoss, use the following JBoss deployment
descriptor (jboss.xml)</p>

<div>
<pre>
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;!DOCTYPE jboss PUBLIC &quot;-//JBoss//DTD JBOSS 4.0//EN&quot;
      &quot;http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd&quot;&gt;
&lt;jboss&gt;
    &lt;enterprise-beans&gt;
      &lt;session&gt;
         &lt;ejb-name&gt;Hello&lt;/ejb-name&gt;
         &lt;jndi-name&gt;my/ejb/HelloBean&lt;/jndi-name&gt;
      &lt;/session&gt;
    &lt;/enterprise-beans&gt;
&lt;/jboss&gt;
</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>
<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>
&lt;serviceGroup&gt;
    &lt;service name=&quot;HelloBeanService&quot;&gt;
        &lt;description&gt;Hello! web service&lt;/description&gt;
        &lt;messageReceivers&gt;
            &lt;messageReceiver mep=&quot;http://www.w3.org/ns/wsdl/in-only&quot;
                class=&quot;org.apache.axis2.rpc.receivers.ejb.EJBInOnlyMessageReceiver&quot;/&gt;
        &lt;messageReceiver mep=&quot;http://www.w3.org/ns/wsdl/in-out&quot;
                class=&quot;org.apache.axis2.rpc.receivers.ejb.EJBMessageReceiver&quot;/&gt;
        &lt;/messageReceivers&gt;
        &lt;parameter name=&quot;ServiceClass&quot;&gt;my.ejb.HelloBusiness&lt;/parameter&gt;
        &lt;parameter name=&quot;remoteInterfaceName&quot;&gt;my.ejb.Hello&lt;/parameter&gt;
        &lt;parameter name=&quot;homeInterfaceName&quot;&gt;my.ejb.HelloHome&lt;/parameter&gt;
        &lt;parameter name=&quot;beanJndiName&quot;&gt;my/ejb/HelloBean&lt;/parameter&gt;
        &lt;parameter name=&quot;providerUrl&quot;&gt;[URL]&lt;/parameter&gt;
        &lt;parameter name=&quot;jndiContextClass&quot;&gt;[Context Factory Class
             Name]&lt;/parameter&gt;
     &lt;/service&gt;
&lt;/serviceGroup&gt;
</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(&quot;http://localhost:8080/axis2/services/HelloBeanService&quot;);

options.setTo(targetEPR);
QName hello = new QName(&quot;http://ejb.my/xsd&quot;, &quot;sayHello&quot;);
Object[] helloArgs = new Object[] {&quot;John&quot;};

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 &copy;2004&#x2013;2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>