0 0

spring配置weblogic JMS,JmsTemplate为空值?0

spring3.0,weblogic9.2
折腾了2天了一直无头绪,郁闷了

weblogic配置:
connectionFactory的JNDI:JMSFactory
Queue的JNDI:JMSQueue_1、JMSQueue_2
Topic的JNDI:JMSTopic



spring xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jms="http://www.springframework.org/schema/jms"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"
	default-autowire="byName">

	<!-- jndiTemplate -->
	<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
		<property name="environment">
			<props>
				<prop key="java.naming.factory.initial">
					weblogic.jndi.WLInitialContextFactory
				</prop>
				<prop key="java.naming.provider.url">
					t3://localhost:7001
				</prop>
				<prop key="java.naming.factory.url.pkgs"> 
          			weblogic.jndi.factories 
        		</prop>
			</props>
		</property>
	</bean>	
	
	<!-- jmsConnectionFactory -->
	<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="JMSFactory"></property>
		<property name="jndiTemplate" ref="jndiTemplate"></property>
		<!-- <property name="expectedType" value="javax.jms.TopicConnectionFactory"></property> -->
	</bean>
	
	<!-- jmsDestionation -->
	<bean id="jmsDestination" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="JMSTopic"></property>
		<property name="jndiTemplate" ref="jndiTemplate"></property>
		<!-- <property name="expectedType" value="javax.jms.Topic"></property> -->
	</bean>
	
	<!-- singleConnectionFactory
	<bean id="singleConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
		<property name="targetConnectionFactory" ref="jmsConnectionFactory"></property>
	</bean> -->
	
	<!-- sender Template -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="jmsConnectionFactory"></property>
		<property name="defaultDestination" ref="jmsDestination"></property>
		<!-- 
		<property name="connectionFactory" ref="singleConnectionFactory"></property>
		<property name="defaultDestination" value="JMSServer-0/SystemModule-0!JMSTopic"></property>
		<property name="pubSubDomain" value="true"></property>
		<property name="explicitQosEnabled" value="true"></property> -->
	</bean>
	
	<!-- sender bean -->
	<bean id="jmsTopicProducter" class="com.xxoo.test.jms.JMSTopicProducter">
		<property name="jmsTemplate" ref="jmsTemplate"></property>
	</bean>
</beans>


JMSTopicProducter代码:
import java.io.Serializable;
import java.util.Map;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;
import javax.jms.Session;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;

@Component("jmsTopicProducter")
public class JMSTopicProducter {
	private JmsTemplate jmsTemplate;

	public JmsTemplate getJmsTemplate() {
		return jmsTemplate;
	}

	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
	
	public void send(final Map<String, Object> map){
		try{
			this.jmsTemplate.send(new MessageCreator(){

				public Message createMessage(Session arg0) throws JMSException {
					Message message = arg0.createMessage();
					((ObjectMessage) message).setObject((Serializable) map);
					return message;
				}
				
			});
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}


谢谢各位
2012年8月21日 17:43
  • 大小: 12.6 KB

1个答案 按时间排序 按投票排序

0 0

spring配置jms没搞过。但是jms的jndi配置的时候,是不是应该需要容器的用户名、密码呢?也就是jndiTemplate这个bean配置的environment属性,没有用户名、密码是访问不了weblogic的jndi的。
你试一下。因为在没有spring时,一般都是通过如下代码获取weblogic中jndi的

Environment environment = new Environment();
environment.setProviderUrl(url);
environment.setSecurityPrincipal(username);
environment.setSecurityCredentials(password);
Context context = environment.getInitialContext();
context.lookup(jndiName);

2012年8月21日 20:27

相关推荐

Global site tag (gtag.js) - Google Analytics