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 模块。