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路径的路径。