Topic: EJB 最佳实践:工业强度的 JNDI 优化

  Print this page

1.EJB 最佳实践:工业强度的 JNDI 优化 Copy to clipboard
Posted by: fat32
Posted on: 2002-12-02 17:06

本文转自中文java技术网(www.cn-java.com)

Brett McLaughlin 在这篇 EJB 最佳实践专栏文章中研究了 JNDI 查找,它是几乎所有的 EJB 交互中不可或缺并且常见的部分。遗憾的是,JNDI 操作几乎总是需要性能开销。在本技巧文章中,Brett 向您展示了 home 接口工厂是如何降低您 EJB 应用程序中 JNDI 查找开销的。
每种 EJB 组件(会话、实体和消息驱动的)都有 home 接口。home 接口是 bean 的操作基础;一旦您找到它,就可以使用该 bean 的功能。EJB 应用程序依靠 JNDI 查找来访问其 bean 的 home 接口。因为 EJB 应用程序往往运行多个 bean,并且因为许多组件中经常使用 JNDI 查找,所以应用程序大部分性能开销都花费在这些查找上。

在这篇技巧文章中,我们将研究一些最常用的 JNDI 优化。特别地,我们将向您展示如何将高速缓存和通用助手类组合使用,以创建针对 JNDI 开销的工厂风格的解决方案。

详细请参考:
http://www-900.ibm.com/developerWorks/cn/java/j-ejb0924/index.shtml

2.Re:EJB 最佳实践:工业强度的 JNDI 优化 [Re: fat32] Copy to clipboard
Posted by: hangzxf
Posted on: 2003-01-21 19:43

楼上的辛苦!

3.Re:EJB 最佳实践:工业强度的 JNDI 优化 [Re: fat32] Copy to clipboard
Posted by: franticwolf
Posted on: 2003-01-22 19:54

文中清单 3. EJB home 接口工厂
中的代码怎么编译不通啊?
楼上能不能解释一下?

4.Re:EJB 最佳实践:工业强度的 JNDI 优化 [Re: fat32] Copy to clipboard
Posted by: fat32
Posted on: 2003-01-23 13:43

要改动一下,这是我改过的:


package zenitek.workflow;

import java.util.Map;
import java.util.Hashtable;
import javax.ejb.EJBHome;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
/**
* @author db2admin
*
* This class is to cache EJB home Interfaces for the purpose of improve
* JNDI lookup performance.
*
*/
public class EJBHomeFactory {
private static EJBHomeFactory instance;
private Map homeInterfaces;
private Context ctx;
private String type;

//This is private, and cannot instantiated directly.
private EJBHomeFactory() throws NamingException {
//Initiated cantainer for EJB home interfaces.
homeInterfaces = new Hashtable();

//Get the context for caching purposes.
ctx = new InitialContext();
}

public static EJBHomeFactory getInstance() throws NamingException {
if (instance == null) {
instance = new EJBHomeFactory();
}
return instance;
}

public EJBHome lookup(String jndiName, Class homeInterfaceClass)
throws NamingException {
//See if we already have this interface cached.
EJBHome homeInterface = (EJBHome) homeInterfaces.get(homeInterfaceClass);

//If not, look up with the supplied JNDI name.
if (homeInterface == null) {
Object obj = ctx.lookup(jndiName);
homeInterface =
(EJBHome) PortableRemoteObject.narrow(obj, homeInterfaceClass);

//If this is a new ref,save for caching purposes.
homeInterfaces.put(homeInterfaceClass, homeInterface);

System.out.println("We get a non-cached home interface.");
} else {
System.out.println("We get a cached home interface.");
}
System.out.println("Now cache size : " + homeInterfaces.size());
return homeInterface;
}
}

5.Re:EJB 最佳实践:工业强度的 JNDI 优化 [Re: fat32] Copy to clipboard
Posted by: hangzxf
Posted on: 2003-01-24 13:47

辛苦,辛苦,使用范围怎样,对大的应用来说?

6.Re:EJB 最佳实践:工业强度的 JNDI 优化 [Re: fat32] Copy to clipboard
Posted by: franticwolf
Posted on: 2003-01-26 15:56

谢谢!
我也看懂了。
呵呵!

7.Re:EJB 最佳实践:工业强度的 JNDI 优化 [Re: fat32] Copy to clipboard
Posted by: whisperwind
Posted on: 2003-01-28 11:00

不错的文章

8.Re:EJB 最佳实践:工业强度的 JNDI 优化 [Re: fat32] Copy to clipboard
Posted by: liang_chen
Posted on: 2003-02-16 03:05

文章没来及看。

不过有些问题是显而易见地提出的:
既然是用CACHE的做法,怎样同步CACHE里JNDI的内容以及正宗的JNDI的内容。

既然是工业优化,可以想象SERVER一天到晚不重启,JNDI的内容可能会发生变化。

也许问题提得不是很对。想一下吧。
Big Smile


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923