在JBoss下开发、部署EJB
JBoss是一个开放源码的EJB服务器,它与其它服务器整合后可以提供一个完整的J2EE平台。本文介绍如何在Linux环境下安装和配置JBoss,以及如何在JBoss平台上实现EJB的开发和部署。
作为J2EE架构中最重要的构件,EJB是实现服务器端分布式计算的核心。EBJ服务器是EJB的容器,它控制着EJB的运行,并为其提供事务处理、数据库访问、安全控制等一系列系统级的服务。
EJB服务器是J2EE应用服务器的一个重要组成部分。Sun公司的J2EE SDK、IBM公司的WebSphere,以及BEA公司的WebLogic等J2EE实现都内嵌了EJB服务器。虽然JBoss目前还不是一个完整的J2EE应用服务器,但它却是一个完整的EJB服务器,在与Tomcat、Jetty等Web服务器整合后,能够提供一个完整的J2EE平台。
JBoss最大的优点在于它是源代码开放的自由软件,并完全遵循J2EE规范。由于JBoss强大的功能和优异的性能,以及与Linux等GNU项目的结合,目前已经成为J2EE服务器端企业级应用的一股强大力量。
创建EJB
下面以一个简单的无状态会话Bean为例,讲述如何为JBoss平台编写EJB。按照EJB规范,一个EJB中至少应该包含如下三个类的实现:
◆远程接口
远程接口暴露了整个EJB对外界的接口,在本例中远程接口封装在greet.Greet类中。
◆本地接口
本地接口描述了创建、管理和销毁EJB时的行为,在本例中本地接口封装在greet.GreetHome类中。
◆Bean类
Bean类实现了远程接口中定义的所有方法,在本例中Bean类封装在greet.GreatBean类中。
EJB在发布时是以一个JAR包的形式提供的。EJB服务器要求该JAR包中必须包含所有的类文件和相应的部署文件,并且要按照EJB开发时的目录结构进行组织。在我们的例子中,所有的类文件都位于greet目录下,部署文件则位于META-INF目录下
部署描述符
根据EJB规范,要想将EJB成功地部署到EJB服务器上,必须为EJB服务器提供相应的部署描述符。部署描述符对所要部署的EJB进行了说明,包括该EJB的远程描述符、本地描述符和Bean类等信息。由于EJB服务器只有在获得这些基本信息后才能正确完成EJB的部署,因此编写EJB描述符是开发EJB时必不可少的一个环节。
对于不同的EJB服务器来说,部署同一EJB时所需的部署描述符可能并不相同。在JBoss平台上,任何将要被部署的EJB都必须提供ejb-jar.xml和jboss.xml两个文件,这两个文件均位于JAR包中的META-INF目录下,用于对将要部署的EJB进行简要的说明。
ejb-jar.xml
ejb-jar.xml是EJB规范定义的标准部署描述符,在任何EJB服务器上部署EJB时都需要用到该部署描述符。本例中用到的ejb-jar.xml代码如下所示:
<?xml version="1.0" encoding="Cp1252"?> <ejb-jar> <description>jBoss test application </description> <display-name>Test</display-name> <enterprise-beans> <session> <ejb-name>GreetEJB</ejb-name> <home>greet.GreetHome</home> <remote>greet.Greet</remote> <ejb-class>greet.GreetBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> </session> </enterprise-beans> </ejb-jar>
jboss.xml
虽然ejb-jar.xml对所有的EJB服务器都是通用的,但它并没有为EJB服务器提供将要被部署的EJB的全部信息。为了能够对EJB的部署进行更灵活的控制,大部分EJB服务器都要求EJB开发者同时提供另外一个文件来对将要部署的EJB进行描述,在JBoss中该文件为jboss.xml,它也位于JAR包中的META-INF目录中。jboss.xml中可以对EJB对应的JNDI名字以及相应的持久性进行说明,在本例中用到的jboss.xml如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?> <jboss> <enterprise-beans> <session> <ejb-name>GreetEJB</ejb-name> <jndi-name>GreetingEJB</jndi-name> </session> <secure>false</secure> </enterprise-beans> <resource-managers/> </jboss>
部署EJB
开发EJB的最后一步是将其中所有的类文件和相应的部署描述符压缩成JAR包,然后部署到EJB服务器上。在本例中,JAR包的生成可以通过下面这条命令来实现:
jar cf greetejb.jar greet/*.class META-INF/*.xml
该命令将greet目录下的.class文件和META-INF目录下的.xml文件压缩成greetejb.jar文件。如果想知道生成的JAR包是否正确地包含了所有的文件,可以用命令:
jar cvf greetejb.jar
来查看greetejb.jar中包含的文件。如果得到如下的类似信息,则说明所需的文件都已经被正确地包含在该压缩包中了,信息如下:
0 Sun May 24 15:32:10 CST 2002 META-INF/ 68 Sun May 24 15:32:10 CST 2002 META-INF/MANIFEST.MF 1007 Sun May 24 14:35:46 CST 2002 greet/GreetBean.class 209 Sun May 24 14:35:46 CST 2002 greet/Greet.class 251 Sun May 24 14:35:46 CST 2002 greet/GreetHome.class 493 Sun May 24 08:40:00 CST 2002 META-INF/ejb-jar.xml 303 Sun May 24 08:43:22 CST 2002 META-INF/jboss.xml
生成的JAR包在JBoss上的部署相当简单,只需要将该文件复制到JBoss的deploy目录下就可以了,命令如下:
cp greetejb.jar /usr/jb_tom/jboss/deploy/
JBoss支持热部署,deploy目录下所有文件的改变都会被JBoss自动检测到,并根据检测结果对相应的EJB进行
[INFO,ContainerFactory] Deploying GreetEJB [INFO,GreetEJB] Initializing [INFO,GreetEJB] Initialized [INFO,GreetEJB] Starting [INFO,GreetEJB] Started
至此,EJB在JBoss平台上的部署就全部完成了,如果想知道该EJB能否正常地工作,则需要为其编写专门的客户端程序进行测试。
测试EJB
EJB存在的价值在于为其客户提供相应的服务,EJB客户包含的范围相当广泛,可以是另外的EJB、普通的JavaBean、JSP页面、Applet或者标准的Java应用程序。GreetClient.java是已经部署好的EJB的客户程序,其完整的源码如下所示:
import javax.naming.*; import java.util.Hashtable; import javax.rmi.PortableRemoteObject; import greet.*; class GreetClient { public static void main(String[] args) { System.setProperty("java.naming.factory.initial", "org.jnp.interfaces.Naming ContextFactory"); System.setProperty("java.naming.provider.url", "localhost:1099"); try { // Get a naming context InitialContext jndiContext = new InitialContext(); System.out.println("Got context"); Object ref = jndiContext.lookup("GreetingEJB"); System.out.println("Got reference"); GreetHome home = (GreetHome) PortableRemoteObject.narrow (ref, GreetHome.class); Greet greet = home.create(); System.out.print("The magic number from server is "); System.out.println(greet.calculateMagic(123.456)); } catch(Exception e) { System.out.println(e.toString()); } } }
用下面的命令对EJB客户端程序进行编译:
javac GreetClient.java / -classpath /usr/jb_tom/jboss/lib/ext/jboss-j2ee.jar:.
如果一切正常,就可以运行客户端程序来对EJB进行测试了,命令如下:
java -cp / $CLASSPATH:/usr/jb_tom/jboss/client/jboss-client.jar:. / GreetClient
[EJB]在JBoss下开发、部署EJB
最新推荐文章于 2022-10-12 14:33:14 发布