读书人

EJB的第一个事例

发布时间: 2012-10-10 13:58:11 作者: rapoo

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;  }}

读书人网 >软件架构设计

热点推荐