JBOSS环境下进行EJB开发

来源:互联网 发布:淘宝助理批量删除宝贝 编辑:程序博客网 时间:2024/05/21 20:25
前言

前言

 

  本文是为想在JBOSS环境下进行EJB开发的读者而写的,在阅读本文之前,你最好对EJB有一个基本了解。

 

  JBOSS是一个开放源码的免费EJB服务器,它实现了其它J2EE所规定的大多数功能,现在sun公司已经把JBOSS作为J2EE1.4的标准实现服务器了,本文就带领大家从Jboss3.2.6的安装开始,一直到开发出一个完整的”hello,world”的ejb为止。

 

  JBOSS的安装与启动

 

  在安装JBOSS之前,首先要确定你已经安装了jdk1.3或以上版本,由于JBOSS不像weblogic等其它应用服务器捆绑了JDK,因此JBOSS非要jdk的支持才能运行。然后在 http://www.jboss.org网站上下载一个jboss的发行版(我下载的是jboss-3.2.6.zip),在本文中我使用的其稳定的发行版JBOSS3.2.6 (集成了tomcat4.1),需要附带一句的是tomcatapache基金会旗下著名的开源jsp/servlet服务器,如果要更多的了解tomcat,请访问http://jakarta.apache.org 以获得更详细的信息。

 

  当你把jboss-3.2.6.zip下载之后,下一步就是将它解压缩,如果你是在windows上,可以用winzipwinrar;如果是在linux下,就用unzip命令,以我自己为例,假设我将它解压到了如下目录

 

c:/ jboss-3.2.6

 

  相对于weblogicwebspherej2ee服务器来说,JBOSS的启动是简单得出乎意料,如果你是windows用户,只需要进入c:/ jboss-3.2.6/bin下面,输入run.bat命令,JBOSS就跑起来啦;如果是linux用户的话,只需要进入c:/ jboss-3.2.6/bin下面,输入run.sh,那么JBOSS也同样运行。怎么样?是挺简单的吧?

当你输入run.batrun.sh后,你会发现屏幕上会不断地滚动一些提示信息,过大约1分钟之后(依赖于你机器的配置,我的是P4 1.7G128M),提示信息就会停止滚动。(注意:如果你是在windows下,那么请让这个DOS窗口一直保持这种状态,千万不可将其中止!)等到它自己停止。

这样,JBOSS就已经处于运行状态了。和其它J2EE服务器一样,JBOSS也提供了一个WEB方式控制台,使用方法是在IE浏览器中输入http://127.0.0.1:8080/web-console/,看见欢迎界面,就成功了。

编写第一个EJB:”hello,world

 

  下面我们正式开始EJB编程。在编写我们的第一个EJB之前,你应该对EJB有一个大致的了解,如果没有的话,建议你先到网上找一些这方面的文章来看,否则你将无法理解下面要讲述的内容。

 

  远程接口

 

  远程接口是指对于客户端而言所能看到了调用接口

 

//HelloWorld.java

package sample;

/*这是一个远程接口,客户端调用这个接口来使真正的ejb工作*/

public interface HelloWorld extendsjavax.ejb.EJBObject

{

 public Stringhello() throws java.rmi.RemoteException;

}

 

  Home接口

 

  我们可以把Home接口看做是一个制造EJB的工厂,Home接口告诉EJB容器:“嗨,我的客户要我生成一个EJB,现在我把这个任务交给你啦!”

 

//HelloWorldHome.java

package sample;

/*Home接口告诉EJB容器怎样生成或销毁EJB的实例*/

public interface HelloWorldHome extendsjavax.ejb.EJBHome

{

 HelloWorldcreate() throws java.rmi.RemoteException,javax.ejb.CreateException;

}

 

  EJB的实现

 

  这里才是真正的EJB的实现

 

//HelloWorldBean.java

package sample;

import javax.ejb.SessionContext;

/*这个类具体实现的远程接口HelloWorld*/

pubic class HelloWorldBean implementsjavax.ejb.SessionBean

{

 privateSessionContext ctx;

 public voidsetSessionContext(SessionContext ctx)

 {

  this.ctx =ctx;

 }

 pubic voidejbRemove()

 {

  System.out.println(ejbRemove());

 }

 public voidejbActivate()

 {

  System.out.println(ejbActivate());

 }

 public voidejbPassivate()

 {

  System.out.println(ejbPassivate());

 }

 /*hello方法是实际的业务逻辑,它可以在客户端显示“hello,world”这个字符串*/

 public Stringhello()

 {

  System.out.println(hello());

  return hello,world;

 }

}

 

  好了,这个会话EJB的全部代码编写完毕,下一步我们要做的是编写它的部署文件:

 

  ejb-jar.xml

 

