灵活使用EJB的本地和远程接口(三)
时间:2011-04-23
JNDI 绑定和源代码分析
EJB 模块
从 DualEJBModule01 开始。在 EJB Deployment Descriptor 编辑器面板中,选择 Beans 选项卡,然后选择 DualEntity,并且确保 WebSphere Bindings 部分中的 JNDI 名设置为 “ejb/dual/ejb/DualEntityHome” 。保存所有的更改。首先,让我们研究 DualEJBModule02 项目中 DualSession EJB 的 ejb-jar.xml 的代码片断:
...
useLocal
java.lang.Boolean
true
doTrace
java.lang.Boolean
false
ejb/DualEntityRemoteHome
Entity
dual.ejb.DualEntityRemoteHome
dual.ejb.DualEntityRemote
DualEJBModule01.jar#DualEntity
ejb/DualEntityLocalHome
Entity
dual.ejb.DualEntityLocalHome
dual.ejb.DualEntityLocal
DualEJBModule01.jar#DualEntity
...
这里,第一个元素(具有名称“useLocal”)是用来控制 DualEntity EJB 的本地接口的使用的。第二个条目(具有名称“doTrace”)准备只用于跟踪。已实现的跟踪功能是相当基本的,但是对于我们的目的来说足够了。 相应的 Java 代码看起来像是下面这样的:
public class DualSessionBean implements javax.ejb.SessionBean {
private javax.ejb.SessionContext mySessionCtx;
private boolean doTrace;
private boolean useLocal;
private DualEntityRemoteHome entityRemoteHome;
private DualEntityLocalHome entityLocalHome;
public void setSessionContext(javax.ejb.SessionContext ctx) {
mySessionCtx = ctx;
try {
Context initCtx = new InitialContext();
Boolean option = null;
option = (Boolean)initCtx.lookup("java:comp/env/useLocal");
useLocal = option.booleanValue();
option = (Boolean)initCtx.lookup("java:comp/env/doTrace");
doTrace = option.booleanValue();
if (doTrace)
System.out.println("DualSessionBean#setSessionContext: useLocal="
+useLocal);
Object homeObject = null;
if (useLocal){
homeObject = initCtx.lookup("java:comp/env/ejb/DualEntityLocalHome");
entityLocalHome = (DualEntityLocalHome)homeObject;
} else {
homeObject = initCtx.lookup("java:comp/env/ejb/DualEntityRemoteHome");
entityRemoteHome = (DualEntityRemoteHome)
javax.rmi.PortableRemoteObject.narrow(homeObject,
DualEntityRemoteHome.class);
}
} catch(NamingException ne){
// process exception here...
}
}
...
灵活使用EJB的本地和远程接口(三)(2)
时间:2011-04-23
在 Java 代码中,EJB 环境变量是作为无状态会话 Bean 对象的生命周期的类变量存储的。DualEntity 的本地接口和 Remote Home Interface 是通过引用访问的;这是首选的方式,并且遵守 EJB 2.0 规范。相对地,ejb-jar.xml 包含描述这些引用的 ejb-ref 和 ejb-local-ref 元素。打开 EJB Deployment Descriptor 编辑器,然后选择 Beans 选项卡。确保 JNDI 名设置为“ejb/dual/ejb/DualSessionHome”。然后转到 References 选项卡,确保对 DualEntity 两个引用指向 JNDI 名“ejb/dual/ejb/DualEntityHome”。必要时可以更改这些值,然后保存所作的更改。
Web 模块
DualWebModule03project 标准的 J2EE Web 部署描述符包含两个重要的代码片段。第一个指定该 Servlet 的初始参数:
|