MDB如何从服务器环境获取连接设置

发布于 2024-10-11 06:37:16 字数 523 浏览 5 评论 0原文

我有一个消息驱动的 bean,它连接到远程 HornetQ JMS 提供程序(生产/测试不同)。

连接设置要么存储在 sun-ejb-jar.xml 中,要么作为 @ActivationConfigProperty 注释直接存储在 MDB 类中。

由于所有这些设置都与 Ear 文件捆绑在一起,因此当您想要在不同环境中进行测试时,部署过程会变得非常麻烦,因为您必须记住始终更改设置。

您对如何让我的应用程序从服务器读取此设置有什么想法吗?

我想过创建一些自定义资源并使用 @Resource 读取它们,但我不知道如何使 MDB 读取这些设置,因为 @Resource 注入 AFAIK 发生在 MDB 已经初始化之后...

编辑< /strong>

澄清一下:我正在寻找类似 sun-ejb-jar.xml 配置文件,我应该将其安装在具有特定配置的每台服务器上(例如,不同的 JMS 提供程序 - 主题/队列等)。但我的耳朵应用程序应该没有改变。它应该自动从每个服务器加载环境。有道理吗?

I have a message driven bean which connects to a remote HornetQ JMS provider (different for production/testing).

The connection settings are stored either in sun-ejb-jar.xml or as @ActivationConfigProperty annotations directly in the MDB class.

Since all these settings are bundled with the ear file it makes the deployment process quite cumbersome when you want to test in different environments since you have to remember to change the settings all the time.

Do you have any ideas on how I could make my application read this settings from the server?

I thought of creating some custom resources and read them with @Resource, but I don't know how to make the MDB read those settings because the @Resource injection AFAIK takes place after the MDB is already initilized...

EDIT

To clarify: What I'm looking for is something like sun-ejb-jar.xml configuration file which I should install on each server with specific configuration (for ex, different JMS providers - topics/queues, etc). But my ear app should be unchanged. It should automatically load the enviroment from each server. Does it make sense?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灯下孤影 2024-10-18 06:37:16

您对如何让我的应用程序从服务器读取此设置有任何想法吗?

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 也可以实现相同的效果。

我不太了解玻璃鱼。我认为有应用程序服务器管理扩展(AMX)来完成它。

Do you have any ideas on how I could make my application read this settings from the server?

JMX-Mbeans can be used to connect with the server. Below is the sample code to connect with the server & fetch information from it, may help you to get idea of it.

//---

    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());
    }

//---

It outputs the registered topics/queues like jboss.mq.destination:service=Topic,name=ProvisioningResponseTopic along with other stuff.

MBeans can also be used to get other information like ports, binding-address, domain etc.

Note : The above code is JBoss specific, but same can be achieved for Glassfish.

I don't know much about Glassfish. I think there is Application Server Management eXtension (AMX) to accomplish it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文