2011-06-21 6 views
2

背景としては、Webアプリケーション用のJBoss 5.1を使用しています。アプリケーションは垂直に配備され、各機能は別々のWARファイルになります。これは、DAOとビジネスロジック用のjarファイルを持っています。これまではうまくいきましたが、私はそれ自身で多くのロジックを持たない別のアプリを配備する必要があります - 基本的にはダッシュボードと言うような表示です。ダッシュボードでは、さまざまなデータプロバイダのデータを集計する必要があります(通常は他のアプリ/機能です)。現在、ダッシュボードは他の機能についてあまりにも多くのことを知っています。したがって、新しい機能が追加されるたびに、このダッシュボードは関連するコードの追加とともに再展開されます。複数のWARでライブラリにアクセスするための共通インタフェース - これはjbossで可能ですか?

このダッシュボード用の共通インターフェイスがあり、他の機能はほとんど実装されておらず、新しい機能(WAR)が展開されるたびにダッシュボードが動的に新しいプロバイダからデータを取得できることは素晴らしいことです。これは可能ですか?もし私がアプリのクラスローダーを操作しなければ、私が得ることのできるものは何ですか?これの最初のものがjboss内部で可能かどうかを知ることは良いことです。

詳細情報が必要な場合はお知らせください。

答えて

1

あなたが話していることを行うにはいくつかの方法がありますので、私は2つのタイプのソリューションを提案し、ニーズに最も適したものについてより多くの情報を提供します。

比較的迅速な解決策は、GateInのようなポータルサーバーを使用することです。あなたのWARは同じページに表示される可能性がありますが、それらは別々の場所にあり、統合されていません。 WARをポートレットに変換し、管理者にそれらをポータルのUIに追加させる必要がありますが、ポータルは使用可能なすべてのポートレットをスキャンして検出できるようになります。

より柔軟な解決策は、各展開のクラスの1つに共通のMBeanインターフェイスを実装することです。ダッシュボードでは、JMX、具体的にはjavax.management.MBeanServerConnectionqueryMBeansメソッドを使用して、すべてのMBean(または特定のパッケージに属し、クエリパラメータとして指定できるMBeanのサブセット)を取得できます。次に、javax.management.MBeanServerConnectioninvokeメソッドを通じてインターフェイスメソッドを実行できます。 JBossを使用してMBeanServerConnectionを取得するには、org.jboss.mx.util.MBeanServerLocator.locateJBoss()を呼び出します。

1)MBeanの あなたのJARファイルのそれぞれについてにあなたの展開を回し、(META-INFディレクトリにjboss-service.xml*-xmbean.xmlファイルを追加します。

要求されるようにいくつかの追加の詳細は、(注、以下は、JBoss固有のです)あなたの名前は*です)。これらのファイルはthis exampleに従ってください。

あなたはjboss-service.xmlmbean要素のcode属性(例ではorg.jboss.chap2.xmbean.JNDIMap)に指定されたどんなパスでのMBeanを実装します。 jboss-service.xmlmbean要素のname属性(例ではchap2.xmbean:service=)の一貫した名前空間とパラメータを指定します。 *-xmbean.xmlファイルで指定する操作と属性は、インターフェイスに正しくマップされている必要があります。

2)ダッシュボードを作成し、それの一つのクラスは、サービス(このコードはテストされていませんが、良いアウトラインを提供する必要があります)

//Get the connection 
MBeanServerConnection connection = org.jboss.mx.util.MBeanServerLocator.locateJBoss(); 

//Query for MBeans in the chap2.xmbean namespace 
Set<ObjectInstance> mbeans = connection.queryMBeans(null, new ObjectName("chap2.xmbean:service=*")); 

//Loop over each MBean and invoke an interface method 
for (ObjectInstance mbean : mbeans) 
{ 
    //Invoking 'put' method from example. If this were an info method, this would return the result of the MBean operation 
    connection .invoke(mbean.getObjectName(), "put", new Object[] {"TestKey", "TestValue"}, new String[] {Object.class.getName(), Object.class.getName()}); 
} 
+0

こんにちはスティーブンをポーリングしています、あなたの第二の溶液は、非常に興味深いですね。私はポートレットを使うことはできません - どちらにもしたくありません。私はあなたの第二の選択肢を理解したいと思う - それは最高のフィットかもしれないように聞こえる。私はjbossフォーラムでjbossのカスタムデプロイヤーをチェックするように言われましたが、それはプロジェクト自体のように少し見えます。あなたの選択肢ははるかに良く聞こえます。あなたのアイデアを分かち合ってください。また、関連する資料も良いでしょう。乾杯。 – opensourcegeek

+0

さて、私はあなたが始めるために必要な追加の詳細を追加しました。あなたがトラブルに遭遇した場合、またはより具体的な質問がある場合は、私に知らせてください。がんばろう! (PS JBossはオンラインではあまり書かれていないようですが、包括的なリソースが必要な場合は、いくつかの良い本があることを知っています) –

+0

さて、私は誇張していたに違いない、包括的なJBoss 5リファレンスを見つけることができませんでした私はJBoss at Work(http://oreilly.com/catalog/9780596007348)は、技術的にJBoss 4であっても、あなたが必要とするものを十分にカバーしていると思います。 –

関連する問題