前言
本文是为想在jboss环境下进行ejb开发的读者而写的,在阅读本文之前,你最好对ejb有一个基本了解。
jboss是一个开放源码的免费ejb服务器,它实现了其它j2ee所规定的大多数功能,现在sun公司已经把jboss作为j2ee1.4的标准实现服务器了,本文就带领大家从jboss3.2.6的安装开始,一直到开发出一个完整的”hello,world”的ejb为止。
jboss的安装与启动
如果你是第一次使用jboss,你一定会感到很沮丧,因为它虽然是开放源码,并可以免费下载,但是它的文档或技术培训却是收费的,而且对于国人来说高不可及(几天的培训大约要10000美元,文档也要几十至几百美一份)!如果你试图在网上找一些关于jboss下简单入门的文章,可只是那么寥寥可数的几篇,而且很少有菜鸟级的文章。相反,对其核心设计等高深理论性的文章倒是居多,这样反倒让你越看越糊涂。因此,本文的目的就是:让你的jboss尽快地跑起来,并马上可以在其之上开发出简单的ejb!
在安装jboss之前,首先要确定你已经安装了jdk1.3或以上版本,由于jboss不像weblogic等其它应用服务器捆绑了jdk,因此jboss非要jdk的支持才能运行。然后在 http://www.jboss.org网站上下载一个jboss的发行版(我下载的是jboss-3.2.6.zip),在本文中我使用的其稳定的发行版jboss3.2.6 (集成了tomcat4.1),需要附带一句的是tomcat是apache基金会旗下著名的开源jsp/servlet服务器,如果要更多的了解tomcat,请访问http://jakarta.apache.org 以获得更详细的信息。
当你把jboss-3.2.6.zip下载之后,下一步就是将它解压缩,如果你是在windows上,可以用winzip或winrar;如果是在linux下,就用unzip命令,以我自己为例,假设我将它解压到了如下目录
c:/ jboss-3.2.6
相对于weblogic,websphere等j2ee服务器来说,jboss的启动是简单得出乎意料,如果你是windows用户,只需要进入c:/ jboss-3.2.6/bin下面,输入run.bat命令,jboss就跑起来啦;如果是linux用户的话,只需要进入c:/ jboss-3.2.6/bin下面,输入run.sh,那么jboss也同样运行。怎么样?是挺简单的吧?

当你输入run.bat或run.sh后,你会发现屏幕上会不断地滚动一些提示信息,过大约1分钟之后(依赖于你机器的配置,我的是p4 1.7g,128m),提示信息就会停止滚动,如下图所示:
这样,jboss就已经处于运行状态了。和其它j2ee服务器一样,jboss也提供了一个web方式控制台,使用方法是在ie浏览器中输入http://127.0.0.1:8080/web-console/,这样你就会看到如下图所示的一个控制台:
怎么样?这个界面丝毫不比weblogic的差吧?通过这个控制台,你可以动态地对jboss的服务进行管理和监控。 编写第一个ejb:”hello,world”
下面我们正式开始ejb编程。在编写我们的第一个ejb之前,你应该对ejb有一个大致的了解,如果没有的话,建议你先到网上找一些这方面的文章来看,否则你将无法理解下面要讲述的内容。
远程接口
远程接口是指对于客户端而言所能看到了调用接口
home接口
我们可以把home接口看做是一个制造ejb的工厂,home接口告诉ejb容器:“嗨,我的客户要我生成一个ejb,现在我把这个任务交给你啦!”
ejb的实现
这里才是真正的ejb的实现
好了,这个会话ejb的全部代码编写完毕,下一步我们要做的是编写它的部署文件:
ejb-jar.xml
这个ejb-jar.xml文件应放在当前项目的meta-inf目录下,在本例中我将其放在
f:/projects/jbss-tutorial目录下了,当然你应该根据需要来将它放在你自己的项目目录中,为了能更清楚地让你了解ejb-jar.xml文件的位置,以下我列出了这个示例的整个目录结构:
这样我们就完成了一个简单的会话ejb的编写,但其实jboss还提供了一个额外的配置文件:jboss.xml,利用它可以对jboss服务器进行更多的定制,但由于本例实在是太简单了,因此我们可以将它省略不写。
虽然我们完成了这个会话ejb的编写,但还有最后的一步工作要做:打包。首先我们进入当前项目的根目录:
然后执行jar命令将所有的类及ejb-jar.xml打包:
这时你会发现,在当前目录下多了一个名为helloworld.jar的文件,这就是我们的最终成品。图解如下:
部署我们的ejb
部署ejb在jboss中是一件非常容易的事,你只需简单将helloworld.jar拷贝到c:/ jboss-3.2.6/server/default/deploy目录下就可以了。图解如下:

