无状态会话bean(1)---定义

无状态会话bean用于完毕在单个方法的生命周期内的操作。无状态bean能够实现很多业务操作,可是每一个方法都不能假定不论什么其它的方法会在它之前调用。后半句的意思是如今的你可能不是刚才的你。明天的你可也能不是今天的你,这个时候你就叫做“无状态你”。

上面的阐述听起来像是无状态的bean的一个局限,好像每次再见就像永别似的。

可是这是迄今为止业务服务最常见的形式,就像去饭店吃饭,点菜的服务员与给你上菜的服务员是不是同一个这不是我们所关心的。

无状态回话bean不同于适合在对话中积累状态(如零售应用程序的购物车)的有状态会话bean。无状态回话bean旨在很有效的运行独立操作。无状态会话bean这样设计的目的也是考虑到server忍受不了大量client的时候对资源的占用。

会话bean定义分为例如以下两个部分:

l  零个或多个业务接口。定义了一个client在bean上能够调用的方法。

当未定义接口时,bean的实现类的公共方法集合形成了一个逻辑client接口。

l  实现这些接口的类,称之为bean类,採用@Stateless注解进行标记。

大多数会话bean有一个业务接口,可是对会话bean能够向其client公开的接口数量是没有限制。当server遇到@Stateless注解时,它会知道把该bean当做一个会话bean。

它将在EJB容器中配置这个bean,使得应用程序的其它组件能够使用它。

以下的这个EJB版本号的Hello World样例中包括了一个业务接口。在此演示样例中包括了一个单一的方法。没有注解或者父接口来指明这是一个业务接口。和一般的类实现接口看起来是一模一样的。当会话bean实现它时,将会自己主动把它视为一个本地业务接口,意味着仅仅有在同一个应用程序server上的client能够訪问它。

为了强调一个接口是本地业务接口,能够选择把@Local注解加入到该接口上。

public interface HelloService {
    public String sayHello(String name);
}

如今考虑接口的实现。以下的代码展示的是一个实现了上面接口的常规Java类 。这个类唯一特别的是@Stateless注解,标记它是一个无状态会话bean。

业务方法实现上没有不论什么特殊的限制或要求,它恰好是一个EJB的常规类。

@Stateless
public class HelloServiceBean implements HelloService {
    public String sayHello(String name) {
        return "Hello, "  + name;
    }
}

关于无接口视图

在EJB3.1中引入无接口视图(no-interface-view),它支持本地会话bean能够没有实现接口。这使得定义一个本地会话bean以及訪问这个本地会话bean更加简单。如以下代码所看到的使用无接口视图定义上面代码中同样的HelloServiceBean,开发者仅仅需创建实现类,无需实现不论什么业务接口:

@Stateless
public class HelloServiceBean {
    public String sayHello(String name) {
        return "Hello, "  + name;
    }
}

会话bean的逻辑接口包括了它的公共方法,在本例中是sayHello()方法。client把HelloServiceBean类当做接口一样使用,不必考虑不论什么非公开的方法或实现的具体信息。

能够想象server内部向client提供了一个代理接口,这个代理覆盖业务方法以提供标准的容器服务,client将与这个代理进行交互。

无接口视图的长处之中的一个是简单。

它不须要实现一个冗余的业务接口,并进一步使得EJB看起来像是常规JavaBean类。

然而,由于无接口视图仅适用于本地回话bean。本例中採用传统样式的独立接口,从而保证无状态和有状态会话bean一致。

对于无状态会话bean类的定义仅仅须要注意两点。第一是它须要一个无參数的构造函数,可是当没有其它的构造函数时。编译器一般会自己主动生成此构造函数。第二是不应该使用静态字段,这主要是由于bean的又一次部署问题。

很多EJB容器创建一个无状态会话bean的实例池。然后选择随意的一个实例以服务每一个client请求。由于这不能保证调用之间将使用同样的状态,所以不能觉得点菜的服务员与给你上菜的服务员一定是同一个人。

时间: 2024-11-08 17:35:30

无状态会话bean(1)---定义的相关文章

无状态会话bean(1)---定义(未排版)

