【发布时间】:2024-01-21 07:48:01
【问题描述】:
我只是找不到访问部署到 Wildfly 的 JAX-RS 资源的路径。
ear.ear pom:
<parent>
<artifactId>jee-services</artifactId>
<groupId>org.mycompany</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<packaging>ear</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>ear</artifactId>
<dependencies>
<dependency>
<groupId>org.mycompany</groupId>
<artifactId>ejb_book</artifactId>
<version>1.0-SNAPSHOT</version>
<type>ejb</type>
</dependency>
</dependencies>
ejb_book pom:
<parent>
<artifactId>jee-services</artifactId>
<groupId>org.mycompany</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>ejb</packaging>
<artifactId>ejb_book</artifactId>
应用程序配置
@ApplicationPath("/resources")
public class ApplicationConfig extends Application {
}
资源
@Stateless
@Path("/books")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class BookResource extends AbstractFacade<Book> {
@PersistenceContext
private EntityManager entityManager;
@GET
@Path("/getBooks")
public Book getBook() {
return new Book();
}
我认为问题在于我将我的 ejb_book.jar 打包到 ear.ear(我收集所有其他 ejb 模块的地方)
我试过了:
localhost:8080/ear/resources/books/getBooks
还有许多其他组合,但没有一个有效。
应用程序可以很好地部署到 WildFly 服务器。
顺便说一句:有没有工具可以帮助人们访问他们的 JAX-RS 资源?以 IDE 为例。所以我的问题不再是问题了。
【问题讨论】:
-
您是否也在 EAR 中打包了一个 WAR?您需要提供上下文根才能访问您的 REST 服务。
-
不,没有战争。我只是在浏览器中调用 url。我错过了什么吗?
-
是的,你错过了。正如documentation“JAX-RS 应用程序被打包为 .war 文件中的 Web 应用程序。”中所述。因此,您需要有一个 WAR 以便为您的应用程序的 REST 服务提供 context-root。只有这样,您才能以以下形式调用 REST 服务:localhost:8080/context-root/ear-1.0-SNAPSHOT/resources/books/…。
-
谢谢!所以我可以添加一个空的 WAR 并将其作为另一个模块添加到我的耳朵中吗?或者在部署这样的后端时,这里的最佳做法是什么?
-
嗯,首先你应该(对你自己)证明需要一个 EAR 作为反对将所有东西打包到一个 WAR 中并将你的依赖项放在你的 WAR 的 WEB-INF/lib 中。因为,毕竟,您正在尝试提供 REST API。另一方面,如果您尝试提供比 REST 更多的 API,那么是的,您可以拥有一个包含两个模块的 EAR:WAR 和 EJB。
标签: maven jakarta-ee jax-rs ear