在Spring注释配置中找不到带有JNDI查找的JBoss ConnectionFactory

时间:2013-01-24 20:17:46

标签: spring jboss7.x spring-annotations spring-jms jmstemplate

尽管似乎是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;
    }
}

1 个答案:

答案 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会为您调用适当的回调方法。

相关问题