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

          EJB初學日記(2)

          Posted on 2007-09-18 21:28 semovy 閱讀(225) 評論(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包就可以了.
          主站蜘蛛池模板: 上饶市| 探索| 藁城市| 左云县| 明光市| 澄江县| 班戈县| 深泽县| 安新县| 漾濞| 肃北| 新蔡县| 兰溪市| 互助| 江安县| 重庆市| 湖北省| 拜城县| 海阳市| 甘泉县| 新沂市| 武宣县| 通渭县| 丹东市| 泰和县| 资阳市| 莫力| 容城县| 彩票| 车致| 吉木乃县| 呼伦贝尔市| 惠来县| 隆昌县| 海丰县| 垦利县| 二连浩特市| 三原县| 台前县| 宝清县| 安西县|