EJB的第一个例子
打开JBuilder,新建一个EJB项目:
接下来,我们在项目中建立一个EJB:
用JBuilder来开发EJB的好处是图形界面比较直观
然后我们创建一个会话bean
菜单右键
为EJB添加方法:
HOME接口代码 - ConvertEjbHome
package ejbtest01;import javax.ejb.EJBHome;import javax.ejb.CreateException;import java.rmi.RemoteException;//这是home接口,负责生成EJB对象public interface ConverEjbHome extends EJBHome { //create方法用来被客户端调用,返回一个远程接口引用,供客户端使用来调用业务方法 public ConverEjb create() throws CreateException, RemoteException;}
远程接口代码 - ConvertEjb
package ejbtest01;import javax.ejb.EJBObject;import java.rmi.RemoteException;//远程接口,负责让客户端通过它来调用业务方法public interface ConverEjb extends EJBObject { //业务方法定义 public double getRmb(double usd) throws RemoteException;}
EJB Bean类代码 - ConvertEjbBean
package ejbtest01;import javax.ejb.SessionBean;import javax.ejb.SessionContext;import javax.ejb.CreateException;//实现类,实现了业务逻辑public class ConverEjbBean implements SessionBean { SessionContext sessionContext; public void ejbCreate() throws CreateException { } public void ejbRemove() { } public void ejbActivate() { } public void ejbPassivate() { } public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } //业务逻辑实现,不能泄漏给客户端 public double getRmb(double usd) { //从数据库查询出汇率 double rate = 6.98; double rmb = rate * usd; return rmb; }}
JBuiler会自动配置好配置文件 - ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"><ejb-jar> <display-name>EjbTestModule1</display-name> <enterprise-beans> <session> <display-name>ConverEjb</display-name> <ejb-name>ConverEjb</ejb-name> <home>ejbtest01.ConverEjbHome</home> <remote>ejbtest01.ConverEjb</remote> <ejb-class>ejbtest01.ConverEjbBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>ConverEjb</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor></ejb-jar>
编译项目:

将EjbTestModule1.jar上传到Web Server:
启动WebLogic:

进入WebLogic控制台:
浏览器输入:
http://localhost:7001/console
用户名:weblogic 密码: weblogic
部署模块:



测试EJB类:
在JBuilder中建立一个测试类:
右键项目->New->Add Package
包中新建一个client1类
package client;import ejbtest01.ConverEjb;import ejbtest01.ConverEjbHome;import javax.rmi.PortableRemoteObject;public class Client1 { public static void main(String args[]) throws Exception { Object obj = EjbFactory.getEjbHome("ConvertEjb"); //ConvertEjbHome home = (ConvertEjbHome)obj; 性能不好 ConverEjbHome home = (ConverEjbHome)PortableRemoteObject.narrow(obj,ConverEjbHome.class); ConverEjb remote = home.create(); double usd = 456; double rmb = remote.getRmb(usd); System.out.println("人民币数量: " + rmb); }}
package client;import java.util.Hashtable;import javax.naming.Context;import javax.naming.InitialContext;public class EjbFactory { public static Object getEjbHome(String jndiName) throws Exception { //连接到Weblogic Hashtable map = new Hashtable(); map.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory"); //指定了weblogic服务器的名称(IP),远程调用体现在这里 map.put(Context.PROVIDER_URL,"t3://localhost:7001"); map.put(Context.SECURITY_PRINCIPAL,"weblogic"); map.put(Context.SECURITY_CREDENTIALS,"weblogic"); Context context = new InitialContext(map); //根据JNDI名称查找,查到的就是home接口 Object obj = context.lookup(jndiName); return obj; }}