关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程教程 > 技术文章 > 正文

企业版Java平台概要文件

guanshanw 2023-09-12 10:51 47 浏览 0 评论

平台概要文件(platform profile)包含的以下必要规范:Activation, Authentication, Authorization, Batch, Bean Validation, Common Annotations, Concurrency, Connectors, CDI, Java Debugging Support for Other Languages, DI, EJB, EL, Interceptors, JSONP, JSONB, Mail, Managed Beans, JMS, JPA, JAX-RS, Security, Servlet, JSF, JSP, JSTL, JTA, WebSocket。

可选规范包含:JAX-WS, SAAJ, JAXB, Enterprise Web Services。

  1. EJB

Java Beans 起初的设计目标是用于可视化工具里的可重用软件组件。

字段有公开的get和set方法则称之为属性(property)。 如果属性类型为数组,则称之为可索引属性(indexed property),并可以提供带索引的get和set方法。 如果属性的值改变会产生事件,则称为绑定属性(bound property)。如果任意事件监听做出否决,值不会被修改,则被称为受限属性(constraint property)。

任何非属性定义(即属性的get和set方法)的公开方法称为java bean方法(method)。

一个bean类可以产生任意多个事件(event),相关方法命名遵循一定格式,如事件为ActionEvent,方法为addActionListener、removeActionListener。监听器必须是java.util.EventListener子类。

Managed Beans 规范定义了受Jakarta EE容器管理的应用组件其基本的编程模型,大部分java类(要求非内部类、非抽象类、非jakarta.enterprise.inject.spi.Extension实现、所在包任意类都没有jakarta.enterprise.inject.Vetoed注解标记、有无参构造函数或构造函数参数有Inject注解),包括EJB都属于Managed Beans。 Managed Beans支持资源注入、生命周期回调以及拦截器。

CDI完整环境,有Decorator注解的抽象类也属于Managed Bean!

EJB 即Enterprise JavaBeans,实现EJB技术的Jakarta EE组件称之为Enterprise beans。 它屏蔽了事务管理、多线程、连接池、安全等低级API细节,简化了大型、分布式应用的开发工作。

Enterprise Beans架构定义了三种类型对象:会话bean(Session Bean)、消息驱动bean(Message-Driven Bean)、实体bean(Entity Bean,可选,只能打包在ear)。

Session bean代表一个单一的客户端执行,它生命周期相对短暂(通常与交互式会话绑定,数据不会持久化)、可以与事务相关、可以修改数据库的共享数据,可以实现web service。 当容器崩溃时,它也会被移除;当客户端重新连接时,它被重新生成。 Session bean可以根据是否保存会话状态分为stateful session bean和stateless session bean,新规范还定义了singleton session bean。 Session bean可以有三种客户端:remote client(可以是部署在同一个容器或不同容器的session bean,也可以是java application、applet、servlet), local client(必须同一JVM,可以是其它Enterprise Beans或web组件), webservice client(无状态会话bean或单例会话bean才存在)。 新版本规范中,客户端可以通过jakarta.ejb.EJB或JNDI(javax.annotation.Resource, jakarta.xml.ws.WebServiceRef)直接注入业务接口。

旧版本规范要求客户端先获取session bean的home接口(新版本兼容用jakarta.ejb.RemoteHome或jakarta.ejb.LocalHome注解;旧版本需继承jakarta.ejb.EJBHome或jakarta.ejb.EJBLocalHome),home接口通常定义了create、find、remove方法。 通过home接口再得到业务接口(新版本称之为component interface,使用jakarta.ejb.Remote或jakarta.ejb.Local注解;旧版本为local或remote,需继承jakarta.ejb.EJBObject或jakarta.ejb.EJBLocalObject)的引用。 开发者编写的session bean(新版本需要jakarta.ejb.Stateful或jakarta.ejb.Stateless或jakarta.ejb.Singleton注解,一般实现业务接口;旧版本要求实现jakarta.ejb.SessionBean,没有直接实现业务接口,但有业务接口的实现方法)。 Session bean支持钝化(passivate)与激活(activate),即保存到次级存储或从次级存储恢复。 当操作发生时容器会触发相应回调,开发者可以通过jakarta.ejb.PrePassivate和jakarta.ejb.PostActivate来处理。 此外,可以使用注解来标记会话bean的生命周期:create(jakarta.ejb.Init)、remove(jakarta.ejb.Remove)等。 特别的,对于无状态会话bean,在事务开启或结束前后,可以通过jakarta.ejb.AfterBegin、jakarta.ejb.BeforeCompletion、jakarta.ejb.AfterCompletion注解来注册回调。