这时,你可以切换到jboss运行的那个dos窗口下,你会发现屏幕上会新出现如下提示信息:
客户端代码
如果没有客户端代码的话,那么ejb对我们来说几乎毫无用处。以下我们将编写客户端代码来调用这个helloworld。
如果你在同一台机器上运行客户端代码和jboss服务器的话,那以下代码无须任何修改就可以运行,但你的客户端在另一台机器上运行的话,那你要将源码中的相应行改变一下:
假设ejb部署在一台ip地址为192.168.0.1的机器上,那么就应该将以上源码改为如下:

好了,下面我就就可以编译并运行这个客户端了,如果你在编译的时候jvm报告找不到某些类的话,则可能是你没有将j2ee.jar这个包放在classpath这个路径变量中。客户端的执行结果虽然只是简单的在屏幕上打印一行“hello,world”,但它是来自于另一个世界
――jboss的声音!
本文是为想在jboss环境下进行ejb开发的读者而写的,在阅读本文之前,你最好对ejb有一个基本了解。
jboss是一个开放源码的免费ejb服务器,它实现了其它j2ee所规定的大多数功能,现在sun公司已经把jboss作为j2ee1.4的标准实现服务器了,本文就带领大家从jboss3.2.6的安装开始,一直到开发出一个完整的”hello,world”的ejb为止。
jboss的安装与启动
如果你是第一次使用jboss,你一定会感到很沮丧,因为它虽然是开放源码,并可以免费下载,但是它的文档或技术培训却是收费的,而且对于国人来说高不可及(几天的培训大约要10000美元,文档也要几十至几百美一份)!如果你试图在网上找一些关于jboss下简单入门的文章,可只是那么寥寥可数的几篇,而且很少有菜鸟级的文章。相反,对其核心设计等高深理论性的文章倒是居多,这样反倒让你越看越糊涂。因此,本文的目的就是:让你的jboss尽快地跑起来,并马上可以在其之上开发出简单的ejb!
在安装jboss之前,首先要确定你已经安装了jdk1.3或以上版本,由于jboss不像weblogic等其它应用服务器捆绑了jdk,因此jboss非要jdk的支持才能运行。然后在 http://www.jboss.org网站上下载一个jboss的发行版(我下载的是jboss-3.2.6.zip),在本文中我使用的其稳定的发行版jboss3.2.6 (集成了tomcat4.1),需要附带一句的是tomcat是apache基金会旗下著名的开源jsp/servlet服务器,如果要更多的了解tomcat,请访问http://jakarta.apache.org 以获得更详细的信息。
当你把jboss-3.2.6.zip下载之后,下一步就是将它解压缩,如果你是在windows上,可以用winzip或winrar;如果是在linux下,就用unzip命令,以我自己为例,假设我将它解压到了如下目录
c:/ jboss-3.2.6
相对于weblogic,websphere等j2ee服务器来说,jboss的启动是简单得出乎意料,如果你是windows用户,只需要进入c:/ jboss-3.2.6/bin下面,输入run.bat命令,jboss就跑起来啦;如果是linux用户的话,只需要进入c:/ jboss-3.2.6/bin下面,输入run.sh,那么jboss也同样运行。怎么样?是挺简单的吧?

