love fish大鹏一曰同风起,扶摇直上九万里

常用链接

统计

积分与排名

friends

link

最新评论

第一个EJB3.0范例(转)

 

2004 7 月, EJB 专家委员会公布了新的 EJB3.0 规范草本。 2004 10 7 号, JBoss 发布了支持 EJB3.0 的第一个预览版本 jboss-EJB-3.0_Preview_1 2004 11 5 号, JBoss 发布了支持 EJB3.0 的第二个预览版本 jboss-EJB-3.0_Preview_2

我们来完成第一个 EJB3.0 程序。

搭配环境

实现 EJB3.0 的环境要求使用 JBoss jboss-4.0.1RC1 (已经有了 RC2 )和 JDK1.5 及更高版本。 jboss-4.0.1RC1 可以在 www.jboss.org 上下载, JDK1.5 可以在 java.sun.com 得到。我们在 windows 环境下使用,所以下载相应 windows 版本。

首先安装 JDK 。下载 jdk-1_5_0_01-windows-i586-p.exe ,安装至相应目录,我安装至 D:\Program Files\Java\jdk1.5.0_01 。然后配置环境。在我的电脑 -> 属性 -> 高级 -> 环境变量 -> 系统变量中,设置 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 相关执行程序。在 Apache 服务器 ,Weblogic Jbuilder 等安装目录下可以找到,最好版本较高。我使用 JBuilder2005 下的,路径为 D:\Borland\JBuilder2005\thirdparty\ant\bin; 仍然设置在系统变量的 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 的规范草本 ejb-3_0-edr-spec.pdf ,指南文件夹 tutorial (包括范例说明文件和源文件),配置说明文件夹 reference Hibernate3 的文件夹。 Lib 文件夹是部署 EJB3.0 环境所需要的 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后我们就完成了环境的配置。

编写程序

    Docs 文件夹下提供了许多EJB3.0各个方面的范例。我们以无状态bean为例运行范例。

    无状态bean范例在stateless文件夹下。包括了存放源文件的src和运行配置文件build.xmlJNDI配置文件jndi.properties和说明文件stateless.html

    源文件包括Calculator.java CalculatorBean.java CalculatorLocal.java CalculatorRemote.java Client.java

    EJB3.0环境下编写无状态bean时很容易的。所有的bean类型就是homeless所以只需要创建一个bean类和实现至少一个接口。

CalculatorBean.java我们声明一个无状态bean只需要声明为 @StatelessEJB容器就会部署这个类为无状态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。现在在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中你可以发现是使用remote接口的全名来查找无状态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));

   }

}

现在你可以直接执行这个无状态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,执行程序,我们可以看到:

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的范例。我们可以发现EJB3.0带给我们的惊喜。我们不必再去配置大量繁琐的部署描述和复杂的接口。相信更多的EJB3.0的惊喜在等待着我们去发掘。

posted on 2006-06-30 11:38 liaojiyong 阅读(365) 评论(0)  编辑  收藏 所属分类: EJB


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


网站导航: