开发工具是IBM RAD 7.5.4。
WAS版本6.1。
EJB版本2.0。
开发过程如图:
新建完后,工程结构如下:
再新建SessionBean
下一步
完成。
如图:
修改几个文件:
package com.ejb;
import static java.lang.System.out;
/**
* Bean implementation class for Enterprise Bean: HelloSession
*/
public class HelloSessionBean implements javax.ejb.SessionBean {
static final long serialVersionUID = 3206093459760846163L;
private javax.ejb.SessionContext mySessionCtx;
/**
* getSessionContext
*/
public javax.ejb.SessionContext getSessionContext() {
return mySessionCtx;
}
/**
* setSessionContext
*/
public void setSessionContext(javax.ejb.SessionContext ctx) {
mySessionCtx = ctx;
}
/**
* ejbCreate
*/
public void ejbCreate() throws javax.ejb.CreateException {
out.println("ejbCreate");
}
/**
* ejbActivate
*/
public void ejbActivate() {
out.println("ejbActivate");
}
/**
* ejbPassivate
*/
public void ejbPassivate() {
out.println("ejbPassivate");
}
/**
* ejbRemove
*/
public void ejbRemove() {
out.println("ejbRemove");
}
public String sayHello(String someOne) {
out.println("sayHello");
return "Hello, " + someOne + "!";
}
}
package com.ejb;
import java.rmi.RemoteException;
/**
* Remote interface for Enterprise Bean: HelloSession
*/
public interface HelloSession extends javax.ejb.EJBObject {
public String sayHello(String someOne) throws RemoteException;
}
增加一个测试类:
package com.ejb;
import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
public class TestClient {
/**
* @param args
* @throws NamingException
* @throws CreateException
* @throws RemoteException
*/
public static void main(String[] args) throws NamingException,
RemoteException, CreateException {
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "iiop://127.0.0.1:2810/");
Context ctx = new InitialContext(props);
Object objref = ctx.lookup("ejb/com/ejb/HelloSessionHome");
HelloSessionHome home = (HelloSessionHome) PortableRemoteObject.narrow(objref, HelloSessionHome.class);
HelloSession hello = home.create();
String msg = hello.sayHello("ejb");
System.out.println(msg);
}
}
上面jndi的名字,可以在ibm-ejb-jar-bnd.xmi中找到,其内容:
<?xml version="1.0" encoding="UTF-8"?>
<ejbbnd:EJBJarBinding xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:ejb="ejb.xmi" xmlns:ejbbnd="ejbbnd.xmi"
xmi:id="EJBJarBinding_1393691689296">
<ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID" />
<ejbBindings xmi:id="EnterpriseBeanBinding_1393691689296"
jndiName="ejb/com/ejb/HelloSessionHome">
<enterpriseBean xmi:type="ejb:Session"
href="META-INF/ejb-jar.xml#HelloSession" />
</ejbBindings>
</ejbbnd:EJBJarBinding>
ejb-jar.xml内容:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar id="ejb-jar_ID">
<display-name>EJB</display-name>
<enterprise-beans>
<session id="HelloSession">
<ejb-name>HelloSession</ejb-name>
<home>com.ejb.HelloSessionHome</home>
<remote>com.ejb.HelloSession</remote>
<ejb-class>com.ejb.HelloSessionBean
</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
<ejb-client-jar>EJBClient.jar</ejb-client-jar>
</ejb-jar>
上面两个文件内容,都是自动生成的,无需修改。如果知道怎么改,也可以改。
然后把EJBSystem加到WAS6.1里去,启动WAS,会生成一些java文件,如图:
此时,运行TestClient,会报错,解决办法
上面的问题,解决后,就可以测试成功了。上面的URL里的端口,一般是2809,我这里的是2810。反正就从2809开始往上加1。
服务端输出:
[14-3-2 0:44:04:890 CST] 00000041 SystemOut O ejbCreate
[14-3-2 0:44:04:906 CST] 00000041 SystemOut O sayHello
客户端输出:
Hello, ejb!