java - 为什么这个 jersey-ejb 示例失败了?

标签 java rest jersey jax-rs glassfish-4.1

在 Jersey 项目中构建和部署 ejb 示例 here 在 Netbeans 8.2 中的 OSX 上使用 JDK 8 和 Glassfish 4.1,该项目构建了一个 war 并部署正常,但随后在 Glassfish 日志中出现以下问题:

"...org.glassfish.jersey.examples.jersey_ejb.entities.Message registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER".. (and with errors on screen about javax.ejb.EJBException)

我发现了类似的问题: Restful webservices - NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig 解决方案是将 jersy-common 添加到类路径中。

我将其添加到 /Users/myusername/GlassFish_Server/glassfish/lib文件夹。

应用程序现在可以正常运行。

我想知道为什么失败,是否是示例中的错误,以及是否有比手动 jar 复制更好的解决方案。

在 glassfish 日志的早期,它谈到了 bundle 配置程序错误:

WARNING: Skipping entry because it is not an absolute URI.

稍后使用问题的问题类 org.glassfish.jersey.examples.jersey_ejb.entities.Message是唯一使用可移植 JNDI 名称的:

Info: visiting unvisited references Info: Portable JNDI names for EJB MessageListWriter: [java:global/jersey-examples-ejb/MessageListWriter, java:global/jersey-examples-ejb/MessageListWriter!javax.ws.rs.ext.MessageBodyWriter]

任何人都可以提供更好的解决方案,或者修复比 jar 副本更好的项目(我应该“必须”这样做)吗? (链接到完整的 glassfish 输出 https://gist.github.com/systemsincode/26afac851a72387047f62fe1803e089b )

最佳答案

TLDR:Glasfish 的版本太旧。

我今天使用的是最新 Jersey 的代码,即 2.28

根据this博客运行 unzip -p module/jersey-common.jar META-INF/MANIFEST.MF | glassfish 目录中的 grep Bundle-Version 应该为您提供运行时版本。

在 Glassfish 4.1 中,我得到 Bundle-Version:2.10.4

在 Glassfish 5 中,我得到捆绑版本:2.26.0

我可能通过将公共(public)库包含在 lib 目录中来解决一项重大更改,从而覆盖所提供的版本。但如果您确实必须更新 glassfish 4.1,请按照上述博客中更完整的说明进行操作。

关于java - 为什么这个 jersey-ejb 示例失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51801706/

相关文章:

java - 如何以主从模式将任务从主服务器传递给从服务器

java - 多个线程同时使用同一个 JDBC 连接

java - 使用 jersey 客户端调用 Google oauth

java - 如何JSON解析Java + Jersey中的不可变对象(immutable对象)

java - 数据库中的灵活搜索

java - 使用哈希来管理大型远程 csv

java - Servlet到JSP转发导致jsp页面但不执行java代码(仅html)

java - 无法初始化 GsonConverter

javascript - localStorage/sessionStorage 禁用时的 jQuery 回退

JAVA RESTFull服务器获取POST数据,其中 "%"(百分比)作为值@FormParam