在有些应用中,我们不需要在程序启动的时候就启动JMS服务;而且,我们每次访问的JMS服务器有可能都不一样,这个时候就需要一个可动态配置JMS ConnectionFactory 。
我们可以通过代码来重新配置JMS服务器的IP和Security的用户名和密码
<!--
**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>
<!-- **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);
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);