1

연결 팩토리 (7.1.1.Final AS) :봄 주석 구성의 JNDI 룩업으로는 JBoss ConnectionFactory를 찾을 수 없습니다은 JBoss의 성공적인 결합으로 보이는에도 불구하고

[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; 
    } 
} 

답변

3

불행하게도 수동 afterPropertiesSet()를 호출해야합니다 :

@Bean 
public ConnectionFactory jmsConnectionFactory() { 
    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean(); 
    jndiObjectFactoryBean.setJndiName("java:/ConnectionFactory"); 
    jndiObjectFactoryBean.afterPropertiesSet();     //HERE 
    return (ConnectionFactory) jndiObjectFactoryBean.getObject(); 
} 

을 내가 특히 좋아하는 대안되어 다음과 같이 jmsConnectionFactory()이 주석 하지입니다

@Bean 
public JndiObjectFactoryBean jmsConnectionFactoryFactoryBean() { 
    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean(); 
    jndiObjectFactoryBean.setJndiName("java:/ConnectionFactory"); 
    return jndiObjectFactoryBean; 
} 

public ConnectionFactory jmsConnectionFactory() { 
    return (ConnectionFactory) jmsConnectionFactoryFactoryBean().getObject(); 
} 

공지 것을 @Bean (것이 중요). 이 경우 Spring은 적절한 콜백 메소드를 호출합니다.

+0

잘못된 편집으로 거부 된 @chrisjleu의 편집 : _ "public jmsConnectionFactory()'를'public ConnectionFactory jmsConnectionFactory()'"_으로 변경하십시오. 변경이 필요한 경우 검토하고 변경하십시오. – iDev

+1

@ACB : "Please review"란 무엇을 의미하는지 모르지만 편집하지 않고 컴파일하지 않았으므로 그렇게 만들었습니다. 지금 나는 완전히 테스트 할 수 있었고 대답이 맞는지 확인할 수 있습니다. 덧붙여 말하자면, 대안/두 번째 접근 방식을 사용하고'requestedQueue()'를 구성하는 데에도이 방법을 사용했습니다. – chrisjleu

+0

@chrisjleu : 편집이 유효했지만 내가 오기 전에 거부되었습니다. 그럼에도 불구하고 나는 변화를 적용했다. 나는 그것이 당신을 도왔다 니 기쁩니다! –