Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>应用服务器>>在Jboss下Web Service调用EJB一
在Jboss下Web Service调用EJB一
2007-04-17   来源:Java资源网  作者:Java资源网

  一.开发环境
  
  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:\jboss\bin;
  
  三.会话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 + "\n");
  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文件代码如下:
  
  <?xml version="1.0" encoding="GB2312"?><project name="PersonManager" basedir="." default="xdoclet">
  <property environment="evn" />
  <property name="generated.dir" location="src" />
  <path id="xdoclet.classpath">
  <fileset dir="lib">
  <include name="**/*.jar" />
  </fileset>
  <pathelement location="bin" />
  </path>
  <target name="xdoclet">
  <taskdef classpathref="xdoclet.classpath" classname="xdoclet.modules.ejb.EjbDocletTask" name="ejbdoclet" />
  <ejbdoclet ejbSpec="2.0" destDir="src">
  <homeinterface />
  <remoteinterface />
  <jboss Version="3.2" destDir="build/PersonManagerService/META-INF" />
  <deploymentdescriptor destDir="build/PersonManagerService/META-INF" />
  <fileset dir="src" includes="com/ejb/sessionbean/*.java,com/pojo/*.java">
  </fileset>
  <jbossnet xmlencoding="UTF-8" destdir="build/PersonManagerService/META-INF" webDeploymentName="PersonManagerService" targetNameSpace="http://localhost:8080/pojo/person" prefix="person" />
  </ejbdoclet>
  </target></project>
  
  在运行ant之前还必须做2件事情:
  
  1.到${JBOSS_HOME}\server\all\lib目录下将jboss-j2ee.jar文件复制到当前项目的lib目录下,如果没有lib目录,自己创建一个。
  
  2.将${ECLIPSE_HOME}\plugins\org.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
  --相关文章--
· 开源技术:tomcat5.0下配置ssl (2007-04-17)
· 开源技术基础:TOMCAT的用法 (2007-04-17)
· 开源技术之Tomcat数据源配置总结 (2007-04-17)
· 实例讲解配置之——TOMCAT集群配置 (2007-04-17)
· 实例讲解Apache+tomcat+ssl配置 (2007-04-17)
· 如何同时启动多个Tomcat服务器 (2007-04-17)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接