I was able to avoid this problem by making the connection parameter
consistent on both broker's activemq.xml and my client connection uri

In activemq.xml, I was using "localhost" in transportConnectors uri's, where
as in the client connection uri, I was using the IP address of my localhost. 
Some how, may be on linux, ActiveMQ thinks they are different addresses and
forward the message or something like that?

Any how, I got over that hurdle, but I'm getting another error when failover
is configured...  This was working before without VirtualTopic, so I have a
feeling it might be related to that...

Thanks!



jydev wrote:
> 
> 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 <[EMAIL PROTECTED]> 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-tp17285256s2354p17326378.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to