MDB как получить настройки соединения из серверной среды - PullRequest
0 голосов
/ 07 января 2011

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

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

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

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

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

EDIT

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

1 Ответ

0 голосов
/ 07 января 2011

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

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. Я думаю, что есть решение eXtension для управления сервером приложений (AMX).

...