WEB-INF / classes中的war包中的EJB 3.1 - javax.ejb.CreateException:无法创建无状态EJB

时间:2010-07-02 14:27:58

标签: java java-ee glassfish ejb-3.1 java-ee-6

3 个答案:

答案 0 :(得分:1)

  

它类似于玻璃鱼,但我不确定。

很难说,特别是因为您没有为NoClassDefFoundError提供堆栈跟踪,但无论如何情况似乎都不同。

  

问题1:使用战争中包装的ejb bean是否合格(规范令人遗憾)?

当然。您可以将EJB类放在WEB-INF/classes中,也可以将它们打包为EJB-JAR并将它们放在WEB-INF/lib中。我有几个演示应用程序这样做。

  

Q2:我应该通过ejb-jar.xml描述一些配置吗?

不,没有什么能迫使你这样做。

  问题3:可能导致问题的原因是什么?

问题是我无法重现问题...我已经在启用了[ejb, jpa, web, webservices, weld]引擎的webapp中部署了您的EJB(我只是将其修改为在预定方法中插入我的实体)它只是有效。使用最新版本的GlassFish 3.0.1进行测试。所以我怀疑你身边有错误或配置问题。

以防万一,你能提供jar xfv yourapp.war的输出(还会显示你的web.xml)吗?

答案 1 :(得分:1)

请参阅: CDI with ejb 3.1 , weld-logger on glassfish v3.0.1 我在那里描述重现这个问题的步骤。

据我所知 - 没有可能使用CDI&将一个Web模块中的EJB打包在ear存档中并部署t glassfish 3.0.1。

目前的设计是将ejb和war模块分开 - 至少它对我有用。

答案 2 :(得分:0)

WAR中打包的EJB使用EE6的web / lite配置文件。据我所知,此配置文件不支持计时器和其他一些功能。 因此,如果您想使用计时器,您必须使用传统的ejbjar + war + ear方式打包ejbs。

我找不到网络资料的参考资料,这是最接近比较的资料:http://www.theserverside.com/news/1321142/Part-Three-New-Features-in-EJB-31

编辑:我认为,war包装实际上是在jsr 318,EJB 3.1中描述的。由于我在规范的该部分中找不到对可用功能的任何限制,因此计时器也应该在战争中打包的ejb中工作。