版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/aboy123/article/details/24587133

大型业务系统面临的主要问题就是高并发性和事务訪问,client的数量与server端的分布式对象数量存在一定程度的正比关系,client数量越多。server端分布式对象也就越多。怎样解决这样的高并发的问题也就成了企业级架构首先要解决的问题。EJB作为一种server端分布式组件,为我们提供了应对策略。

EJB提供了两种管理大量分布式对象的策略:实例池化和激活。

以下分别对EJB组件模型中的三种模型进行一些分析。

第一种:无状态的会话Bean(Stateless session bean)
Stateless session bean採用池化技术来实现,stateless session bean的client不直接于bean class的实例进行通信。而是通过bean class所暴漏的远程或者本地接口来通信。再进一步的讲就是通过bean class的代理存根来与EJB容器通信。这样以来就能够为每个bean class维护一个的实例池。然后用这些实例来为大量的客户进行服务。

stateless session bean的生命周期由三个不同的状态来组成。

不存在,池化状态以及就绪状态。

不存在就说明bean class的实例还没有初始化,池化状态就说明实例已经初始化了,可是还没有与EJB Obejct关联(骨架),就绪状态说明实例已经于EJB请求关联了。能够为客户提供服务了。

另外一种:消息驱动bean。
MDB相同也採用池化技术来实现。仅仅所以能够採用池化技术,是由于MDB的client也不于详细的MDB实例进行通信,相反是通过一种松耦合的方式来实现。首先客户发送消息给EJB容器的消息目的地,然后EJB容器再将消息发送到详细订阅此目的地的MDB实例。

相同的道理,EJB容器也为每个MDB class维护一个实例池,当有消息发送到此MDB订阅的目的地时,EJB容器就会挑选一个MDB class的实例来接受和处理消息。

第三种:有状态的会话bean (Statefull session bean)

与stateless bean 和MDB不同,Statefull session bean採用激活机制来实现,为什么採用激活机制来实现,是由于有状态的会话bean要维护于client的会话状态,每个实例仅仅能服务于同一个client。

MDB採用激活机制来减少server资源的消耗,当EJB容器资源不够的时候。它就会选择一些能被钝化的实例。将其序列化到磁盘上,当须要的时候,再将其从磁盘恢复到内存中。

综上所述。client与EJB组件进行通信时,它们事实上都不是直接于bean class的实例进行通信,而是通过本地的代理存根于server端的骨架进行通信,而骨架再将详细的EJB请求托付给详细的bean class的实例来响应。

EJB3.0中的session bean以及MDB解析的更多相关文章

  1. Hibernate3.0中的session.find()问题

    我被Session.find()的方法困扰了好几天,今天才看到新的Hibernate里没有了Session.find()方法. 现在转载在此,方便你我. 查询性能往往是系统性能表现的一个重要方面,查询 ...

  2. 菜鸟调错(二)——EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常

    在部署EJB的消息驱动Bean时遇到了如下的错误: ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2 ...

  3. EJB3.0

    由于EJB2.0的复杂性,在Spring和Hibernate[1]  等轻量级框架出现后,大量的用户转向应用轻量级框架.在大家的呼声中, EJB 期待已久的EJB3.0规范终于发布了.在本文中将对新的 ...

  4. POJO应用框架:Spring与EJB3.0的比较

    英文原文地址:http://www.onjava.com/pub/a/onjava/2005/06/29/spring-ejb3.html中文地址:http://www.matrix.org.cn/r ...

  5. JavaEE(19) - Web层和EJB的整合(Session Bean)

    1. 通过依赖注入访问无状态Session Bean #1. EJB注入Servlet中 #2. EJB注入JSF中 2. 通过EJB引用访问有状态Session Bean 3. 在工具类中访问Ses ...

  6. 第四章 在MVC4.0中对脚本以及样式表的引用变化

    原文:http://www.cnblogs.com/xdotnet/archive/2012/07/21/aspnet40_webpage20.html 一.可以直接使用“~”,而无需使用Href对象 ...

  7. Spring源码分析(七)bean标签的解析及注册

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 在上一篇中提到过Spring中的标签包括默认标签和自定义标签两种,而两种 ...

  8. EJB3.0 EJB开发消息驱动bean

    (7)EJB3.0 EJB开发消息驱动bean JMS 一: Java消息服务(Java Message Service) 二:jms中的消息 消息传递系统的中心就是消息.一条 Message 由三个 ...

  9. MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题

    ///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...

随机推荐

  1. Go语言学习笔记(二) [变量、类型、关键字]

    日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号.   2.Go 同其他语言不同的地方在于变 ...

  2. MVC分部视图@Html.Partial

    加载分布视图的方式: //1.以视图名使用当前文件夹下的视图(如果没有找到,则搜索 Shared 文件夹) @Html.Partial("_test") //加载对应文件 /Vie ...

  3. LINQ 小项目【组合查询、分页】

    使用 linq 在网页上对用户信息增删改,组合查询,分页显示 using System; using System.Collections.Generic; using System.Linq; us ...

  4. 【Quartz】问题记录注意事项【四】

    记录一:queartz 在同时启动多个任务是,触发器名称不能设置一致,不然第二次启动会不成功 记录二:quartz 在使用任务与触发器分离写法时,任务必须要带(.StoreDurably()) IJo ...

  5. IBatisNet动态update以及DateTime类型字段处理

    在维护一个老项目中碰到的问题.SQL配置如下(只简单列出两个字段): <update id="ProjectInfo.Update" parameterClass=" ...

  6. 4.移植uboot-使uboot支持DM9000网卡

    在上一章,使uboot能够支持nor.nand 本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件 首先uboot已带有dm9000网卡的驱动,位于drivers/net/下的d ...

  7. 【Java基础】4、java中的内部类

    内部类的分类:常规内部类.静态内部类.私有内部类.局部内部类.匿名内部类. 实例1:常规内部类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

  8. JavaScript的值传递和引用传递

    译者按: 程序员应该知道递归,但是你真的知道是怎么回事么? 原文: All About Recursion, PTC, TCO and STC in JavaScript 译者: Fundebug 为 ...

  9. CentOS 通过yum来升级php到php5.6,yum upgrade php 没有更新包

    在文章中,我们将展示在centOS系统下如何将php升级到5.6,之前通过yum来安装lamp环境,直接升级的话,提示没有更新包,也就是说默认情况下php5.3.3是最新 1.查看已经安装的php版本 ...

  10. 【读书笔记】iOS-移动开发

    一,iPhone 为iPhone编写基于Web的应用程序非常简单.Safari Web浏览器是一款很优秀的工具-它能够完美地对基于Web的应用程序进行缩放,以便在iPhone大小的屏幕上运行.Safa ...