在有些应用中,我们不需要在程序启动的时候就启动JMS服务;而且,我们每次访问的JMS服务器有可能都不一样,这个时候就需要一个可动态配置JMS ConnectionFactory 。
<!-- **JMS** -->
<!-- **JNDI Template** -->
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" lazy-init="true">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
<prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
<prop key="java.naming.provider.url">localhost:1099</prop>
</props>
</property>
</bean>
<!-- **JMS Connection** -->
<bean id="jmsConnectionFactory" lazy-init="true" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="proxyInterfaces" value="javax.jms.ConnectionFactory" />
<property name="lookupOnStartup" value="false" />
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="ConnectionFactory" />
</bean>

<!-- userCredentialsConnection. For JmsSecurity -->
<bean id="myConnectionFactory" lazy-init="true"
class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory" ref="jmsConnectionFactory" />
</bean>
我们可以通过代码来重新配置JMS服务器的IP和Security的用户名和密码
if (StringUtils.isNotEmpty(hostName)) {
JndiTemplate jndiTemplate = (JndiTemplate) this.factory.getBean("jndiTemplate");
Properties props = jndiTemplate.getEnvironment();
props.setProperty("java.naming.provider.url", hostName + ":1099");
}

UserCredentialsConnectionFactoryAdapter jmsUserAdapter = (UserCredentialsConnectionFactoryAdapter)
this.factory.getBean("myConnectionFactory");

jmsUserAdapter.setUsername(jmsUserName);
jmsUserAdapter.setPassword(jmsPassword);
<!-- **JMS** -->
<!-- **JNDI Template** -->
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" lazy-init="true">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
<prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
<prop key="java.naming.provider.url">localhost:1099</prop>
</props>
</property>
</bean>
<!-- **JMS Connection** -->
<bean id="jmsConnectionFactory" lazy-init="true" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="proxyInterfaces" value="javax.jms.ConnectionFactory" />
<property name="lookupOnStartup" value="false" />
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="ConnectionFactory" />
</bean>
<!-- userCredentialsConnection. For JmsSecurity -->
<bean id="myConnectionFactory" lazy-init="true"class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory" ref="jmsConnectionFactory" />
</bean>我们可以通过代码来重新配置JMS服务器的IP和Security的用户名和密码
if (StringUtils.isNotEmpty(hostName)) {
JndiTemplate jndiTemplate = (JndiTemplate) this.factory.getBean("jndiTemplate");
Properties props = jndiTemplate.getEnvironment();
props.setProperty("java.naming.provider.url", hostName + ":1099");
}
UserCredentialsConnectionFactoryAdapter jmsUserAdapter = (UserCredentialsConnectionFactoryAdapter)
this.factory.getBean("myConnectionFactory");
jmsUserAdapter.setUsername(jmsUserName);
jmsUserAdapter.setPassword(jmsPassword);
本文介绍如何通过Spring框架实现JMS服务的动态配置,包括如何根据需求更改JMS服务器的地址及安全设置。

的一点使用心得(四)Spring扩展应用-可修改的JMS ConnectionFactory&spm=1001.2101.3001.5002&articleId=1901020&d=1&t=3&u=7a9fff94e88a40828bff1d166434c463)
2253

被折叠的 条评论
为什么被折叠?