无状态会话bean用于完成在单个方法的生命周期内的操作.无状态bean可以实现许多业务操作,但是每个方法都不能假定任何其他的方法会在它之前调用. 这听起来像是无状态的bean的一个局限.但是这是迄今为止业务服务最常见的形式.不同于适合在对话中积累状态(如零售应用程序的购物车)的有状态会话bean,无状态回话bean旨在非常有效的执行独立操作.无状态会话bean可以在最小化对整体服务器资源影响的同时,扩展到大量的客户端. 会话bean定义分为如下两个部分: 零个或多个业务接口,定义了一个客户端在b

无状态会话bean(2)----声明周期回调(未排版)

与用于应用程序代码的常规Java类不同,服务器管理无状态会话bean的声明周期它在两个方面影响了一个bean的实现. 首先,服务器决定了创建和删除bean实例的时间.应用程序不会控制何时或者甚至创建多少特定的无状态会话bean实例,或者它们将存活多久. 第二,服务器必须在构建之后,但是在调用bean的业务逻辑之前,初始化bean服务.同样,该bean可能必须在使用业务方法之前获得可用的资源,如JDBC数据源.然而,为了使得bean获取资源,服务器必须首先完成初始化bean服务.这限制了类的构造函

EJB开发第一个无状态会话bean、开发EJB客户端

开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作. 实体Bean(Entity Bean) 它实际上属于java持久化规范(JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate.TopLink等ORM框架各自为营的局面. 消息驱动Bean(Messag

JBoss+Ant实现EJB无状态会话bean实例

EJB分为session bean.entity bean.message-driven bean,session bean又分为无状态会话bean和有状态会话bean. session bean负责与客户端交互,是编写业务逻辑的地方,在session bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过entity bean来完成对数据库的操作的. 平常,我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高.正因为一个bean实例被多

无状态会话bean(3)---远程业务接口(未排版)

迄今为止,我们只讨论了使用一个本地业务接口的会话bean.在这种情况下,本地意味着只能由运行在同一个应用程序服务器实例的JavaEE组件声明会话bean的依赖性.例如,远程客户端不可能通过本地接口使用会话bean. 为了容纳远程客户端,会话bean可以采用@Remote注解来标记它们的业务接口,以声明它是远程可用的.下面代码演示了前面所示的HelloService接口的远程版本语法.标记一个接口为远程的相当于使其扩展java.rmi.Remote接口.客户端获取的bean的引用不再是服务器上的一

有状态会话bean

在会话bean综述中,描述了无状态和有状态bean的区别在于客户端和服务器之间交互形式不同.对于无状态会话bean,交互的开始和结束都在同一个方法中.有时客户端需要发出多个服务请求(需要调用多个方法),而每个请求需要访问或者考虑前面的请求结果.有状态会话bean的出现就是为了处理这种情况,通过向客户端提供一个专用的服务(某一个可以保留前面状态的bean),当客户端获得bean的引用时启动该服务,并且只有当客户端选择结束会话时才结束.回到饭店吃饭的例子就是当你点餐的时候一个服务员在为你服务,直到你

有状态无状态回话bean

1.有状态(Stateful) 可以在不同的方法调用间保持针对各个客户端的状态 与客户端的联系必须被维持,这样做开销要大一些 有状态也可以这样理解,它存在存储能力,也就是说至少有一个属性来标识它目前的状态,例如: 注意:有状态会话bean,每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一个初始的bean. 2.无状态(Stateless) 在不同方法调用间不保留任何状态

有状态bean和无状态的bean

有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即"有状态":一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一个初始的bean. 无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用.即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用.由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean.但无状态会话bean 并非没有

Ejb in action(四)——购物车实例演示有状态会话Bean

前面.我们介绍了一个入门实例.事实上那就是无状态回话Bean的经常使用情况. 上一篇文章中.我们介绍了无状态会话Bean和有状态会话Bean的相关概念.为了加深大家对它们的理解,我们一起来实现一个有状态会话Bean的样例--模拟购物车. 这个样例很经典:一个client购物的过程中.服务端会创建一个SessionBean保存着这一client的状态.client买的东西,都会在服务端进行存储. 也就是说.自始至终,一直存在一个有状态会话Bean对象.与该client进行交互. 以下来看详细实现: