处女作----第一个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.