动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.软件开发的“简单”艺术—有感于.
.如何用JDO开发数据库应用.
.Pervasive Java.
.在 Java 程序设计中处理 DOM 异常.
.Gel:号称世界上最轻巧的Java&nb.
.让你学习控制住Web2.0的方向盘一.
.使用MRJAppBuilder创建本地应用.
.如何使用 J2EE 连接器架构实现企.
.使用 Java 1.2 的 Authenticator.
.Sun金融行业解决方案.
.哈希崩溃及避免方法.
.诊断 Java 代码: 设计“可测试的.
.JDBC连接RAC的配置源代码剖析.
.第二讲 Java语言基础知识.
.[JAVA100例]033、读写文件(字节).
.sort 方法.
.初学者入门:Tomcat在Win2000下的.
.开源Licenses简介.
.在jar包中动态载入第三方jar cla.
.Drools 2.5 发布.

JBoss:有状态会话Bean及其多种调用方法

发表日期:2008-1-5 |



  一、有状态会话 Bean 的开发和部署
  1、基础知识
  
  在第一节中,我们给出了一个 HelloWorld 无状态的会话 Bean ,在 EJB2.0 规范中, EJB 包括三种 Bean ,第一种便是会话 Bean(Session Bean) ,然后还有实体 Bean(EntityBean) 和消息驱动 Bean 。
  
  会话 Bean 包括无状态会话 Bean 和有状态会话 Bean ,二者的主要区别是前者在执行的过程中不保存 Bean 的状态信息,它没有状态域,也就是说:无状态会话 Bean 就只是一个执行过程,我们调用它完成我们的任务而己,它在容器池中无法保存 Bean 状态。而后者在容器中执行时会保存 Bean 的执行状态,相对应的,有状态会话 Bean 中也对应有状态域,即会话 Bean 在执行的过程中会将与固定客户端的会话状态保存起来以备后用。
  
  然而,有状态会话 Bean 它没有主键类,客户端无法查找出它对应的在容器池中的 EJBObject ,那么我们如何重用我们的 EJBObject 呢?在这篇文章中,我们提供了两种方法,并给出了示例程序:
  
  第一种方法是采用有状态会话 Bean 的 Handle( 句柄 ) ,为了取得句柄,可以调用 EJBObject 接口的 getHandle ()方法,返回一个 Handle 实例,为了重新构建对同一 EJBObject 的引用,可以使用 Handle 接口的 getEJBObject ()方法,此方法返回一个对应 Handle 的 EJB 对象,利用此对象,我们就可以重构出对应的 EJBObject ,如下示例:
  
  Count count = counthome.create();// 产生 Remote 接口对象
  
  Javax.ejb.Handle handle = count.getHandle();// 获得 Remote 接口的句柄
  
  …
  
  Object obj = handle.getEJBObject();// 得获得 Handle 对应的在容器池中的 EJBObject 对象
  
  Count recount= (Count)PortableRemoteObject.narrow(obj,Count.class);
  
  // 将此对象重构为远程接口对象即可重新调用它的方法
  
  第二种方法是采用有状态会话 Bean 的 HomeHandle ,它类似 handle ,但不能用于引用 EJBObject 。 HomeHandle 包含足够的信息,可以重建 EJBHome ()的引用。它的做法是调用 getHomeHandle ()方法 和 getEJBHome ()方法,此方法返回一个对应 Handle 的 EJBHome 对象,利用此对象,可以重新生成出对应的 EJBObject 对象,然后调用它的方法。如下示例:
  
  Content ctx = new InitialContext();
  
  Object h = ctx.lookup("CountHome");
  
  CountHome home = (CountHome)PortableRemoteObject.narrow(h, CountHome.class);
  
  HomeHandle homehandle = home.getHomeHandle();// 获取 HomeHandle
  
  ....
  
  CountHome reHome = (CountHome)homeHandle.getEJBHome();
  
  Count recount = rehome.create();
  
  利用以上两种方法,我们可以自动的存储并重建引用所需的会话 Bean 中的 EJB 信息。
  
  好了,了解了以上知识,下面我们就来一个真实的会话 Bean 来看看它的运行方式!
  
  2、一个有状态会话Bean的开发和部署
  
  开发一个会话 Bean ,基本的应遵守以下步聚,首先开发 Remote 接口,再编写 Home 接口,然后是 Bean 本身。
  
  同时,为了区别,我们应默认遵守以下命名规则, Remote 接口直接用 xxx 命名, Home 接口用 xxxHome 命名, Bean 本身用 xxxBean 命名。
  
  首先,我们手动建立开发环境,在 C:\JBOSS 目录(这里指 JBOSS 的安装目录,详见上一节)下新建一个存放我们项目的目录 myproject ,然后再在 myproject 下建一个存放此 Count 会话 Bean 的目录 CounterStatefullSessionBean ,用来存放我们的这个 Bean 的所有相关文件。然后,再在 CounterStatefullSessionBean 目录下建三个目录: ejb 、 jsp 和 src 分别用来存放 ejb 类、 Web 应用文件( jsp 文件及 Servlet 类)和我们的源程序。
  
  接着,再在 EJB 目录下建一个 client 目录和一个 counter.jar 目录分别用来存放 client 端测试程序和服务器端类。然后再在 client 和 counter.jar 目录下同时各新建一个 counter 目录, counter 目录下再建一个 ejb 目录,这是我们的包名。然后在 counter.jar 目录下再建一个 META-INF 目录,用于存放我们的 ejb 配置文件。
  
  接着,再在 jsp 目录中新建一个 counter.war 目录用于保存 WEB 发部的程序,再在 counter.war 下新建一个 WEB-INF 目录,同时在 WEB-INF 目录中新建一个 classes 目录,其下面再建包目录 counter 及 counter 目录下的 ejb 目录。
  
  好了,我们的目录己建立成功,我们的目录结构见图 1 所示:
  
 JBoss:有状态会话Bean及其多种调用方法

  
