2013-03-11 72 views
1

我遵循Spring文檔並設置了Spring JMS偵聽器。然而,即使我向隊列中添加消息,我的代碼也沒有檢測到這一點。我的Spring配置如下:JMS無法使用使用spring/jms的Oracle隊列中的消息

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

} 

[編輯:以上設置現在正在工作]

回答

0

我不明白你爲什麼要將一個FactoryBean實現連接到Spring DMLC destination屬性。這顯然不正確,因爲setDestinationmethod只接受javax.jms.Destination類型。你已經連線了connectionFactorymessageListener。這就是開始消費信息所需要的一切。如果您刪除已連接到destination屬性的testmq引用,則應成功使用消息。

+0

您好,感謝您的回覆。我改變了我的配置,上面的設置正在工作。 雖然我試圖將它移植到Grails應用程序中,但它不會消耗隊列中的任何消息。我不認爲任何人曾經嘗試過,並有任何想法? – user1740752 2013-03-12 17:08:01