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

问题描述 投票:11回答:5

我有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.|#]

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

glassfish ejb ear
5个回答
2
投票

您必须将EJB添加到WAR或EAR文件中。只需创建一个新类并使用@Stateless对其进行注释


3
投票

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


2
投票

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

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

我曾尝试从以前的非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 application。对持久性实体执行相同的操作。将这些作为依赖项添加到您的ejb和war项目中。
  5. 这与我没有特别关系,但是你应该在你的ejb模块中的java类中至少有一个@stateless(或者我认为@stateful)注释,以便它运行(对于模块来说,它被认为是一个ejb)。

我可能不得不做一些我忘记的事情,但如果你仍然遇到问题,请在下面评论,我会尝试更新。


0
投票

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


0
投票

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

保存Bean文件后,IDE会自动导入javax.inject.Singleton而不是javax.ejb.Singleton。这使代码编译时没有警告,但抛出与原始帖子相同的错误。

© www.soinside.com 2019 - 2024. All rights reserved.