ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]在Jboss下Web Service调用EJB一

[转载]在Jboss下Web Service调用EJB一

原创 Linux操作系统 作者:dinner1007 时间:2019-06-20 13:15:05 0 删除 编辑
在Jboss下Web Service调用EJB一
一.开发环境:
  
  1.Java SDK1.4
  2.Eclipse3.0中文版
  3.Jboss3.2应用服务器
  4.Windows 2000中文专业版
  
  二.环境变量的设置:
  
  以下是我自己机器的环境变量设置,如果是linux系统,设置有所不同:
  ANT_HOME=C:ant
  JAVA_HOME=C:j2sdk
  JBOSS_HOME=C:jboss
  
  最后在系统变量的path变量中追加C:jbossin;
  
  三.会话Bean的编写:
  
  在EJB中,会话BEAN需要实现一个远程接口和一个本地接口,那我们就先实现这个两个接口:
  
  1.远程接口:
  
  我们实现的是一个人员管理的用例,这个用例包含3个方法,代码如下:
  package com.ejb.sessionbean;
  /** * Remote interface for PersonManager.
  */public interface PersonManager
  extends javax.ejb.EJBObject{
  public com.pojo.Person getPersonByName( java.lang.String name )
  throws java.rmi.RemoteException;
  public void storePerson( com.pojo.Person person )
  throws java.rmi.RemoteException;
  public void deletePerson( java.lang.String name )
  throws java.rmi.RemoteException;}
  
  PersonManager接口实现的是EJB的远程接口EJBObject,包含3个方法,描述如下:
  
  (1)getPersonByName方法:通过人员的姓名返回一个Person对象;
  
  (2)storePerson方法,通过一个Person对象参数,往人员集合中存储一个人员对象;
  
  (3)deletePerson方法,根据一个人员的姓名从人员集合中删除一个人员对象
  
  由于是远程接口,所以每个方法必须抛出RemoteException异常。
  
  2.本地HOME接口的实现:
  
  为了提高EJB的性能,如果是在同一个虚拟机中,EJB可以通过本地接口来调用方法,以提高运行速度。实现代码如下:
  
  /* * Generated by XDoclet - Do not edit!
  */package com.ejb.sessionbean;
  /** * Home interface for PersonManager.
  */public interface PersonManagerHome
  extends javax.ejb.EJBHome{
  public static final String COMP_NAME="java:comp/env/ejb/PersonManager";
  public static final String JNDI_NAME="PersonManagerHomeRemote";
  public com.ejb.sessionbean.PersonManager create()
  throws javax.ejb.CreateException,java.rmi.RemoteException;}
  
  PersonManagerHome接口只有一个方法,create方法,它与会话bean的具体实现类中ejbCeate方法一一对应。
  
  3.具体实现类:
  
  PersonManagerBean是会话BEAN的具体实现类,必须实现SessionBean接口,而且同时实现了在远程接口中定义的相关业务逻辑方法,具体实现代码如下
  
  package com.ejb.sessionbean;import java.rmi.RemoteException;import java.util.*;import javax.ejb.EJBException;import javax.ejb.SessionBean;import javax.ejb.SessionContext;import com.pojo.*;/*** @ejb.bean description = "PersonManagerBean" display-name = *      "PersonManagerBean" jndi-name="PersonManagerHomeRemote" *      name="PersonManager" type="Stateless" view-type="remote" *
  transaction-type="Container" * @jboss-net.web-service urn = "PersonManagerService" expose-all = "true" */public class PersonManagerBean    implements SessionBean{  private SessionContext ctx;  private static Map database;  /**   * @ejb.create-method   *    */  public void ejbCreate()  {  }  public void setSessionContext( SessionContext ctx ) throws EJBException,
  RemoteException  {
  // TODO 自动生成方法存根
  }  public void ejbRemove() throws EJBException, RemoteException
  {
  // TODO 自动生成方法存根
  }
  public void ejbActivate() throws EJBException, RemoteException
  {
  // TODO 自动生成方法存根
  }
  public void ejbPassivate() throws EJBException, RemoteException
  {
  // TODO 自动生成方法存根
  }
  /**
  * @ejb.interface-method view-type = "remote"
  * @param name
  * @return
  */
  public Person getPersonByName( String name )
  {
  if (database != null)
  {
  return (Person) database.get(name);
  }
  return null;
  }
  /**
  * @ejb.interface-method view-type = "remote"
  * @param person
  */
  public void storePerson( Person person )
  {
  if (database == null)
  {
  database = new HashMap();
  }
  database.put(person.getName(), person);
  }
  /**
  * @ejb.interface-method view-type = "remote"
  * @param name
  */  public void deletePerson( String name )
  {
  if (database != null)
  {
  database.remove(name);
  }
  }}
  
  4.数据模型类:
  
  会话BEAN中使用到了一个Person类,该类是一个数据模型,用于数据的封装。实现上和普通的Javabean值对象没有什么区别,不过为了在网络间传递,值对象必须实现序列化接口java.io. Serializable接口,这是个空接口,仅作为标志类型,没有需要实现的方法,代码如下:
  
  import java.io.Serializable;
  /*** @jboss-net.xml-schema urn = "person:Person" */public class Person
  implements Serializable{
  private String name;
  public Person()
  {
  this.name = "unknow";
  }
  public Person( String name )
  {
  this.name = name;
  }
  public String toString()
  {
  StringBuffer sb = new StringBuffer();
  sb.append("name=" + this.name + " ");
  return sb.toString();
  }
  /**   * @return 返回 name。
  */  public String getName()
  {    return name;
  }  /**
  * @param name
  *
  要设置的 name。
  */  public void setName( String name )
  {
  this.name = name;
   }}
  
  另外,在PersonManagerBean和Person类中都使用了xdoclet标志,这个是为了能通过jboss IDE插件来产生ant的build文件,然后自动生成EJB的配置文件和Web Service的配置文件。
  
  四.使用ant产生EJB和Web Service的配置文件
  
  利用ant我们可以很方便的自动生成EJB和Web Service的配置文件,省去了手工编写的麻烦。Ant的build.xml文件代码如下:
  
  
  
  
  
  
  
  

  
  

  
  
  
  
  
  
  
  
  

  
  

  

  
  在运行ant之前还必须做2件事情:
  
  1.到${JBOSS_HOME}serveralllib目录下将jboss-j2ee.jar文件复制到当前项目的lib目录下,如果没有lib目录,自己创建一个。
  
  2.将${ECLIPSE_HOME}pluginsorg.jboss.ide.eclipse.xdoclet.core_1.4.1目录下的所有jar文档也复制到当前项目的lib目录中。注:这个目录只有安装了Jboss-IDE插件之后才会有。
  
  运行ant命令,如果顺利完成,会在当前项目的build/PersonManagerService/META-INF目录下产生3文xml文件:ejb-jar.xml、jboss.xml和web-service.xml

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-131869/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    1714
  • 访问量
    1477765