wayne

          #

          EJB3 (2)

          一個(gè)會(huì)話bean即可以遠(yuǎn)程訪問(wèn),也可以本地訪問(wèn),盡管這種現(xiàn)象不常見(jiàn)。
          我們先定義遠(yuǎn)程接口:

          @Remote
          public interface HelloRemote {

              String sayHi(String name);

              String sayByeBye(String name);
              
          }

          接著定義本地接口:
          @Local
          public interface HelloLocal {

              String sayBye(String name);
              
          }

          然后編寫(xiě)一個(gè)會(huì)話bean同時(shí)實(shí)現(xiàn)兩個(gè)接口:
          @Stateless
          public class HelloBean implements HelloRemote, HelloLocal {

              
          public String sayHi(String name) {
                  
          return "Hi " + name;
              }

              
              
          public String sayBye(String name) {
                  
          return "Bye " + name;
              }

              
              
          public String sayByeBye(String name) {
                  
          return sayBye(name);
              }

              
          }

          那么,這還是一個(gè)無(wú)狀態(tài)會(huì)話bean,不過(guò)即可以遠(yuǎn)程訪問(wèn),也可以本地訪問(wèn)。
          <%
                      InitialContext ctx 
          = new InitialContext();
                      HelloRemote helloBean 
          = (HelloRemote)ctx.lookup(HelloRemote.class.getName());
                      out.println(helloBean.sayHi(
          "Tom"));
                      out.println(
          "<br>" + helloBean.sayByeBye("Tom"));
          %>

          遠(yuǎn)程訪問(wèn)只能獲得遠(yuǎn)程接口的代理,然后調(diào)用遠(yuǎn)程業(yè)務(wù)方法。在遠(yuǎn)程客戶端是無(wú)法獲得本地接口的引用,更別說(shuō)訪問(wèn)本地方法了。

          posted @ 2008-09-12 21:29 waynemao 閱讀(140) | 評(píng)論 (0)編輯 收藏

          EJB3 (1)

          新建一個(gè)EJB模塊
          先寫(xiě)一個(gè)最簡(jiǎn)單的無(wú)狀態(tài)Session Bean,首先定義一個(gè)遠(yuǎn)程接口:

          @Remote
          public interface HelloRemote {

              String sayHi(String name);
              
          }
          用@Remote標(biāo)注表明這是一個(gè)遠(yuǎn)程接口,在接口里聲明一些業(yè)務(wù)方法。接著定義一個(gè)會(huì)話Bean實(shí)現(xiàn)該接口:
          @Stateless
          public class HelloBean implements HelloRemote {

              
          public String sayHi(String name) {
                  
          return "Hi " + name;
              }

              
          }

          @Stateless標(biāo)注表明這是一個(gè)無(wú)狀態(tài)會(huì)話Bean,完成了這個(gè)簡(jiǎn)單的Demo后,打包部署到服務(wù)器上。接著我們來(lái)測(cè)試這個(gè)會(huì)話Bean,新建一個(gè)WEB模塊,我們利用這個(gè)web應(yīng)用來(lái)遠(yuǎn)程調(diào)用會(huì)話Bean。我們可以在web模塊里新建一個(gè)Servlet:
          public class HelloServlet extends HttpServlet {
              @EJB
              
          private HelloRemote helloBean;
          在Servlet里定義了一個(gè)成員變量,@EJB標(biāo)注表明遠(yuǎn)程接口的代理將依賴注入到成員變量,在doGet或doPost方法里可以直接使用該代理調(diào)用會(huì)話Bean的業(yè)務(wù)方法:
          PrintWriter out = response.getWriter();
                  
          try {
                     out.println(helloBean.sayHi(
          "Tom"));
                  }
           finally 
                      out.close();
                  }
          JSP卻有所不同,這里不能使用@EJB標(biāo)注,要使用傳統(tǒng)的JNDI lookup方式:
          <%
                      InitialContext ctx 
          = new InitialContext();
                      HelloRemote helloBean 
          = (HelloRemote)ctx.lookup(HelloRemote.class.getName());
                      out.println(helloBean.sayHi(
          "Tom"));
          %>

          這個(gè)測(cè)試用web模塊已經(jīng)完成,將WEB模塊打包部署后即可以運(yùn)行
          不過(guò),如果我們自己指定了會(huì)話Bean的JNDI名,那么以上的測(cè)試代碼將發(fā)生異常,例如:
          @Stateless(mappedName="hello")
          public class HelloBean implements HelloRemote {

              
          public String sayHi(String name) {
                  
          return "Hi " + name;
              }

              
          }

          這里我們指定了會(huì)話bean的JNDI名為"hello",更改后的EJB模塊需要重新部署,還要更改相應(yīng)的Servlet和Jsp中的代碼:
          @EJB(mappedName="hello")
              
          private HelloRemote helloBean;

          Servlet已經(jīng)更改了,只有一點(diǎn)點(diǎn)不同。
          <%
                      InitialContext ctx 
          = new InitialContext();
                      HelloRemote helloBean 
          = (HelloRemote)ctx.lookup("hello");
                      out.println(helloBean.sayHi(
          "Tom"));
                  
          %>

          Jsp也做了小小的改動(dòng),如此更新后重新部署WEB模塊,測(cè)試代碼即可順利運(yùn)行

          posted @ 2008-09-12 20:49 waynemao 閱讀(113) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共2頁(yè): 上一頁(yè) 1 2 

          My Links

          Blog Stats

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          default

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 长乐市| 惠水县| 宜兴市| 家居| 兰溪市| 应用必备| 花莲市| 巴中市| 梅河口市| 蓬溪县| 石河子市| 永新县| 连城县| 夏邑县| 化州市| 望城县| 阳江市| 慈利县| 德昌县| 洱源县| 平乐县| 无锡市| 临漳县| 定边县| 鹿邑县| 娱乐| 那坡县| 寿阳县| 中西区| 卢氏县| 彩票| 英山县| 八宿县| 天镇县| 景洪市| 清苑县| 瓦房店市| 汶上县| 琼海市| 遵义县| 玉门市|