JMS(Jboss Messaging)的一点使用心得(四)Spring扩展应用-可修改的JMS ConnectionFactory

来源:互联网 发布:三层网络结构优点 编辑:程序博客网 时间:2024/05/16 15:23
在有些应用中,我们不需要在程序启动的时候就启动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);
原创粉丝点击