Author: robbie
Date: Thu Feb  2 13:56:14 2012
New Revision: 1239620

URL: http://svn.apache.org/viewvc?rev=1239620&view=rev
Log:
QPID-3784: introduce system property to run a dispatcher thread as 
damon/non-daemon thread. Changes dispatcher thread to be non daemon thread by 
default.

Applied patch from Andrew MacBean <[email protected]> and Oleksandr 
Rudyy<[email protected]>.

Added:
    
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherDaemonTest.java
Modified:
    qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml
    
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java

Modified: qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml?rev=1239620&r1=1239619&r2=1239620&view=diff
==============================================================================
--- qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml (original)
+++ qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml Thu Feb  2 
13:56:14 2012
@@ -3621,6 +3621,13 @@ log4j.appender.console.layout.Conversion
                      <entry>false</entry>
                   <entry><para>If set will use the old map message encoding. 
By default the Map messages are encoded using the 0-10 map 
encoding.</para><para>This could also be set per connection as well (see 
connection paramters).</para></entry>
                 </row>
+
+                <row>
+                  <entry>qpid.jms.daemon.dispatcher</entry>
+                  <entry>boolean</entry>
+                  <entry>false</entry>
+                  <entry><para>Controls whether the Session dispatcher thread 
is a daemon thread or not. If this system property is set to true then the 
Session dispatcher threads will be created as daemon threads. This setting is 
introduced in version 0.16.</para></entry>
+                </row>
               </tbody>
             </tgroup>
           </table>

Modified: 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java?rev=1239620&r1=1239619&r2=1239620&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
 (original)
+++ 
qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
 Thu Feb  2 13:56:14 2012
@@ -387,6 +387,16 @@ public abstract class AMQSession<C exten
     /** Immediate message prefetch default. */
     public static final String IMMEDIATE_PREFETCH_DEFAULT = "false";
 
+    /**
+     * System property to enable allow dispatcher thread to be run as a daemon 
thread
+     */
+    public static final String DAEMON_DISPATCHER = 
"qpid.jms.daemon.dispatcher";
+
+    /**
+     * Flag indicating to start dispatcher as a daemon thread
+     */
+    protected final boolean DEAMON_DISPATCHER_THREAD = 
Boolean.getBoolean(DAEMON_DISPATCHER);
+
     /** The connection to which this session belongs. */
     private AMQConnection _connection;
 
@@ -2463,7 +2473,7 @@ public abstract class AMQSession<C exten
                 throw new Error("Error creating Dispatcher thread",e);
             }
             _dispatcherThread.setName("Dispatcher-Channel-" + _channelId);
-            _dispatcherThread.setDaemon(true);
+            _dispatcherThread.setDaemon(DEAMON_DISPATCHER_THREAD);
             _dispatcher.setConnectionStopped(initiallyStopped);
             _dispatcherThread.start();
             if (_dispatcherLogger.isInfoEnabled())

Added: 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherDaemonTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherDaemonTest.java?rev=1239620&view=auto
==============================================================================
--- 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherDaemonTest.java
 (added)
+++ 
qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/client/DispatcherDaemonTest.java
 Thu Feb  2 13:56:14 2012
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.qpid.client;
+
+import javax.jms.Session;
+
+import org.apache.qpid.AMQException;
+import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.url.URLSyntaxException;
+
+public class DispatcherDaemonTest extends QpidTestCase
+{
+    private AMQSession<?,?> _session;
+
+    public void tearDown() throws Exception
+    {
+        super.tearDown();
+        if (_session != null && _session.getDispatcherThread() != null)
+        {
+            _session.getDispatcherThread().interrupt();
+        }
+    }
+
+    public void testDispatcherIsRunInDaemonThreadWithNoMessageListener() 
throws Exception
+    {
+        _session = createSession();
+        _session.startDispatcherIfNecessary();
+        assertFalse("Dispatcher thread should be non daemon as 
qpid.jms.daemon.dispatcher is not set",
+                _session.getDispatcherThread().isDaemon());
+    }
+
+    public void 
testDispatcherIsRunInDaemonThreadWithConsumerMessageListenerAndDaemonFlagOn() 
throws Exception
+    {
+        setTestSystemProperty(AMQSession.DAEMON_DISPATCHER, "true");
+        _session = createSession();
+        _session.startDispatcherIfNecessary();
+        assertTrue("Dispatcher thread should be daemon as 
qpid.jms.daemon.dispatcher is set to true",
+                _session.getDispatcherThread().isDaemon());
+    }
+
+    private AMQSession<?,?> createSession() throws AMQException, 
URLSyntaxException
+    {
+        AMQConnection amqConnection = new MockAMQConnection(
+                
"amqp://guest:guest@client/test?brokerlist='tcp://localhost:1'&maxprefetch='0'");
+
+        AMQSession_0_8 session = new AMQSession_0_8(amqConnection, 1, true, 
Session.SESSION_TRANSACTED, 1, 1);
+        return session;
+    }
+
+}



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to