在 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/