旧规范的命名约定以业务接口名为BusinessDomain举例,则home接口为BusinessDomainHome,对应的session bean命名为BusinessDomainBean。

Message-Driven Bean为应用提供异步处理消息的能力,它是无状态的,可以是事务相关,可以更新数据库共享数据,通常作为JMS消息监听器。

session bean同步方式发布或订阅消息,而message-driven bean是异步的。

Entity Bean是领域模型,为数据库数据提供对象视图,生命周期通常较长。已提交事务的实体不会因容器崩溃而导致实体及主键的信息丢失。 Entity Bean的持久化可以由容器管理(Container-Managed Persistence)或开发者管理(Bean-Managed Persistence)。

  1. JMS

JMS即Java Message Service API,为开发者提供了异步创建、发送及接收消息的通用方式。其参考实现为Eclipse OpenMQ。

JMS支持两种风格的消息:通过队列(queue)作为中介的点对点(point-to-point)方式消息,通过主题(topic)作为中介的发布订阅(pub/sub)方式消息。 发布订阅方式下一个客户端发送的消息可以被投递到多个客户端。

旧规范的API较为复杂,需要通过ConnectionFactory创建Connection,通过Connection创建Session,通过Session可以创建Message、MessageProducer或MessageConsumer。 Producer将消息发送到Destination,Consumer从Destination接收消息。

新规范允许直接从ConnectionFactory创建JMSContext,通过JMSContext创建Message、JMSProducer或JMSConsumer。如下图:


JMS

spring-cloud-stream & spring-messaging

备注

定义消息连接

jakarta.jms.JMSConnectionFactoryDefinition



注入消息上下文

jakarta.jms.JMSConnectionFactory


JMS通过Inject注解和JMSConnectionFactory合用可注入JMSContext,可通过Resource注入ConnectionFactory

发布者

jakarta.jms.JMSProducer

java.util.function.Supplier
org.springframework.cloud.stream.function.StreamBridge

spring-cloud-stream配置形如"--spring.cloud.stream.bindings.{bean}-out-{index}.destination"

订阅者

jakarta.jms.JMSConsumer

java.util.function.Consumer

spring-cloud-stream配置形如"--spring.cloud.stream.bindings.{bean}-in-{index}.destination"

topic

jakarta.jms.Topic


JMS通过Resource注解注入topic;spring-cloud-stream使用配置

queue

jakarta.jms.Queue


JMS通过Resource注解注入queue

消息

jakarta.jms.Message


JMS消息分为消息头和消息体;spring-cloud-stream支持使用POJO作为消息,框架根据媒体类型自动序列化/反序列化

事务

jakarta.ejb.TransactionAttribute



安全

jakarta.jms.JMSPasswordCredential



接收策略

jakarta.jms.JMSSessionMode


spring-cloud-stream支持拉取(poll)

发送策略

jakarta.jms.JMSProducer.setDeliveryMode


JMS同时支持同步发送和异步发送

发送异常处理

jakarta.jms.CompletionListener



投递策略

at-most-once
once-and-only-once



优先级

jakarta.jms.Message.setJMSPriority



延时投递

jakarta.jms.JMSProducer.setDeliveryDelay



死信

-



过期时间

jakarta.jms.JMSProducer.setTimeToLive
jakarta.jms.Message.setJMSExpiration



request-reply

jakarta.jms.Message.setJMSCorrelationID
jakarta.jms.Message.setJMSReplyTo



wire protocol

-

org.springframework.messaging.converter.MessageConverter


负载均衡

-



消息筛选

SQL92


JMS允许客户端通过消息头使用SQL92子集来过滤感兴趣的消息

spring-cloud-stream的分区、死信队列、负载均衡等依赖提供的Binder(Kafka, RabbitMQ等)。

对于分布式消息,需要使用JMS对应的XA接口!

JMS预定义了请求头:JMSDestination、JMSDeliveryMode、JMSMessageID、JMSTimestamp、JMSCorrelationID、JMSReplyTo、JMSRedelivered、JMSType、JMSExpiration、JMSPriority。

  1. Batch

