質問

Java EE 5とWebSphere 7.0にWebProjectがあります。スケジューラを作成して、展開後に起動する必要があります。私が試したこと:次のインターフェイスを使用して EJB を作成します。

@Local
public interface ISchedulerBean {

    public void executeTimer(Timer timer);
    public void createTimer();
}

ステートレス セッション Bean はこのインターフェイスを実装します。メソッド createTimer は、TimerService からタイマー インスタンスを作成します。コードのこの部分は正常に動作します。また、アプリケーションのデプロイ後にメソッド createTimer() を呼び出す必要があります。私は試した:

  1. リスナー servletContext を追加します。

    Public Class SchedulerInitialisERCONTEXTLISTENERは、ServletContextListener {// EJBプライベートWebServicelocator WebServicelocatorへのサービスへのサービスを実装しています。プライベート SchedulerService スケジューラサービス;

    public Sc​​hedulerInitialiserContextListener(){webservicelocator = new webservicelocator();スケジューラーサービス = webServiceLocator.getSchedulerService();}

    public void contextDestroyed(ServletContextEvent ctx) {
    }
    
    public void contextInitialized(ServletContextEvent ctx) {
        schedulerService.createTimer();
    }
    

    }

  2. 1 でサーブレットを作成します。 init() メソッドで SchedulerBean を挿入し、createTimer を呼び出します。

しかし、これは機能しません。なぜなら、最初に Web アプリケーションが Web アプリケーションをデプロイし、リスナーを呼び出し、サーブレットを初期化してから、すべての EJB が配置されている ejb.jar をデプロイするからです。それはwebshpereのログファイルで確認できます。したがって、ejb throw @EJB アノテーションまたはルックアップを取得しようとすると、ejb が見つからないため、例外が発生します。ejbモジュールをデプロイした後にタイマーを開始するか、デプロイ順序を変更する他のアプローチはありますか?

役に立ちましたか?

解決

モジュールの起動順序を設定できます。

Rational Application Developer を使用して開発すると仮定して、以下を実行します。

Ear プロジェクトを右クリックし、「Java EE」→「WebSphere Application Server デプロイメントを開く」をクリックします。

「アプリケーション」セクションを探します。すべてのモジュールが表示され、 Start weight それぞれについて。

コンテキスト リスナーを含む Web プロジェクトに最大の値があることを確認してください。これで問題ありません。

  • この操作により、ear プロジェクトの META-INF の下に ibmconfig ディレクトリが作成されます。ビルド プロセスで必ずパッケージ化してください。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top