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

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 衡阳市| 乾安县| 涞源县| 内江市| 辽中县| 常州市| 新昌县| 高尔夫| 天柱县| 双桥区| 惠州市| 娄烦县| 治县。| 岢岚县| 贵州省| 景东| 长岛县| 水城县| 阿拉善右旗| 高邑县| 上栗县| 陇川县| 阿拉尔市| 依兰县| 石狮市| 万州区| 南溪县| 麟游县| 岳池县| 旬邑县| 甘泉县| 榕江县| 革吉县| 若尔盖县| 靖远县| 安康市| 吴川市| 饶河县| 华阴市| 通许县| 疏附县|