2017-09-07 62 views
0

使用Wildfly 10.1.0.Final和定製的JMS消息隊列,我可以通過in-vm InVmConnectionFactory成功發送和接收消息,JNDI名稱爲java:/ConnectionFactory無法通過Wildfly中默認的Artemis/ActiveMQ向本地JMS隊列發送消息10

但是,我不能得到新的pooled-connection-factory使用JNDI名稱java:/JmsXA工作,消息只是迷路,不要在任何地方顯示出來(也檢查了wildfly控制檯的運行時JMS服務器視圖(Runtime->Subsystems->Messaging - ActiveMQ)。

因爲active-mq池連接工廠被標記爲DefaultJMSConnectionFactory,使用JMS 2.0 API和簡單地通過注入JMSContext

@Inject 
JmsContext jmsContext; 

消息發送將不起作用開箱。

這很奇怪,我發現最近使用包含Artemis(ActiveMQ)代理的wildfly 10配置沒有類似的問題。

連接工廠被定義爲事務默認情況下,但是這是矯枉過正我們的場景,所以我切換它關閉:

<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA" connectors="in-vm" transaction="none"/> 

我檢查覆蓋JMS 1.1 /的Wildfly messaging configuration guide和各種網上的例子2.0,但到目前爲止還沒有發現線索。

樣品的編號:

@Startup // just for a simple test sending a message right on startup 
public class MessageService { 

    @Inject 
    @JMSConnectionFactory("java:/JmsXA") // activemq-ra pooled-connection-factory 
    private JMSContext jmsContext; 

    @Resource(lookup = JAVA_JMS_PROGRESS_QUEUE) 
    private Queue progressQueue; 

    public MessageService() { 
    } 

    @PostConstruct 
    private void init() { 
     final JMSProducer jmsProducer = jmsContext.createProducer(); 
     jmsProducer.send(progressQueue, "Hello queue")); 
    } 
} 

回答

0

原來發往何處消息仍然需要聲明爲非事務性,即使當連接的工廠已被配置爲這樣的方法:

@PostConstruct 
@TransactionAttribute(TransactionAttributeType.NEVER) 
private void init() { 
... 

現在工作!