我有一个最简单的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/
返回404。
我也试过了[mydomain]:8080/ear-0.0.1-SNAPSHOPT.jar/ejb-0.0.1-SNAPSHOT.jar/rest/list/instruments/
,这也给出了错误404。
我不确定我是否无法找到正确的网址,或者网络服务是否存在。
到目前为止,耳内没有war文件,只有ejb。我在读这可能会导致问题,但我不确定这也适用于这种情况。
答案 0 :(得分:0)
将RESTful Web服务ejb
模块打包到ear
将无法正常工作。他们需要一个war
存档来提供可用的网络内容。
为了保持网络用户界面的纤薄,可以在另一个war
(无ear
)存档中打包网络服务,该存档仅包含ejb
模块。