莊周夢蝶
生活、程序、未來
::
首頁
:: :: ::
聚合
::
管理
一個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
主站蜘蛛池模板:
亚洲Av永久无码精品三区在线
|
国产日韩一区二区三免费高清
|
亚洲熟妇无码爱v在线观看
|
亚洲日本韩国在线
|
毛片免费观看网站
|
在线观看www日本免费网站
|
国产99久久久久久免费看
|
亚洲天然素人无码专区
|
亚洲视频网站在线观看
|
亚洲国产日韩在线视频
|
亚洲视频一区二区
|
国产男女猛烈无遮档免费视频网站
|
国产99久久亚洲综合精品
|
亚洲av乱码一区二区三区香蕉
|
久热综合在线亚洲精品
|
国产亚洲大尺度无码无码专线
|
国产在线观看免费视频播放器
|
成人黄页网站免费观看大全
|
a拍拍男女免费看全片
|
91短视频在线免费观看
|
午夜免费福利视频
|
国产在线一区二区综合免费视频
|
亚洲一区无码精品色
|
免费一级特黄特色大片在线
|
日本一道在线日本一道高清不卡免费
|
亚洲一区二区免费视频
|
8090在线观看免费观看
|
99re免费视频
|
99久久精品日本一区二区免费
|
2021在线永久免费视频
|
国产又大又粗又长免费视频
|
亚洲人成在线免费观看
|
黄色成人免费网站
|
99re热免费精品视频观看
|
免费无码又黄又爽又刺激
|
免费无码精品黄AV电影
|
黄网址在线永久免费观看
|
亚洲综合一区国产精品
|
亚洲精品456人成在线
|
国产精品高清视亚洲一区二区
|
亚洲精品天堂无码中文字幕
|