循速渐进学用Session Bean(三)

创建无状态的Session Bean

从编程的角度看,创建无状态的Session Bean和创建有状态的是一样简单的。除了在配置工具里修改一个设置外,仅有的一点不同是在bean的初始设计阶段,无状态的Session Bean并不记得方法调用之间的任何东西,bean需要的任何消息都必须由客户端获得。虽然无状态的Session Bean并不记得面向session的数据,不过可以在一个无状态的session bean中存放数据,只是不能存放与客户端相关的数据。

在HelloWorldSession的例子中,该bean在方法调用之间仍记得一个问候的字符串。例如,你调用setGreeting来修改欢迎词,当你调用getGreeting时,该session会记得保存的欢迎词。

列表6.5“Hello World”session bean Remote 接口(无状态版本)

  Listing 6.5 Source Code for StatelessHello.java
package usingj2ee.hello;
  import java.rmi.*;
import javax.ejb.*;
  /** Defines the methods you can call on a StatelessHello object */
  public interface StatelessHello extends EJBObject
{
  /** Returns a greeting for the named object */
public String greet(String thingToGreet) throws RemoteException;
  }

在这个例子中,Remote接口仅提供了一个greet方法,该方法接收一个参数并且返回一个欢迎词。例如,如果传送“World”参数给greet,greet方法将返回“Hello World!”。

列表6.6展示了StatelessHello bean的Home接口。

  Listing 6.6 Source Code for StatelessHelloHome.java
package usingj2ee.hello;
  import java.rmi.*;
import javax.ejb.*;
  /** Defines the methods for creating a StatelessHelloWorld */
  public interface StatelessHelloHome extends EJBHome
{
  /** Creates a StatelessHello session bean. A stateless session bean
can't have a create method that takes parameters. */
public StatelessHello create() throws RemoteException, CreateException;
  }

无状态的session bean仅拥有一个create方法,而且该方法不能接受任何参数。这看起来有些奇怪,不过如果考虑到无状态session bean的含义你就会明白了。这种bean不能记住某个客户的任何信息,实际上,为了性能上的原因,容器也许会不时地让不同的session处理某个客户的方法调用。由于session并不需要记住某个客户的信息,因此使用另一个bean来处理负载并不会带来任何问题。

如果bean的create方法接受任何的参数,session bean实例之间的行为将会有所不同,因为你为create方法提供不同的值。

实现无状态session bean与有状态的session bean是一样简单的。列表7中的是StatelessHelloImpl类,它实现了Remote和Home接口。

  Listing 6.7 Source Code for StatelessHelloImpl.java
package usingj2ee.hello;
  import java.rmi.*;
import java.util.*;
import javax.ejb.*;
  /** The implementation class for the StatelessHello bean */
  public class StatelessHelloImpl implements SessionBean
{
/** The session context provided by the EJB container. A session bean must
hold on to the context it is given. */
private SessionContext context;
  /** An EJB must have a public, parameterless constructor */
  public StatelessHelloImpl()
{
}
  /** Called by the EJB container to set this session's context */
  public void setSessionContext(SessionContext aContext)
{
context = aContext;
}
  /** Called by the EJB container when a client calls the create() method in
the Home interface */
public void ejbCreate()
throws CreateException
{
}
  /** Called by the EJB container to wake this session bean up after it
has been put to sleep with the ejbPassivate method. */
  public void ejbActivate()
{
}
  /** Called by the EJB container to tell this session bean that it is being
suspended from use (it's being put to sleep). */
  public void ejbPassivate()
{
}
  /** Called by the EJB container to tell this session bean that it has been
removed, either because the client invoked the remove() method or the
container has timed the session out. */
  public void ejbRemove()
{
}
  /** Returns a greeting for the named object */
  public String greet(String thingToGreet)
{
return "Hello "+thingToGreet+"!";
}
}

时间: 2024-11-03 00:42:41

循速渐进学用Session Bean(三)的相关文章

循速渐进学用Session Bean(五)

