狼愛上貍

          我胡漢三又回來了

          第一個EJB3.0范例

          第一個EJB3.0范例
          2005-07-19? ?來源:zdnet ?作者:zdnet
          2004年7月,EJB專家委員會公布了新的EJB3.0規(guī)范草本。2004年10月7號,JBoss發(fā)布了支持EJB3.0的第一個預覽版本jboss-EJB-3.0_Preview_1。2004年11月5號,JBoss發(fā)布了支持EJB3.0的第二個預覽版本jboss-EJB-3.0_Preview_2。

          我們來完成第一個EJB3.0程序。

          搭配環(huán)境

          實現EJB3.0的環(huán)境要求使用JBoss的jboss-4.0.1RC1(已經有了RC2)和JDK1.5及更高版本。jboss-4.0.1RC1可以在www.jboss.org上下載,JDK1.5可以在java.sun.com得到。我們在windows環(huán)境下使用,所以下載相應windows版本。

          首先安裝JDK。下載jdk-1_5_0_01-windows-i586-p.exe,安裝至相應目錄,我安裝至D:\Program Files\Java\jdk1.5.0_01。然后配置環(huán)境。在我的電腦->屬性->高級->環(huán)境變量->系統(tǒng)變量中,設置JAVA_HOME=D:\Program Files\Java\jdk1.5.0_01,Path中將D:\Program Files\Java\jdk1.5.0_01\bin;寫在最前。

          下載jboss-4.0.1RC1.zip,直接解壓縮到D:\jboss4下。相同方法設置JBOSS_HOME=D:\jboss4。

          由于用到ant,所以還需要取得Apache Ant相關執(zhí)行程序。在Apache服務器,Weblogic或Jbuilder等安裝目錄下可以找到,最好版本較高。我使用JBuilder2005下的,路徑為D:\Borland\JBuilder2005\thirdparty\ant\bin;仍然設置在系統(tǒng)變量的Path中,寫在JDK路徑之后。(注意:如果ant版本較低將編譯時報錯,我的為Apache Ant version 1.6.2 compiled on July 16 2004)。

          ? ? ? 還要用到jboss-EJB-3.0_Preview_2包,可以在www.jboss.org得到。解壓后包括docs,lib兩個文件夾和RELEASE_NOTES.txt和INSTALL.html兩個說明文件。Docs文件夾中有主頁文件index.html,包括了EJB3.0的規(guī)范草本ejb-3_0-edr-spec.pdf,指南文件夾tutorial(包括范例說明文件和源文件),配置說明文件夾reference和Hibernate3的文件夾。Lib文件夾是部署EJB3.0環(huán)境所需要的ejb3-interceptors-aop.xml和ejb3.deployer。

          ? ? ? 運行簡單的EJB3.0范例,我們只需要將ejb3-interceptors-aop.xml和ejb3.deployer文件夾拷貝到D:\jboss4\server\all\deploy下即可。

          ? ?我們將范例部署在all下,所以運行JBoss時我們使用

          ? ?Run –c all

          ? ?啟動JBoss后我們就完成了環(huán)境的配置。

          編寫程序

          ? ?Docs文件夾下提供了許多EJB3.0各個方面的范例。我們以無狀態(tài)bean為例運行范例。

          ? ?無狀態(tài)bean范例在stateless文件夾下。包括了存放源文件的src和運行配置文件build.xml,JNDI配置文件jndi.properties和說明文件stateless.html。

          ? ?源文件包括Calculator.java ,CalculatorBean.java ,CalculatorLocal.java, CalculatorRemote.java 和Client.java。

          ? ?在EJB3.0環(huán)境下編寫無狀態(tài)bean時很容易的。所有的bean類型就是homeless所以只需要創(chuàng)建一個bean類和實現至少一個接口。

          在CalculatorBean.java我們聲明一個無狀態(tài)bean只需要聲明為 @Stateless,EJB容器就會部署這個類為無狀態(tài)bean。

          import javax.ejb.Stateless;

          @Stateless

          public class CalculatorBean implements CalculatorRemote, CalculatorLocal

          {

          ? public int add(int x, int y)

          ? {

          ? ? ?return x + y;

          ? }

          ? public int subtract(int x, int y)

          ? {

          ? ? ?return x - y;

          ? }

          }

          這個CalculatorBean實現了兩個接口。一個是remote,一個是local?,F在在EJB3.0中你可以僅僅實現一個remote,一個local或兩個都實現。



          在CalculatorRemote.java定義Calculator bean 的remote接口你僅僅需要標識其為@Remote。

          import javax.ejb.Remote;



          @Remote

          public interface CalculatorRemote extends Calculator

          {

          }

          同樣在CalculatorLocal.java你也僅僅需要標識一個@Local就可以定義Calculator bean 的local接口

          import javax.ejb.Local;



          @Local

          public interface CalculatorLocal extends Calculator

          {

          }

          Calculator bean需要兩個JNDI的綁定分別對應@Remote 和@Local接口。默認的,JBoss使用接口的全名作為JNDI的名字。這使得你可以容易的調用CalculatorRemote.class.getName()來查找一個JNDI名字對應的引用。

          在Client.java中你可以發(fā)現是使用remote接口的全名來查找無狀態(tài)bean,也可以注意到并不存在HOME接口。

          import org.jboss.tutorial.stateless.bean.Calculator;

          import org.jboss.tutorial.stateless.bean.CalculatorRemote;

          import javax.naming.InitialContext;



          public class Client

          {

          ? public static void main(String[] args) throws Exception

          ? {

          ? ? ?InitialContext ctx = new InitialContext();

          ? ? ?Calculator calculator = (Calculator) ctx.lookup(CalculatorRemote.class.getName());



          ? ? ?System.out.println("1 + 1 = " + calculator.add(1, 1));

          ? ? ?System.out.println("1 - 1 = " + calculator.subtract(1, 1));

          ? }

          }

          現在你可以直接執(zhí)行這個無狀態(tài)bean了。

          運行結果

          ? 這個實例使用ant機制運行,所以需要配置build.xml。不同的build.xml中需要設置不同的run參數中的classname:

          ? <target name="run" depends="ejbjar">

          ? ? ?<java classname="org.jboss.tutorial.stateless.client.Client" fork="yes" dir=".">

          ? ? ? ? <classpath refid="classpath"/>

          ? ? ?</java>

          ? </target>

          JNDI的配置相同jndi.properties:

          java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

          java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

          java.naming.provider.url=localhost



          ? ?打開命令運行窗口,到范例目錄下,如

          D:\jboss-EJB-3.0_Preview_2\docs\tutorial\stateless,鍵入命令ant編譯文件。編譯成功會顯示:BUILD SUCCESSFUL。

          成功編譯后會目錄下會多一個build目錄,為編譯后的class文件和tutorial.ejb3的文件。

          然后運行 ant run,執(zhí)行程序,我們可以看到:

          Buildfile: build.xml

          prepare:

          compile:

          ejbjar:

          run:

          ? ? [java] 2005-01-12 15:07:25,296 INFO org.jboss.remoting.InvokerRegistry[main

          ] - Failed to load soap remoting transport: org/apache/axis/AxisFault

          ? ? [java] 1 + 1 = 2

          ? ? [java] 1 - 1 = 0

          BUILD SUCCESSFUL

          Total time: 3 seconds



          其中的信息

          [java] 2005-01-12 15:07:25,296 INFO org.jboss.remoting.InvokerRegistry[main

          ] - Failed to load soap remoting transport: org/apache/axis/AxisFault

          是JBoss的一個bug,我們可以不去關心。他們會在下一版本改進。



          至此,我完成了一個EJB3.0的范例。我們可以發(fā)現EJB3.0帶給我們的驚喜。我們不必再去配置大量繁瑣的部署描述和復雜的接口。相信更多的EJB3.0的驚喜在等待著我們去發(fā)掘。

          posted on 2006-06-15 06:12 狼愛上貍 閱讀(345) 評論(0)  編輯  收藏 所屬分類: J2EE


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


          網站導航:
           
          主站蜘蛛池模板: 聊城市| 华宁县| 渑池县| 神农架林区| 诸暨市| 北票市| 平陆县| 沂源县| 霸州市| 惠水县| 宿松县| 泸州市| 墨竹工卡县| 马公市| 岳西县| 淮阳县| 宜兰县| 通河县| 宿迁市| 鄄城县| 江陵县| 钦州市| 祁阳县| 靖远县| 朝阳市| 藁城市| 凤冈县| 阳信县| 河曲县| 玉门市| 黎平县| 建始县| 营口市| 老河口市| 和顺县| 胶州市| 定西市| 扎鲁特旗| 柳江县| 巴林左旗| 宁远县|