ejb入门

来源:互联网 发布:ubuntu系统kvm网络配置 编辑:程序博客网 时间:2024/05/02 00:04

处女作----第一个ejb
现在大部分都是些轻量级的工具了,象hibernate之类的。偶以前也没写过ejb,不过形式所逼。唉 还是上梁山吧。
一些ejb的高深知识偶也不会,这里只是一个简单入门的例子。希望对大家有用,如果有不对之处,请斧正。

 环境:
  jbuilder2005、weblogic。(只是实现了一个hello ejb 所以没有database)
 
 1、啥叫ejb? 自己查书去!
 2、home/localhome  remote/local 之类的区别和定义 自己查书去!
    个人理解 home接口就是定义了ejb create的方法。remote接口就是定义了一些业务逻辑接口。当然这只是对一个无
    会话状态bean的理解。象会话状态/实体/消息bean还有很多规定。自己看书去吧。
 
 代码部分:(ejb推荐的命名规范我没有遵循。别问why。我下次遵循)
 home接口:
 package com.hhzs.xydjejb;
 
 import javax.ejb.*;
 import java.util.*;
 import java.rmi.*;
 
 /**
 *
 * <p>Title: </p>
 *
 * <p>Description: ejb</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: www.hhzskj.com</p>
 *
 * @author meconsea
 * @version 1.0
 */
 
 public interface DepartmentManagerHome extends javax.ejb.EJBHome {
  public IBspManager create() throws CreateException, RemoteException;
}

remote接口:
package com.hhzs.xydjejb;

import java.rmi.RemoteException;
import javax.ejb.*;

/**
 *
 * <p>Title: </p>
 *
 * <p>Description: ejb remote</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: www.hhzskj.com</p>
 *
 * @author meconsea
 * @version 1.0
 */

public interface IBspManager extends javax.ejb.EJBObject {
  
   /**
    * 功能:逻辑删除组织结构成员
    * @param objectId
    * 组织结构内码
    * @return 操作成功返回1 不成功返回 -1
    */
   public int deleteDM(int objectId)throws RemoteException;
  
   ...........
}


EJBXydjBean:

package xydjejbbean;

import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;

/**
 *
 * <p>Title: </p>
 *
 * <p>Description: ejb bean</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: www.hhzskj.com</p>
 *
 * @author meconsea
 * @version 1.0
 */
 
public class EJBXydjBean 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;
    }
   
    /**
    * 功能:逻辑删除组织结构成员
    * @param objectId
    * 组织结构内码
    * @return 操作成功返回1 不成功返回 -1
    */
   public int deleteDM(int objectId){
    ........//具体的业务实现
   }
   ................

}

声明下,home接口和remote接口是外部提供的。所以用jb生成EJBXydjBean的时候如果选择了remote/local会生成5个java文件。
自动生成的不用管他了。
现在修改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>EJBXydj</display-name>
  <enterprise-beans>
    <session>
      <ejb-name>EJBXydj</ejb-name>
      <home>com.hhzs.xydjejb.DepartmentManagerHome</home>
      <remote>com.hhzs.xydjejb.IBspManager</remote>
      <local-home>xydjejbbean.EJBXydjLocalHome</local-home>
      <local>xydjejb.EJBXydjLocal</local>
      <ejb-class>xydjejb.EJBXydjBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
  </enterprise-beans>
  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>EJBXydj</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>

该project的web服务器是weblogic。所以jb自己给你生成weblogic-ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd">
<weblogic-ejb-jar>
  <weblogic-enterprise-bean>
    <ejb-name>EJBXydj</ejb-name>
    <jndi-name>EJBXydj</jndi-name>
    <local-jndi-name>EJBXydjLocal</local-jndi-name>
  </weblogic-enterprise-bean>
</weblogic-ejb-jar>

客户端程序代码:
.....
try{
            //分布式,与客户端测试不是jvm(暂且这么理解)
            /**
            Properties env = new Properties();
            env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
            env.put(javax.naming.Context.PROVIDER_URL,"t3://server:7002");
            Context intital = new InitialContext(env);
            */
            //同jvm
            Context intital = new InitialContext();
           
            Object obj = intital.lookup("EJBXydj");
           
            SwjgAndQxManagerHome home = (SwjgAndQxManagerHome)PortableRemoteObject.narrow(obj,SwjgAndQxManagerHome.class);
            IBspManager ibm = home.create();
            int i = ibm.delete("");
        }catch(Exception e){
             e.printStackTrace();//可以用log的
        }
.....

剩下的都是默认了。
兄弟有一点不明白:
intital.lookup("java:comp/env/EJBXydj");这么找不到jndi名。希望高手斧正后mail to meconsea@hotmail.com.

原创粉丝点击