MDB, как получить настройки подключения из серверной среды

У меня есть bean-компонент, управляемый сообщениями, который подключается к удаленному JMS-провайдеру HornetQ (отличается для производства/тестирования).

Параметры подключения хранятся либо в файле sun-ejb-jar.xml, либо в виде аннотаций @ActivationConfigProperty непосредственно в классе MDB.

Поскольку все эти настройки связаны с файлом ear, это делает процесс развертывания довольно громоздким, когда вы хотите протестировать в разных средах, поскольку вам нужно постоянно помнить об изменении настроек.

Есть ли у вас какие-либо идеи о том, как заставить мое приложение читать эти настройки с сервера?

Я думал о создании некоторых пользовательских ресурсов и чтении их с помощью @Resource, но я не знаю, как заставить MDB читать эти настройки, потому что внедрение @Resource AFAIK происходит после того, как MDB уже инициализирован...

ИЗМЕНИТЬ

Чтобы уточнить: я ищу что-то вроде файла конфигурации sun-ejb-jar.xml, который я должен установить на каждом сервере с определенной конфигурацией (например, разные поставщики JMS - темы/очереди и т. д.). Но мое ушное приложение должно остаться без изменений. Он должен автоматически загружать среду с каждого сервера. Имеет ли это смысл?


person Bogdan    schedule 07.01.2011    source источник


Ответы (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. Я думаю, что для этого есть Application Server Management eXtension (AMX).

person Nayan Wadekar    schedule 07.01.2011
comment
Привет и спасибо за вклад. Я, вероятно, не очень ясно выразился в своем вопросе, см. Мой отредактированный пост. - person Bogdan; 07.01.2011
comment
Я думаю, вы хотите прочитать конфигурацию с сервера, не читая xml-файлы. Если это так, то я указал ту же тему для подключения к определенному серверу и динамического получения информации о конфигурации. Укажите, если я не правильно понял. - person Nayan Wadekar; 10.01.2011