(转)经典的JBOSS入门文章(转)经典的JBOSS入门文章

原创 2011年01月21日 20:20:00

本文是为想在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/,看见欢迎界面,就成功了。
编写第一个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的编写,但其实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的声音!

神经网络入门最好的一篇文章

http://iamtrask.github.io/2015/07/12/basic-python-network/
  • guotong1988
  • guotong1988
  • 2016年01月19日 16:30
  • 1014

超经典的JBOSS入门文章

前言  本文是为想在JBOSS环境下进行EJB开发的读者而写的,在阅读本文之前,你最好对EJB有一个基本了解。  JBOSS是一个开放源码的免费EJB服务器,它实现了其它J2EE所规定的大多数功能,现...
  • danning
  • danning
  • 2005年11月06日 21:23
  • 989

V4L入门经典文章(转)

1.video4linux基础相关 1.1 v4l的介绍与一些基础知识的介绍 I.首先说明一下video4linux(v4l)。 它是一些视频系统,视频软件,音频软件的基础,经常使用在需要采集...
  • cao_tao199612
  • cao_tao199612
  • 2011年09月05日 21:49
  • 624

入门有余, 经典不足 — 小评《C#入门经典》

鉴于C#程序设计语言这本Anders写的书就像是语言规格说明, 我推荐大家阅读C#入门经典(Beginning Visual C# 2010)入门. 说实话, 看到这本书的时候, 我稍微叹了口...
  • vagrxie
  • vagrxie
  • 2013年01月11日 07:21
  • 17470

算法竞赛入门经典(第2版)习题2-4详解

#include #define MAXN 100 double a[MAXN]={0};int main() { int n,m,count=0; while(1) { ...
  • big_DreamerLzq
  • big_DreamerLzq
  • 2016年06月22日 10:17
  • 1084

关于 算法竞赛入门经典 的一些学习经历与体会

开始是偶然下载到了算法竞赛入门经典第一版的pdf,看着看着感觉这书太好了,不买一本对不起作者。 于是12年底买了一本纸质的书,很快把前两章看完,前两章所有的习题例题思考题都独立搞了一遍,然后就开始偷...
  • archya
  • archya
  • 2014年07月12日 16:40
  • 3078

算法竞赛入门经典(第二版)官网页面克隆【墙内用】

链接源地址:https://code.google.com/archive/p/aoapc-book/
  • qq_35504607
  • qq_35504607
  • 2017年03月02日 12:46
  • 767

C#入门经典(第6版)

首先,必须说明,在学C#之前,已经学习C++有一年了,所以看C#时觉得入门很快,基础篇只看了与C++不同的地方。 刚学C#的时候,装的的是visual studio 2010,想着真么把C++的开发环...
  • fightingyxy
  • fightingyxy
  • 2016年04月21日 21:07
  • 511

《C#入门经典(第7版)》编写C#程序

两种基本的应用程序类型:控制台应用程序和桌面应用程序 1、开发环境:     Visual Studio      C#6      .NET Framework 4.6     register ...
  • u010590746
  • u010590746
  • 2017年05月21日 15:23
  • 2223

《算法竞赛入门经典(第二版)》pdf

内容简介  · · · · · · 《算法竞赛入门经典(第2版)》是一本算法竞赛的入门与提高教材,把C/C++语言、算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧。全书内容分为...
  • cf406061841
  • cf406061841
  • 2017年05月01日 13:28
  • 5112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(转)经典的JBOSS入门文章(转)经典的JBOSS入门文章
举报原因:
原因补充:

(最多只允许输入30个字)