无效的EJB jar包:它不含任何EJB。

13

我有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个回答

3

我明白了问题所在。问题出在运行配置上,我使用的是Intellij Idea,在运行配置中有构建和编译我的EAR模块之前的步骤。我删除了这些步骤,在进行Maven安装后,它成功部署了。


2

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


38
许多看到这个问题的人是因为他们已经有适当注释的课程,但仍然出现了这个错误。 - 8bitjunkie
1
这里有一个答案,以及为什么这个答案是不正确的。没有人向前迈进。下次请不要发表这样的评论,而是请评论答案,你这个肮脏的菜鸟。注意:这对于这个问题仍然没有让任何人向前迈进,但如果每个人都遵循这个规则,Stack Overflow作为一个社区将会向前发展。请有人回答这个问题。 - Booster
1
请原谅我的朋友,他是新手。 - Jim V

2

我知道这很具体,而且使用的是Netbeans而不是OP的IDE,但因为我被带到了这里,这对一些用户可能有用:

我有以下构建:

Netbeans企业应用程序和Maven

Glassfish 4.1

Java EE 7

我曾试图从以前的非maven企业应用程序进行迁移,但克隆并没有像我预期的那样工作,有一些旧的ejb jar文件留在那里,我删除了它们。

我做了很多事情来修复它:

  1. 确保没有不该放在那里的ejb jar文件。确保你没有意外地包含ejb模块jar文件超过一次,因为这也会导致相同的错误(手动部署ear和通过netbeans部署有时会给我带来不同的错误)。
  2. 在我的EJB应用程序中使用了@Remote接口。现在你不应该将EJB导入War中,你应该正确地使用注解,如https://docs.oracle.com/javaee/7/tutorial/ejb-intro004.htm所述。
  3. (这更像是一个注意事项)当你更新任何war或ejb时,在清理和构建ear之前清理和构建它们(听起来有点滑稽)。
  4. 如果你为你的会话bean使用接口,那么你应该把它们放在一个单独的jar文件中,创建一个新的项目maven>java application。对你的持久实体做同样的事情。将它们作为两个项目的依赖项添加到你的ejb和war项目中。
  5. 这与我特别无关,但你应该在你的ejb模块中至少有一个@stateless(或者我认为是@stateful)注释的java类,以使它运行(使模块被考虑为ejb)。

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


同时取消部署应用程序,清理+构建再部署对我有用。 - klonq

0
我也遇到了这个问题。当我将一个新的EJB项目导入我的Eclipse工作空间时,它就会出现。由于它还没有包含在EAR部署组件中,所以该项目没有引用Glassfish库。
在保存Bean文件时,IDE自动导入了javax.inject.Singleton而不是javax.ejb.Singleton。这使得代码编译时没有警告,但会抛出与原始帖子中相同的错误。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接