2016-05-06 39 views
0

我使用ActiveMq作爲提供者和JMS 2.0 API。 第二行是扔AbstractMethodError,該如何解決?在JMS 2.0中factory.createContext()拋出AbstractMethodError

1. ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL); 
2. JMSContext context = factory.createContext(); 
3. context.createProducer().send(destination, msg); 

Exception in thread "main" java.lang.AbstractMethodError: org.apache.activemq.ActiveMQConnectionFactory.createContext()Ljavax/jms/JMSContext; at jms.advance.Sender.sendMessage(Sender.java:41) at jms.advance.Sender.main(Sender.java:26)

目的地對象我創建使用以下步驟。

ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL); 
Connection connection = factory.createConnection(); 
connection.start(); 
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
Destination destination = session.createQueue("SAMPLE_test_QUEUE"); 

下面是完整的代碼片段。

import javax.jms.Connection; 
import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 
import javax.jms.JMSContext; 
import javax.jms.JMSException; 
import javax.jms.JMSRuntimeException; 
import javax.jms.Session; 

import org.apache.activemq.ActiveMQConnection; 
import org.apache.activemq.ActiveMQConnectionFactory; 

public class Sender { 
    public String senderId; 
    private ConnectionFactory factory = null; 
    private Connection connection = null; 
    private Session session = null; 
    private Destination destination = null; 

public static void main(String... arg) throws JMSException, InterruptedException{ 
    Sender sender = new Sender("facebook"); 
    int count = 1; 
    for(int i=0; i <= 100; i++, count++){ 
     String msg = sender.senderId +": "+ "sending msg #" + count; 
     sender.sendMessage(sender.factory, sender.destination, msg); 
     Thread.sleep(3000); 
    } 
} 
public Sender(String senderid) throws JMSRuntimeException, JMSException { 
    this.senderId = senderid; 
    factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL); 
    connection = factory.createConnection(); 
    connection.start(); 
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    destination = session.createQueue("SAMPLE_test_QUEUE"); 

} 

public void sendMessage(ConnectionFactory factory, Destination destination, String msg) throws JMSException{ 
    try(JMSContext context = factory.createContext()){ 
     context.createProducer().send(destination, msg); 
    }catch(JMSRuntimeException e) 
    { 
     System.out.println(e); 
    } 

} 
} 

回答

1

如果我的記憶是正確的,activemq還不支持JMS2。 (在他們的JIRA中的相關問題仍然是開放的:https://issues.apache.org/jira/browse/AMQ-5383

所以createContext()方法將不會產生預期的結果。但是,由於JMS2具有JMS 1.1向後兼容性,因此仍然可以使用方法createConnection()來完成這項工作。

+0

感謝Vaaith,我應該檢查Activemq對jms2.0的支持。 – ramanKC

+0

ActiveMQ:不支持JMS 2.0 IBM MQ版本8.0:支持JMS 2.0 – ramanKC

相關問題