原文地址:http://wxg6203.iteye.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); 这样就可以保证只初始化一次上下文实例,节省大量的时间。 

转载于:https://www.cnblogs.com/liunanjava/p/4246964.html

InitialContext和lookup(转)相关推荐

  1. InitialContext和lookup

    http://wxg6203.iteye.com/blog/680830 最近因为工作需要开始学习Ejb3,遇到了一个让我很郁闷的事情,做一下小小的总结--小心new InitialContext() ...

  2. InitialContext与lookup

    Context initial = new InitialContext(); Object objref = initial.lookup("java:comp/env/ejb/Simpl ...

  3. 【转】InitialContext与lookup

    Context initial = new InitialContext(); Object objref = initial.lookup("java:comp/env/ejb/Simpl ...

  4. 每一次new InitialContext()方法花费大概100毫秒到200毫秒之间,而每一次lookup()大概要花10毫秒到30毫秒之间

    最近因为工作需要开始学习Ejb3,遇到了一个让我很郁闷的事情,做一下小小的总结--小心new InitialContext(). 在做客户端的时候,发现连接服务器,搜索数据库,然后返回结果集.每一次执 ...

  5. Liferay Portal Json Web Service 反序列化漏洞(CVE-2020-7961)

    之前在CODE WHITE上发布了一篇关于Liferay Portal JSON Web Service RCE的漏洞,之前是小伙伴在处理这个漏洞,后面自己也去看了.Liferay Portal对于J ...

  6. JMS : Java Message Service (Java消息服务)之一 [转]

    为什么80%的码农都做不了架构师?>>>    1 引言 1.1 编写目的 本文作为B2bi项目中开源产品JORAM的使用指导文档,旨在帮助项目组人员方便明了的进行JMS模块的详细设 ...

  7. jboss ejb_使用JBoss AS 7进行SSL加密的EJB调用

    jboss ejb 加密客户端和服务器之间的通信可为您的系统提供改进的安全性和隐私保护. 这可能是客户的一项重要要求,尤其是在客户端或服务器需要在不受保护的网络中工作时. 本文向您展示了如何在JBos ...

  8. 使用JBoss AS 7进行SSL加密的EJB调用

    加密客户端和服务器之间的通信可为您的系统提供改进的安全性和隐私保护. 这可能是客户的一项重要要求,尤其是在客户端或服务器需要在不受保护的网络中工作时. 本文向您展示了如何在JBoss AS 7中设置S ...

  9. testNG入门详解

    TestNG 的注释: @DataProvider @ExpectedExceptions @Factory @Test @Parameters <suite name="Parame ...

最新文章

  1. python模拟高并发_Python基于gevent实现高并发代码实例
  2. java设计模式建造_Java设计模式——建造模式(Builder Pattern)
  3. mysql2012用户名_SQL Server 登录名、服务器角色、用户名和数据库角色 --- 解释
  4. AutoMapper的介绍与使用(二)
  5. 一个对oi选手的感想
  6. 伸缩Kubernetes到2500个节点中遇到的问题和解决方法
  7. 如何让研发薪酬更具有吸引力?华为、阿里、腾讯的方法值得借鉴
  8. 【STM32F407开发板用户手册】第2章 STM32F407的开发环境搭建
  9. JS监听安卓软键盘删除键
  10. windows安全中心(windows defender)对下载内容报毒解决方案
  11. 极好的六个开源数据挖掘工具
  12. Vj程序设计复杂模拟题训练
  13. iOS开发关于“发送原图”功能问题的记录
  14. 如何简单的抓取网站数据
  15. 捷联惯导中的姿态更新
  16. 4个基本不等式的公式高中_不等式链(高中4个基本不等式链推导)
  17. 一位阿里导师给大学生的忠告
  18. 爬虫搜索并下载网易云歌曲
  19. 【总结】Android 应用测试总结
  20. CSS-精灵图片的使用(从一张图片中截图指定位置图标)

热门文章

  1. 魅族搭载鸿蒙的机型,魅族宣布接入鸿蒙,但你可能要失望了....
  2. Python深度学习-U1:什么是深度学习
  3. 服务器的80端口和443端口的区别是什么?
  4. Unity制作RPG游戏——碰撞检测
  5. netty源码解析(三)recycler
  6. netty Recycler对象回收
  7. 【复习笔记】电分-第五章-电力系统无功功率和电压调整
  8. 【2021年9月小峰子发给我的聊天】
  9. 疯狂Android讲义(第四版)——绪论
  10. 某银行项目224次升级新人礼、权益、越推越有礼需求梳理@20201214