アプリケーション サーバーとして GlassFish を使用して新しい Java EE 6 アプリケーションを作成します。
ワークスペースに 2 つのプロジェクトがあります。1 つのサーバーで。
1 つ目は、ローカルおよびリモート アクセス可能ないくつかの EJB を含む純粋な EJB プロジェクトです。( EJB で@remoteと@localを使用しています。インターフェイスは純粋なままです。)
2 つ目は、InitialContext-lookup を使用して最初のモジュールから EJB の 1 つに接続しようとする Web プロジェクトです。両方のモジュールが同じサーバー上にあるため、通信にはローカル インターフェイスを使用しています。取得したオブジェクトを(ルックアップ後に)「オブジェクト」にキャストしたところ、正常に機能しました。しかし、単純なオブジェクトとしては役に立ちません。
正しい EJB インスタンスを取得するために、EJB のインターフェース (ローカルおよびリモート) を外部の jar ファイルに抽出し、それを両方のモジュールに追加しました。その結果、新しいビルド バージョンが無効のように見えるため、EJB をデプロイできなくなります。
インターフェースが外部 jar に格納されている EJB で @remote および @local アノテーションを使用する問題はありますか?
ご協力いただきありがとうございます :-)
編集:
EJB は次のようになります。
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import de.myapp.business.user.facade.UserServiceFacadeLocal;
import de.myapp.business.user.facade.UserServiceFacadeRemote;
@Stateless
@Remote(value=UserServiceFacadeRemote.class)
@Local(value=UserServiceFacadeLocal.class)
public class UserServiceFacade implements UserServiceFacadeLocal, UserServiceFacadeRemote
{ ... }
公開中のエラー:
myappBusiness を展開できません
モジュールの展開エラー: myappBusiness: 展開中にエラーが発生しました: アプリ [myappBusiness] の展開中に例外が発生しました: 無効な ejb jar
[myappBusiness]: ゼロの ejb が含まれています。
注:
1. 有効な ejb jar には、少なくとも 1 つのセッション、エンティティ (1.x/2.x スタイル)、またはメッセージ駆動型 Bean が必要です。
2. EJB3+ エンティティ Bean (@Entity) は POJO であり、ライブラリ jar としてパッケージ化してください。
3. jar ファイルに EJB コンポーネント レベルのアノテーション (@Stateless、@Stateful、@MessageDriven、@Singleton) が付けられた有効な EJB が含まれている場合は、server.log をチェックして、アノテーションが適切に処理されたかどうかを確認してください。サーバーを参照してください。詳細については、ログを記録してください。
server.log には次のように書かれています。
情報: ホスト 127.0.0.1 のユーザー [admin] には管理アクセス権がありません
警告: 注釈処理のエラー: java.lang.NoClassDefFoundError: de/myapp/business/user/facade/UserServiceFacadeLocal
SCHWERWIEGEND: アプリ [bacchusBusiness] のデプロイ中に例外が発生しましたSCHWERWIEGEND: 無効な ejb jar [bacchusBusiness]: ejb が含まれていません。
インポートはうまく機能します。エラーも例外もありません。しかし、サーバーがインターフェースを見つけられない場合、EJB が正しく表示されない可能性があります。