无效的ejb jar:它不包含ejb



我有两个模块: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.|#]

我真的不知道该怎么办,我发现了很多像我这样的问题,但是没有解决方案。

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

必须将EJB添加到WAR或EAR文件中。创建一个新类,用@Stateless

注释它

我知道这是非常构建特定的,它使用Netbeans而不是OP的IDE,但因为我在这里被引导,这可能对一些用户有用:

我有以下构建:Netbeans企业应用程序与MavenGlassfish 4.1Java 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. (这更像是一个注释)当你更新任何你的战争或ejb时,在清理和构建你的耳朵之前清理和构建它们(听起来很有趣,对吧?)如果你正在为会话bean使用接口,那么你应该把它们放在一个单独的jar中,创建一个新的project maven> java应用程序。对持久化实体做同样的事情。将它们作为依赖项添加到ejb和war项目中。
  4. 这与我无关,但你应该在ejb模块内的java类中至少有1个@无状态(或我认为@有状态)注释,以便它运行(用于将模块视为ejb)。

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

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

我也遇到过这个问题。它发生在我将一个新的EJB项目导入到Eclipse工作空间中时。该项目当时没有对Glassfish库的引用,因为它还没有包含在EAR部署程序集中。

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

最新更新