[prev in list] [next in list] [prev in thread] [next in thread] 

List:       activemq-dev
Subject:    [jira] Issue Comment Edited: (AMQNET-64) occasional exception in
From:       "Kristofor Jacobson (JIRA)" <jira () apache ! org>
Date:       2007-10-26 19:48:23
Message-ID: 3751534.1193428103605.JavaMail.jira () brutus
[Download RAW message or body]


    [ https://issues.apache.org/activemq/browse/AMQNET-64?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_40514 \
] 

kjacobson edited comment on AMQNET-64 at 10/26/07 12:48 PM:
---------------------------------------------------------------------

This new test (found in the attached ConsumerTest.cs) reproduces the issue.

{code}
using System.Threading;
{code}

{code}
        [Test]
        public void TestNoTimeoutConsumer()
        {
            destinationType = DestinationType.Queue;
            // Launch a thread to perform IMessageConsumer.Receive().
            // If it doesn't fail in less than three seconds, no exception was \
thrown.  Thread receiveThread = new Thread(doTestNoTimeoutConsumer);
            receiveThread.Start(Session.CreateConsumer((IQueue) Destination));
            if (receiveThread.Join(3000)) {
                Assert.Fail("IMessageConsumer.Receive() returned without blocking.  \
Test failed.");  } else {
                // Kill the thread - otherwise it'll sit in Receive() until a message \
arrives.  receiveThread.Interrupt();
            }
        }

        public void doTestNoTimeoutConsumer(Object parameter)
        {
            IMessageConsumer consumer = (IMessageConsumer ) parameter;
            try
            {
                consumer.Receive();
            } catch (ArgumentOutOfRangeException e) {
                // The test failed.  We will know because the timeout will expire \
                inside TestNoTimeoutConsumer().
                Console.WriteLine("Test failed with exception: " + e.Message);
            } catch (ThreadInterruptedException e) {
                // The test succeeded!  We were still blocked when we were \
interrupted.  } catch (Exception e) {
                // Some other exception occurred.
                Console.WriteLine("Test failed with exception: " + e.Message);
            }
        }
{code}

After implementing a fix to Dispatcher.cs that was basically the same as the one \
already posted in the forum, the test passed.

      was (Author: kjacobson):
    This copy of ConsumerTest reproduces the issue.

After implementing a fix that was basically the same as the one already posted in the \
forum, the test passed.  
> occasional exception in ActiveMQ.Dispatcher.Dequeue() : millisecondsTimeout must be \
>                 either non-negative and less than or equal to Int32.MaxValue or -1.
> -------------------------------------------------------------------------------------------------------------------------------------------------------
>  
> Key: AMQNET-64
> URL: https://issues.apache.org/activemq/browse/AMQNET-64
> Project: ActiveMQ .Net
> Issue Type: Bug
> Components: ActiveMQ Client
> Environment: .NET 2.0, Windows 2000 Server under VMware, \
>                 https://svn.apache.org/repos/asf/activemq/activemq-dotnet/trunk @ \
>                 578465
> Reporter: David Holroyd
> Assignee: James Strachan
> Attachments: ConsumerTest.cs, Dispatcher_timeout_cast-patch.diff
> 
> 
> I tried a lightly modified version of the example code from \
> http://activemq.apache.org/nms/nms.html and find that every few invocations of the \
> test program, I see the following exception, rather than the normal 'Received \
> message' output: {noformat}
> Unhandled Exception: System.ArgumentOutOfRangeException: Number must be either \
> non-negative and less than or equal to Int32.MaxValue or -1. Parameter name: \
> millisecondsTimeout at System.Threading.WaitHandle.WaitOne(Int32 \
> millisecondsTimeout, Boolean exitContext) at ActiveMQ.Dispatcher.Dequeue(TimeSpan \
> timeout) at ActiveMQ.Dispatcher.Dequeue()
> at ActiveMQ.MessageConsumer.Receive()
> at Test.Bridge.Main(String[] args)
> {noformat}
> The code in question is,
> {code:title=Bridge.cs}
> namespace Test {
> 	using System;
> 	using NMS;
> 	using ActiveMQ;
> 	public class Bridge {
> 		public static void Main(string[] args) {
> 			IConnectionFactory factory = new ConnectionFactory(new \
> Uri("tcp://192.168.9.162:61616"));  using (IConnection connection = \
> factory.CreateConnection())  {
> 			    Console.WriteLine("Created a connection!");
> 			    
> 			    ISession session = connection.CreateSession();
> 			    
> 			    IDestination destination = session.GetQueue("FOO.BAR");
> 			    Console.WriteLine("Using destination: " + destination);
> 			    
> 			    // lets create a consumer and producer
> 			    IMessageConsumer consumer = session.CreateConsumer(destination);
> 			    
> 			    IMessageProducer producer = session.CreateProducer(destination);
> 			    producer.Persistent = true;
> 			    
> 			    // lets send a message
> 			    ITextMessage request = session.CreateTextMessage("Hello World!");
> 			    request.NMSCorrelationID = "abc";
> 			    request.Properties["NMSXGroupID"] = "cheese";
> 			    request.Properties["myHeader"] = "James";
> 			    
> 			    producer.Send(request);
> 			    
> 			    // lets consume a message
> 			    ITextMessage message = (ITextMessage) consumer.Receive();
> 			    if (message == null)
> 			    {
> 				Console.WriteLine("No message received!");
> 			    }
> 			    else
> 			    {
> 				Console.WriteLine("Received message with ID:   " + message.NMSMessageId);
> 				Console.WriteLine("Received message with text: " + message.Text);
> 			    }
> 			}
> 		}
> 	}
> }
> {code}
> The C# code is talking to ActiveMQ 4.1.1 running on the Linux host (I'm using NMS \
> within VMware). I'll try to nose around the code and work out what's happening, but \
> this is the first time I've ever worked with C#.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic