【发布时间】:2020-03-06 12:00:09
【问题描述】:
我正在构建我的第一个 Jakarta ee 8 应用程序。实际上我来自 Spring-Framework 背景,所以我专注于关键差异和最佳实践。我读到 Glassfish、Wildfly、JBoss EAP 等提供了 Jakarta ee 规范的实现。这就提出了一个问题:
Would the application be dependent on the server it runs on? If an upgrade or change of the application server is necessary, should one consider incompatibility bugs?
我将使用以下示例使问题更具体。
我使用 hello world JAX-RS Web 服务创建了两个版本的 Web 应用程序。它在 JBoss EAP 7.2.2 上运行。 第一个 pom 文件的样子
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>8.0.0</version>
<scope>provided</scope>
</dependency>
第二个pom文件
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.bom</groupId>
<artifactId>wildfly-jakartaee8-with-tools</artifactId>
<version>${version.jboss.bom}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
....
<dependency>
<groupId>org.jboss.spec.javax.ws.rs</groupId>
<artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
<scope>provided</scope>
</dependency>
根据以下链接>:http://www.mastertheboss.com/javaee/jakarta-ee/getting-started-with-jakarta-ee,如果想对 Jakarta ee 使用 Wildfly 扩展,则应使用第二个 pom。
在
上运行上述应用程序- JBoss EAP -> EasyREST(JAX-RS 的 JBoss 实现)将发挥作用。
- Glassfish -> 将使用泽西岛。应用程序 2 不会运行?
- 在 Tomcat 上 -> 两者都不起作用,因为没有提供实现。
我知道我可以在我的 pom 中包含一个特定的 JAX-RS 库作为依赖项并独立于容器运行。但如果我在 JBoss EAP 或 Glassfish 等企业应用服务器上运行,那会是最佳实践吗?同时我还在考虑服务器的可移植性。
注意:我认为,当人们采用将所有实现作为显式依赖项包含在 WAR 中的方法时(例如,某个版本的 easyrest 或 Jersey),那么人们应该考虑切换到更轻量级 -像 Tomcat 一样重 servlet 容器,因为如果不使用其功能,在 Exnterprise 应用程序服务器上运行将没有任何好处。我在这里谈论的是 JAX-RS 示例。当然,当需要其他 J2EE 功能时,例如EJBs tomcat 肯定会被排除在外。
【问题讨论】:
-
Tomcat 本来就不是 JEE 服务器,所以这是一个不好的例子。
标签: jakarta-ee