Jakarta EE:第四代-一個新的希望

JavaEnterpriseEdition(JavaEE)是一個具有企業特性的規範和API的保護傘,比如分佈式計算和Web服務。JavaEE在Java中廣泛使用,運行在從微服務到應用服務器的任何參考運行時,這些運行時可以處理事務、安全性、可伸縮性、併發性和它正在部署的組件的管理。

現在,EnterpriseJava已經在EclipseFoundation下標準化了-它的新名稱是JakartaEE-這爲EnterpriseJava帶來了新的希望。這篇文章將展示一個類似SpringMVC的解決方案,在JakartaEE社區端使用MongoDB。

對於這個項目,我們需要一些幫助。爲了戰勝帝國軍隊,這三個項目可以幫助我們:

Eclipse Krazo:MVC 1.0(JSR-371)所指定的基於動作的MVC的實現。EclipseKrazo構建在JAX-RS之上,目前包含對RestEasy、Jersey和CXF的支持,併爲其他實現提供了定義良好的SPI。
Jakarta NoSQL:一個幫助開發人員使用Java和NoSQL技術創建企業級應用程序的框架。JakartaNoSQL使DEVS能夠創建可伸縮的應用程序,同時保持與底層NoSQL技術的低耦合。
Bean Validation JSR 380.一種規範,它創建自己的註釋和驗證,並確保類的屬性匹配特定的條件,使用註釋(如@NotNull, @Min, and @Max.)

給我看原代碼

像往常一樣,第一步是創建一個Maven項目,我們在其中定義了pom.xml中的依賴關係。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.superbiz</groupId>
<artifactId>mvc-cxf</artifactId>
<packaging>war</packaging>
<name>OpenEJB :: Examples :: MVC (CXF-based)</name>
<description>OpenEJB :: Web Examples :: MVC 1.0 - Jakarta NoSQL</description>
<version>0.0.1-SNAPSHOT</version>
<url>http://tomee.apache.org</url>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <tomee.version>8.0.0-M3</tomee.version>
    <version.krazo>1.0.0-SNAPSHOT</version.krazo>
    <jnosql.version>0.1.0-SNAPSHOT</jnosql.version>
    <http.port>8888</http.port>
</properties>
<build>
    <finalName>ROOT</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <packagingExcludes>pom.xml</packagingExcludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.tomee.maven</groupId>
            <artifactId>tomee-maven-plugin</artifactId>
            <version>${tomee.version}</version>
            <configuration>
                <tomeeHttpPort>${http.port}</tomeeHttpPort>
            </configuration>
        </plugin>
    </plugins>
</build>
<repositories>
    <repository>
        <id>oss.sonatype.org-snapshot</id>
        <url>http://oss.sonatype.org/content/repositories/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>jakarta.enterprise</groupId>
        <artifactId>jakarta.enterprise.cdi-api</artifactId>
        <version>2.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.ws.rs</groupId>
        <artifactId>jakarta.ws.rs-api</artifactId>
        <version>2.1.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
        <version>2.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>sh.platform</groupId>
        <artifactId>config</artifactId>
        <version>2.2.2-SNAPSHOT</version>
    </dependency>
    <!--Eclipse JNoSQL-->
    <dependency>
        <groupId>org.jnosql.artemis</groupId>
        <artifactId>artemis-document</artifactId>
        <version>${jnosql.version}</version>
    </dependency>
    <dependency>
        <groupId>org.jnosql.diana</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>${jnosql.version}</version>
    </dependency>
    <!-- MVC 1.0(JSR 371) -->
    <dependency>
        <groupId>org.eclipse.krazo</groupId>
        <artifactId>krazo-core</artifactId>
        <version>${version.krazo}</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.krazo</groupId>
        <artifactId>krazo-cxf</artifactId>
        <version>${version.krazo}</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>
</project>

要記住的一個關鍵要點是,在JakartaEE規範中,我們可以使用幾個供應商而不影響應用程序。在本教程中,我們將使用ApacheTomee。

下一步是定義用戶模型。爲了使這一切更平滑,該用戶只擁有一個國家、州、名稱、年齡、JUG和說明標籤作爲信息。所以,兩個類:
Person:姓名、年齡、JUG和任何描述。
Address:國家和州

與任何簡單的註冊頁面一樣,用戶信息以頁面形式傳遞,因此MVC框架附帶了FormParam註釋。這樣,一旦註釋與輸入標記完全匹配,開發人員就可以將表單與任何輸入字段連接起來。

MongoDB與模型的集成也很容易;JNoSQL有類似於JPA的註釋,因此開發人員使用實體、列和ID註釋分別定義實體、列和ID。

MongoDB的一個不同之處在於,我們可以將地址類信息存儲爲一個字段,而不是像通常使用SQL技術那樣將其作爲關係存儲。因此,我們將使用地址作爲Person實體的子文檔,這更快,因爲它減少了聯接的數量,並且更易於查詢。


@Entity
public class Person {
@Id
@FormParam("id")
@Convert(ObjectIdConverter.class)
private String id;
@FormParam("name")
@NotEmpty(message = "can not be empty")
@Size(min = 1, max = 20)
@MvcBinding
@Column
private String name;
@FormParam("age")
@MvcBinding
@Min(18)
@Column
private int age;
@BeanParam
@Valid
@Column
private Address address;
@FormParam("server")
@NotNull
@MvcBinding
@Column
private String server;
@FormParam("description")
@NotEmpty(message = "can not be empty")
@MvcBinding
@Size(min = 10)
@Column
private String description;
}
@Entity
public class Address {
@FormParam("country")
@NotEmpty(message = "can not be empty")
@MvcBinding
@Column
private String country;
@FormParam("state")
@NotEmpty(message = "can not be empty")
@MvcBinding
@Column
private String state;
}

存儲庫是一種DDD模式,它使用用於訪問域對象的類似集合的接口,充當域層和數據映射層之間的中介。要創建一個Person存儲庫,我們需要一個擴展Repository的接口。僅此而已;JNoSQL將爲您處理實現。下面是一個查詢的方法,其全部目的是讓Java開發人員使用JNoSQL約定創建任何方法。然後,該框架將實現它。

public interface PersonRepository extends Repository<Person, String> {
Optional<Person> findById(Long id);
List<Person> findAll();
}

控制器是連接視圖和模型的橋樑。模型是ViewEngine用來處理視圖的名稱到模型實例的映射。Viewable是一種抽象,它封裝了有關視圖的信息。其他的觀點也很清楚。使用GET註釋定義訪問,POST定義建立URL路徑的路徑。

發佈了44 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章