创建一个实用的Session Bean HelloWorldSession例子的主要目的是帮助你熟悉一个session bean的整体结构.现在你已经熟悉了session bean的结构,你可以写一个更实用的bean了.特别地,你可以写一个由数据库中接收数据的bean. 以下的例子,假定你拥有一个SQL表格,里面包含有产品的代码和价格,你也可以使用以下SQL命令建立它: create table price(product_code varchar(10) not null primary ke

循速渐进学用Session Bean(四)

Session Bean要求.限制和许可 在EJB规范中,对Session Bean有一些限制和要求.这些限制会指出哪些是bean必须做的,哪些是不能做的,以及bean必须实现的一些方法和接口.也有一些规范指出哪些处理是允许做的,这是为了避免你以为这些处理是被其它限制禁止的. 实现SessionBean接口 session bean必须实现javax.ejb.SessionBean接口 声明该类为Public,而不是Final或者Abstract 要记住EJB容器需要创建bean实例,因此该类必

循速渐进学用Session Bean(二)

配置Bean Enterprise JavaBean令人不太习惯的地方是你并不运行它,而是配置它.根据所使用的容器,用一个打包工具来创建一个JAR文件,里面包含EJB类,XML配置描述文件和helper类. 不过要真正理解EJB,最好自己尝试一下. 每个EJB厂家都支持自己的配置工具.虽然某些工具或许更好用,不过大部分都是使用一样的模式.本文中将使用Sun的Java 2 Enterprise Edition SDK(J2EE SDK)将bean打包并配置它.J2EE SDK配置工具叫deploy

循速渐进学用Session Bean(一)

Session Bean的作用 Session Bean代表客户应用和EJB容器之间的会话.Session Bean通常都是实现商业逻辑并且和entity bean交互以执行具体操作.不过session bean并不一定要使用entity bean.如果需要,它可以直接和数据库通信. 一个"Hello World"Session Bean Enterprise JavaBean的结构在开始的时候比较难理解,不过只要你用过一下,EJB也不是太难.幸运的是,你可以无需涉及数据库连接或者是事

一步一步学EJB 3.0(三):悟透会话Bean(上)

会话 Bean 用于管理实体 Bean 和其它会话 Bean 的交互.访问资源,它们通常代表客户机执行任务 .会话 Bean 对应于"模型-视图-控制器"体系结构中的控制器,因为它们都封装三层体系结构中的商业 逻辑.会话Bean也叫会话组件(session bean),又可分为无状态会话组件和有状态会话组件两类. 无状态 Bean 之所以称作无状态是因为它们是过渡的:他们不维护方法调用之间的商业状态.有状态 会话 Bean 封装商业逻辑和特定于某个客户机的状态.有状态 bean 之所以

Weblogic10 + EJB3入门教程(1):编写第一个无状态会话Bean(Stateless Session Bean)

本文为原创,如需转载,请注明作者和出处,谢谢!     在本文主要介绍如何来开发一个Stateless Session Bean,并在未安装WebLogic10的机器上访问Session Bean.开发EJB3 Stateless Session Bean要比开发EJB2 Stateless Session Bean容易得多,只需要几个注释就可以搞定.读者可按如下的步骤来开发和调用EJB3 Stateless Session Bean: 第1步:编写远程接口     每一个Session Bea

JBuilder2005+JBoss-4.0.2RC1+J2SDK1.5+Log4j 开发Session Bean例解(3)

session 作者:Junsan Jin 日期:2005-3-30 版本:1.0 信箱:junsan21@126.com ; junnef21@sohu.com 声明:本人保留本文的所有权利. 第三部分:开发Session Bean  新建EJB模块: 选择菜单:New〉Enterprise〉EJB〉EJB Designer,弹出对话框中选择New,选择Create empty EJB Module,点击next,填入名称Trader,一路OK即可.  设计EJB: 1.新建session b

JBuilder2005+JBoss-4.0.2RC1+J2SDK1.5+Log4j 开发Session Bean例解(4)

session 作者:Junsan Jin 日期:2005-3-30 版本:1.0 信箱:junsan21@126.com ; junnef21@sohu.com 声明:本人保留本文的所有权利. 第四部分:测试Session bean 在前面的三个部分已经完整地讲述了一个Session Bean的建立过程.下面来建立测试工程.   添加测试类: 在右边的树型菜单中选中com.inspiresky.trader右键 〉new 〉package,在对话框的输入框最后添加user,新建com.insp

eclipse + JBoss 5 + EJB3开发指南(5):使用配置文件发布Session Bean

Session Bean除了可以使用注释来发布外,也可以使用相应的配置文件来发布.在这种情况下,就不 需要在接口和Session Bean中使用注释了.在JBoss中需要两个文件对Session bean进行配置.这两个文 件是ejb-jar.xml和jboss.xml.这两个文件应该META-INF目录中,该目录应该放在jar文件的根目录. ejb-jar.xml文件负责配置session bean,下面是一个典型的配置代码: <?xml version="1.0" encod