国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

InitialContext和lookup(轉)

2019-11-14 22:42:18
字體:
來源:轉載
供稿:網友
InitialContext和lookup(轉)

原文地址:http://wxg6203.VEvb.com/blog/680830

最近因為工作需要開始學習Ejb3,遇到了一個讓我很郁悶的事情,做一下小小的總結——小心new InitialContext()。

在做客戶端的時候,發現連接服務器,搜索數據庫,然后返回結果集。每一次執行的時候,第一次總要花更多的時間,之后每一次操作時間就要快很多了。期間找了很多方法,都行不通。一開始以為是Ejb服務器建立服務消耗時間,后來覺得不對,因為Jboss啟動的時候,已經將服務啟動了。經過一周的排查,終于發現原來是因為new InitialContext()消耗了大量的時間,之后的lookup()方法也會消耗一定的時間。其中,在網絡狀態良好的情況下,每一次new InitialContext()方法花費大概100毫秒到200毫秒之間,而每一次lookup()大概要花10毫秒到30毫秒之間。因此,決定對代碼進行優化,創建了EJBHomeFactory工具類,使用到了單例模式,歡迎大家指教。以下為該類代碼:

import javax.naming.InitialContext;   import javax.naming.NamingException;     import com.cithinc.util.Tool;     public class EJBHomeFactory {       PRivate static EJBHomeFactory instance;       private InitialContext context;         private EJBHomeFactory() throws NamingException {           context = Tool.getInitialContext();       }         public static EJBHomeFactory getInstance() throws NamingException {           if (instance == null) {               instance = new EJBHomeFactory();           }           return instance;       }         public Object lookup(String jndiName) throws NamingException {           Object obj = new Object();           obj = context.lookup(jndiName);           return obj;       }   }  import javax.naming.InitialContext; import javax.naming.NamingException; import com.cithinc.util.Tool; public class EJBHomeFactory { private static EJBHomeFactory instance; private InitialContext context; private EJBHomeFactory() throws NamingException { context = Tool.getInitialContext(); } public static EJBHomeFactory getInstance() throws NamingException { if (instance == null) { instance = new EJBHomeFactory(); } return instance; } public Object lookup(String jndiName) throws NamingException { Object obj = new Object(); obj = context.lookup(jndiName); return obj; } } 其中,Tool.java的文件內容如下: Java代碼 import java.util.Hashtable;     import javax.naming.Context;   import javax.naming.InitialContext;   import javax.naming.NamingException;     public class Tool {       @SuppressWarnings("unchecked")       public static InitialContext getInitialContext() throws NamingException {           Hashtable environment = new Hashtable();           environment.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");           environment.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");           environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");           return new InitialContext(environment);       }   }  import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; public class Tool { @SuppressWarnings("unchecked") public static InitialContext getInitialContext() throws NamingException { Hashtable environment = new Hashtable(); environment.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); environment.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); environment.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099"); return new InitialContext(environment); } } 然后這樣調用: Java代碼 EJBHomeFactory f = EJBHomeFactory.getInstance();   Object o = f.lookup(remote);  EJBHomeFactory f = EJBHomeFactory.getInstance(); Object o = f.lookup(remote); 這樣就可以保證只初始化一次上下文實例,節省大量的時間。 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 锦屏县| 耿马| 新绛县| 光泽县| 许昌市| 罗平县| 财经| 巴林左旗| 辉南县| 饶河县| 通江县| 霍城县| 满城县| 深州市| 安福县| 双柏县| 涿鹿县| 左贡县| 方山县| 桃园县| 石门县| 岳阳县| 桓台县| 大英县| 原阳县| 松溪县| 灵璧县| 三亚市| 南充市| 西林县| 台南市| 延安市| 历史| 霍州市| 墨竹工卡县| 丹棱县| 雷波县| 扎赉特旗| 嵊州市| 西峡县| 定安县|