JBOSS――第一个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:”hello,world”

  下面我们正式开始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

  部署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的声音!

 


 

The JBoss 5 Application Server is a Java Enterprise Edition 5 application server that provides services that most enterprise applications need, such as security, transactionality, persistence, monitoring, resource management, and remote access. JBoss 5 Application Server is compliant with the specification defined by the Java Community Process. JBoss in Action teaches readers how to use the JBoss application server, digging into the things that separate JBoss from other Java EE servers. This book goes deeply into the advanced features and configuration of the server. In particular, it focuses on enterprise-class topics, such as high availability, security, and performance. The book walks you through the JBoss 5 Application Server, from installation and configuration to production deployment. It guides you through configuring the server’s component containers, such as the JBoss Web Server, the EJB3 server, and JBoss Messaging. It also gives you detailed insight into configuring the services, such as security, performance, and clustering. Beyond coverage of the core application server, the book also teaches you how to use some of the “hot” technologies that run on top of the application server, such as JBoss Seam and JBoss Portal. The authors, both seasoned professional experts at developing and administering JBoss, provide meaningful explanations and background on many topics, all tied together with practical, real-world advice from their collective experience. The uniquely comprehensive explanations and the overall wide coverage provided in this book surpass any other content currently available. This book is perfect for developers writing Java EE applications, as well as administrators responsible for maintaining the JBoss Application Server.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值