庄周梦蝶,孰蝶是我,我是孰蝶?一梦至今,蝶我已难分
首页
新随笔
联系
聚合
管理
随笔-280 评论-276 文章-7 trackbacks-0
一个ServiceLocator模式的实现
废话不说,代码说话:
import
javax.naming.
*
;
import
javax.naming.NamingException;
import
javax.rmi.PortableRemoteObject;
import
javax.ejb.EJBHome;
import
javax.ejb.EJBLocalHome;
import
javax.sql.DataSource;
import
java.util.
*
;
import
java.sql.
*
;
/** */
/**
* 实现 service locater 模式,用于由客户端来调用以通过JNDI查
* 找相关的 ejb或是其它服务的入口.
*
*/
public
final
class
ServiceLocater
{
protected
static
ServiceLocater inst
=
new
ServiceLocater();
private
InitialContext ic
=
null
;
private
Map ejbHomeCache
=
null
;
private
Map dataSourceCache
=
null
;
protected
ServiceLocater()
{
try
{
dataSourceCache
=
Collections.synchronizedMap(
new
HashMap());
ejbHomeCache
=
Collections.synchronizedMap(
new
HashMap());
ic
=
new
InitialContext();
}
catch
(Exception e)
{
e.printStackTrace();
}
}
/** */
/**
* 取得 servicelocater的单子实例.
*
*/
synchronized
public
static
ServiceLocater getInstance()
{
return
inst;
}
/** */
/**
*查找并返回一个数据源
*
@param
name String 数据源名称
*
@return
DataSource ,查找不到则抛出异常.
*
@throws
NamingException ,查找不到或是类型不对。
*
*/
private
DataSource lookUpDataSource(String name)
throws
NamingException
{
DataSource tmpDS
=
(DataSource)
this
.dataSourceCache.get(name);
if
(tmpDS
==
null
)
{
try
{
tmpDS
=
(DataSource)
this
.ic.lookup(name);
this
.dataSourceCache.put(name, tmpDS);
}
catch
(NamingException namE)
{
throw
namE;
}
catch
(Exception otherE)
{
throw
new
NamingException(otherE.getMessage());
}
}
return
tmpDS;
}
/** */
/**
* 查找并返回一个远程接口
*
@param
jndiHomeName ebj名字
*
@param
className ejb类名字
*
@return
*
@throws
ServiceLocatorException
*/
public
EJBHome getRemoteHome(String jndiHomeName, Class className)
throws
ServiceLocatorException
{
EJBHome home
=
(EJBHome)
this
.ejbHomeCache.get(jndiHomeName);
if
(home
==
null
)
{
try
{
Object objref
=
ic.lookup(jndiHomeName);
Object obj
=
PortableRemoteObject.narrow(objref, className);
home
=
(EJBHome) obj;
this
.ejbHomeCache.put(jndiHomeName, home);
}
catch
(NamingException ne)
{
throw
new
ServiceLocatorException(ne);
}
catch
(Exception e)
{
throw
new
ServiceLocatorException(e);
}
}
return
home;
}
/** */
/**
* 查找并返回一个本地接口
*
@param
jndiHomeName jndiHomeName名字
*
@return
一个本地接口
*
@throws
ServiceLocatorException
*/
public
EJBLocalHome getLocalHome(String jndiHomeName)
throws
ServiceLocatorException
{
EJBLocalHome home
=
null
;
try
{
home
=
(EJBLocalHome) ic.lookup(jndiHomeName);
}
catch
(NamingException ne)
{
throw
new
ServiceLocatorException(ne);
}
catch
(Exception e)
{
throw
new
ServiceLocatorException(e);
}
return
home;
}
/** */
/**
*查找一个数据源,并取得一个连接.
*
@param
name String 数据源名称
*
@return
DataSource ,查找不到则抛出异常.
*
@throws
NamingException ,查找不到或是类型不对。
*
*/
public
Connection getConnection(String DataSourceJNDIName)
throws
SQLException
{
try
{
Connection conn
=
this
.lookUpDataSource(DataSourceJNDIName).getConnection();
conn.setAutoCommit(
false
);
//
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
return
conn;
}
catch
(Exception e)
{
e.printStackTrace();
throw
new
SQLException(e.getMessage());
}
}
}
posted on 2007-02-06 11:49
dennis
阅读(281)
评论(0)
编辑
收藏
所属分类:
设计模式
新闻频道
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子技术博客
相关文章:
Hadoop分布式文件系统:架构和设计要点
模块的设计(书摘)
singleton迷恋
The Future Of the Software Development
谈NullObject模式
JUnit源码分析(四)——从Decorator模式说起
JUnit源码分析 (三)——Template Method模式
JUnit源码分析(二)——观察者模式
JUnit源码分析(一)——Command模式和Composite模式
创建型模式摘记
热爱编程,从事Java、Ruby开发,关注java、ruby、web开发、高性能网络编程和FP等方面,有兴趣的一起探讨,我的gmail:
输入您的搜索字词
提交搜索表单
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(12)
给我留言
查看公开留言
查看私人留言
随笔分类
C#历程(13)
erlang(12)
java(65)
linux & C(19)
my open-source(21)
Prolog(2)
web开发(13)
动态语言 & rails(47)
工作流(5)
数据库技术(13)
数据结构与算法(19)
涂鸦(66)
源码解读(15)
计算机科学与基础(32)
设计模式(16)
软件工程(2)
随笔档案
2008年7月 (1)
2008年6月 (10)
2008年5月 (11)
2008年4月 (13)
2008年3月 (10)
2008年2月 (12)
2008年1月 (10)
2007年12月 (2)
2007年11月 (6)
2007年10月 (11)
2007年9月 (19)
2007年8月 (11)
2007年7月 (20)
2007年6月 (16)
2007年5月 (16)
2007年4月 (25)
2007年3月 (35)
2007年2月 (52)
文章分类
java(6)
ruby & rails(1)
友情链接
BIGN's blog
云之远
坏男孩
锋爷的blog
偶像
资源类
canonical
非常有思考价值的blog
javaeye
Max的struts2.0
swfheader
TopLanguage
一帮大流氓
rails的学习站点
梦想风暴
电子书下载
负暄琐话
最新随笔
1. 看博不说话
2. 值的纪念的一天
3. TCP的TIME_WAIT状态
4. 偶像
5. 关于加班
6. NIO的SelectableChannel关闭的一个问题
7. java语言的演化——读JavaOne ppt笔记
8. JRuby中调用java带可变参数的方法
9. 理发二三事
10. Hadoop分布式文件系统:架构和设计要点
搜索
积分与排名
积分 - 162666
排名 - 37
最新评论
1. re: 关于加班
@屹砾
下班不走难道在那住么?
--懒人
2. re: ruby DBI安装使用指南
没有出现中文乱码的问题嘛?
--唐远见
3. re: 申请了两域名
评论内容较长,点击标题查看
--屹砾
4. re: 关于加班
听闻有领导对我们部门不满,说我们部门总是下班后人都走光了:)
领导就不想让人下班吧?下班之后不走人,感觉还是蛮不正常的。
老胡说要“构建节约型社会,要节约公司的电”。
--屹砾
5. re: 理发二三事
确实,我也是这样,最长的一次四个月,定点理发,一般来说只要店不撤,人不走,基本上就是一直在一家店里理发。
--屹砾
阅读排行榜
1. javascript之DOM技术(一)(4445)
2. 图文并茂——使用xfire编写webservice,并通过C#调用(3714)
3. javascript之DOM技术(二)(3299)
4. 用osworkflow写一个请假例子(3126)
5. 体验了一把JavaFx(3108)
评论排行榜
1. 用osworkflow写一个请假例子(26)
2. 图文并茂——使用xfire编写webservice,并通过C#调用(13)
3. 用递归计算阶乘咋不行呢?(10)
4. Hadoop分布式文件系统:架构和设计要点(9)
5. 关于加班(9)
60天内阅读排行
1. Hadoop分布式文件系统:架构和设计要点(2152)
2. java语言的演化——读JavaOne ppt笔记(1430)
3. 两段代码的比较(1259)
4. NIO的SelectableChannel关闭的一个问题(1201)
5. Insect Workflow(1134)