隨筆 - 0, 文章 - 75, 評論 - 0, 引用 - 0
          數據加載中……

          開發EJB的客戶端

          因為EJB屬于業務層,通常它要被客戶端所調用


          客戶端類型可以是:J2SE J2EE J2ME



          才用普通的JAVA類開發客戶端:


          新建 new一個Class 帶有main()方法



          客戶端要調用EJB是要先通過JNDI去尋找EJB的承擔對象


          JNDI是用于訪問命名目錄的API,也是JAVA EE中的規范



          開發EJB的客戶端

          這里編寫的客戶端程序完全可以部署在另外一臺計算機上,只需要修改其中連接的服務器IP地址和啟動JBOSS時綁定相應IP地址即可,這正事EJB的遠程調用特性。
          在37行返回的helloWorld實例對象并不是我們在服務器端編寫的HelloworldBean,而是一個也實現了HelloWorld接口的代理對象,這個代理對象最終遠程調用我們自己編寫的HelloWorldBean,在第37行后加入了一行代碼:System.out.println(helloWorld.getClass().getName());
          即可看到這個代理對象的類名



          當EJB發布到JBOSS時,如果我們沒有為它指定全局JNDI名稱或修改過其默認EJB名稱,JBOSS就會按照默認的命名規則為EJB生成全局JNDI名稱,默認的命名規則如下:


          把EJB應用打包成后綴為*.jar的模塊文件,默認的全局JNDI名稱是:
          本地接口:EJB-CLASS-NAME/local
          遠程接口:EJB-CLASS-NAME/remote
          EJB的接口實現類名(不加包名)
          例:把HelloWorld應用打包成HelloWorld.jar文件,他的遠程接口JNDI名稱是:
          HelloWorldBean/remote



          把EJB作為模塊打包進后綴名*.ear的JAVA
          EE企業應用文件,默認全局JNDI名稱是:
          本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
          遠程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote
          EAR-FILE-BASE-NAME為ear文件的名稱,EJB-CLASS-NAME作為EJB的非限定類名
          例:把HelloWorld應用打包成HelloWorld.ear的企業應用文件,他的遠程接口JNDI名稱是:
          HelloWorld/HelloWorldBean/remote



          ----------------------------------------------------------------


          通過屬性文件,設置JNDI的上下文信息:


          把硬編碼的代碼,放到配置文件中


          Properties props = new Properties();


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


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


          就可以注釋掉了



          在項目src下新建File 名稱為:jndi.properties


          內容:


          java.naming.factory.initial =
          org.jnp.interfaces.NamingContextFactory
          java.naming.provider.url =
          localhost:1099


          保存,啟動JBOSS后,運行客戶端也可執行



          在InitalContext cts = new InitalContext();
          時,其構造方法中默認從類路徑下找jndi.properties文件



          HelloWorld helloWorld = (HelloWorld)cts.lookup("HelloWorldBean/remote");


          這句可能會報錯,解決方案是:


          查看EJB的JNDI


          進入JBOSS的管理后臺 http://localhost:8080/


          開發EJB的客戶端


          點JMX Console,找到jboss,點service = JNDIView


          開發EJB的客戶端


          這個服務提供了一個list()方法,點Invoke按鈕,會列出JBOSS里面的資源


          開發EJB的客戶端
          開發EJB的客戶端


          EJB部署后,生成的JNDI是在全局JNDI中(Global JNDI Namespace)


          開發EJB的客戶端


          在其中找到EJB的JNDI名稱,如果找到了則發布成功



          也有可能是jar包出了問題,重新導jar包

          posted on 2012-04-22 16:08 hantai 閱讀(284) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 揭阳市| 元阳县| 莱州市| 临猗县| 绥滨县| 司法| 五华县| 多伦县| 樟树市| 武宣县| 四平市| 垣曲县| 兰溪市| 壤塘县| 崇左市| 百色市| 鱼台县| 邛崃市| 竹溪县| 拉萨市| 阿瓦提县| 交城县| 黑龙江省| 耒阳市| 庆安县| 南京市| 故城县| 南郑县| 保靖县| 邹城市| 调兵山市| 闻喜县| 奎屯市| 灵山县| 浪卡子县| 塔河县| 吴旗县| 韶山市| 三穗县| 望都县| 阿城市|