activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jydev <jyoony...@gmail.com>
Subject Re: ClassCastException with VirtualTopic on 5.1
Date Mon, 19 May 2008 07:16:46 GMT

Hi Aaron,

Thanks for your reply.  I tried running our configuration at home (not using
your test class), but unable to reproduce.  Only thing I can think that's
different is the OS.  We use CentOS at work and I was running on Windows at
home.  But it doesn't make sense since ActiveMQ seems to be 100% java
implementation and the errors doesn't seem to be OS related...

I'll try again tomorrow at the office.

--jy


Aaron Mulder wrote:
> 
> I did not see this problem with the admittedly inefficient test class
> attached (which is only the consumer part).
> 
> Thanks,
>        Aaron
> 
> On Fri, May 16, 2008 at 6:17 PM, jydev <jyoonyang@gmail.com> wrote:
>>
>> Hello,
>>
>> Getting the following error with VirtualTopic on 5.1, when there are more
>> than one topic subscribers.
>>
>> ERROR Service                        - Async error occurred:
>> java.lang.ClassCastException: org.apache.activemq.broker.region.Topic
>> cannot
>> be cast to org.apache.activemq.broker.region.Queue
>> java.lang.ClassCastException: org.apache.activemq.broker.region.Topic
>> cannot
>> be cast to org.apache.activemq.broker.region.Queue
>>        at
>> org.apache.activemq.broker.region.QueueSubscription.acknowledge(QueueSubscription.java:50)
>>        at
>> org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:224)
>>        at
>> org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:364)
>>        at
>> org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:470)
>>        at
>> org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:194)
>>        at
>> org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:73)
>>        at
>> org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:73)
>>        at
>> org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:84)
>>        at
>> org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:443)
>>        at
>> org.apache.activemq.command.MessageAck.visit(MessageAck.java:196)
>>        at
>> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292)
>>        at
>> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:180)
>>        at
>> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
>>        at
>> org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:143)
>>        at
>> org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:206)
>>        at
>> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
>>        at
>> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:196)
>>        at
>> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:183)
>>        at java.lang.Thread.run(Thread.java:619)
>>
>> This seems to be already captured as an issue:
>> https://issues.apache.org/activemq/browse/AMQ-1687
>>
>> Any idea when there will be a patch for this?  Is there a work around?
>>
>> It seems like the messages are getting to the listeners ok even though
>> broker is spitting out the errors above.  But I want to make sure that
>> there
>> would be no weird side-effects due to the error.
>>
>> Thanks you in advance
>> jydev
>> --
>> View this message in context:
>> http://www.nabble.com/ClassCastException-with-VirtualTopic-on-5.1-tp17285256s2354p17285256.html
>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
>>
>>
> 
> package training;
> 
> import javax.jms.ConnectionFactory;
> import javax.jms.JMSException;
> import javax.jms.Connection;
> import javax.jms.Session;
> import javax.jms.TextMessage;
> import javax.jms.MessageConsumer;
> import javax.jms.Destination;
> import org.apache.activemq.ActiveMQConnectionFactory;
> 
> /**
>  * Used to start clients to read a number of messages from a topic or
> queue.
>  */
> public class GenericConsumer {
>     private final static String DEFAULT_ACTIVEMQ_URL =
> "tcp://localhost:61616";
>     private ConnectionFactory factory;
> 
>     public void initialize() {
>         factory = new ActiveMQConnectionFactory(DEFAULT_ACTIVEMQ_URL);
>     }
> 
>     public void receiveMessage(String destName, boolean isQueue, String
> clientID) throws JMSException {
>         Connection connection = null;
>         Session session = null;
>         MessageConsumer consumer = null;
>         try {
>             connection = factory.createConnection();
>             session = connection.createSession(false,
> Session.AUTO_ACKNOWLEDGE);
>             Destination dest = isQueue ? session.createQueue(destName) :
> session.createTopic(destName);
>             consumer = session.createConsumer(dest);
>             connection.start();
>             TextMessage message = (TextMessage) consumer.receive(5000);
>             if(message != null) {
>                 System.out.println(clientID+" Received message on
> destination "+destName+" with ID "+message.getJMSMessageID());
>             } else {
>                 System.out.println(clientID+" Consumer timed out on
> destination "+destName+"; no message received.");
>             }
>             connection.stop();
>         } finally {
>             if(consumer != null) try {consumer.close();}catch(JMSException
> e) {}
>             if(session != null) try {session.close();}catch(JMSException
> e) {}
>             if(connection != null) try
> {connection.close();}catch(JMSException e) {}
>         }
>     }
> 
>     /**
>      * Starts a new thread to process messages from the given destination.
>      */
>     public static void launchConsumer(final String destName, final boolean
> isQueue, final String clientID, final int messageCount) {
>         Thread t = new Thread() {
>             public void run() {
>                 GenericConsumer consumer = new GenericConsumer();
>                 consumer.initialize();
>                 System.out.println(clientID+" consumer started.");
>                 try {
>                     for(int i=0; i<messageCount; i++) {
>                         consumer.receiveMessage(destName, isQueue,
> clientID);
>                     }
>                 } catch (Exception e) {
>                     e.printStackTrace();
>                 }
>                 System.out.println(clientID+" consumer FINISHED.");
>             }
>         };
>         t.start();
>     }
> 
>     public static void main(String[] args) {
>         // Start 2 consumers to read off the queue normally
>         launchConsumer("Consumer.Foo.VirtualTopic.Test", true, "Client 1",
> 10);
>         launchConsumer("Consumer.Foo.VirtualTopic.Test", true, "Client 2",
> 20);
>         // Start 2 consumers to read off the queue normally
>         launchConsumer("Consumer.Bar.VirtualTopic.Test", true, "ClientB1",
> 10);
>         launchConsumer("Consumer.Bar.VirtualTopic.Test", true, "ClientB2",
> 20);
>     }
> 
> }
> 
> 

-- 
View this message in context: http://www.nabble.com/ClassCastException-with-VirtualTopic-on-5.1-tp17285256s2354p17312523.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message