blob: 6bdc9b9a96bb77c155fd89fcacff5efbeaab82f0 [file] [log] [blame]
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1 at 2022-06-07
| 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="20220607" />
<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: 2022-06-07<span class="divider">|</span>
</li>
<li id="projectVersion">Version: 1.8.1<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>
<li><a href="../release-notes/1.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</a> </li>
<li><a href="../release-notes/1.8.1.html" title="1.8.1"><span class="none"></span>1.8.1</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="../git.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;2022
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
</div>
</div>
</footer>
</body>
</html>