Weblogic EJB 学习笔记(2)精

6、ejb 引用

在ejb-jar.xml
<ejb-ref>
<description> an EJB reference to the Widget EJB(描述)</description>
<ejb-ref-name>ejb/WidgetEJB</ejb-ref-name>
<ejb-ref-type>session</ejb-ref-type>
<home>com.dhc.WidgetHome</home>
<remote>com.dhc.Widget</remote>
</ejb-ref>

在 weblogic-ejb-jar.xml
<ejb-reference-description>
<ejb-ref-name>ejb/WidgeEJB</ejb-ref-name>
<jndi-name>DeployedWidge</jndi-name>
</ejb-reference-description>

程序
Content ctx = new InitialContent();
Object h = ctx.lookup("java:/comp/env/ejb"); //环境变量是只读的,而且是当前ejb的本地变量.
WidgetHome home = (WidgetHome)PortableRemoteObject.narrow(h,WidgeHome.class);

7. 资源管理器的引用
定义资源管理的引用
例子: 建立 jdbc、DBPool与JDBC数据源的映射
在ejb-jar.xml
<resource-ref>
<description>(描述)</description>
<res-ref-name>jdbc/BDPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

在 weblogic-ejb-jar.xml
<resource-description>
<res-ref-name>jdbc/DBPool</res-ref-name>
<jndi-name>DBPool</jndi-name>
</resource-description>

config.xml

<JDBCTxDataSource
name="DBPool"
Targets="myserver"
JDDIName="DBPool" (jndi名称)
PoolName ="DevelopmentPool"
/>

引用的优点
我们用大量的映射和配置,才建立了资源管理器的引用,但是还是很值得的。
以为便于部署人员重新配置应用而不需要修改实际的bean类代码。甚至也不需要修改ejb的配置描述器
java bean 代码

Content ctx = new InitialContent();
DataSource dataSource = (DataSource)ctx.lookup("java:/comp/env/jdbc/DBPool");

8 . 句柄: 作为一个串行化的对象,句柄中封装了足够的信息,以便重建对EJBObject的引用。
句柄可用于在两个相互合作的进程中传递EJBObject的引用。接受进程即可从句柄中取得EJBObject的引用。

为了取得句柄,可以调用EJBObject接口的getHandle()方法,返回一个Handle实例
为了重建EJBObject 引用。可以使用Handle 接口的getEJBObject()方法。

例子:
HelloWorld hw = home.create();
javax.ejb.Handle handle = hw.getHandle();
HelloWorld helloworld = (HelloWorld)PortableRemoteObject.narrow(handle.getEJBObject(),HelloWorld.class);


HomeHandle:
类似handle ,但不能用于引用EJBObject
HomeHandle 包含足够的信息,可以重建EJBHome()的引用。
差异:
是调用 getHomeHandle()方法 和getEJBHome()方法
例子片断:
Content ctx = new InitialContext();
Object h = ctx.lookup("HelloWorldEJB");
HelloWorldHome home = (HelloWorldHome)PortableRemoteObject.narrow(h,HelloWorldHome.class);
HomeHandle homehandle = home.getHomeHandle();
Object nh = homehandle.getEJBHome();
HelloWorldHome newHomeReference = (HelloWorldHome)PortableRemoteObject.narrow(nh,HelloWorldHome.class);

优点:
他们可以自动的存储重建引用所需的信息

9.使用事务的技巧:
(1) 一个事务不要涉及太多的操作.
(2) 容器管理和bean管理的事务
事务既耗费应用服务器中的资源,又耗费数据库资源,所以事务越短越好.
尽量使用容器管理事务而不要采用bean管理事务的方式.
(3) ejb遇到错误,需要强制事务回滚. 使用EJBObject.setRollbackOnly();
(4) 不能让事务涉及web层和表示逻辑
(5) 企业应用中不应当选用supports 事务属性,因为只有调用者开始一个事务后,ejb才能在事务中运行.
posted @ 2012-05-09 20:58  hibernate3例子  阅读(292)  评论(0编辑  收藏  举报