【EJB】(二)EJB的三种Bean

2024-08-25 17:32
文章标签 三种 bean ejb

本文主要是介绍【EJB】(二)EJB的三种Bean,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上篇博客,我们对EJB进行了简单的介绍,这篇博客我们来简单介绍一下EJB的三种Bean。

一、Session Bean
       会话Bean,实现会话中的业务逻辑,每当客户发出一个请求,容器会选择一个Session Bean来为客户端服务,客户端通过调用Session Bean的方法来访问数据库。

       Session分为有状态Bean和无状态Bean。我们最常用的是无状态Bean。
       无状态的Session Bean主要用来实现单次使用的服务,该服务能够被启用多次,但是由于无状态Session Bean并不保存任何有关状态的信息,其效果是每次调用提供单独的使用。无状态的Session Bean分为两种Local接口和Remote接口。

Remote接口:

@Stateless  
@Remote
public class HelloworldBean implements Helloworld{    public String sayHello(String name){  return name + "您好!";      }  
}
local接口:

@Stateless
@Local  
public class HelloworldBean implements Helloworld{    public String sayHello(String name){  return name + "您好!";      }  
}

        有状态的Session Bean是可以维护自身状态的,每个客户都有自己的实例,在用户保存生命周期内,有状态的Session Bean保持了用户的信息,即“状态”。
        建议采用有状态的Session Bean的情况:1.·Bean需要描述一个于特定客户端的会话状态;2.Bean需要在客户端的多个方法调用之间保存调用信息;3.Bean作为应用程序的其他组件和客户端的中介者,呈现一个简单化的视图给客户端;4.在调用接口里,Bean管理很多企业Bean的工作流。


二、Entity Bean
       实体Bean,实现一个业务实体。Entity Bean代表真实物体的数据,Entity Bean是持久化的数据组件,代表持久存储的商业实体对象。通常情况下,每个Entity Bean对应于关系数据库中的单张表,Entity Bean的单个实例对应于表中的某一条数据。

       根据永久保存方式的不同,分为BMP(Bean-Managed-Persistence 组件管理持久性)和CMP(Container-Managed-Persistence 容器管理持久性)两种。它们所实现的目的是相同的,都在于提供数据。但是这二者还存在差别,就是在于它们维护数据的角色不同。其中,BMP是由Bean自行维护数据的一致性,而CMP是有EJB容器来维护的。在BMP方式下,需要这类Bean的程序设计人员通过撰写代码来获取数据。EJB容器只会通知BMP何时可以安全的在数据库中增删改查数据,除此之外不会给予其他的协助。而在CMP方式下,CMP内并没有与数据存储有关的代码。

        在EJB3.0中,Entity Bean仅作为普通的Java对象来使用,它负责跟数据库表进行对象与关系映射(O/R Mapping)。而且EJB3.0可以通过注解来映射实体:@Entity来表示这个实体是Entity Bean,@Table表示实体对应数据库的表名,@Id表示这个Bean的主键,@Column表示属性对应数据库的字段。具体参考以下代码(set get方法省略):

@Entity
@Table(name = "TB_MajorChooseCourseTime")public class MajorChooseCourseTime{@Id(name = "Id", length = 50)private String Id;@Column(name = "beginChooseTime", length = 50)private String beginChooseTime;@Column(name = "endChooseTime", length = 50)private String endChooseTime;@Column(name="isDelete",length = 50)private int isDelete;}

三、MessageDriven Bean

       消息Bean作为JMS(Java Message Service)Java消息服务的API的监听者,异步处理其中的消息。

怎么理解JMS呢?JMS就是消息服务,一个与平台无关的API,是Java平台上有关面向消息中间件的技术规范。         MessageDriven Bean是用来专门处理基础消息请求的组件,能够轻松的与其他EJB交互。消息驱动Bean具有处理大量并发消息的能力,并且如果一个消息执行很长时间而执行结果无需向用户实时反馈时,也非常适合使用消息驱动Bean,它能够避免客户端长时间等待一个方法调用直到返回结果。比如订单成功后向用户发送一封电子邮件或短信等.

         JMS有两种工作模型:点对点P2P模型和发布/订阅模型。

1.点对点模型。

        P2P模型中有发送者、接收者和消息队列。每个消息只有一个消费者,即消息一旦被消费,消息就不会再在消息队列中;消息的发送者和接收者不存在时间上的依赖性,也就是说当发送者发送了消息之后,不论接收者有没有正在运行,都不影响消息被发送到队列中;接收者在成功接收了消息之后,需要给队列应答成功;每个消息都被发送到一个特定的消息队列中,接收者从消息队列中获取消息,消息队列保留着消息,直到它们被消费或超时。


2.发布/订阅模型。

       Pub/Sub模型中有主题、发布者、订阅者。客户端发送消息到主题,多个发布者将消息发送到主题,系统将这些消息传递给多个订阅者。其中每个消息可以有多个消费者;发布者和订阅者之间有时间上的依赖性,针对某个主题的订阅者,他们必须建立一个订阅之后才能消费发布者的消息,并且为了消费消息,订阅者必须保持运行的状态。



小结:

1.每一种Bean都有各自不同的用法,这一点的区别还是很明显的。在合适的地方做合适的事情!

2.J2EE不是必须使用EJB,EJB并不是实现远程调用的唯一途径。在合适的需求下选择合适的框架!

这篇关于【EJB】(二)EJB的三种Bean的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106197

相关文章

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模

SpringIOC容器Bean初始化和销毁回调方式

《SpringIOC容器Bean初始化和销毁回调方式》:本文主要介绍SpringIOC容器Bean初始化和销毁回调方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录前言1.@Bean指定初始化和销毁方法2.实现接口3.使用jsR250总结前言Spring Bea

Spring实现Bean的初始化和销毁的方式

《Spring实现Bean的初始化和销毁的方式》:本文主要介绍Spring实现Bean的初始化和销毁的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Bean的初始化二、Bean的销毁总结在前面的章节当中介绍完毕了ApplicationContext,也就

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J