Batch规范定义了一个可以在XML中编排批处理任务的Java API和基于XML的JSL(job specification language)。它的参考实现为IBM jbatch。

规范指定由JobOperator来启动任务,任务元数据来源于JobRepository,一个Job有许多的Step,每个Step可以是ItemReader、ItemProcessor、ItemWriter其一。 每个Job每次执行有对应的JobInstance和JobParameters,每个JobInstance有对应的一个或多个(restart)JobExecution来记录执行信息。


Batch

spring-batch

备注

任务启动器

jakarta.batch.operations.JobOperator

org.springframework.batch.core.launch.JobLauncher


任务

< job id="" restartable="true" />

org.springframework.batch.core.Job


任务上下文

jakarta.batch.runtime.context.JobContext

org.springframework.batch.core.scope.context.JobContext


任务监听

jakarta.batch.api.listener.JobListener

org.springframework.batch.core.JobExecutionListener

spring-batch支持使用注解在任务前后、异常时处理

步骤

< step id="" />

org.springframework.batch.core.Step


步骤上下文

jakarta.batch.runtime.context.StepContext

org.springframework.batch.core.scope.context.StepContext

spring-batch定义了JobScope、StepScope

步骤监听

jakarta.batch.api.listener.StepListener

org.springframework.batch.core.StepListener


获取数据

jakarta.batch.api.chunk.ItemReader

org.springframework.batch.item.ItemReader


获取数据监听

jakarta.batch.api.chunk.listener.ItemReadListener

org.springframework.batch.core.ItemReadListener

Batch/spring-batch支持重试、跳过监听,spring-batch支持使用注解在读取前后、异常时处理

处理数据

jakarta.batch.api.chunk.ItemProcessor

org.springframework.batch.item.ItemProcessor


处理数据监听

jakarta.batch.api.chunk.listener.ItemProcessListener

org.springframework.batch.core.ItemProcessListener

Batch/spring-batch支持重试、跳过监听,spring-batch支持使用注解在处理前后、异常的监听

保存数据

jakarta.batch.api.chunk.ItemWriter

org.springframework.batch.item.ItemWriter


保存数据监听

jakarta.batch.api.chunk.listener.ItemWriteListener

org.springframework.batch.core.ItemWriteListener

Batch/spring-batch支持重试、跳过监听,spring-batch支持使用注解在写前后、异常时处理

分片

jakarta.batch.api.partition.PartitionMapper



Batch规范通过在XML配置一个批处理任务的开始(start)、执行下一步(next)、条件选择(<next on="{exit status}" to="{id}" />)、终止(stop)、结束(end)、成功、失败(fail),及流程(flow)、分叉(split)、决策(decision)这些特殊步骤。 而spring-batch完全通过构建任务时通过Java API指定。

spring-batch也实现了Batch规范。spring-batch定义了批处理任务的表结构。

  1. Activation & JavaMail & Connectors

JAF即Java Activation Framework,Activation规范允许从任意数据源(DataSource)通过DataContentHandler知悉MIME类型和访问内容,支持发现JavaBeans的可用操作(CommandInfo)并实例化。

JavaMail规范为电子邮件及消息传递定义了平台无关、协议无关的框架。开发者可以通过建立会话(Session)来获取信箱(Store), 通过指定收件箱(Folder)及对应的位置得到信件(Message),再获取信件主题、内容和附件(如果存在)等信息。 也可以创建信件,指定收件人地址(Address),然后从会话获取传输工具(Transport)投递出去。

Connectors规范定义企业Java应用组件与EIS(Enterprise Information Systems,如ERP、交易处理系统、遗留的数据库系统)系统互联的标准架构。 该架构包含两部分,一个由EIS产商提供的资源适配器(resource adapter),一个允许资源适配器插入的应用服务器(application server)。 架构定义了诸如事务(transaction)、安全(security)、连接管理(connection management)、资源适配器生命周期管理(lifecycle management)、任务管理(work management)的一系列约定,供应用服务器和EIS系统通过资源适配器进行双向通信。 部署在应用服务器的应用组件可以通过通用客户端接口(Common Client Interface)与资源管理器交互,或JDBC接口与JDBC驱动交互。

