次の 2 つの質問があります。
GlassFish 4Eclipse Juno などを介してサーバー上で Java クラス (サーブレットや JavaBean ではない) を開始する方法は?起動時に実行する適切な方法は何ですか?
機能を使用し、サーバー上で実行する必要がある Java クラスがJDNIあります。それはどのように行うことができますか?
サーバーの起動時に実行することに関するいくつかの情報を見つけました。これは、次のオプションに要約されます。
@Startupと@Singletonアノテーションの両方を使用する(私が理解しているように、これは特に EJB 用です)LifecycleListenerインターフェイスの実装Startupインターフェイスの実装
『Oracle GlassFish Server Application Development Guide』には、次のように明確に記載されています。
ライフサイクル リスナー モジュールは非推奨です。それらのサポートは、下位互換性のために含まれています。代わりに org.glassfish.api.Startup インターフェースを実装することをお勧めします。
org.glassfish.api.*インポートを追加し、クラスにStartupインターフェイスを実装するEclipseように指示したとき、それは非推奨であると警告されました。私のクラスはEJB ではないので、何が残っているのかわかりません。とにかく先に進みStartup interface、その要件を満たすために、次のメソッドを追加しました。
@Override
public Lifecycle getLifecycle() {
return Lifecycle.SERVER;
}
Eclipse でサーバーを停止して起動しましたが、クラスは実行されていないようです。クラスに System.out.println() 呼び出しがありますが、そのメッセージが [サーバー] タブと [コンソール] タブにもサーバー ログにも表示されませんでした。
だから、これは私が立ち往生したものです。
あなたの提案をいただければ幸いです。
説明:
質問の私の起動関連の部分は、サーバー(つまりGlassFish)の起動(Webアプリケーションの起動ではありません)に言及しています。サーバーの起動時にこのクラスを強制的GlassFishにインスタンス化し、サーバーの存続期間中実行させる必要があります。
基本的には、キューを監視し、さまざまな送信者からの要求に応答するために起動する必要があるメッセージ リスナーです。