莊周夢蝶
生活、程序、未來
::
首頁
:: :: ::
聚合
::
管理
一個(gè)ServiceLocator模式的實(shí)現(xiàn)
Posted on 2007-02-06 11:49
dennis
閱讀(3401)
評(píng)論(0)
編輯
收藏
所屬分類:
模式與架構(gòu)
?廢話不說,代碼說話:
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.
*
;
/**?*/
/**
?*??實(shí)現(xiàn)?service?locater?模式,用于由客戶端來調(diào)用以通過JNDI查
?*??找相關(guān)的?ejb或是其它服務(wù)的入口.
?*?
*/
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的單子實(shí)例.
???*?
*/
??
synchronized
?
public
?
static
?ServiceLocater?getInstance()?
{
????
return
?inst;
??}
??
/**?*/
/**
???*查找并返回一個(gè)數(shù)據(jù)源
???*?
@param
?name?String?數(shù)據(jù)源名稱
???*?
@return
?DataSource ,查找不到則拋出異常.
???*?
@throws
?NamingException?,查找不到或是類型不對(duì)。
???*?
*/
??
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;
??}
??
/**?*/
/**
???*?查找并返回一個(gè)遠(yuǎn)程接口
???*?
@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;
??}
??
/**?*/
/**
???*?查找并返回一個(gè)本地接口
???*?
@param
?jndiHomeName??jndiHomeName名字
???*?
@return
?一個(gè)本地接口
???*?
@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;
??}
??
/**?*/
/**
???*查找一個(gè)數(shù)據(jù)源,并取得一個(gè)連接.
???*?
@param
?name?String?數(shù)據(jù)源名稱
???*?
@return
?DataSource ,查找不到則拋出異常.
???*?
@throws
?NamingException?,查找不到或是類型不對(duì)。
???*?
*/
??
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());
????}
??}
}
新用戶注冊
刷新評(píng)論列表
只有注冊用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
如何熟悉一個(gè)開源項(xiàng)目?
寫DSL的步驟
做基礎(chǔ)產(chǎn)品的體會(huì)
Push or pull?
SEDA架構(gòu)筆記
代碼自我審查的一些體會(huì)
Yanf4j設(shè)計(jì)的兩張圖片
《Unix編程藝術(shù)》重讀筆記(三)
《Unix編程藝術(shù)》重讀筆記(二)
《Unix編程藝術(shù)》重讀筆記(一)
Powered by:
BlogJava
Copyright © dennis
公告
關(guān)于我
隨筆分類
Android相關(guān)
C#歷程(13)
Clojure(43)
erlang(16)
Hadoop與分布式(16)
java(176)
linux & C(25)
my open-source(100)
node.js(5)
unix網(wǎng)絡(luò)編程(6)
web開發(fā)(13)
動(dòng)態(tài)語言(81)
小毅同學(xué)二三事(1)
工作流(5)
工作隨筆(9)
工具和命令(4)
數(shù)據(jù)庫技術(shù)(14)
數(shù)據(jù)結(jié)構(gòu)與算法(26)
模式與架構(gòu)(30)
涂鴉(141)
源碼解讀(28)
移動(dòng)開發(fā)(1)
計(jì)算機(jī)科學(xué)與基礎(chǔ)(56)
軟件工程(6)
友情鏈接
About me
Clojure中文技術(shù)社區(qū)
xmemcached
多背一公斤
夢想風(fēng)暴
淘寶Java中間件
美味書簽
美味書簽團(tuán)隊(duì)博客
美味愛讀
邢紅瑞的blog
阿寶的blog
阿歡的blog
最新隨筆
1.?博客搬遷
2.?Another URL Shortener using NodeJS
3.?Clojure中文專業(yè)技術(shù)社區(qū)
4.?Ring.velocity:render velocity templates for ring in clojure
5.?Clojure筆記:用好type hint
6.?Clojure世界:利用HouseMD診斷clojure
7.?分布式消息中間件Metaq發(fā)布1.4.3
8.?如何熟悉一個(gè)開源項(xiàng)目?
9.?Emacs + Clojure配置的幾個(gè)Tip
10.?clj.monitor : monitoring applications in clojure based on SSH
搜索
最新評(píng)論
1.?vitamind28448
評(píng)論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--Good post. I learn something totally new and chall
2.?re: Aviator——讓表達(dá)式飛起來
很好用,剛用到最近的一個(gè)項(xiàng)目中
--welcomezhang
3.?re: Java字符串的最大長度
寫得很好
--zzz
4.?clashofclanshack1155
Very clean site, thanks for this post.
--Very clean site, thanks for this post.
5.?binaryrobot89773
評(píng)論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--Howdy! I simply wish to offer you a big thumbs up
主站蜘蛛池模板:
yy一级毛片免费视频
|
亚洲砖码砖专无区2023
|
国产一级婬片A视频免费观看
|
日韩成人在线免费视频
|
日韩伦理片电影在线免费观看
|
67pao强力打造67194在线午夜亚洲
|
成人av片无码免费天天看
|
亚洲一区精品伊人久久伊人
|
污污视频网站免费观看
|
亚洲国产午夜中文字幕精品黄网站
|
色噜噜狠狠色综合免费视频
|
亚洲va中文字幕无码
|
四虎影视久久久免费观看
|
亚洲精品国产V片在线观看
|
一区二区免费电影
|
亚洲色欲色欲www在线丝
|
国产免费一区二区视频
|
国产亚洲福利在线视频
|
成人在线视频免费
|
国产精品亚洲AV三区
|
在线观看免费播放av片
|
亚洲最大的成网4438
|
久久久高清免费视频
|
亚洲成在人线在线播放无码
|
亚洲AV无码一区二三区
|
最近免费中文字幕中文高清
|
久久精品国产亚洲AV香蕉
|
久久午夜免费视频
|
免费人成在线观看播放a
|
亚洲女初尝黑人巨高清
|
91福利免费视频
|
亚洲aⅴ无码专区在线观看
|
日韩va亚洲va欧洲va国产
|
久久国产乱子免费精品
|
亚洲午夜理论片在线观看
|
免费在线观看亚洲
|
国产情侣久久久久aⅴ免费
|
亚洲 暴爽 AV人人爽日日碰
|
久99精品视频在线观看婷亚洲片国产一区一级在线
|
国产一区二区三区免费观在线
|
亚洲an日韩专区在线
|