JMS无法使用spring / jms使用来自Oracle队列的消息

时间:2013-03-11 13:37:25

标签: oracle spring queue jms oracle-aq

我已经按照spring文档并设置了一个Spring JMS监听器。然而,即使我向队列添加消息,我的代码也没有检测到这一点。我的春季配置如下:

<bean id="dataSourceListener" class="oracle.jdbc.pool.OracleDataSource">
    <property name="URL" value="xxx"/>
    <property name="user" value="xxx"/>
    <property name="password" value="xxx"/>
</bean>

<bean id="jmsConnectionFactory" class="OracleAqFactoryBean">
    <property name="dataSource" ref="dataSourceListener" />
</bean>

<jms:listener-container connection-factory="jmsConnectionFactory" acknowledge="transacted" concurrency="1-5">
    <jms:listener destination="queuename" ref="myMessageListener"/>
</jms:listener-container>

<bean id="myMessageListener" class="Listener"/>

我的Java如下:

我的自定义监听器:

class Listener implements MessageListener {

    @Override
    void onMessage(Message message) {
        // code to handle message is here
    }
}

我的OracleAqFactoryBean:

public class OracleAqFactoryBean implements FactoryBean {
private DataSource dataSource;

public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}

@Override
public Object getObject() throws Exception {
    return AQjmsFactory.getConnectionFactory( dataSource );
}

@Override
public Class<?> getObjectType() {
    return ConnectionFactory.class;
}

@Override
public boolean isSingleton() {
    return true;
}

}

[编辑:上面的设置现在正在成功运作]

1 个答案:

答案 0 :(得分:0)

我不明白为什么要将FactoryBean实现连接到Spring DMLC destination属性。这显然不正确,因为setDestinationmethod只接受javax.jms.Destination类型。您已连接connectionFactorymessageListener。这就是开始使用消息所需的全部内容。如果删除已连接到testmq属性的destination引用,则应成功使用消息。