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 还没想好名 阅读(414) 评论(1)  编辑  收藏

FeedBack:
# mfmzgdsm
2008-04-06 05:53 | mfmzgdsm
gcirlvnl http://akeuwmec.com iblajyik wjdsqjqb  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: