posts - 63,comments - 71,trackbacks - 0
          隨著Java 5.0的發布,Java的一些新的語言特點也開始被大家所關注,如Annotation、GenericType等。由于現在Java在企業級軟件應用市場里面占據統治地位,所以新的語言特征對于原來的J2EE的也有一些非常大的變化。相對于原來的EJB2的一些批評,如開發速度緩慢,難以測試等,一些優秀的公司也開始利用Java語言的新特征來解決。其中Annotation對于Ejb的促進作用還是比較顯著的。接觸過原來的EJB2開發的人來說,對于那些復雜的Xml描述文件和復雜的類別關系相比都印象非常的深刻。
          ? 作為現在市場占有率最高的Java EE的應用服務器JBoss,對于最新的EJB3提出了自己的實現,試用了一下,感覺只有一個字:爽。同時JBoss還對于原來沒有提高EJB容器的 Web服務器,如Tomcat,還提供了自己的嵌入式的實現,也就是說,Tomcat也可以用EJB了。看來自從JBoss轉業為一個商業公司以后,其技術水平也已經成為一個世界級的Java開發公司了。同時JBoss的EJB除了可以利用Annotation來實現EJB以外,還可以利用deloy- descriptor把一個普通的Bean來轉化為一個EJB,而不需要在源程序里面加入Annotation,這個功能還是比較厲害的。其利用Jacc 來改變你的class功能,自動在部屬階段加入了Annotation來實現EJB3。到這里,不禁佩服Java現在的發展程度,可以有很多種方法來改變已經編譯的class文件,如cgilib、jasssit,aspectJ、SpringAOP等,同時不禁想起那幾天研究的antlr(一個類似與 YACC的語言開發工具),唉,看來國外對于Java的應用真是太出神入化了。
          ?? 用JBoss來開發EJB3,必須下載JBoss的EJB3開發工具,把他加入到JBoss里面(最好是最新版本,現在(2006-2-7)是JBoss4.0.3SP1.
          (一)安裝步驟如下:
          ?? 1、下載JBoss-ejb-3.0
          ?? 2、解壓文件。
          ?? 3、拷貝lib目錄下面的xml文件和jboss-aop-jdk50.deployer目錄到jboss-4.0.x/server/all/deploy下面
          ?? 4、拷貝lib目錄下面的jboss-xb.jar到jboss-4.0.x/server/all/lib。
          ?? 5、刪除jboss-4.0.x/server/all/deploy下面的jboss-hibernate.deployer和jboss-aop.deployer目錄。
          ?? 6、用run.bat -c all來啟動就可以了。
          ?? 由于JBoss良好的微內核結構,所以對于EJB3的支持還是比較方便的。
          (二)實際開發
          ?? 同原來的開發Web程序一樣,把開發完成的東西拷貝到jboss-4.0.x/server/all/deploy下面,是一個jar文件,不過后綴名必須是.ejb3,這樣
          JBoss會自動發現并加載,如果沒有出現錯誤提示,一般就是成功的。
          ?? 下面,開發一個Stateless類型的EJB吧
          ?? 在所有的EJB3.0規范中定義的EJB,都不必實現Home接口。
          ?? 1、定義接口:
          ?? package com.gm.ejb3;
          ? import javax.ejb.Remote;
          ?
          ?? @Remote????
          ?? public interface ICounter
          ?? {
          ??? public int add(int i);
          ??? public int getNumber();
          ?? }
          ?? 注意@Remote這個Annotation,它表明這是一個遠程接口,同意@Local表明是一個本地接口。
          ?? 2、定義實現:
          ?? package com.gm.ejb3;
          ? import javax.ejb.Stateless;
          ?
          ?? @Stateless????
          ?? public class GCounter implements ICounter
          ?? {
          ?? ?private int num=0;
          ??? public int add(int i)
          ??? {
          ??? ?num+=i;
          ??? }
          ??? public int getNumber()
          ??? {
          ??? ?return num;
          ??? }
          ?? }
          ?? 3、Ant文件build.xml
          ?? ?<?xml version="1.0"?>
          ??<!-- ======================================================================
          ???? 2006-2-7 8:53:16???????????????????????????????????????????????????????

          ???? ejb3???
          ???? A JBoss ejb3
          ??????????????????
          ???? Administrator???????????????????????????????????????????????????????????????
          ???? ====================================================================== -->
          ??<project name="ejb3" default="ejbjar">
          ???? <description>
          ???????????? A JBoss ejb3
          ???? </description>
          ??? <property name="jboss.home" value="jboss目錄"/>
          ???<property name="src.dir" value="src"/>
          ???<property name="build.dir" value="build"/>
          ???<property name="build.class.dir" value="${build.dir}/classes"/>
          ??
          ???<path id="project.class.path">??
          ???? <fileset dir="${jboss.home}/lib">
          ?????????? <include name="**/*.jar"/>
          ??????? </fileset>
          ??
          ??????? <fileset dir="${jboss.home}/server/all/lib">
          ?????????? <include name="**/*.jar"/>
          ??????? </fileset>
          ??
          ??????? <fileset dir="${jboss.home}/server/all/deploy/ejb3.deployer">
          ?????????? <include name="*.jar"/>
          ??????? </fileset>
          ??
          ??????? <fileset dir="${jboss.home}/server/all/deploy/jboss-aop-jdk50.deployer">
          ?????????? <include name="*.jar"/>
          ??????? </fileset>
          ??
          ??????? <pathelement location="${build.class.dir}"/>
          ???</path>
          ??
          ??
          ????? <!-- =================================
          ??????????? target: init?????????????
          ?????????? ================================= -->
          ????? <target name="init" description="--> description">
          ????? ?<mkdir dir="${build.dir}"/>???
          ????? ?<mkdir dir="${build.class.dir}"/>
          ????? </target>
          ??
          ??
          ????? <!-- =================================
          ??????????? target: compile?????????????
          ?????????? ================================= -->
          ????? <target name="compile" depends="init" description="--> description">
          ????? ?<javac srcdir="${src.dir}"
          ?????????? destdir="${build.class.dir}"
          ?????????? debug="on">
          ????? ?<classpath refid="project.class.path"/>
          ????</javac>???
          ????? </target>
          ??
          ??
          ????? <!-- =================================
          ??????????? target: ejbjar?????????????
          ?????????? ================================= -->
          ????? <target name="ejbjar" depends="compile" description="--> A JBoss ejb3">
          ?????? ?<jar jarfile="${build.dir}/GCounter.ejb3">
          ?????<fileset dir="${build.class.dir}" id="allclass">
          ???????? <include name="**/**.class"/>
          ??????<exclude name="**/**Client.class"/>
          ?????</fileset>
          ?????? ??
          ?????? ?? <fileset dir=".">
          ?????????????? <include name="META-INF/*.xml"/>
          ??????????? </fileset>
          ?????? ?</jar>
          ????? ?<copy file="${build.dir}/GCounter.ejb3" todir="${jboss.home}/server/all/deploy"/>
          ????? </target>
          ???
          ???
          ????? <!-- =================================
          ??????????? target: runClient?????????????
          ?????????? ================================= -->
          ????? <target name="runClient" description="--> description">
          ????????? <java classname="com.gm.ejb3.Client" fork="yes" dir=".">
          ????????? ?<classpath refid="project.class.path"/>
          ????????? </java>
          ????? </target>
          ??
          ????? <!-- - - - - - - - - - - - - - - - - -
          ??????????? target: depends?????????????????????
          ?????????? - - - - - - - - - - - - - - - - - -->
          ????? <target name="depends">
          ????? </target>
          ?
          ???</project>
          ???
          ???4、寫一個Client來調用:
          ???需要一個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
          ????? client文件的內容:
          ???package com.gm.ejb3;


          ???import javax.naming.Context;
          ???import javax.naming.InitialContext;
          ???import javax.naming.NamingException;
          ???
          ???public class Client {
          ???
          ????/**
          ???? * @param args
          ???? */
          ????public static void main(String[] args) {
          ?????// TODO Auto-generated method stub
          ?????try {???
          ??????Context ctx=new InitialContext();
          ??????ICounter counter=(ICounter) ctx.lookup(ICounter.class.getName()); //缺省情況下,JNDI名稱就是你的接口名
          ??????
          ??????counter.Add(100);
          ??????System.out.println("Now Count is "+counter.getNumber());
          ??????
          ??????counter.Add(50);
          ??????System.out.println("Now Count is "+counter.getNumber());
          ?????} catch (NamingException e) {
          ??????// TODO Auto-generated catch block
          ??????e.printStackTrace();
          ?????}
          ????}
          ???
          ???}
          ???5、測試一下,用ant runClient。
          ???感覺還是比較輕松吧。以前開發過EJB的,一定有一種非常放松的感覺,太爽了。世界本來就是應該就是這么簡單啊!
          ???同時JBoss的EJB3開發包里面有教學文件,非常的全面,可以從那里開始EJB3的開發旅程。

          posted on 2006-11-13 11:34 還沒想好名 閱讀(418) 評論(1)  編輯  收藏

          FeedBack:
          # mfmzgdsm
          2008-04-06 05:53 | mfmzgdsm
          gcirlvnl http://akeuwmec.com iblajyik wjdsqjqb  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 漳州市| 靖远县| 孝义市| 乌兰察布市| 涡阳县| 湖口县| 信丰县| 闽侯县| 许昌市| 长丰县| 文登市| 襄汾县| 孟村| 黎平县| 抚顺市| 麻栗坡县| 吉隆县| 辉县市| 哈巴河县| 沁阳市| 麦盖提县| 綦江县| 肇东市| 辰溪县| 湘西| 穆棱市| 双柏县| 阿瓦提县| 肇东市| 淅川县| 桐柏县| 中山市| 广东省| 江安县| 南溪县| 江口县| 武城县| 武宁县| 商洛市| 洛隆县| 宜城市|