簡體   English   中英

在JMS 2.0中,factory.createContext()引發AbstractMethodError

[英]In JMS 2.0 factory.createContext() is throwing AbstractMethodError

我正在使用ActiveMq作為提供程序和JMS 2.0 API。 第二行拋出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);
    }

}
}

如果我的內存正確,則activemq尚不支持JMS2。 (他們的JIRA中的相關問題仍未解決: https : //issues.apache.org/jira/browse/AMQ-5383

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM