現在、一部のプロジェクトを JBoss 4.x から JBoss 7 に移植中です。これまでのところ、単純な管理操作を提供するために一般的に使用している MBean を除いて、すべてがうまく機能しているようです。
かなり長い間検索してきましたが、正しい検索用語を思いつくことができないか、JBoss 4.x と JBoss 7 の MBean 定義の間のギャップを埋めるための知識が不足しています。
したがって、誰かが私が見逃している可能性があるものや、どこで読む必要があるかについてのヒントを提供できることを願っています (おそらくいくつかのドキュメント、例など)。
Jboss 4.x では、MBean はしばしば次のようになります。
@Service( objectName = "Domain:Name=SomeMBean",
xmbean="resource:<path-to-xmbean.xml>")
class SomeMBean
{
@EJB
private SomeService someService;
public String someOperation()
{
someService.doSomething();
return "success";
}
}
アノテーションを使用@Service
してオブジェクト名と xmbean 記述子を定義すると、JBoss はこれらの mbean を自動的に登録します。
どうやら、JBoss 7 では@Service
アノテーションが存在しないため、別のアプローチが必要です。
これまでのところ、MBean を手動でプラットフォーム mbean サーバーに登録することができましたが、JBoss に自動的に登録してもらいたいと考えています。さらに、これまでのところ、メソッド/パラメーターの説明を提供することができませんでした (これらは、あると便利な機能ですが)。
明確にするために、質問を繰り返します。
次の機能を提供する JBoss 7 (Java EE 6) で MBean を定義するにはどうすればよいですか?
- 自動展開
- EJB へのアクセス
- JConsole または JMX-Console からアクセス可能 (私は現在 Dimitris Andreadis のポートを使用しています)
- メソッド/パラメーターの説明を提供する
アップデート
これが私がこれまでに得たものです:
最初に、CDI を使用して任意の Bean のインジェクション ターゲットをラップし、それに応じてアノテーションが付けられ、postConstruct()
メソッドで JMX 登録を行うこのプロジェクションを見つけました: http://code.google.com/p/jmx-annotations/。さらに、検出された MBean は、注釈付きプロパティの説明を提供するクラス/属性/メソッド/パラメータ注釈についてスキャンされます。
ただし、postConstruct()
メソッドはEJBに対して呼び出されないようです(EJBコンテナと衝突しないためだと思います)。したがって、MBean は EJB ではなく、プレーンな CDI Bean にする必要があります。
ただし、MBean が自動的にインスタンス化されないという欠点があります。BeanManager
これを克服するために、起動時にすべての Bean をループし、見つかったすべての MBean のインスタンスを作成するシングルトン Bean があります。MBean にはまだ注入ターゲットがあるため、そのpostConstruct()
メソッドは呼び出されず、Bean は MBean サーバーに登録されます。
起動手順の大まかな概要は次のとおりです。
- カスタム CDI 拡張機能は、各 CDI Bean をスキャンしてカスタム @MBean アノテーションを探します。
- 適格な MBean ごとに、注入ターゲットがラップされます
- @PostConstruct メソッドで MBean のインスタンスを作成する singleton Bean が開始されます
- MBean のインジェクション ターゲットの
postConstruct()
メソッドが呼び出され、MBean が MBean サーバーに登録されます。
このメソッドの欠点の 1 つは、MBean メソッドを実行するときにトランザクション コンテキストが欠落することです (すべての EJB 呼び出しはトランザクション コンテキストで実行されます)。ただし、これは、必要に応じてトランザクション コンテキストを提供する CDI インターセプターを使用して修正できます。Seam プロジェクトには、そのための適切なインターセプターがあるようです。
これが健全で安定したアプローチであるかどうかはまだわからないので、建設的なコメント、ヒントなどは大歓迎です。