隨筆-95  評論-31  文章-10  trackbacks-0
          osgi本來就是基于插件的模塊化開發,如果要放在web容器下運行,它提供了一個ServletBrige.class類(名字記不太清了),比如在web.xml配置Servlet的name以及實現類為這個ServletBrige類,還有一些初始化的參數,這些參數名稱是固定的,可以反編譯這個ServletBrige類查看,那么web容器啟動的時候,就能加載osgi,但是為什么要這樣做?為什么不直接建立個web項目直接在web容器運行豈不是好?
          如果按照這種方式,那么要獲取web容器替我們初始化好的東西比如JNDI、數據源、JMS連接工廠等等就會有問題,因為osgi的類加載器是每個工程有自己的類加載器(osgi玩的不深,查了些資料貌似是這樣說),如果要獲取web容器配置的東西,那么要使用如下方式:
          Thread current = Thread.currentThread();
                  ClassLoader old 
          = current.getContextClassLoader(); //獲得當前線程的類加載器
                  try{
                  current.setContextClassLoader(ServletBrige.
          class.getClassLoader());//將類加載器換成web.xml里面的servletBrige類(這個類名記不清楚~),這樣就可以獲取web容器初始化好的內容
                  InitialContext context = new InitialContext(); //這一步new InitialContext()的時候才不會報異常,才能獲取web容器的內容
                  context.lookup("jms/datasource);
                  }
          catch(Exception e){
                      
                  }
          finally{
                      current.setContextClassLoader(old); 
          //操作結束后,將類加載器換回來
                  }
          但是采用上面這一步獲取數據源是沒有問題的,但是采用上面的方式獲取jms連接工廠就會報錯,具體錯誤信息是無法強制類型轉換,最后搞了好久,反編譯看過了,最后類型一模一樣仍然無法強制類型轉換,(websphere6.1里面的jms以及隊列配置沒有任何問題)。
          所以后來,不用這種方式,采用直接給new InitialContext(Props);的方式獲取,代碼如下:
          Properties props = new Properties();
                  props.put(Context.INITIAL_CONTEXT_FACTORY, 
          "xxxxx");//名字記不清楚了,這兩個是was工廠寫死的,明天看下代碼補上
                  props.put(Context.PROVIDER_URL, "iiop://localhost:2809");//這里面的url也基本上寫死的,里面的2809端口號是was的應用程序服務器 > server1 > 端口里面的BOOTSTRAP_ADDRESS值
              
                  InitialContext context 
          = new InitialContext(props);
          //        接著就可以獲取jms的jndi了
          用這種方式需要was的包,具體如下(家里安裝的是was7):
          IBM\WebSphere\AppServer\runtimes\com.ibm.ws.admin.client_7.0.0.jar
          IBM\WebSphere\AppServer\runtimes\com.ibm.ws.webservices.thinclient_7.0.0.jar
          \IBM\WebSphere\AppServer\plugins\com.ibm.ws.runtime.jar
          還有幾個類 明天補上











          posted on 2012-07-25 00:51 朔望魔刃 閱讀(466) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 北辰区| 海原县| 出国| 朝阳县| 凌源市| 清徐县| 辽宁省| 盐源县| 普宁市| 永川市| 潮州市| 长沙市| 汝阳县| 舞阳县| 德兴市| 宁阳县| 临桂县| 吕梁市| 河津市| 伊春市| 阳原县| 阳西县| 长治市| 屏山县| 乐亭县| 凤庆县| 阳原县| 宁国市| 同心县| 锡林浩特市| 宁强县| 秦皇岛市| 郴州市| 堆龙德庆县| 长治市| 如皋市| 杭州市| 保定市| 灵丘县| 久治县| 长武县|