有幾個方法可以做到你在說什麼,所以我會提出了兩種類型的解決方案,我可以給你更多的信息爲準左右最適合您需求。
一個相對快速的解決方案是使用門戶網站服務器一樣GateIn。您的WAR可能會顯示在同一頁面上,但它們會處於獨立的位置,並未集成。您必須將您的WAR轉換爲portlet並讓管理員將其添加到門戶的UI,但門戶將能夠掃描和檢測所有可用的portlet。
更靈活的解決辦法是有實現一個共同的MBean接口的類每個部署之一。然後,儀表板可以使用JMX,特別是javax.management.MBeanServerConnection
的queryMBeans
方法來獲取所有MBean(或屬於特定包的MBean的子集,您可以將其指定爲查詢參數)。然後你可以通過javax.management.MBeanServerConnection
的invoke
方法來執行接口方法。要獲得帶有JBoss的MBeanServerConnection,請致電org.jboss.mx.util.MBeanServerLocator.locateJBoss()
。
的要求一些額外的細節(注意,以下是JBoss的專用):
1)打開部署到MBean的 對於每一個JAR文件,一個jboss-service.xml
和*-xmbean.xml
文件添加到META-INF
目錄(其中*
是您選擇的名稱)。按照this example這些文件。
實現在任何路徑您在jboss-service.xml
mbean
元素的code
屬性(在本例中org.jboss.chap2.xmbean.JNDIMap
)指定的MBean。指定一個一致的命名空間和參數爲jboss-service.xml
mbean
元素的屬性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()});
}
嗨斯蒂芬,你的第二個解決方案聽起來相當有趣。我無法使用portlet - 我也不想。我很想理解你的第二個選擇 - 聽起來可能是最合適的。我被告知要在jboss論壇中檢查jboss的自定義部署器,但看起來有點像項目本身。那麼你的選擇聽起來好多了,請分享你的想法,任何相關的材料也會很好。歡呼 – opensourcegeek
好的,我已經添加了你需要開始的額外細節。讓我知道你是否遇到麻煩或有更具體的問題。祝你好運! (PS JBoss在網上看起來很糟糕,但我知道如果你需要一個全面的資源,那裏有幾本好書) –
好吧,所以我一定是誇大了,我找不到一個好的全面的JBoss 5引用,但是我認爲JBoss Work(http://oreilly.com/catalog/9780596007348)涵蓋了你需要的很好,即使它在技術上適用於JBoss 4。 –