当你输入run.bat或run.sh后,你会发现屏幕上会不断地滚动一些提示信息,过大约1分钟之后(依赖于你机器的配置,我的是p4 1.7g,128m),提示信息就会停止滚动,如下图所示:
![]() (注意:如果你是在windows下,那么请让这个dos窗口一直保持这种状态,千万不可将其中止!) |
这样,jboss就已经处于运行状态了。和其它j2ee服务器一样,jboss也提供了一个web方式控制台,使用方法是在ie浏览器中输入http://127.0.0.1:8080/web-console/,这样你就会看到如下图所示的一个控制台:
![]() |
怎么样?这个界面丝毫不比weblogic的差吧?通过这个控制台,你可以动态地对jboss的服务进行管理和监控。
下面我们正式开始ejb编程。在编写我们的第一个ejb之前,你应该对ejb有一个大致的了解,如果没有的话,建议你先到网上找一些这方面的文章来看,否则你将无法理解下面要讲述的内容。
远程接口
远程接口是指对于客户端而言所能看到了调用接口
| //helloworld.java package sample; /*这是一个远程接口,客户端调用这个接口来使真正的ejb工作*/ public interface helloworld extends javax.ejb.ejbobject { public string hello() throws java.rmi.remoteexception; } |
home接口
我们可以把home接口看做是一个制造ejb的工厂,home接口告诉ejb容器:“嗨,我的客户要我生成一个ejb,现在我把这个任务交给你啦!”
| //helloworldhome.java package sample; /*home接口告诉ejb容器怎样生成或销毁ejb的实例*/ public interface helloworldhome extends javax.ejb.ejbhome { helloworld create() throws java.rmi.remoteexception,javax.ejb.createexception; } |
ejb的实现
这里才是真正的ejb的实现
| //helloworldbean.java package sample; import javax.ejb.sessioncontext; /*这个类具体实现的远程接口helloworld*/ pubic class helloworldbean implements javax.ejb.sessionbean { private sessioncontext ctx; public void setsessioncontext(sessioncontext ctx) { this.ctx = ctx; } pubic void ejbremove() { system.out.println(“ejbremove()”); } public void ejbactivate() { system.out.println(“ejbactivate()”); } public void ejbpassivate() { system.out.println(“ejbpassivate()”); } /*hello方法是实际的业务逻辑,它可以在客户端显示“hello,world”这个字符串*/ public string hello() { system.out.println(“hello()”); return “hello,world”; } } |
好了,这个会话ejb的全部代码编写完毕,下一步我们要做的是编写它的部署文件:
ejb-jar.xml
| <?xml version="1.0" encoding="utf-8"?> <ejb-jar> <description>jboss hello world application</description> <display-name>hello world ejb</display-name> <enterprise-beans> <session> <ejb-name>hello</ejb-name> <home>sample.hellohome</home> <remote>sample.hello</remote> <ejb-class>sample.hellobean</ejb-class> <session-type>stateless</session-type> <transaction-type>bean</transaction-type> </session> </enterprise-beans> </ejb-jar> |
这个ejb-jar.xml文件应放在当前项目的meta-inf目录下,在本例中我将其放在
f:/projects/jbss-tutorial目录下了,当然你应该根据需要来将它放在你自己的项目目录中,为了能更清楚地让你了解ejb-jar.xml文件的位置,以下我列出了这个示例的整个目录结构:
![]() |
这样我们就完成了一个简单的会话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在jboss中是一件非常容易的事,你只需简单将helloworld.jar拷贝到c:/ jboss-3.2.6/server/default/deploy目录下就可以了。图解如下:

这时,你可以切换到jboss运行的那个dos窗口下,你会发现屏幕上会新出现如下提示信息:
| 15:09:21,184 info [maindeployer] starting deployment 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] deploying helloworld 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 static void main( string [] args ) { hashtable env = 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" ); helloworldhome home =(helloworldhome)javax.rmi.portableremoteobject.narrow( obj, helloworldhome.class ); helloworld helloworld = 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的声音!



闽公网安备 35060202000074号