无效的ejb jar:它包含零ejb。

时间:2013-03-11 07:36:25

标签: glassfish ejb ear

我有2个模块:ejb和war,以及包含它们的ear模块。模块构建成功,但是当我尝试将ear部署到glassfish时,我收到了这个错误:

glassfish3.1.2|javax.enterprise.system.tools.admin.org.glassfish.deployment.admin|_ThreadID=17;_ThreadName=Thread-2;|Exception while deploying the app [EarModule] : Invalid ejb jar [BackEnd-1.0-SNAPSHOT.jar]: it contains zero ejb. 
Note: 
1. A valid ejb jar requires at least one session, entity (1.x/2.x style), or message-driven bean. 
2. EJB3+ entity beans (@Entity) are POJOs and please package them as library jar. 
3. If the jar file contains valid EJBs which are annotated with EJB component level annotations (@Stateless, @Stateful, @MessageDriven, @Singleton), please check server.log to see whether the annotations were processed properly.|#]

我真的不知道该怎么做,我发现了很多类似我的问题,但没有解决方案。

5 个答案:

答案 0 :(得分:3)

我明白了,出了什么问题。问题出在运行配置中,我正在使用Intellij Idea,在运行配置中,我的耳模块运行之前有构建和生成。我删除了这个,并在maven安装后成功部署。

答案 1 :(得分:2)

您必须在WAR或EAR文件中添加EJB。只需创建一个新类并使用@Stateless

对其进行注释

答案 2 :(得分:2)

我知道这是特定于构建的,它使用Netbeans而不是OP的IDE,但因为我在这里领先,这可能对某些用户有用:

我有以下版本: 使用Maven的Netbeans企业应用程序 Glassfish 4.1 Java EE 7

我曾尝试从以前的非maven企业应用程序进行迁移,并且克隆没有按照我的预期运行,有一些旧的ejb jar放在我删除的地方。

我做了很多事情要解决它:

  1. 确保没有ejb罐子不应该在那里。确保您没有意外地包含ejb模块jar多次,因为这也可能导致相同的错误(手动部署耳朵并通过netbeans部署有时会给我带来不同的错误)。
  2. 我在EJB应用程序上使用了@Remote接口。现在你不应该将EJB导入你的战争中,你应该正确地使用注释https://docs.oracle.com/javaee/7/tutorial/ejb-intro004.htm
  3. (这是一个更多的注释)当你更新你的任何战争或ejb时,在清洁和建立你的耳朵之前清洁并建造它们(听起来很有趣吗?)。
  4. 如果您正在为会话bean使用接口,那么您应该将它们放在一个单独的jar中,创建一个新的项目maven> java应用程序。对持久性实体执行相同的操作。将这些作为依赖项添加到您的ejb和war项目中。
  5. 这与我没有特别关系,但你应该在你的ejb模块中的java类中至少有一个@stateless(或我认为@stateful)注释,以便它运行(对于模块来说,它被认为是一个ejb )。
  6. 我可能不得不做一些我忘了的事情,但如果你仍然遇到问题,请在下面发表评论,我会尝试更新。

答案 3 :(得分:0)

尝试构建&使用Maven安装项目,然后将其部署在glassfish中(不要直接从IDE运行项目)

答案 4 :(得分:0)

我也遇到了这个问题。当我将新的EJB项目导入到Eclipse工作区时,就会发生这种情况。那时该项目没有引用Glassfish库,因为它尚未包含在EAR部署程序集中。

保存Bean文件后,IDE自动导入javax.inject.Singleton而不是javax.ejb.Singleton。这样就可以在没有警告的情况下编译代码,但是会引发与原始文章相同的错误。