图 1

  
  好了,我们利用上面的知识来建一个有状态会话 Bean 及它的测试程序。我们在这里引入《 Mastering EJB 》 (Second Edition) 中的一个会话 Bean ,即 Count 。这个 Bean 中有一个状态域命名为 val ,它用来保存相应客户端调用 EBJ 方法 count 的次数。
  
  我们进入 src 目录,所有的类源程序我们都在此目录中编写和存放。
  
  编写 Remote 接口,代码如下:
  
  //Count.java
  
  package counter.ejb;
  import javax.ejb.*;
  import java.rmi.RemoteException;
  public interface Count extends EJBObject{
  public int count() throws RemoteException;
  }
  
  编写 Home 接口,代码如下:
  
  //CountHome.java
  package counter.ejb;
  import javax.ejb.*;
  import java.rmi.RemoteException;
  public interface CountHome extends EJBHome{
  Count create(int val) throws RemoteException,CreateException;
  }
  
  编写 Bean 类,代码如下:
  
  //CountBean.java
  package counter.ejb;
  import javax.ejb.*;
  
  
  public class CountBean implements SessionBean{
  // 当前的计数值就是对话状态
  public int val;
  private SessionContext ctx;
  //EJB 方法
  public int count(){
  System.out.println("count()");
  return ++val;
  }
  
  //EJB 必须的方法
  
  public void ejbCreate(int val) throws CreateException{
  this.val=val;
  
  System.out.println("ejbCreate()");
  
  }
  
  public void ejbRemove(){
  
  System.out.println("ejbRemove()");
  
  }
  
  public void ejbActivate(){
  
  System.out.println("ejbActivate()");
  
  }
  
  public void ejbPassivate(){
  
  System.out.println("ejbPassivate()");
  
  }
  
  public void setSessionContext(SessionContext ctx){
  
  this.ctx = ctx;
  
  }
  
  public SessionContext getSessionContext(){
  
  return this.ctx;
  
  }}
  
  好了,我们在 src 目录中产生了三个 java 文件,这是 EJB 必须的类,下面我们用在第一节中编写的 com.bat 文件来编译它们。
  
  进行 src 目录,热行: com *.java 即会产生三个 .class 文件。
  
  下面我们部署我们的 EJB 。首先编写部署描述符,进入:
  
  C : \JBOSS\myproject\CounterStatefullSessionBean\ejb\counter.jar\META-INF 目录中,新建一个 ejb-jar.XML 文件,内容如下:
  
  <?xml version="1.0" encoding="gb2312"?>
  
  <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
  
  "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
  
  <ejb-jar>
  
  <enterprise-beans>
  
  <session>
  
  <display-name>Count</display-name>
  
  <ejb-name>Count</ejb-name>
  
  <home>counter.ejb.CountHome</home>
  
  <remote>counter.ejb.Count</remote>
  
  <ejb-class>counter.ejb.CountBean</ejb-class>
  
  <session-type>Stateful</session-type>
  
  <transaction-type>Container</transaction-type>
  
  </session>
  
  </enterprise-beans>
  
  </ejb-jar>
  
  此为 EJB 布署描述符文件,它里声明了此 CountBean 的一些属性,如声明了本地接口,远程接口及 Bean 的类型。其中 <session-type>Stateful</session-type> 一句声明此 Bean 是有状态会话 Bean ,假如是无状态会话 Bean( 见第一节中的 HelloWorld) ,则此处应该是 Stateless 。
  
  然后,我们再在此目录中新建一个 jboss-service.xml 文件,它是 JBOSS 服务器特有的描述文件,它的内容如下:
  
  <?xml version="1.0" encoding="gb2312"?>
  
  <jboss>
  
  <enterprise-beans>
  
  <session>
  
  <ejb-name>Count</e

上一篇:免费的开源应用服务器 JBoss 基础知识 人气:368
下一篇:如何在JBOSS Server上发布EJB 人气:276
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-5 360安全卫士 V4.2.0.1004
2008-7-5 PHPDug v2.0 多国语言版
2008-7-5 乘风电影程序 v3.69 (SQL)
2008-7-5 乘风电影程序 v3.69
2008-7-5 wfTextImage文字图像组件 v1.5
2008-7-5 ZY music! v1.1.0705
2008-7-5 FavShop网店系统 v1.0
2008-7-4 天空网络电影系统SKYUC v2.5.1 B
2008-7-4 Drupal v7.x-dev Build 080704
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 GoodCalculator2.0版固件计算器
2008-7-5 RepoName源地址搜索工具 v1.21b
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 TouchCopy多媒体管理软件 v3.13完
2008-7-5 VideosTone视频铃声 v1.1汉化破解
2008-7-5 TouchPad触摸板 v4.44破解版
2008-7-5 VideosTone破解补丁 v1.0
2008-7-5 Feeds GoogleReader客户端 v0.4.3


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報