?xmlversion="1.0" encoding="UTF-8"?

ejb-jar

 <descriptionJBoss Hello World Application/description

 <display-nameHello World EJB/display-name

 <enterprise-beans

 <session

  <ejb-nameHello/ejb-name

  <homesample.HelloHome/home

  <remotesample.Hello/remote

  <ejb-classsample.HelloBean/ejb-class

  <session-typeStateless/session-type

  <transaction-typeBean/transaction-type

 </session

/enterprise-beans

/ejb-jar

这样我们就完成了一个简单的会话EJB的编写,但其实JBOSS还提供了一个额外的配置文件:JBoss.xml,利用它可以对JBOSS服务器进行更多的定制,但由于本例实在是太简单了,因此我们可以将它省略不写。

 

  虽然我们完成了这个会话EJB的编写,但还有最后的一步工作要做:打包。首先我们进入当前项目的根目录:

 

cd F:/project/jboss-tutorial

 

  然后执行jar命令将所有的类及ejb-jar.xml打包:

 

jar cf HelloWorld.jar sample META-INF

 

  这时你会发现,在当前目录下多了一个名为HelloWorld.jar的文件,这就是我们的最终成品。

 

  部署我们的EJB

 

  部署EJBJBOSS中是一件非常容易的事,你只需简单将HelloWorld.jar拷贝到c:/ jboss-3.2.6/server/default/deploy目录下就可以了。

 

 这时,你可以切换到JBOSS运行的那个DOS窗口下,你会发现屏幕上会新出现如下提示信息:

 

15:09:21,184 INFO [MainDeployer] Startingdeployment of

package: file:/F:/jboss

-3.2.3/server/default/deploy/HelloWorld.jar

15:09:21,324 INFO [EjbModule] Creating

15:09:21,354 INFO [EjbModule] DeployingHelloWorld

15:09:21,464 INFO [EjbModule] Created

15:09:21,484 INFO [EjbModule] Starting

15:09:21,555 INFO [EjbModule] Started

15:09:21,555 INFO [MainDeployer]Successfully completed

deployment of package:file:/F:/jboss-3.2.6/server/default/deploy/HelloWorld.jar

 

  客户端代码

 

  如果没有客户端代码的话,那么EJB对我们来说几乎毫无用处。以下我们将编写客户端代码来调用这个HelloWorld

 

  如果你在同一台机器上运行客户端代码和JBOSS服务器的话,那以下代码无须任何修改就可以运行,但你的客户端在另一台机器上运行的话,那你要将源码中的相应行改变一下:

 

/*以下是客户端源码中需要修改的行*/

env.put(Context.PROVIDER_URL,"localhost:1099");

 

  假设EJB部署在一台IP地址为192.168.0.1的机器上,那么就应该将以上源码改为如下:

 

/*以下是客户端源码中修改后的行*/

env.put(Context.PROVIDER_URL,"192.168.0.1:1099");

 

/*HelloWorldClient.java*/

package sample;

import javax.naming.Context;

import javax.naming.InitialContext;

import java.util.Hashtable;

public class HelloWorldClient

{

 public staticvoid main( String [] args )

 {

  Hashtableenv = new Hashtable();

  env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");

  env.put(Context.PROVIDER_URL,"localhost:1099");

  env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");

  try

  {

   Context ctx= new InitialContext(env);

   Object obj= ctx.lookup( "HelloWorld" );

   HelloWorldHomehome =(HelloWorldHome)javax.rmi.PortableRemoteObject.narrow(

obj, HelloWorldHome.class );

   HelloWorldhelloWorld = home.create();

   System.out.println(helloWorld.hello());

   helloWorld.remove();

  }

  catch (Exception e )

  {

   e.printStackTrace();

   System.out.println("Exception: " + e.getMessage() );

  }

 }

}

 好了,下面我就就可以编译并运行这个客户端了,如果你在编译的时候JVM报告找不到某些类的话,则可能是你没有将j2ee.jar这个包放在CLASSPATH这个路径变量中。客户端的执行结果虽然只是简单的在屏幕上打印一行“hello,world”,但它是来自于另一个世界

——JBOSS的声音!