相关推荐

七条简单命令让您玩转Git
七条简单命令让您玩转Git

凭借着出色的协作能力、快速部署效果与代码构建辅助作用,Git已经得到越来越多企业用户的青睐。除了用于开发商业及消费级应用之外,众多科学及政府机构也开始尝试使用这...

2023-10-07 12:14 guanshanw

基本完整的关于Git分支branch的操作
基本完整的关于Git分支branch的操作

Git使用背景项目中要用到dev或者其他分支开发完代码,需要将该分支合并到master的需求操作步骤下面以dev名称为lex为分支名为例来操作一遍客户端操作:...

2023-10-07 12:14 guanshanw

Git 进阶(合并与变基)
Git 进阶(合并与变基)

在Git中整合来自不同分支的修改主要有两种方法:合并(merge)以及变基(rebase)合并(merge)merge流程图merge的原理是找到这两个分...

2023-10-07 12:13 guanshanw

Git学习笔记 003 Git进阶功能 part5 合并(第一部分)

合并(merge)是很常用的操作。尤其是一个庞大的很多人参与开发的企业级应用。一般会设定一个主分支,和多个副分支。在副分支开发完成后,合并到主分支中。始终保持主分支是一个完整的,稳定的最新状态的分支。...

非标题党,三张图帮你理解git merge和git rebase的区别
非标题党,三张图帮你理解git merge和git rebase的区别

初始场景:基于正常的开发分支修改几个小bug,然后在合并到开发分支上。gitmergegitcheckoutfeaturegitmergeho...

2023-10-07 12:13 guanshanw

git 初次使用(01)
git 初次使用(01)

先从github上克隆代码下来:使用vscode克隆代码如下图,填写上github仓库地址:vscode有时候克隆代码速度比较慢,可以用命令行方式克隆gitc...

2023-10-07 12:12 guanshanw

Git 远程操作

4.Git远程操作命令说明gitremote远程版本库操作gitfetch从远程获取版本库gitpull下载远程代码并合并gitpush上传远程代码并合并4.1远程版本库操作gitre...

Git常用命令-总结
Git常用命令-总结

创建git用户$gitconfig--globaluser.name"YourName"$gitconfig--globaluser.em...

2023-10-07 12:12 guanshanw

git中删除从别人clone下来项目的git信息,并修改为自己的分支

如果你从别人的Git存储库中克隆了一个项目,并想要删除与该存储库相关的Git信息,并将其修改为你自己的分支,则可以执行以下步骤:使用gitclone命令克隆存储库:gitclone<u...

git系列-回滚和放弃本地修改

回滚历史提交就是reset的功能。这种情况是已经提交远程仓库,需要回滚到之前的提交。gitreset--hardcommitId//注:强制提交后,当前版本后面的提交版本将会删掉!gi...

GIT使用小技巧大全
GIT使用小技巧大全

在大型软件工程的开发过程中,版本控制是无法绕过去的;目前来说,最火的版本控制软件就是GIT了。早两年SVN比较火,不过被大神linus喷了几次后,就日落西山了,...

2023-10-07 12:11 guanshanw

git相关命令-上
git相关命令-上

这些命令都是看了文档后,个人觉得比较有用的一些,展示给大家。回到远程仓库的状态抛弃本地所有的修改,回到远程仓库的状态。gitfetch--all&...

2023-10-07 12:10 guanshanw

Git命令行接口:掌握Git的必备技能
Git命令行接口:掌握Git的必备技能

Git是一款强大的分布式版本控制工具,它支持命令行界面操作。熟练掌握Git命令行接口,是开发者使用Git的必备技能之一。在这篇文章中,我们将介绍Git命令行接口...

2023-10-07 12:10 guanshanw

Git命令详解
Git命令详解

相信各位小伙伴们应该都对git有一些了解,毕竟作为代码管理的神器,就算不是IT行业的小伙伴肯定也或多或少的听说过一些。今天就来和小伙伴们分享一下自己总结的常用命...

2023-10-07 12:10 guanshanw

工作7年收集到的git命令
工作7年收集到的git命令

概念git中的术语解释:仓库也叫版本库(repository)stage:暂存区,add后会存到暂存区,commit后提交到版本库git安装linux...

2023-10-07 12:10 guanshanw

取消回复欢迎 发表评论: