无状态会话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请求。由于这不能保证调用之间将使用同样的状态,所以不能觉得点菜的服务员与给你上菜的服务员一定是同一个人。

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

  1. EJB开发第一个无状态会话bean、开发EJBclient

    开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与client交互,是编写业务逻辑的地方.在会话bean中能够通过JDBC直接操作数据库.但大多数 ...

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

    EJB分为session bean.entity bean.message-driven bean,session bean又分为无状态会话bean和有状态会话bean. session bean负责 ...

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

    开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下 ...

  4. 无状态会话Bean、有状态会话Bean、CMP与BMP中,哪一种Bean不需要自己书写连接数据库的代码?

    无状态会话Bean.有状态会话Bean.CMP与BMP中,哪一种Bean不需要自己书写连接数据库的代码? A.无状态会话Bean B.有状态会话Bean C.CMP D.BMP 解答:C

  5. 无状态会话bean(3)---远程业务接口(没有排版)

    迄今为止,我们仅仅讨论了使用一个本地业务接口的会话bean.在这样的情况下.本地意味着仅仅能由执行在同一个应用程序server实例的JavaEE组件声明会话bean的依赖性.比如.远程client不可 ...

  6. (转)Spring Bean Scope 有状态的Bean 无状态的Bean

    有状态会话bean   :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一 ...

  7. 有状态的bean和无状态的bean的区别

    有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一个初 ...

  8. 有状态无状态回话bean

    1.有状态(Stateful) 可以在不同的方法调用间保持针对各个客户端的状态 与客户端的联系必须被维持,这样做开销要大一些 有状态也可以这样理解,它存在存储能力,也就是说至少有一个属性来标识它目前的 ...

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

    前面.我们介绍了一个入门实例.事实上那就是无状态回话Bean的经常使用情况. 上一篇文章中.我们介绍了无状态会话Bean和有状态会话Bean的相关概念.为了加深大家对它们的理解,我们一起来实现一个有状 ...

随机推荐

  1. CODEVS——T 1404 字符串匹配

    http://codevs.cn/problem/1404/ 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Desc ...

  2. poj 1087 A Plug for UNIX(字符串编号建图)

    A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14862   Accepted: 5026 ...

  3. JSONArray和JSONObject的简单使用

    一.为什么要使用JSONArray和JSONObject 1.后台 -->前台 能够把java对象和集合转化成json字符串格式,这样在前台的ajax方法中能够直接转化成json对象使用 ,从后 ...

  4. 利用gradle加入构建版本

    在java的程序中,貌似都没有这个构建版本的概念.用的诸如eclipse. idea和android studio的IDE也没有直接提供构建版本的选项.只是我却想在android程序的版本其中加入一个 ...

  5. 利用HTTP代理录制Jmeter脚本

    1 測试计划中加入一个线程组1 2在"工作台"-非測试元件-加入"HTTP代理server" port: 代理server的port,默认8080,可自行改动, ...

  6. Codeforces Beta Round #2 C. Commentator problem

    模拟退火果然是一个非常高端的东西,思路神马的全然搞不懂啊~ 题目大意: 给出三个圆,求一点到这三个圆的两切线的夹角相等. 解题思路: 对于这个题来说还是有多种思路的 .只是都搞不明确~~   /害羞脸 ...

  7. 绕过open_basedir读文件脚本

    绕过open_basedir读文件脚本 2016年11月13日 01:28:21 阅读数:1221 参加了一场2016年的sycsec感觉又学到不少东西 废话不多说,首先啥是open_basedir? ...

  8. hbase xshell

    用Xshell登陆linux主机后,在hbase shell下死活不能使用backspace和delete删除误输的指令,只得不停退出,重登,仔细输..又错了,再退出,再登,仔细输...又错了...又 ...

  9. Spring--之旅

    spring的地位 如图可以看出,sping纵跨整个项目架构,它是一个容器框架.下面使用一个简单的项目来认识spring. 快速入门 step 1.新建一个普通Java工程,spring只是一种容器, ...

  10. Active Data Guard

    ADG INTRODUCE Active Data Guard(ADG)是ORACLE 11g企业版的新特性,需要单独的License.可以打开Physical standby至read only模式 ...