Есть несколько способов сделать то, о чем вы говорите, поэтому я предложу два типа решений и могу дать вам больше информации о том, что соответствует вашим потребностям.
Относительно быстрое решение - использовать сервер портала, такой как GateIn . Ваши WAR могут отображаться на той же странице, но они будут в отдельных местах и не интегрированы. Вам нужно будет превратить ваши WAR в портлеты и попросить администратора добавить их в пользовательский интерфейс портала, но портал сможет сканировать и обнаруживать все доступные портлеты.
Более гибким решением было бы, чтобы один из ваших классов для каждого развертывания реализовывал общий интерфейс MBean. Ваша панель мониторинга может затем использовать JMX, в частности метод javax.management.MBeanServerConnection
queryMBeans
, чтобы получить все MBean-компоненты (или подмножество MBean-компонентов, принадлежащих определенному пакету, которые вы можете указать в качестве параметра запроса). Затем вы можете выполнять методы интерфейса с помощью метода javax.management.MBeanServerConnection
invoke
. Чтобы получить MBeanServerConnection с JBoss, позвоните org.jboss.mx.util.MBeanServerLocator.locateJBoss()
.
Некоторая дополнительная информация в соответствии с запросом (обратите внимание, что ниже приведена спецификация JBoss):
1) Превратите ваши развертывания в MBean
Для каждого из ваших файлов JAR добавьте файлы jboss-service.xml
и *-xmbean.xml
в каталог META-INF
(где *
- это имя по вашему выбору). Следуйте этому примеру для этих файлов.
Реализация MBean по любому пути, который вы указали в атрибуте code
элемента jboss-service.xml
mbean
(в нашем примере org.jboss.chap2.xmbean.JNDIMap
). Укажите согласованное пространство имен и параметр для атрибута name
элемента jboss-service.xml
mbean
(в примере 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()});
}