InitialContext和lookup(转)
原文地址: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); 这样就可以保证只初始化一次上下文实例,节省大量的时间。
InitialContext和lookup(转)的更多相关文章
- InitialContext和lookup
http://wxg6203.iteye.com/blog/680830 最近因为工作需要开始学习Ejb3,遇到了一个让我很郁闷的事情,做一下小小的总结——小心new InitialContext() ...
- InitialContext与lookup
Context initial = new InitialContext(); Object objref = initial.lookup("java:comp/env/ejb/Simpl ...
- Jboss7.1 local EJB lookup problem
We are trying to lookup for an Local EJB in JBoss7.1, but we get an ClassCast Exception. This local ...
- Class loading in JBoss AS 7--官方文档
Class loading in AS7 is considerably different to previous versions of JBoss AS. Class loading is ba ...
- 浅谈JNDI的使用
原文:http://www.weicoop.com/web/article/52.html 关于什么是JNDI的概念这里不做解释,本文作为初学者根据所了解到内容做些总结,主要内容如下: 1.JNDI使 ...
- JNDI support differences between Tibco EMS and ActiveMQ
Introduction Recently our team was working on Veracity Quick Start sprint, when I was trying to migr ...
- 再说JNDI
说到JNDI,即熟悉又陌生,熟悉在常常使用,如EJB3.0中的@EJB注入,底层实现即是JNDI的方式:喜闻乐见的: Context ctx=new InitialContext(); Object ...
- java_web学习(12)JDBC
数据持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的 ...
- Java命名和目录接口——JNDI
JNDI即Java命名和目录接口(JavaNaming and Directory Interface),它属于J2EE规范范畴,是J2EE的核心技术之一,提供了一组接口.类和关于命名空间的概念.JD ...
随机推荐
- Hibernate与MyBatis的对比总结
最近做了一个Hibernate与MyBatis的对比总结,希望大家指出不对之处. 第一章 Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出 ...
- Python3使用setuptools
旧版的setuptools已经不能用于Python3上了,国外有大神fork出了另一分支distribute,它可以支持Python3: 1 2 3 4 5 6 7 #下载 wget http ...
- 支付宝支付-常用支付API详解(查询、退款、提现等)-转
所有的接口支持沙盒环境的测试 1.前言 前面几篇文件详细介绍了 支付宝提现.扫码支付.条码支付.Wap支付.App支付 支付宝支付-提现到个人支付宝 支付宝支付-扫码支付 支付宝支付-刷卡支付(条码支 ...
- druid连接数据库加解密
<bean id="dataSource" class="cn.zsmy.palmdoctor.utils.DecryptDruidSource" ini ...
- pytest文档25-conftest.py作用范围
前言 一个测试工程下是可以有多个conftest.py的文件,一般在工程根目录放一个conftest.py起到全局作用. 在不同的测试子目录也可以放conftest.py,作用范围只在该层级以及以下目 ...
- Selenium2+python自动化36-判断元素存在
前言 最近有很多小伙伴在问如何判断一个元素是否存在,这个方法在selenium里面是没有的,需要自己写咯. 元素不存在的话,操作元素会报错,或者元素有多个,不唯一的时候也会报错.本篇介绍两种判断元素存 ...
- joel 相关
1. stack overflow , http://blog.jobbole.com/102810/, stack overflow 提问也是一门学问. 2. tello 类似于 leangoo,一 ...
- Easing圆环动画
Easing圆环动画 效果 源码 https://github.com/YouXianMing/Animations // // CircleView.h // YXMWeather // // Cr ...
- jquery 判断元素是否存在于数组中
要判断数组中是否包含某个元素,从原理来来说,就是遍历整个数组,然后判断是否相等 可以使用Jquery提供的方法: $.inArray("元素(字符串)",数组名称) 进行判断 ,当 ...
- Coursera课程《Python数据结构》中课件
You can access the Google Drive containing all of the current and in-progress lecture slides for thi ...