You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ch...@apache.org on 2007/04/05 18:14:36 UTC
svn commit: r525853 -
/webservices/axis2/branches/java/1_2/xdocs/@axis2_version_dir@/ejb-provider.html
Author: chatra
Date: Thu Apr 5 09:14:30 2007
New Revision: 525853
URL: http://svn.apache.org/viewvc?view=rev&rev=525853
Log:
committing EJB provider tutorial patched in https://issues.apache.org/jira/browse/AXIS2-1998
Added:
webservices/axis2/branches/java/1_2/xdocs/@axis2_version_dir@/ejb-provider.html
Added: webservices/axis2/branches/java/1_2/xdocs/@axis2_version_dir@/ejb-provider.html
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/xdocs/%40axis2_version_dir%40/ejb-provider.html?view=auto&rev=525853
==============================================================================
--- webservices/axis2/branches/java/1_2/xdocs/@axis2_version_dir@/ejb-provider.html (added)
+++ webservices/axis2/branches/java/1_2/xdocs/@axis2_version_dir@/ejb-provider.html Thu Apr 5 09:14:30 2007
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <title>Guide to using EJB Provider for Axis2</title>
+ <meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/"
+ />
+</head>
+
+<body xml:lang="en">
+<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 src available at
+<code>AXIS2_HOME/modules/adb/src/org/apache/axis2/rpc/receivers/ejb</code> to
+access EJBs deployed on a J2EE server such as Geronimo or Jboss.</p>
+
+<p>This example is tested with Geronimo 1.1 and Jboss 4.0.4.GA.</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>
+
+<p><strong>Note:</strong> The source of the example discussed in this guide
+is available at
+<code>AXIS2_HOME/modules/adb/src/org/apache/axis2/rpc/receivers/ejb</code> of
+your extracted <a
+href="http://ws.apache.org/axis2/download/@axis2_version_dir@/download.cgi">Axis2
+binary distribution.</a></p>
+
+<p><span style="color: #00FF00; background-color: #60D586"><span
+style="color: #4FD12E; background-color: #FFFFFF">//Note the location has to
+be location of example in the dist-bi</span><span
+style="color: #4FD12E; background-color: #FFFFFF">n. The above mentioned is
+the svn location.</span></span></p>
+
+<h2>1. Creating a Simple Stateless Session EJB</h2>
+
+<p>Firstly, 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. 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>Deploy HelloEJB.jar on appropriate J2EE application server.</p>
+
+<h2>Creating the Axis2 Service Archive</h2>
+
+<p>Axis2 currently does not automatically generate the WSDL for the services
+which do not use RPC message receivers. Therefore we have to generate the
+WSDL file manually. Use the <a href="../tools/index.html">java2wsdl
+utility</a> which comes with apache Axis2 to generate the WSDL.</p>
+
+<p><strong>Unix:</strong></p>
+<pre>$java2wsdl.sh -cp /path/to/HelloEJB.jar -cn my.ejb.HelloBusiness -sn
+HelloBeanService -of HelloBeanService.wsdl</pre>
+
+<p><strong>MS Windows:</strong></p>
+<pre>C:\Axis2\bin>java2wsdl.bat -cp C:\path\to\HelloEJB.jar -cn
+my.ejb.HelloBusiness -sn HelloBeanService -of HelloBeanService.wsdl</pre>
+
+<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/2004/08/wsdl/in-only"
+ class="org.apache.axis2.rpc.receivers.ejb.EJBInOnlyMessageReceiver"/>
+ <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
+ class="org.apache.axis2.rpc.receivers.ejb.EJBMessageReceiver"/>
+ </messageReceivers>
+ <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
+ | +--HelloBeanService.wsdl
+ |
+ +--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>
+</body>
+</html>
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org