实战:将POJO类转换为EJB | 从开发角度看应用架构6

一、POJO、EJB和事务

企业Java Bean(EJB)是一种可移植的Java EE组件,通常用于在企业应用程序中封装业务逻辑。它运行在应用程序服务器上,可以被远程客户端以及在同一个JVM进程中本地运行的其他Java EE组件使用。

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。

EJB为企业应用程序提供了多线程,并发性,事务和安全性,而不需要开发人员明确地为这些功能编写代码。此外,开发人员可以声明性地向EJB添加注释,以将业务方法公开为Web服务端点。

有两种不同类型的EJB:会话Bean和消息驱动Bean(MDB)。会话bean可以有三种类型:无状态会话Bean(SLSB)、有状态会话Bean(SFSB)和Singleton会话Bean。

消息驱动Bean(MDB)使Java EE应用程序异步处理消息。 MDB侦听JMS消息。对于收到的每条消息,它都会执行一个操作。 MDB为应用程序开发提供事件驱动的松散耦合模型。

如果EJB客户端和EJB在同一个JVM进程中本地运行,则客户端可以使用@EJB注释直接向EJB引入注入。如果客户端是远程的,则使用JNDI查找。

应用程序中的EJB组件在应用程序服务器内的容器上下文中运行。容器负责管理EJB的生命周期(创建,执行和销毁)。每种不同类型的EJB(无状态,有状态,单例,MDB)都有其自己的生命周期。

Java EE支持Transactions,通过控制对数据的并发访问来确保数据完整性,并确保失败的业务事务不会使系统处于不一致或无效状态。

在Java EE中,可以通过两种不同的方式管理事务:容器管理事务(CMT)和Bean管理事务(BMT)。

在CMT中,应用程序服务器在没有开发人员编写任何显式代码的情况下管理事务,并且可以使用事务属性来控制范围。应用程序服务器在遇到故障或异常时可以自动执行回滚。

在BMT中,开发者负责管理交易并完全控制交易范围。如果发生异常或失败,开发人员必须手动提交和回滚事务。

二、实验展现:POJI到EJB的转换

通过JBDS导入一个已经存在的maven项目:

查看源码:Item.java类。这个类在应用程序中建模一个todo项目。它有三个属性:一个id,一个描述和一个表示任务是否完成的布尔属性。

如下图箭头所示:

查看:ItemRepository.java

该类模拟内存数据库并存储待办事项列表。它具有添加项目,查看单个项目和查看所有项目列表的方法。 注意到这个类用@ApplicationScoped注解,这意味着只要应用程序在应用程序服务器上部署并运行,该类的对象就保持在作用域(活动)中。

注意到seedTodoList()方法已用@PostConstruct注解。一旦该类被初始化,这个方法用三个项目填充待办事项列表。

ItemService.java类,它是一个简单的POJO类,它包含添加待办事项的方法,查看待办事项和列出所有待办事项。

注意到这个类注入ItemRepository类并调用它的方法来添加,查看和列出所有todo项目。

接下来,我们把POJO转化为无状态的 EJB.

使用@Stateless注释标注ItemService类以将此POJO转换为EJB。

查看ItemResourceRESTService类,它为前端用户界面提供了REST端点(基于AngularJS)。该文件位于rest文件夹中。

注意到这个类需要使用ItemService EJB来调用EJB的方法,并向前端层提供JSON响应。

将ItemService EJB注入到ItemResourceRESTService类中。

将@EJB注释添加到ItemService声明中。

接下来,启动EAP:

通过运行以下命令来构建和部署EJB到JBoss EAP:

查看EAP日志:

访问应用:

我们添加条目,然后观察日志:

查坎EAP日志:

整体调用逻辑:

魏新宇

  • "大魏分享"运营者、红帽资深解决方案架构师
  • 专注开源云计算、容器及自动化运维在金融行业的推广
  • 拥有MBA、ITIL V3、Cobit5、C-STAR、TOGAF9.1(鉴定级)等管理认证。
  • 拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、AIX、HPUX等技术认证。

原文发布于微信公众号 - 大魏分享(david-share)

原文发表时间:2018-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ryan Miao

使用dropwizard(3)-加入DI-dagger2

前言 习惯了Spring全家桶,对spring的容器爱不释手。使用dropwizard,看起来确实很轻,然而,真正使用的时候不得不面临一个问题。我们不可能一个...

28470
来自专栏java系列博客

Java面试通关要点汇总集之框架篇参考答案

23240
来自专栏java一日一条

Spring面试问答

Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于...

12910
来自专栏Android 研究

Android跨进程通信IPC之7——Binder相关结构体简介

binder_node 代表的是Binder实体对象,每一个service组件或者ServiceManager在Binder驱动程序中的描述,Binder驱动通...

13720
来自专栏潇涧技术专栏

Art of Android Development Reading Notes 2

(1)任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道、共享内存、信号量等来进行进程间通信。 (2)Android系统不仅可以使用Bin...

9520
来自专栏钟绍威的专栏

锁原理:偏向锁、轻量锁、重量锁1.加锁2.撤销偏向锁1.加锁2.解锁3.膨胀为重量级锁

 java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开始都是无锁的,随着线程间争夺锁,越激烈,锁的级...

1.1K50
来自专栏用户2442861的专栏

25个经典的Spring面试问答

本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题,这些问题有可能在你下次面试时就会被问到。对于本文中未提及的Spring其他模块,我会单独分...

11520
来自专栏进击的程序猿

第1章: Spring 基础第1章:Spring 基础

为了体验spring,所以建立的是一个 maven quick start 的项目,建立后的 pom.xml 配置如下:

10540
来自专栏猿天地

高性能NIO框架Netty入门篇

Netty介绍 Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服...

399100
来自专栏互联网杂技

SpringBoot ( 二 ) :web 综合开发

spring boot web开发非常的简单,其中包括常用的json输出、filters、property、log等。

12730

扫码关注云+社区

领取腾讯云代金券