实战:将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 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

外行人都能看懂的 Spring Cloud,错过了血亏!

这篇主要来讲讲 Spring Cloud 的一些基础知识。以下是 SpringCloud GitHub Demo ,看完文章的同学可以自己练手玩玩:

873
来自专栏施炯的IoT开发专栏

Application Architecture Guide 2.0 - CH 19 - Mobile Applications(5)

本文翻译"Deployment"、"Pattern Map"、"Pattern Descriptions"和"Technology Considerations...

1867
来自专栏.NET开发者社区

推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler

在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个...

2207
来自专栏.NET开发者社区

(码友推荐)2018-07-06 .NET及相关开发资讯速递

1.Dotnet outdated helps you keep your projects up to date

733
来自专栏Titan框架

使用Titan Framework搭建一个集群Demo

Titan Framework是一款分布式微服务框架,因其具有简单的配置方式,良好的集成性、多样化的支持、丰富的自定义扩展功能,所以它是非常值得我们去应用的。也...

780
来自专栏逸鹏说道

微软分布式云计算框架Orleans(1):Hello World

自从写了RabbitHub框架系列后的一段时间内一直在思索更加轻量简便,分布式高并发的框架(RabbitHub学习成本较高),无意间在网上级联看到了很多...

3949
来自专栏SDNLAB

OpenStack TaaS反向设计

1877
来自专栏哲学驱动设计

性能优化总结(一):前言

    最近一直忙着学2010、WPF、看架构师教程、学英语,搞得都没时间写博客了。     最近在GIX4项目上做了一些性能方面的优化,为了方便和同事们分享经...

17910
来自专栏大魏分享(微信公众号:david-share)

非开发出身学JavaEE全集-上

企业应用程序的典型示例,包括企业资源规划(ERP)、客户关系管理(CRM)、内容管理系统(CMS)、电子商务系统、互联网和内联网门户。

1005
来自专栏张善友的专栏

ASP.NET 5 Beta 7 版本

在 VS2015 发布的同时,微软也发布了 ASP.NET 5 的路线图(详见 ASP.NET 5 Schedule and Roadmap : https:/...

1888

扫码关注云+社区