HelloWorld 善戰(zhàn)者,求之于勢,不責(zé)于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯(lián)系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks

           

           EJB client調(diào)用EJB3 (轉(zhuǎn))

          當(dāng)你的EJB3deploy to jboss的情況下,ejb client調(diào)用EJB3分兩種情況:

          1)      發(fā)布在jbossweb app作為client來調(diào)用EJB

          EJB和調(diào)用EJBWEB 應(yīng)用都發(fā)布在Jboss 集成環(huán)境下。在Jboss下發(fā)布WEB 應(yīng)用,需要把WEB 應(yīng)用打包成war 文件。另外在此環(huán)境下調(diào)用EJB 不需要把EJB 的接口類放入/WEB-INF/classes/目錄中,否則在調(diào)用Stateful Bean 就會發(fā)生類型沖突,引發(fā)下面的例外

          java.lang.ClassCastException: $Proxy84

          org.apache.jsp.StatefulBeanTest_jsp._jspService(org.apache.jsp.StatefulBeanTest_jsp:55)

          如果EJB和調(diào)用EJBWEB 應(yīng)用都發(fā)布在Jboss 集成環(huán)境下,那么EJBLocalRemote接口都可以被調(diào)用

          發(fā)布在Jboss 下的客戶端不需要明確設(shè)置JNDI 訪問的上下文環(huán)境,可以直接通過

          InitialContext ctx = new InitialContext()

          獲得上下文環(huán)境,容器會自動賦給InitialContext 正確的環(huán)境,例如:

          InitialContext ctx = new InitialContext();//客戶端和jboss運(yùn)行在同一個jvm,不需要傳入props

          HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

          如果硬給InitialContext 設(shè)置了訪問屬性,反而會帶來不可移植的問題,因為你的應(yīng)用有可能部署在weblogic 等應(yīng)用服務(wù)器。(本教程考慮到部分同學(xué)可能需要在獨(dú)立的J2se 中調(diào)用EJB,為了教學(xué)的方便,把訪問屬性都設(shè)上了,這樣不管在jbossj2se 或獨(dú)立tomcat,都能獲得正確的InitialContext

          2)      在單獨(dú)的TomcatJ2SE(如junit test)中調(diào)用EJB

          在正式的生產(chǎn)環(huán)境下,大部分調(diào)用EJB 的客戶端可能是單獨(dú)的Tomcat Resin。下面介紹如何在單獨(dú)的Tomcat服務(wù)器中調(diào)用EJB在單獨(dú)的Tomcat 服務(wù)器中調(diào)用EJB 需要有以下步驟

          A)                    把調(diào)用EJB 所依賴的Jar 包拷貝到tomcat 下的/shared/lib 目錄或WEB 應(yīng)用的WEB-INF/lib,所依賴的Jarjboss 安裝目錄的client目錄下。你可以在eclipse里設(shè)置一個自定義的library “ejb3 library”,把這些jars都添加到該library里,然后在你的EJB project里把“ejb3 library” add to classpath

          B)                     EJB 接口拷貝到應(yīng)用的/WEB-INF/classes/目錄下

          C)                     客戶端訪問EJB 時必須明確設(shè)置InitialContext 環(huán)境屬性,代碼如下:

          Properties props = new Properties();

          props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");

          props.setProperty("java.naming.provider.url", "localhost:1099");

          props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");

          InitialContext ctx = new InitialContext(props);//客戶端和jboss運(yùn)行在同一個jvm,不需要傳入props

          HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

          Tip: 除了上面通過硬編碼設(shè)置環(huán)境屬性的方式外,還可以在應(yīng)用的classpath 下放置一個jndi.properties 文件

          注意:在單獨(dú)的tomcatJ2SE里不能調(diào)用EJB Local 接口,因為他與JBOSS 不在同一個VM 中。J2se中調(diào)用EJB3 同樣需要把上述jar EJB 接口放置在應(yīng)用的類路徑下。(如果是JBoss,則需要把JBoss_HOME/client下的 jbossall-client.jar jnp_client.jar引入到你的工程里)

           


          </script>

          posted on 2008-06-02 15:18 helloworld2008 閱讀(646) 評論(1)  編輯  收藏 所屬分類: java - ejb3

          評論

          # re: EJB client調(diào)用EJB3 (轉(zhuǎn)) http://jalyspace.spaces.live.com/blog/cns!BBFE3C83B4EE964B!223.entry 2008-11-25 15:31
          你太有才啦~  回復(fù)  更多評論
            


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 茂名市| 收藏| 马鞍山市| 扎赉特旗| 灵川县| 印江| 斗六市| 吴江市| 革吉县| 泸溪县| 天等县| 阿鲁科尔沁旗| 永宁县| 江川县| 绥宁县| 修武县| 三门峡市| 鸡西市| 永宁县| 临颍县| 泗洪县| 邯郸市| 西峡县| 改则县| 克拉玛依市| 凤庆县| 顺义区| 五原县| 苍溪县| 伊宁县| 新平| 和静县| 全南县| 西畴县| 中山市| 白水县| 青川县| 玉环县| 繁峙县| 海兴县| 祁连县|