このガイドに従って、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 {
}