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) для этого.

Другие вопросы по тегам