尽管似乎是JBoss(AS 7.1.1.Final)连接工厂的成功绑定:
[org.jboss.as.messaging] (MSC service thread 1-9) JBAS011601: Bound messaging object to jndi name java:/ConnectionFactory
查找中的ConnectionFactory始终为null。任何人都可以看到问题所在吗?
@Configuration
@ComponentScan(basePackages = "reservation")
public class AppConfiguration extends WebMvcConfigurerAdapter {
// ***********************//
// ******** JMS **********//
// ***********************//
@Bean
public ConnectionFactory jmsConnectionFactory() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName("java:/ConnectionFactory");
return (ConnectionFactory) jndiObjectFactoryBean.getObject();
}
@Bean
public Queue requestsQueue() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName("java:/queue/test");
return (Queue) jndiObjectFactoryBean.getObject();
}
@Bean
public JmsOperations jmsOperations() {
final JmsTemplate jmsTemplate = new JmsTemplate(jmsConnectionFactory());
jmsTemplate.setDefaultDestination(requestsQueue());
return jmsTemplate;
}
}
答案 0 :(得分:3)
很遗憾,您必须手动拨打afterPropertiesSet()
:
@Bean
public ConnectionFactory jmsConnectionFactory() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName("java:/ConnectionFactory");
jndiObjectFactoryBean.afterPropertiesSet(); //HERE
return (ConnectionFactory) jndiObjectFactoryBean.getObject();
}
我特别喜欢的替代方案如下:
@Bean
public JndiObjectFactoryBean jmsConnectionFactoryFactoryBean() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiName("java:/ConnectionFactory");
return jndiObjectFactoryBean;
}
public ConnectionFactory jmsConnectionFactory() {
return (ConnectionFactory) jmsConnectionFactoryFactoryBean().getObject();
}
请注意,jmsConnectionFactory()
不使用@Bean
进行注释(这很重要)。在这种情况下,Spring会为您调用适当的回调方法。