`
lbfhappy
  • 浏览: 83251 次
社区版块
存档分类
最新评论

关于session bean的一些细节

阅读更多

session BEAN一般用于操作一些对外的方法,供客户调用.会话BEAN分两种,一种 是有状态的会话BEAN,一种 是无状态的会话BEAN,它们有什么不同呢?

有状态的会话BEAN,会记录每一个调用者的状态,每个人都有一个自己的实例,相比之下,它比较耗内存.一般用于做专用的事情
无状态的会话BEAN,则不会记录每一个调用者的状态,所有人共有一个实例,所以它不耗内存,一般用于做一些通用的事情

会话BEAN中有一种叫定时服务,并不是所有的会话BEAN都可以有定时服务器,而只有无状态的会话BEAN可以有定时的服务,如果调用的是有状态的会话BEAN的话,那么运行时就会出异常,不知道是不是有状态的会话BEAN不允许有定时服务.对于会话BEAN,我们可以掌握它的生命周期

EJB容器创建和管理session bean实例,有些时候,你可能需要定制 session bean的管理过程。例如,你可能想在创
建session bean实例的时候初始化字段变量,或在bean实例被销毁的时候关掉外部资源。上述这些,你都可能通过
在 bean 类中定义生命周期的回调方法来实现。这些方法将会被容器在生命周期的不同阶段调用(如:创建或销
毁时)。通过使有下面所列的注释,EJB 3.0允许你将任何方法指定为回调方法。这不同于 EJB 2.1,EJB 2.1中,
所有的回调方法必须实现,即使是空的。EJB 3.0中,bean可以有任意数量,任意名字的回调方法。
·@PostConstruct:当bean对象完成实例化后,使用了这个注释的方法会被立即调用。这个注释同时适用于
有状态和无状态的会话bean。
·@PreDestroy:使用这个注释的方法会在容器从它的对象池中销毁一个无用的或者过期的 bean 实例之前调
用。这个注释同时适用于有状态和无状态的会话 bean。
·@PrePassivate:当一个有状态的session bean实例空闲过长的时间,容器将会钝化(passivate)它,并把它的
状态保存在缓存当中。使用这个注释的方法会在容器钝化bean实例之前调用。这个注释适用于有状态的会话bean。
当钝化后,又经过一段时间该 bean 仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对该 bean
方法的调用容器都会抛出例外。
·@PostActivate:当客户端再次使用已经被钝化的有状态 session bean 时,新的实例被创建,状态被恢复。
使用此注释的session bean会在bean的激活完成时调用。这个注释只适用于有状态的会话 bean。
·@Init:这个注释指定了有状态session bean初始化的方法。它区别于@PostConstruct注释在于:多个@Init
注释方法可以同时存在于有状态session bean 中,但每个 bean实例只会有一个@Init注释的方法会被调用。这取
决于bean是如何创建的(细节请看EJB 3.0规范)。@PostConstruct在@Init之后被调用。
 
另一个有用的生命周期方法注释是@Remove,特别是对于有状态 session bean。当应用通过存根对象调用使用了
@Remove注释的方法时,容器就知道在该方法执行完毕后,要把 bean实例从对象池中移走。

这里要注意的一点是,对于无状态的会话BEAN,即使你调用了标记为@Remove的方法,这个会话BEAN依然有效,所以,这个注释应该用在有状态的会话BEAN中,这样当你调用了它所标记的方法 后,再调用这个会话BEAN的其它方法就会抛出一个异常
javax.ejb.EJBNoSuchObjectException: Could not find Stateful bean:它会说找不到这个有状态的会话BEAN了,因为这个时候经过你调用了标记为@Remove的方法后,EJB容器已经将它销毁了,以后的任何调用都是无效的了,这样有利于我们更好的掌握会话BEAN的生命周期,免得产生很有有状态的会话BEAN的时候,过多的消耗服务器的内存.

分享到:
评论

相关推荐

    Session Bean的使用

    JavaBean和Session Bean是Java企业级应用开发中的重要概念,特别是在使用Enterprise JavaBeans(EJB)技术时。本文将深入探讨这两个概念,以及如何在实际项目中使用它们。 首先,让我们了解什么是JavaBean。...

    EJB3.0开发Session Bean.rar

    无状态Session Bean不保留任何关于客户端的信息,而有状态Session Bean可以存储客户端特定的信息,以提供个性化的服务。 **3. Session Bean的类型** - **无状态Session Bean (Stateless Session Bean)**:每个...

    EJB的开发及应用,Session Bean的开发

    3. **部署描述符** - 编写ejb-jar.xml文件,其中包含关于EJB的元数据,如Bean的类型、JNDI名称等。 4. **容器配置** - 在应用服务器中配置EJB容器,指定EJB的部署位置和资源。 5. **客户端调用** - 客户端通过JNDI...

    EJB详解 sessionbean entitybean MDB

    它可以是无状态的(Stateless Session Bean),为每个请求创建新的实例,或者有状态的(Stateful Session Bean),维护与特定客户端会话的状态。 - **Entity Bean**:用于表示数据库中的持久化对象,实现业务实体的...

    EJB的编程规则之Session Bean

    **Session Bean编程规则详解** Session Bean是Enterprise JavaBeans (EJB)的一种重要组件,它主要负责实现业务逻辑,处理客户端的请求。Session Bean不直接映射数据库中的共享数据,其状态是非持久化的,不需要写入...

    EJB3.0开发Session Bean

    1. **创建SessionBean**:在建模透视图中,通过选择SessionBean图标并在画图区域单击,创建一个新的SessionBean。随后,修改SessionBean的属性。 2. **添加业务方法**:在EJB3.0中,SessionBean可以被视为普通的Java...

    基于Java的EJB中有、无状态SessionBean的两个例子.zip

    本资料包"基于Java的EJB中有、无状态SessionBean的两个例子.zip"包含的是关于有状态和无状态SessionBean的实例代码,帮助开发者理解和掌握这两种类型SessionBean的用法。 1. **无状态SessionBean(Stateless ...

    基于Java的实例开发源码-EJB中有、无状态SessionBean的两个例子.zip

    本实例主要探讨了两种类型的SessionBean:有状态和无状态。 1. 有状态SessionBean(Stateful Session Bean,SFSB) 有状态SessionBean维护了与客户端会话的状态信息。这意味着当一个客户端与SFSB交互时,它保留了...

    Bean开发实例之二有状态会话Bean开发实例

    public class CartBean implements javax.ejb.SessionBean, java.io.Serializable { private String cardHolderName; private String creditCardNumber; private Vector<Item> items; public void ejbCreate...

    EJB3.0源代码,包含会话Bean,实体Bean,还有消息Bean

    - **有状态会话Bean (Stateful Session Beans)**: 能够保持与特定客户端会话的状态,通常用于管理购物车或游戏状态等场景。 2. **实体Bean (Entity Beans)** - **容器管理的持久性 (Container-Managed ...

    整合SRPING 基于REDIS共享SESSION

    在实际应用中,你可能还需要考虑更多细节,例如Redis的集群配置、Session的过期策略、安全性和性能优化等。Spring Session提供了丰富的API和配置选项,可以根据具体需求进行定制。通过不断学习和实践,你可以更好地...

    ebj设计模式

    单例Session Bean模式用于在整个应用中提供唯一实例的服务。它避免了创建多个Bean实例可能导致的资源浪费和状态不一致问题。在EJB 3.1中,可以通过@Singleton注解来声明一个单例Session Bean。 2. **无状态 ...

    java Web 购物网站jsp+servlet+bean

    总之,这个基于jsp+servlet+bean的Java Web购物网站项目,是一个很好的学习和实践平台,它涵盖了Web开发的基本技术,也涉及到了实际应用中的诸多细节。通过学习和分析这个项目,开发者能够提升自己的Java Web开发...

    springboot2.0.3 的redis共享session的demo

    4. **启用RedisSessionRepository**: 在Spring Boot的主配置类中,我们需要配置`RedisHttpSessionConfiguration`,这样Spring Boot就会自动配置好session存储到Redis的相关细节。 ```java @Configuration public...

    EJB简介Enterprise Java Bean 下载

    1. 会话Bean(Session Bean):代表一个客户端会话,可以是无状态的(Stateless Session Bean),每个调用都是独立的,或者有状态的(Stateful Session Bean),能保持与特定客户端的会话状态。 2. 消息驱动Bean...

    ejb面试资料主要为选择题不定向选

    - Session Bean的Bean类需要实现`SessionBean`接口,而Entity Bean的Bean类需实现`EntityBean`接口。 2. **创建方法和异常**: - Session Bean和Entity Bean的Remote Home或Local Home都必须定义`create`方法,...

    Java面试题强化版

    8. **EJB客户端访问后台EJB的代码**:这部分内容未提供具体细节,通常涉及JNDI查找、调用Home接口创建Bean实例,然后通过组件接口调用业务方法。 9. **有状态Session Bean与无状态Session Bean**: - 有状态...

    Jboss EJB3.0教程

    - 包括如何使用Session Bean和Message Driven Bean等。 - **使用Message Driven Bean**: - 继续探讨如何利用Message Driven Bean提高Web应用的性能和可扩展性。 综上所述,本教程不仅提供了EJB3.0的核心技术...

Global site tag (gtag.js) - Google Analytics