1

我正在尝试将消息从 Junit 测试用例推送到 JMS 队列,但我不断收到错误消息:

javax.naming.NameNotFoundException: Name [ConnectionFactory] not bound

这是测试用例代码:

public void testPushMessagesIntoQueue() {
    JmsTemplate jmsTemplate = (JmsTemplate) getBean("batchMessageTemplate"); //ERROR HERE
    assertNotNull(jmsTemplate);
    try {
        jmsTemplate.convertAndSend("batchQueue", messageList);
    } catch(Exception ex ) {
        ex.printStackTrace();
    }

}

public ApplicationContext getContext() {
    return new FileSystemXmlApplicationContext("/src/main/webapp/WEB-INF/service-context.xml");
}

public Object getBean(String beanName) {
    return getContext().getBean(beanName);
}

这是我在 service-context.xml 文件中的连接工厂 bean:

<bean name="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">  
    <property name="jndiTemplate" ref="jndiTemplate"/>  
    <property name="jndiName" value="ConnectionFactory" /> 
</bean>

还有我的 jndiTemplate bean:

<bean id="jndiTemplate" class="com.xxx.batch.common.util.CustomJndiTemplate">  
</bean>

在 customJndiTemplate 类中,我将属性设置为

       public CustomJndiTemplate() throws JobException {
          Properties environment = new Properties();
       environment.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
       environment.setProperty("java.naming.provider.url", "jnp://localhost:1099");
       environment.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
       setEnvironment(environment);
       }

我的 batchMessageTemplate 豆:

  <bean name="batchMessageTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="jmsConnectionFactory" />
    <property name="defaultDestination" ref="batchDestination" />  
    <property name="receiveTimeout" value="1" />  
</bean>

在我的 Jboss4 的 Jbossmq-destinations-service.xml 中,我定义了队列:

<mbean code="org.jboss.mq.server.jmx.Queue"
 name="jboss.mq.destination:service=Queue,name=batchQueue">
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>

当我在启动 jboss 4 后运行测试用例时,出现错误:

Error creating bean with name 'jmsConnectionFactory' defined in file [service-context.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: Name [ConnectionFactory] not bound;

仅当我运行 Junit 测试用例时才会出现此问题。已经定义了一个在 Jboss 中运行的 servlet 以将消息添加到队列中,并且工作正常

我是 JMS 的新手,因此将不胜感激。

4

0 回答 0