2016-05-06 12 views
0

私はプロバイダとJMS 2.0 APIとしてActiveMqを使用しています。 2行目がを投げていますAbstractMethodError、それを修正する方法は? JMS 2.0でfactory.createContext()がAbstractMethodErrorを投げている

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)

オブジェクト

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

は、私は、次の手順を使用して作成しました。

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、私はjms2.0のActivemqサポートをチェックする必要があります。 – ramanKC

+0

ActiveMQ:JMS 2.0のサポートなし IBM MQバージョン8.0:JMS 2.0をサポート – ramanKC

関連する問題