EJB的最佳实践:产业强度的JNDI优化[Java编程]
本文“EJB的最佳实践:产业强度的JNDI优化[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在这篇本领文章中,我们将研究一些最常用的 JNDI 优化.分外地,我们将向您展示若何将高速缓存和通用助手类组合利用,以成立针对 JNDI 开销的工厂气势的办理筹划.
削减上下文实例
清单 1 显示了一段典型的 EJB 代码,它需求多次 JNDI 查找.请花一点时间研究代码,然后我们将对它举行优化以得到更佳性能.
清单 1. 典型的 EJB 查找
public boolean buyItems(PaymentInfo paymentInfo, String storeName,
List items) {
// Load up the initial context
Context ctx = new InitialContext();
// Look up a bean´s home interface
Object obj = ctx.lookup("java:comp/env/ejb/PurchaseHome");
PurchaseHome purchaseHome =
(PurchaseHome)PortableRemoteObject.narrow(obj, PurchaseHome.class);
Purchase purchase = purchaseHome.create(paymentInfo);
// Work on the bean
for (Iterator i = items.iterator(); i.hasNext(); ) {
purchase.addItem((Item)i.next());
}
// Look up another bean
Object obj = ctx.lookup("java:comp/env/ejb/InventoryHome");
InventoryHome inventoryHome =
(InventoryHome)PortableRemoteObject.narrow(obj, InventoryHome.class);
Inventory inventory = inventoryHome.findByStoreName(storeName);
// Work on the bean
for (Iterator i = items.iterator(); i.hasNext(); )
inventory.markAsSold((Item)i.next());
}
// Do some other stuff
}
固然这个示例多少有点决心,但它确切揭露了利用 JNDI 时的一些最明显的问题.关于初学者,您应当问问自己,新建 InitialContext 对象能否必须.极大概在利用程序代码的别的地方已经装入了这个上下文,而我们又在这里成立了一个新的.高速缓存 InitialContext 实例会当即促使性能提高,如清单 2 所示:
清单 2. 高速缓存 InitialContext 实例
public static Context getInitialContext() {
if (initialContext == null) {
initialContext = new InitialContext();
}
return initialContext;
}
通过对 getInitialContext() 利用助手类,而不是为每个操作都实例化一个新的 InitialContext,我们将遍及在利用程序中的上下文数目削减为一个.
线程化会怎么样?
假如您对此处提出的办理筹划的线程化感到耽忧,那大可没必要.两个线程同时举行 getInitialContext() 是绝对有大概的(从而一次成立两个上下文),但只有初次调用该办法时才会发生此类错误.因为问题至多只会发生一次,所以同步是不必要的,实际上,同步引入的复杂性比它所办理的复杂性更多.
以上是“EJB的最佳实践:产业强度的JNDI优化[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |