在Jersey项目here中构建和部署ejb示例 在Netbeans 8.2的OSX上使用JDK 8和Glassfish 4.1,该项目进行了一次战争并部署成功,但随后在Glassfish日志中出现了以下问题:
“ ... org.glassfish.jersey.examples.jersey_ejb.entities.Message 在SERVER运行时中注册的代码未实现任何提供程序 SERVER中适用的接口”。 (并且在屏幕上显示有关javax.ejb.EJBException的错误)
我发现了类似的SO问题: Restful webservices - NoClassDefFoundError: org/glassfish/jersey/ExtendedConfig 解决方案是将jersy-common添加到类路径。
我将其添加到/Users/myusername/GlassFish_Server/glassfish/lib
文件夹中。
该应用程序现在可以正常运行了。
我想知道为什么失败,示例中是否有错误,以及是否有比此手动jar复制更好的解决方案。
在glassfish日志的早期,它谈到了捆绑软件预配器错误:
警告:正在跳过条目,因为它不是绝对URI。
后来只有使用可移植JNDI名称的问题类才使用问题org.glassfish.jersey.examples.jersey_ejb.entities.Message
:
信息:访问未访问的参考信息:的便携式JNDI名称 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)
答案 0 :(得分:1)
TLDR:Glasfish的版本太旧了。
我正在使用今天最新的泽西岛的代码2.28
根据运行this博客的unzip -p modules / jersey-common.jar META-INF / MANIFEST.MF | glassfish目录中的grep Bundle-Version应该可以为您提供运行时版本。
在Glassfish 4.1中,我获得捆绑版本:2.10.4
在Glassfish 5中,我获得捆绑版本:2.26.0
我很可能通过在lib目录中包含公共库,覆盖了提供的版本,实现了一项重大突破。但是,如果您确实必须更新glassfish 4.1,请按照上述博客中的更完整说明进行操作。