JMS(Jboss Messaging)的一點使用心得(四)Spring擴展應用-可修改的JMS ConnectionFactory

在有些應用中,我們不需要在程序啓動的時候就啓動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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章