大鸟的学习乐园
路漫漫其修远兮,吾将上下而求索
posts - 26,comments - 27,trackbacks - 0

 

刚刚开始学习JBoss,学习了一个入门级的小例子,对于刚接触JBoss和Eclipse的菜鸟来说很有帮助的,现在把我的试验过程介绍一下。
首先,打开Eclipse,新建——其它——JBoss IDE——J2EE Projects——J2EE 1.4 Projects
下一步
填入项目名称:HelloWorld
项目内容可以选择使用缺省值或者自己制定存储空间
下一步
在源选单下,添加文件夹,分别命名为j2src(存放java文件)和src(存放部署文件),缺省输出文件夹改为:HelloWorld/bin
完成

在包资源管理器中,右键单击j2src,选择新建——包,输入包名:sample.server。

右键单击sample.server,选择新建——接口,输入接口名字:HelloWorld,此为远程接口,是指对于客户端而言所能看到的调用接口,该接口内容为:

/**
 *HelloWorld.java
 */
package sample.server;

import javax.ejb.EJBObject;

/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public interface HelloWorld extends EJBObject {
 public String hello() throws java.rmi.RemoteException;
}

同样的,新建Home接口HelloWorldHome,我们可以把Home接口看做是一个制造EJB的工厂,它告诉EJB容器:“我的客户要我生成一个EJB,现在我把这个任务交给你啦!”
/**
 * HelloWorldHome.java
 */
package sample.server;
import javax.ejb.EJBHome;
/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public interface HelloWorldHome extends EJBHome {
 HelloWorld create() throws java.rmi.RemoteException,
   javax.ejb.CreateException;
}
下面就是EJB的实现,右键单击sample.server,新建——其它——JBoss IDE——EJB Components——Session Bean,输入名称:HelloWorldBean,类型为Stateless,Remote,选择创建来自超类的构造函数,继承的抽象方法,ejbCreate() method。完成。

/**
 * HelloWorldBean.java
 */

package sample.server;

import java.rmi.RemoteException;

import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

import javax.ejb.CreateException;

/**
 * @ejb.bean name="HelloWorld"
 *           display-name="Name for HelloWorld"
 *           description="Description for HelloWorld"
 *           jndi-name="ejb/HelloWorld"
 *           type="Stateless"
 *           view-type="remote"
 */
public class HelloWorldBean implements SessionBean {

 /**
  *
  */
 public HelloWorldBean() {
  super();
  // TODO 自动生成构造函数存根
 }

 /* (非 Javadoc)
  * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
  */
 public void setSessionContext(SessionContext ctx)
  throws EJBException,
  RemoteException {
  // TODO 自动生成方法存根

 }

 /* (非 Javadoc)
  * @see javax.ejb.SessionBean#ejbRemove()
  */
 public void ejbRemove() throws EJBException, RemoteException {
  // TODO 自动生成方法存根

 }

 /* (非 Javadoc)
  * @see javax.ejb.SessionBean#ejbActivate()
  */
 public void ejbActivate() throws EJBException, RemoteException {
  // TODO 自动生成方法存根

 }

 /* (非 Javadoc)
  * @see javax.ejb.SessionBean#ejbPassivate()
  */
 public void ejbPassivate() throws EJBException, RemoteException {
  // TODO 自动生成方法存根

 }

 /**
  * Default create method
  *
  * @throws CreateException
  * @ejb.create-method
  */
 public void ejbCreate() throws CreateException {
  // TODO Auto-generated method stub
 }
 public String hello()
 {
  System.out.println("hello()");
  return "Hello,world";
 }
}
服务器端程序编好,下一步就要做部署工作了。

右键选择src,新建目录META-INF,在该目录下,新建——其它——JBoss-IDE——Descriptors——EJB 2.1 Deployment Descriptor,默认名字为ejb-jar.xml,完成。
ejb-jar.xml:

《?xml version="1.0" encoding="UTF-8"?》
《ejb-jar version="2.1"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"》
《ejb-jar》
《enterprise-beans》
  《session》
   《ejb-name》HelloWorldBean《/ejb-name》
   《home》sample.server.HelloWorldHome《/home》
   《remote》sample.server.HelloWorld《/remote》
   《ejb-class》sample.server.HelloWorldBean《/ejb-class》
   《session-type》Stateful《/session-type》
   《transaction-type》Bean《/transaction-type》
  《/session》
 《/enterprise-beans》
《/ejb-jar》

(备注:在此,由于网页显示的原因,将<>符号改成了《》,所以,在实际应用中应改为<>,以正常工作。同时,ejb-jar.xml开头的版本标记文字会因jboss版本不同而不同,希望大家注意)

这样我们就完成了一个简单的会话EJB的编写,下一步是打包。
同时选择j2src和src两个目录,右键单击选择导出——jar——选择导出目标,可以放在定义的HelloWorld目录下,起个名字叫HelloWorld.jar,则会在包资源管理器中看到一个文件HelloWorld.jar。

光有EJB,没有客户端,对我们来说毫无用处,所以下一步我们就要编写客户端程序。
同样的,在j2src下创建包sample.client。
在该包下新建类,类名为HelloWorldClient,添加接口:sample.server.HelloWorld,
/**
 * HelloWorldClient.java
 */

sample.server.HelloWorldHome。

package sample.client;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;

import sample.server.HelloWorld;
import sample.server.HelloWorldHome;

/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
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");
/**
 * 默认是把服务器端EJB部署在本机上,如果部署在其它机器上,比如192.168.0.1,则将localhost  * 改为192.168.0.1即可
 */
  env.put("Java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
  try{
   Context ctx = new InitialContext(env);
   Object obj = ctx.lookup("HelloWorldBean");
   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());
  }   
 }
}

下面就可以编译运行了。
手动启动JBoss,直接运行JBoss\bin\目录下的run.bat即可,这个过程时间长短跟计算机的配置有关,配置高的计算机几秒钟就可以了,比较传统的计算机则需要等上1分多钟甚至更长,不过你不需要专门等着它的运行,你双击run.bat后,不用管它,你可以先做一些其他的事情,比如给mm发条短信啊什么的,等你发完短信后,你会发现JBoss已经运行成功,并会告诉你启动JBoss花了多长时间:Started in 1m:36s:870ms,呵呵,我的机器比较传统哈。
选择包资源管理器中的HelloWorld.jar,右键单击选择Deployment——Deploy to,
选择jboss 4.0(default)[file:/D:/jboss4/server/default/deploy/]
则系统会自动把HelloWorld.jar文件拷贝到jboss的/server/default/deploy/目录下,jboss的运行窗口将出现
10:09:50,679 INFO  [EjbModule] Deploying HelloWorldBean
10:09:52,051 INFO  [org.jboss.ejb.EJBDeployer] Deployed: file:/D:/jboss4/server/default/deploy/HelloWorld.jar
服务器端运行成功
右键选择HelloWorldClient.java,选择运行——运行,在左边选择java应用程序下的HelloWorldClient,右边选择类路径,在引导程序条目下添加外部JAR,分别jboss的client目录下的jboss-j2ee.jar、log4j.jar、jboss-client.jar。然后单击运行,就会看到底下控制台上显示的“Hello,World”,哈哈,成功了,这可跟一般的“HelloWorld”不太一样哦。

posted on 2008-05-30 15:52 大鸟 阅读(413) 评论(0)  编辑  收藏 所属分类: JAVAWEB

只有注册用户登录后才能发表评论。


网站导航: