莊周夢蝶
生活、程序、未來
::
首頁
:: :: ::
聚合
::
管理
一個ServiceLocator模式的實現
Posted on 2007-02-06 11:49
dennis
閱讀(3395)
評論(0)
編輯
收藏
所屬分類:
模式與架構
?廢話不說,代碼說話:
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());
????}
??}
}
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
如何熟悉一個開源項目?
寫DSL的步驟
做基礎產品的體會
Push or pull?
SEDA架構筆記
代碼自我審查的一些體會
Yanf4j設計的兩張圖片
《Unix編程藝術》重讀筆記(三)
《Unix編程藝術》重讀筆記(二)
《Unix編程藝術》重讀筆記(一)
Powered by:
BlogJava
Copyright © dennis
公告
關于我
隨筆分類
Android相關
C#歷程(13)
Clojure(43)
erlang(16)
Hadoop與分布式(16)
java(176)
linux & C(25)
my open-source(100)
node.js(5)
unix網絡編程(6)
web開發(13)
動態語言(81)
小毅同學二三事(1)
工作流(5)
工作隨筆(9)
工具和命令(4)
數據庫技術(14)
數據結構與算法(26)
模式與架構(30)
涂鴉(141)
源碼解讀(28)
移動開發(1)
計算機科學與基礎(56)
軟件工程(6)
友情鏈接
About me
Clojure中文技術社區
xmemcached
多背一公斤
夢想風暴
淘寶Java中間件
美味書簽
美味書簽團隊博客
美味愛讀
邢紅瑞的blog
阿寶的blog
阿歡的blog
最新隨筆
1.?博客搬遷
2.?Another URL Shortener using NodeJS
3.?Clojure中文專業技術社區
4.?Ring.velocity:render velocity templates for ring in clojure
5.?Clojure筆記:用好type hint
6.?Clojure世界:利用HouseMD診斷clojure
7.?分布式消息中間件Metaq發布1.4.3
8.?如何熟悉一個開源項目?
9.?Emacs + Clojure配置的幾個Tip
10.?clj.monitor : monitoring applications in clojure based on SSH
搜索
最新評論
1.?vitamind28448
評論內容較長,點擊標題查看
--Good post. I learn something totally new and chall
2.?re: Aviator——讓表達式飛起來
很好用,剛用到最近的一個項目中
--welcomezhang
3.?re: Java字符串的最大長度
寫得很好
--zzz
4.?clashofclanshack1155
Very clean site, thanks for this post.
--Very clean site, thanks for this post.
5.?binaryrobot89773
評論內容較長,點擊標題查看
--Howdy! I simply wish to offer you a big thumbs up
主站蜘蛛池模板:
一级毛片成人免费看免费不卡
|
特级毛片A级毛片100免费播放
|
久久精品熟女亚洲av麻豆
|
777爽死你无码免费看一二区
|
亚洲情综合五月天
|
a级毛片黄免费a级毛片
|
亚洲欧洲无码AV电影在线观看
|
中文字幕在线免费播放
|
亚洲大尺度无码专区尤物
|
91精品国产免费
|
亚洲欧洲日本国产
|
免费精品国产自产拍在线观看图片
|
亚洲AV一二三区成人影片
|
扒开双腿猛进入爽爽免费视频
|
亚洲成a人无码亚洲成av无码
|
色吊丝永久在线观看最新免费
|
欧美色欧美亚洲另类二区
|
国产成人免费福利网站
|
免费无毒a网站在线观看
|
亚洲精品一级无码中文字幕
|
1000部无遮挡拍拍拍免费视频观看
|
老司机亚洲精品影院
|
美女视频黄免费亚洲
|
亚洲日韩中文字幕无码一区
|
日本免费人成黄页在线观看视频
|
美女黄色免费网站
|
亚洲人成色7777在线观看
|
**aaaaa毛片免费
|
亚洲av中文无码字幕色不卡
|
亚洲国产av无码精品
|
久久久久久久岛国免费播放
|
国产人成亚洲第一网站在线播放
|
国产成人精品免费直播
|
精品亚洲永久免费精品
|
亚洲粉嫩美白在线
|
狠狠亚洲婷婷综合色香五月排名
|
日韩av无码久久精品免费
|
亚洲精品天堂成人片AV在线播放
|
国产成人亚洲精品影院
|
亚洲中文无码永久免费
|
七次郎成人免费线路视频
|