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

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

4

5 回答 5

3

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

于 2013-03-11T15:38:40.247 回答
2

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

于 2013-03-11T10:11:09.797 回答
2

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

我有以下构建:Netbeans Enterprise Application with 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. (这更像是一个注释)当您更新任何战争或 ejb 时,在清洁和构建您的耳朵之前清洁和构建它们(听起来很有趣吧?)。
  4. 如果您正在为会话 bean 使用接口,那么您应该将它们放在一个单独的 jar 中,创建一个新项目 maven > java application。对你的持久性实体做同样的事情。将这些作为依赖项添加到您的 ejb 和 war 项目中。
  5. 这与我没有特别的关系,但你应该在你的ejb模块内的java类中至少有1个@stateless(或者我认为@stateful)注释,以便它运行(模块被视为ejb)。

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

于 2016-06-27T15:12:00.877 回答
0

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

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

于 2018-09-17T08:15:07.577 回答
0

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

于 2017-02-04T15:37:28.523 回答