前言
你好,我是方同學(xué)(YourBatman)
若你還不太清楚Java EE是什么,可先移步這里:什么是Java EE?
上篇文章已經(jīng)聊過了Java EE最重要的部分:Web應(yīng)用技術(shù),發(fā)現(xiàn)情況“慘不忍睹”,8項技術(shù)僅剩Servlet依舊保持主流,其它的均已淘汰或瀕臨淘汰。“此景”詳情可移步閱讀:上篇文章。
本文繼續(xù),繼續(xù)領(lǐng)略Java EE的企業(yè)應(yīng)用技術(shù),它曾在企業(yè)級開發(fā)中叱咤風(fēng)云,來看看它現(xiàn)在的生存現(xiàn)狀。為了便于理解,還是貼上這張分類圖:
所屬專欄
BATutopia-Java EE
相關(guān)下載
- 工程源代碼:https://github.com/yourbatman/BATutopia-java-ee
- 【女媧Knife-Initializr工程】訪問地址:http://152.136.106.14:8761
- Java開發(fā)軟件包(Mac):https://wangpan.yourbatman.cn/s/rEH0 提取碼:javakit
- 程序員專用網(wǎng)盤上線啦,開放注冊送1G超小容量,幫你實踐做減法:https://wangpan.yourbatman.cn
版本約定
- Java EE:6、7、8
- Jakarta EE:8、9、9.1
正文
Part2: 企業(yè)應(yīng)用技術(shù)
Enterprise Application Technologies,共13種規(guī)范。
1. Bean Validation
推薦學(xué)習(xí)指數(shù) 5
在后臺開發(fā)過程中,對參數(shù)的校驗成為開發(fā)環(huán)境不可缺少的一個環(huán)節(jié)。比如參數(shù)不能為null,email必須符合email的格式,如果手動進行if判斷或者寫正則表達式判斷無意開發(fā)效率太低,在時間、成本、質(zhì)量的博弈中必然會落后。正所謂專業(yè)的事情交給專業(yè)的組件去做,我們可把校驗層抽象出來,這就是Bean Validation。
Bean Validation簡直就是業(yè)務(wù)開發(fā)中祛掉壞味道代碼的利器,完美的實現(xiàn)契約式編程,大大提高開發(fā)效率,降低出錯概率。
API的GAV:
- <dependency>
- <groupId>jakarta.validation</groupId>
- <artifactId>jakarta.validation-api</artifactId>
- <version>2.0.2</version>
- </dependency>
代表API:
- Validation、ConstraintViolation
- @Valid、@GroupSequence、@ConvertGroup
- @Notnull、@Min、@NotEmpty
Bean Validation的實現(xiàn)有Apache的 Bval和Hibernate Validator,前者可忽略,后者幾乎成為唯一實現(xiàn)。
2. EJB
推薦學(xué)習(xí)指數(shù)2
Enterprise JavaBeans它就是鼎鼎大名的EJB,也叫企業(yè)級JavaBean。EJB技術(shù)的誕生標志著Java Beans的運行正式從客戶端領(lǐng)域擴展到服務(wù)器領(lǐng)域。
用于基于組件的事務(wù)性分布式編程。EJB不僅指定了bean格式,而且定義了運行bean的容器必須提供的一組服務(wù)。因此,開發(fā)人員無需擔(dān)心服務(wù)細節(jié),例如安全性,事務(wù)支持或任何遠程對象訪問。如此以至,想運行EJB必須有EJB容器,如JBoss,WebLogic,WebSphere等......就問你重不重?
API的GAV:
-
jakarta.ejb -
jakarta.ejb-api
代表API:
- EJBContext
- @EJB、@DependsOn、@Singleton、@SessionBean、@Stateless
由EJB容器提供實現(xiàn)。
3. DI
推薦學(xué)習(xí)指數(shù)3
Dependency Injection該規(guī)范比較簡單,約定了一些標準注解:
- @Inject
- @Named
- @Qualifier
- @Scope
- @Singleton
API的GAV:
- <dependency>
- <groupId>jakarta.inject</groupId>
- <artifactId>jakarta.inject-api</artifactId>
- <version>1.0.3</version>
- </dependency>
代表API:如上
CDI容器、Spring IoC容器、Guice容器等均有提供實現(xiàn)。
4. CDI
推薦學(xué)習(xí)指數(shù) 3
Contextual Dependency Injection上下文依賴注入。其實它包含兩個概念:
- Context:上下文。可以綁定生命周期,可以與有狀態(tài)的組件交互
- DI:依賴注入。以類型安全的方式注入一個組件到應(yīng)用中去,包括指定特定實現(xiàn)注入
Spring的容器我們熟悉,CDI就是Java EE的容器。
API的GAV:
- <dependency>
- <groupId>jakarta.enterprise</groupId>
- <artifactId>jakarta.enterprise.cdi-api</artifactId>
- <version>2.0.2</version>
- </dependency>
代表API:
- CDI、CDIProvider、Bean、InjectionPoint
- @Model、@Stereotype、@Produces
5. JPA
推薦學(xué)習(xí)指數(shù) 4
Java Persistence API:Java持久層API。描述對象-關(guān)系表的映射關(guān)系,并將運行期的實體對象持久化到數(shù)據(jù)庫中。
API的GAV:
- <dependency>
- <groupId>jakarta.persistence</groupId>
- <artifactId>jakarta.persistence-api</artifactId>
- <version>2.2.3</version>
- </dependency>
代表API:
- EntityManager
- @Entity、@Column、@Cacheable
- @ManyToMany、@ManyToOne、@NamedQuery
其實JPA的實現(xiàn)除了Hibernate,還有Eclipsellink,OpenJPA或Batoo。
6. JMS
推薦學(xué)習(xí)指數(shù) 3
Java Message Service:Java消息服務(wù)。兩個應(yīng)用程序之間需要進行通信,我們使用一個JMS服務(wù),進行中間的轉(zhuǎn)發(fā),通過JMS 的使用,我們可以解除兩個程序之間的耦合。也是我們常說的MQ。
JMS有一個類似協(xié)議AMQP,請注意區(qū)分
API的GAV:
- <dependency>
- <groupId>jakarta.jms</groupId>
- <artifactId>jakarta.jms-api</artifactId>
- </dependency>
代表API:
- JMSContext、JMSProducer、JMSConsumer
- Message、TextMessage、MapMessage
- MessageListener
ActiveMQ是對JMS的典型實現(xiàn)。
7. JavaMail
推薦學(xué)習(xí)指數(shù) 3
JavaMail:Java郵件。顧名思義,幫助我們發(fā)送Email電子郵件用的。方便Java開發(fā)人員在應(yīng)用程序中實現(xiàn)郵件發(fā)送和接收功能而提供的一套標準開發(fā)包,它支持一些常用的郵件協(xié)議,如SMTP,POP3,IMAP,還有MIME。
API的GAV:
- <dependency>
- <groupId>jakarta.mail</groupId>
- <artifactId>jakarta.mail-api</artifactId>
- <version>1.6.7</version>
- </dependency>
代表API:
- Address、BodyPart、Header
- Transport、Multipart
并不是發(fā)郵件不重要,而是實際使用中我們大概率不需要關(guān)心其底層API,而使用更高層級的封裝工具。
8. JTA
推薦學(xué)習(xí)指數(shù) 3
Java Transaction API (JTA):用于描述Java EE框架中事務(wù)管理器與應(yīng)用程序,資源管理器,以及應(yīng)用服務(wù)器之間的事務(wù)通訊。簡而言之:分布式事務(wù)規(guī)范。XA是分布式協(xié)議規(guī)范,而JAT是Java中對XA協(xié)議的實現(xiàn)。
API的GAV:
- <dependency>
- <groupId>jakarta.transaction</groupId>
- <artifactId>jakarta.transaction-api</artifactId>
- <version>1.3.3</version>
- </dependency>
代表API:
- Transaction、TransactionManager、TransactionSynchronizationRegistry
- @Transactional、@TransactionScoped
9. Common Annotation
推薦學(xué)習(xí)指數(shù) 4
Common Annotations for the Java Platform:Java平臺通用注解。這就是我們特別熟悉的JSR 250 通用注解:
- @Resource / @Resources
- @PostConstruct
- @PreDestroy
- @@Generated:用于標注某段代碼是生成的而非人寫的,該注解基本不使用
API的GAV:
- <dependency>
- <groupId>jakarta.annotation</groupId>
- <artifactId>jakarta.annotation-api</artifactId>
- <version>1.3.5</version>
- </dependency>
代表API:同上
值得注意的是,該jar 沒必要導(dǎo)入,因為自JDK 6開始已經(jīng)被集成到Java SE內(nèi)部了。
10. JCA
推薦學(xué)習(xí)指數(shù) 1
Java EE Connector Architecture:Java連接體系架構(gòu),是對Java EE標準集的重要補充。因為它注重的是將Java程序連接到非Java程序和軟件包中間件的開發(fā)。
JCA的目標:企業(yè)應(yīng)用程序集成方面,它提供的標準化體系結(jié)構(gòu)讓Java EE組件能夠?qū)Ξ悩?gòu) EIS進行“即插即用”的訪問,其中包括ERP、事務(wù)處理、老式數(shù)據(jù)庫系統(tǒng)等。
API的GAV:
- 無單獨Jar,是一種架構(gòu)說明
代表API:無
11. Batch
推薦學(xué)習(xí)指數(shù) 1
Batch Applications for the Java Platform:Java平臺的批處理規(guī)范。從它出生起就被認為是抄襲Spring Batch項目的,所以沒啥好聊的~
API的GAV:
- <dependency>
- <groupId>jakarta.batch</groupId>
- <artifactId>jakarta.batch-api</artifactId>
- <version>1.0.2</version>
- </dependency>
代表API:
- Batchlet
- PartitionMapper、PartitionCollector
- JobOperator、BatchRuntimeException
12. Concurrent
推薦學(xué)習(xí)指數(shù)1
Concurrency Utilities for Java EE:Java企業(yè)平臺并發(fā)工具。額......希望是和企業(yè)平臺整合,所以定義了一堆借口。結(jié)果是:一句話,沒啥用,JUC足矣。
API的GAV:
- <dependency>
- <groupId>jakarta.enterprise.concurrent</groupId>
- <artifactId>jakarta.enterprise.concurrent-api</artifactId>
- <version>1.1.2</version>
- </dependency>
代表API:
- ContextService
- ManagedTask
- Trigger
13. Interceptors
推薦學(xué)習(xí)指數(shù) 1
它是Java EE的攔截器,和EJB一起使用。如@AroundInvoke、@Intercerptors
API的GAV:
- <dependency>
- <groupId>jakarta.interceptor</groupId>
- <artifactId>jakarta.interceptor-api</artifactId>
- <version>1.2.5</version>
- </dependency>
代表API:
- InvocationContext
- @Interceptor、@AroundInvoke、@AroundTimeout、@AroundConstruct
總結(jié)
企業(yè)應(yīng)用技術(shù)是Java EE為企業(yè)級開發(fā)量身打造的一系列技術(shù)合集,曾經(jīng)叱咤市場數(shù)十年,現(xiàn)在回頭再看早已風(fēng)頭不再,不禁讓人感嘆。
共包含13項具體技術(shù),其中:
1個仍為主流:Bean Validation
2個還比較重要:JPA、Common Annotation
其它的存在感已越來越弱,幾近消亡
Web應(yīng)用技術(shù) + 企業(yè)應(yīng)用技術(shù)覆蓋了Java EE體系的核心內(nèi)容,下文將繼續(xù)補充剩下的3個part。
原文鏈接:https://mp.weixin.qq.com/s/PEHLEVdyZpLhoah9DzL0xQ