【发布时间】:2011-02-01 18:51:59
【问题描述】:
我在关注 this guide 以从我的 EAR 中“提取”我的接口和实体以从另一个 Web 应用程序中使用它们时遇到问题:
- 我使用 NetBeans 6.8 和 Glassfish 3.0.1
- “Java 类库”项目
- 包含所有实体和接口
- “Java EE 应用程序”项目
- 类库添加到项目中,打包到EAR中
- 包含 EJB 实现、MDB、测试
- “Java Web 应用程序”项目
- 添加到项目中的类库,打包到WAR中
- 包含 REST 接口
当我构建和部署 Web 应用程序时,一切顺利。
当我构建 Java EE 应用程序时,我可以看到包含的 jar 文件(接口、实体)。但是当我尝试部署 EAR 时,Glassfish 以 java.lang.NoClassDefFoundError 错误拒绝它:
[#|2010-03-28T18:25:59.875+0200|WARNING|glassfishv3.0|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common|_ThreadID=28;_ThreadName=Thread-1;|Error in annotation processing: java.lang.NoClassDefFoundError: mvs/core/StoreServiceLocal|#]
[#|2010-03-28T18:25:59.876+0200|SEVERE|glassfishv3.0|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=28;_ThreadName=Thread-1;|Exception while deploying the app
java.lang.IllegalArgumentException: Invalid ejb jar [CoreServer]: 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.
'mvs/core/StoreServiceLocal'是在库jar文件中定义的接口。
我做错了什么?
我使用的是 EJB3 注释,所以没有特定于 bean 的部署描述符:
mvs/core/ShopperService.java:
@Stateless
public class ShopperService implements ShopperServiceLocal, ShopperServiceRemote {
}
mvs/core/ShopperServiceLocal.java:
@Local
public interface ShopperServiceLocal {
}
【问题讨论】:
-
JAR 的清单文件 (META-INF/ejb-jar.xml) 是否包含对您的 bean 类的任何引用?
-
@Achim:我使用的是 EJB3,因此没有部署描述符。我相应地更新了我的帖子。你认为我应该改用部署描述符吗?
-
注释很好。我只是想检查是否可能存在冲突。
标签: web-applications netbeans jakarta-ee ejb-3.0 glassfish-3