MDB как получить настройки соединения из серверной среды
У меня есть бин, управляемый сообщениями, который подключается к удаленному провайдеру HornetQ JMS (отличается для производства / тестирования).
Настройки соединения хранятся либо в sun-ejb-jar.xml, либо в виде аннотаций @ActivationConfigProperty непосредственно в классе MDB.
Так как все эти настройки связаны с файлом ear, процесс развертывания становится довольно громоздким, если вы хотите проводить тестирование в разных средах, поскольку вы должны постоянно помнить об изменении настроек.
Есть ли у вас какие-либо идеи о том, как заставить мое приложение считывать эти настройки с сервера?
Я думал о создании некоторых пользовательских ресурсов и читал их с помощью @Resource, но я не знаю, как заставить MDB читать эти настройки, потому что внедрение AFAIK @Resource происходит после того, как MDB уже инициализирован...
РЕДАКТИРОВАТЬ
Чтобы уточнить: я ищу что-то вроде файла конфигурации sun-ejb-jar.xml, который я должен установить на каждом сервере с определенной конфигурацией (например, для разных провайдеров JMS - темы / очереди и т. Д.). Но мое ухо приложение должно быть неизменным. Он должен автоматически загружать среду с каждого сервера. Имеет ли это смысл?
1 ответ
Есть ли у вас какие-либо идеи о том, как заставить мое приложение считывать эти настройки с сервера?
JMX-Mbeans можно использовать для подключения к серверу. Ниже приведен пример кода для подключения к серверу и получения информации с него, может помочь вам понять это.
//---
Hashtable props = new Hashtable();
props.put(InitialContext.PROVIDER_URL, "jnp://localhost:1099");
props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
InitialContext ctx = new InitialContext(props);
MBeanServerConnection serverConn = (MBeanServerConnection)ctx.lookup("jmx/rmi/RMIAdaptor");
Set<Object> listOfBeans = serverConn.queryMBeans(null, null); // find-all
for(Object o : listOfBeans){
ObjectInstance beanInfo = (ObjectInstance) o;
System.out.println(beanInfo.getObjectName());
}
//---
Это выводит зарегистрированные темы / очереди как jboss.mq.destination:service=Topic,name=ProvisioningResponseTopic
наряду с другими вещами.
MBeans также можно использовать для получения другой информации, такой как порты, адрес привязки, домен и т. Д.
Примечание. Приведенный выше код относится только к JBoss, но этого можно добиться и для Glassfish.
Я не знаю много о Glassfish. Я думаю, что есть решение для управления сервером приложений (AMX) для этого.