RESTful Payara/GlassFish 中的 Web 服务
RESTful Web Service in Payara/GlassFish
我有一个最简单的 RESTful Web 服务,如下所示:
@Stateless
@Path("/list/instruments")
public class InstrumentsProvider {
@GET
@Produces({MediaType.APPLICATION_JSON})
public String getAvailableInstruments() {
[..]
}
和
@ApplicationPath("/rest")
public class RestApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<>();
classes.add(InstrumentsProvider.class);
return classes;
}
}
根据 pom.xml
看起来像这样:
[..]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<ejbVersion>3.1</ejbVersion>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
[..]
我将这个 ejb 部署在一个 ear 文件中。耳朵pom.xml
长这样:
[..]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<modules>
<ejbModule>
<groupId>com.cmehistory</groupId>
<artifactId>rest-server</artifactId>
</ejbModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
[..]
生成的 ear
看起来不错,它包含我所有的库和 ejb jar
。
我部署到 Payara Server 4.1.2.173 #badassfish (build 24)
,服务器日志报告部署成功。
然而,网络服务似乎不存在。
[mydomain]:8080/rest/list/instruments/
returns404.
我也试过 [mydomain]:8080/ear-0.0.1-SNAPSHOPT.jar/ejb-0.0.1-SNAPSHOT.jar/rest/list/instruments/
也给出错误 404。
我不确定是我找不到正确的 URL 还是 Web 服务根本不存在。
到目前为止,ear 中没有 war 文件,只有 ejb。我正在阅读这可能会导致问题,但我不确定这是否也适用于这种情况。
将 RESTful 网络服务 ejb
模块 打包到 ear
中是行不通的 。他们需要一个 war
存档来提供工作的网络内容。
为了保持网络 UI 苗条,可以将网络服务打包到 另一个 war
(没有 ear
) 存档中,其中包含只是 ejb
模块。
我有一个最简单的 RESTful Web 服务,如下所示:
@Stateless
@Path("/list/instruments")
public class InstrumentsProvider {
@GET
@Produces({MediaType.APPLICATION_JSON})
public String getAvailableInstruments() {
[..]
}
和
@ApplicationPath("/rest")
public class RestApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<>();
classes.add(InstrumentsProvider.class);
return classes;
}
}
根据 pom.xml
看起来像这样:
[..]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<ejbVersion>3.1</ejbVersion>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
[..]
我将这个 ejb 部署在一个 ear 文件中。耳朵pom.xml
长这样:
[..]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<modules>
<ejbModule>
<groupId>com.cmehistory</groupId>
<artifactId>rest-server</artifactId>
</ejbModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
[..]
生成的 ear
看起来不错,它包含我所有的库和 ejb jar
。
我部署到 Payara Server 4.1.2.173 #badassfish (build 24)
,服务器日志报告部署成功。
然而,网络服务似乎不存在。
[mydomain]:8080/rest/list/instruments/
returns404.
我也试过 [mydomain]:8080/ear-0.0.1-SNAPSHOPT.jar/ejb-0.0.1-SNAPSHOT.jar/rest/list/instruments/
也给出错误 404。
我不确定是我找不到正确的 URL 还是 Web 服务根本不存在。
到目前为止,ear 中没有 war 文件,只有 ejb。我正在阅读这可能会导致问题,但我不确定这是否也适用于这种情况。
将 RESTful 网络服务 ejb
模块 打包到 ear
中是行不通的 。他们需要一个 war
存档来提供工作的网络内容。
为了保持网络 UI 苗条,可以将网络服务打包到 另一个 war
(没有 ear
) 存档中,其中包含只是 ejb
模块。