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

时间:2018-08-11 16:34:03

标签: java rest jersey jax-rs glassfish-4.1

在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

1 个答案:

答案 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,请按照上述博客中的更完整说明进行操作。