莊周夢蝶
生活、程序、未來
::
首頁
:: :: ::
聚合
::
管理
一個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视频全免费网站色窝 美女被cao网站免费看在线看
|
真人无码作爱免费视频
|
手机看片久久国产免费
|
亚洲1区2区3区精华液
|
国产在线98福利播放视频免费
|
校园亚洲春色另类小说合集
|
免费网站看v片在线香蕉
|
亚洲av无码一区二区三区四区
|
日韩伦理片电影在线免费观看
|
亚洲欧美日韩国产成人
|
四虎永久在线精品免费观看地址
|
午夜亚洲国产精品福利
|
中文字幕第一页亚洲
|
免费视频成人手机在线观看网址
|
亚洲国产精品自在在线观看
|
亚洲一区免费视频
|
亚洲色欲啪啪久久WWW综合网
|
国产无遮挡裸体免费视频
|
美女露隐私全部免费直播
|
亚洲中文字幕无码中文字在线
|
久久精品免费视频观看
|
亚洲深深色噜噜狠狠网站
|
在线观看免费a∨网站
|
有色视频在线观看免费高清在线直播
|
337p日本欧洲亚洲大胆裸体艺术
|
久久精品无码专区免费东京热
|
亚洲jizzjizz在线播放久
|
亚洲高清免费视频
|
最近高清中文字幕免费
|
国产精品无码亚洲精品2021
|
亚洲精品无码精品mV在线观看
|
每天更新的免费av片在线观看
|
亚洲一区二区三区高清在线观看
|
亚洲不卡AV影片在线播放
|
99精品视频在线视频免费观看
|
亚洲色精品VR一区区三区
|
亚洲精品99久久久久中文字幕
|
99视频免费播放
|
黄色一级视频免费观看
|