<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    一個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());
    ????}

    ??}


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