//setEnv.cmd
rem 设置系统级环境变量
rem 读者可根据使用的安装目录自行确定
set JAVA_HOME=c:\bea\jdk131
set WL_HOME=c:\bea\wlserver6.1
set DOMAIN_NAME=mydomain
set path=%path%;%JAVA_HOME%\bin
set classpath=.;%classpath%;%WL_HOME%\lib\weblogic.jar
rem 设置工作目录
set EX_WEBAPP_CLASSES=%WL_HOME%\config\%DOMAIN_NAME%\applications\DefaultWebApp_myserver\WEB-INF\classes
set CLIENT_CLASSES=%WL_HOME%\config\%DOMAIN_NAME%\clientclasses
set SERVER_CLASSES=%WL_HOME%\config\%DOMAIN_NAME%\serverclasses
set classpath=%classpath%;%CLIENT_CLASSES%;%SERVER_CLASSES%
可将该文件存放在D:\ejb_instance目录下。运行该脚本程序的命令如下:
D:\ejb_instance\setEnv.cmd
例14.2 编写远程接口程序
//引入需要类或接口
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
//远程接口的定义,必须继承EJBObject
public interface HelloWorld extends EJBObject {
//定义业务逻辑方法
public String sayHello() throws RemoteException;
}
例14.3 编写本地接口程序
//引入需要类或接口
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
//本地接口的定义,必须继承EJBHome
public interface HelloWorldHome extends EJBHome {
//定义EJB的创建方法
public HelloWorld create() throws RemoteException,CreateException;
}
例14.4 编程用Bean class实现远程接口中定义的业务
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
//Bean class实现业务逻辑,必须实现Session Bean接口
public class HelloWorldBean implements SessionBean {
//这是个会话EJB,声明会话上下文
private SessionContext sctx;
//无参数的构造函数
public HelloWorldBean() {}
//接口SessionBean中定义的回调(callback)方法,必须实现
public void setSessionContext(SessionContext c) {
this.sctx=c;
}
//接口SessionBean中定义的回调(callback)方法,必须实现
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
//供客户端调用的business函数,这里只是简单的返回一个字符串
public String sayHello() {
return "Hello World. Welcome to EJB!";
}
}
例14.5 编写EJB说明文件
<?xml version="1.0" ?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
<!--EJB说明文件-->
<ejb-jar>
<enterprise-beans>
<!--定义会话EJB-->
<session>
<!--定义会话EJB名-->
<ejb-name>HelloWorld</ejb-name>
<!--定义会话EJB主接口名-->
<home>HelloWorldHome</home>
<!--定义会话EJB远程接口名-->
<remote>HelloWorld</remote>
<!--定义会话EJB实现类名-->
<ejb-class>HelloWorldBean</ejb-class>
<!--定义会话EJB类型-->
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
例14.6 WebLogic特定部署文件、
<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC
"-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN"
"http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd" >
<!--WebLogic EJB部署说明文件-->
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<!--EJB名-->
<ejb-name>HelloWorld</ejb-name>
<!--定义的JNDI名-->
<jndi-name>HelloWorldEJB</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
例14.7 编写客户端测试程序
//引入需要的类和接口
import java.rmi.RemoteException;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import HelloWorld;
import HelloWorldHome;
public final class HelloWorldClient {
public static void main(String[] args) {
try {
//指定WebLogic Server的相关
Properties p=new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://localhost:7001");
//客户端引用JNDI服务的InitialContext对象
Context ctx=new InitialContext(p);
Object h=ctx.lookup("HelloWorldEJB");
HelloWorldHome home=
(HelloWorldHome)PortableRemoteObject.narrow(h,
HelloWorldHome.class);
HelloWorld hwBean=home.create();
String msg=hwBean.sayHello();
System.out.println(msg);
}catch(Exception e) {
e.printStackTrace();
}
}
}