まず、ここで達成しようとしていることを説明します。定期的にデータを読み取り、JBoss AS 7.1.1でステートレスEJBを呼び出して、さらなる操作(データの計算とDBへの保存)を行うJavaアプリケーションがあります。次に、JSF2.0を使用するフロントエンドがあります。@ApplicationScoped CDI Beanであり、JSFプロジェクトに存在するコントローラーで、EJBを注入します。ここで、DBからデータを取得するためのEJBが必要です。この理由から、@ApplicationScopedCDIBeanを使用しています。
アプリケーションコンテキストは、すべてのサーブレットリクエスト、Webサービス呼び出し、EJBリモートメソッド呼び出し、EJB非同期メソッド呼び出し、EJBタイムアウト、および同じアプリケーション内で実行されるメッセージ駆動型Beanへのメッセージ配信の間で共有されます。アプリケーションがシャットダウンされると、アプリケーションコンテキストは破棄されます。
データはユーザーに依存しないため、すべてのクライアントに1つのCDIBeanのみが必要です。
ここで、@ ApplicationScoped CDI Beanのデータを更新します。これは、新しいデータが到着したときに実行されるメソッドであるEJBBeanを使用してJSFプロジェクトで定義されています。私はすでに@ApplicationScopedCDIBeanで@Injectを正常に使用しており、EJBプロジェクトからEJBを注入しました。今、私は逆のことをしたいと思います。ApplicationScopedCDIBeanをJSFプロジェクトからEJBBeanに注入しようとしました。しかし、これを書いたとき、警告として@Injectに下線が引かれました。
@Inject
private CurrentDataController currentDataController;
警告は次のとおりです。
インジェクションポイントへのインジェクションに適格なBeanはありません[JSR-299§5.2.1]
プロジェクトを公開しようとすると、CurrentDataControllerのクラスが見つからないという例外に関するエラーが発生します。
原因:java.lang.ClassNotFoundException:controllers.CurrentDataController from [Module "deployment.TestEAR.ear.TestEJB.jar:main" from Service Module Loader]
EJBプロジェクトはJSFプロジェクトのクラスを参照できないようです。また、TestJSF.jarではなくTestEJB.jarでCurentDataControllerクラスを探しています。私がここで欠けているものは何ですか?
私のプロジェクト全体の構造は次のとおりです。
- TestEAR
- TestEJB
- TestEJBClient
- TestJPA
- TestJSF
クラス定義が見つからないというエラーを修正した後、投稿した警告に関連する別の問題が発生すると思います。