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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章