【问题标题】:Convert Grizzly/Jersey to Payara将灰熊/球衣转换为 Payara
【发布时间】:2017-06-06 19:41:58
【问题描述】:

所以,我们使用 Grizzly/Jersey 构建了一个 web 应用。您运行生成的 jar 文件,然后它提供 REST 端点,允许从数据库中提取数据并创建新条目等。出于某种原因,我们现在想要迁移到 Web 服务器,例如 Payara 或 Glassfish 之类的。我很难让它工作。它现在编译为战争,并被部署到 Payara。在Deploying jersey web services on Payara 4 doesn´t expose methods 之后,我至少承认存在端点。但是,它们依赖于注入的 EntityManager,我们在 ResourceConfig 子类中定义/绑定(连同它的依赖项),它没有被加载,所以它崩溃了。有人知道如何加载 ResourceConfig 吗?此外,还需要做些什么才能使其正常工作?

【问题讨论】:

  • 您是否按照链接帖子中的答案进行操作? (提示:ResourceConfig 扩展了应用程序)。
  • 你还需要确保你有 jersey-container-servlet 依赖。

标签: java jersey migration grizzly payara


【解决方案1】:

如果您要从链接的帖子中获得答案

@javax.ws.rs.ApplicationPath("API_PATH_FOR_JAXRS")
public class SampleApplication extends Application {

}

这将解释您所看到的行为。使用 @ApplicationPath 注释的空 Application 将导致 Jersey 引导程序扫描 @Path@Provider 类的类路径,并注册这些类。

但是您使用ResourceConfig 自己完成所有注册。碰巧ResourceConfig 实际上是Application 的子类。因此,与其创建一个新的Application 子类来放置@ApplicationPath 注释,不如放置你的ResourceConfig 子类。

如果您之前没有继承 ResourceConfig,例如

ResourceConfig config = new ResourceConfig()
    .packages("...")
    .register(...);

那么现在就继承它

@ApplicationPath("...")
public class AppConfig extends ResourceConfig {
    public AppConfig() {
        packages("...");
        register(...);
    }
}

【讨论】:

  • 谢谢!我没有意识到 ResourceConfig 是 Application 的子类。不幸的是,它仍然告诉我存在不满意的依赖关系。在ResourceConfig的构造函数中,我们注册了一个AbstractBinder,在它的configure()函数中我们调用bindFactory()几次来设置工厂生产EntityManagers。它适用于灰熊/泽西,但目前不适用于 Payara;知道为什么吗?代码在我部署时确实会运行,但在注册 AbstractBinder 后它仍然说“部署失败”...“不满足类型 EntityManager 的依赖项”......
  • 在 ResourceConfig 构造函数中添加日志。它被记录了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2015-11-11
  • 2018-02-21
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多