posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          隨筆分類

          隨筆檔案(1)

          收藏夾(18)

          搜索

          •  

          最新評論

          EJB初學日記(2)

          Posted on 2007-09-18 21:28 semovy 閱讀(227) 評論(0)  編輯  收藏 所屬分類: EJB
          其實在學習EJB之前,就聽說過EJB,有人說他很復雜,也有人說一般般而已,但是幾乎所有的人都說EJB3.0確實是簡單了許多.
          一般講起JAVA EE,一般人都認為是應用在網頁里面的,甚至有人把JAVA EE和JSP等同起來,要知道,JAVA EE是一個很龐大的結構,而JSP只是里面一部份中的一部份而已.

          今天我就把JAVA EE的EJB應用到JAVA SE中看一看,在JBOSS里面布署好EJB,然后在swing里面調用EJB,并且觀察一些特性.

          首先我們先定義一個EJB的接口,接口里面放上我們需要遠程調用的方法
          在定義接口的時候,可以給它加上@Remote或者@Local注釋,表示是遠程還是本地,也可以什么都不加,就是一個很普通的接口,然后在實現的時候加上相應的注釋,我們就采取第二種,也就是接口的定義里面什么注釋都沒有


          package test1;
          /**
           * This is the business interface for Hello enterprise bean.
           
          */
          public interface HelloLocal {
              
          public String helloFromLocal(String s);
          }


          package test1;

          import javax.ejb.Remote;


          /**
           * This is the business interface for Hello enterprise bean.
           
          */
          public interface HelloRemote {
              
          public String helloFromRemote(String s);
          }

          以上是兩個接口, 一開始是擬做本地調用和遠程調用的兩個接口,后來我想,能不能讓一個接口既是本地接口也是遠程接口呢,在JBOSS是可以的.實現如下
          /*
           * HelloBean.java
           *
           * Created on 2007年9月6日, 下午6:02
           *
           * To change this template, choose Tools | Template Manager
           * and open the template in the editor.
           
          */

          package test1;

          import javax.ejb.Local;
          import javax.ejb.Remote;
          import javax.ejb.Stateless;
          import javax.swing.JOptionPane;

          /**
           *
           * 
          @author hadeslee
           
          */
          @Stateless
          @Remote({HelloLocal.
          class,HelloRemote.class})
          @Local({HelloLocal.
          class,HelloRemote.class})
          public class HelloBean implements test1.HelloRemote, test1.HelloLocal {
              
          private int i=0;
              
          /** Creates a new instance of HelloBean */
              
          public HelloBean() {
              }

              
          public String helloFromRemote(String s) {
                  i
          ++;
                  System.out.println(
          ""+i+"次調用");
                  System.out.println(
          "來自遠程的問侯:"+s);
                  
          return "遠程返回:"+s+":"+i;
              }

              
          public String helloFromLocal(String s) {
                  i
          ++;
                  System.out.println(
          ""+i+"次調用");
                  JOptionPane.showMessageDialog(
          null,"來自本地的問侯:"+s); 
                  System.out.println(
          "來自本地的問侯:"+s);
                  
          return "本地返回:"+s+":"+i;
              }
              
          }

          在實現的類里面@Remote@Local表示它們要實現的接口,我把兩個都放進去了,在NetBeans里面,會有錯誤的提示,提示內容如下:
          Bean使用以下類做為本地和遠程業務接口:test1.HelloLocal
          但是我編譯以后一樣是可以布署的,不知道別的EJB容器是否可以這樣做.jboss確實是可以的

          好了,現在我們都定義好了,馬上把它們布署到JBOSS里面去吧.

          布署完了之后,就開始開發我們的應用程序了,因為這個調用只涉及到一個方法,我們就不用去定義一個界面了.
          我們簡單的程序如下.
          /*
           * TestHello.java
           *
           * Created on 2007年9月6日, 下午6:06
           *
           * To change this template, choose Tools | Template Manager
           * and open the template in the editor.
           
          */

          package testejb;

          import java.util.Properties;
          import javax.naming.InitialContext;
          import test1.HelloLocal;
          import test1.HelloRemote;

          /**
           *
           * 
          @author hadeslee
           
          */
          public class TestHello {
              
              
          /** Creates a new instance of TestHello */
              
          public TestHello() {
              }
              
          public static void main(String[] args) throws Exception{
                  
                  Properties props 
          = new Properties();
                  
          //這些是JBOSS的初始化一些參數
                  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;
                  ctx 
          = new InitialContext(props);
                  
          //找到遠程接口,這時其實也可以轉成HelloLocal
                  HelloRemote hello = (HelloRemote) ctx.lookup("HelloBean/remote");
                  System.out.println(hello.helloFromRemote(
          "千里冰封"));
                  
          //可以直接轉型過來
                  HelloLocal local=(HelloLocal)hello;
                  System.out.println(local.helloFromLocal(
          "hadeslee"));
                  
              }
          }

          這個時候,我們就可以看到,會有一個 JOptionPane彈出來,點了確定之后,客戶端這邊才會有輸出,JOpitonPane出來之后不一定在最前端顯示,所以可能需要找一下,就是因為這個問題搞得我糊涂了一下,我找了半天找不到,后來一個一個窗口的最小化,終于發現了JOptionPane在那里.

          為了能運行客戶端,你需要把如下的JAR包放到運行客戶端的classpath里面,如果是用NetBeans開發的話,加入一個庫可以了,庫里面包含的JAR文件如下:
          [jboss安裝目錄]\client\commons-logging.jar
          [jboss安裝目錄]\client\ concurrent.jar
          [jboss安裝目錄]\client\ ejb3-persistence.jar
          [jboss安裝目錄]\client\ hibernate-annotations.jar
          [jboss安裝目錄]\client\ hibernate-client.jar
          [jboss安裝目錄]\client\ javassist.jar
          [jboss安裝目錄]\client\ jboss-annotations-ejb3.jar
          [jboss安裝目錄]\client\ jboss-aop-jdk50-client.jar
          [jboss安裝目錄]\client\ jboss-aspect-jdk50-client.jar
          [jboss安裝目錄]\client\jboss-common-client.jar
          [jboss安裝目錄]\client\ jboss-ejb3-client.jar
          [jboss安裝目錄]\client\ jboss-ejb3x.jar
          [jboss安裝目錄]\client\jboss-j2ee.jar
          [jboss安裝目錄]\client\jboss-remoting.jar
          [jboss安裝目錄]\client\jbosssx-client.jar
          [jboss安裝目錄]\client\jboss-transaction-clie
          [jboss安裝目錄]\client\jnp-client.jar
          [jboss安裝目錄]\client\trove.jar
          [jboss安裝目錄]\client\jbossws-client.jar
          [jboss安裝目錄]\client\jboss-jaxws.jar
          [jboss安裝目錄]\client\xmlsec.jar

          這樣的話,就可以把EJB布署在EJB容器里面,而我們可以在任何地方調用它了.只要你在想調用的地方,帶上上面的JAR包就可以了.
          主站蜘蛛池模板: 阜新| 健康| 萍乡市| 达日县| 北川| 神池县| 沙田区| 新龙县| 明星| 永城市| 安康市| 铁岭县| 开江县| 子洲县| 天镇县| 长岛县| 卢氏县| 仁化县| 青川县| 普宁市| 咸丰县| 大渡口区| 湄潭县| 筠连县| 义马市| 夏津县| 沁水县| 民乐县| 中西区| 轮台县| 浦北县| 富裕县| 大关县| 柳河县| 霍城县| 高邮市| 茶陵县| 达尔| 鄂尔多斯市| 罗田县| 阿图什市|