RE: 8.0.x / 7.0.x progress

2013-10-05 Thread Konstantin Preißer
Hi Niki,
thank you for your reply.

> -Original Message-
> From: Niki Dokovski [mailto:nick...@gmail.com]
> Sent: Saturday, October 5, 2013 7:47 AM
> To: Tomcat Developers List
> Subject: Re: 8.0.x / 7.0.x progress

> > I have installed Wireshark now and can confirm that Firefox (after it is
> > resumed) still sends data over the TCP connection which Tomcat seems not
> to
> > be able to read.
> >
> 
> Are there ACKs for the TCP packets?
> I'll try to reproduce the case.

Yes, I verified with Wireshark that Tomcat ACKs these packets correctly, but 
does not seem to be able to process them. I continued to send data from Firefox 
(SEQ went up to 61373) to ensure that the ACKs were not just resulting from 
buffering somewhere in the Windows or Java network stack, and I can confirm 
that Tomcat still ACKed these SEQ numbers.

Note, that when using the BIO connector, everything works fine - the problems 
only appear with NIO or APR connector.


> > > > B) For BIO connector:
> > > > I noticed that on Tomcat with BIO connector, when using a
> > > RemoteEndpoint.Async to asynchronously send data over the
> WebSocket
> > > connection, sendText(String, SendHandler) (or similar methods) will
> > block if
> > > the Remote endpoint does not read data from the connection, whereas
> for
> > > NIO and APR connector this method will always return immediately.
> > > > Is it intended that for the BIO connector those methods are blocking?
> > As
> > > the javadoc says, "Initiates the asynchronous transmission of a text
> > message.
> > > This method returns before the message is transmitted.", I would have
> > > expected that e.g. another Thread is used to write in blocking mode, so
> > that
> > > the sendText() method can return immediately.
> > >
> > > You can't do non-blocking IO with the BIO connector. All communication
> > > with BIO is blocking. This is working as designed.
> >
> > OK, but my understanding was that there is a difference between the
> terms
> > "synchronous/asynchronous" and "blocking/non-blocking" (but maybe the
> > meaning differs from programming language to programming language).
> >
> 
> An excellent and detailed explanation on this topic can be found in  "UNIX
> Network Programing"  R. Stevens Vol 1 3td ed. p154-p160

Thank you for that information.
However, currently I don't have that book (and I'm not very familiar with UNIX 
as I'm a windows guy ;) ), but please let me try to illustrate my use case with 
the Snake example.


The SnakeTimer class has a broadcast() method that broadcasts a message to all 
connected clients by looping over them and calling snake.sendMessage(...), 
which in turn  will call session.getBasicRemote().sendText(msg) to send the 
message. As the methods of RemoteEndpoint.Basic are blocking, this means that 
if some client establishes a Websocket connection and stops to read from it, 
then after some time the broadcast() method will hang waiting for sendText() to 
complete, which will block until that specific client continues to read data. 
This means that messages cannot be broadcasted to all other clients, so for 
them all snakes stop moving.

A simple way that comes in my mind to solve this would be to use an additional 
thread for each connected client. This thread would take message from a Queue 
and send them to the client while the SnakeTimer's broadcast() would add a 
messages to the queue of each client. Then, if some client's sendText() method 
blocks (because the client does not read data from the connection), it does not 
interfere with the other clients, so they still would see the snakes moving.

However, this is costly because it would require an additional thread per 
Websocket connection.

So, another way would be to look at RemoteEndpoint.Async that can send messages 
asynchronously. The javadoc (from Oracle) of Async#sendText(String, 
SendHandler) says, "Initiates the asynchronous transmission of a text message. 
This method returns before the message is transmitted."
For me, this looks like I can call this method and be sure that it does not 
block when some client does not read data from the websocket connection. 
Therefore, I could change the broadcast() method to use 
RemoteEndpoint.Async#sendText(String, SendHandler) to start async sending of a 
message, if no message is already on the way to the client (if it is, it would 
need to buffer them somewhere). Then, when SendHandler#onResult() callback is 
called, the code can look if it needs to send additional messages to the client 
(and if yes, call sendText(...) again).
This will remove the need from using a separate thread for sending the data.

The problem is now that if Tomcat's implementation of this Async#sendText(...) 
method is blocking when using the BIO connector, it will mean that with BIO I 
get the problem again that the snakes will stop moving on all clients if one 
client stops reading data (might be considered as a DoS), but if I use NIO or 
APR, everything will be fine. That 

[Bug 49134] Server.stop() doesn't unregister all MBeans

2013-10-05 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=49134

Gael Lalire  changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Resolution|FIXED   |---

--- Comment #4 from Gael Lalire  ---
With tomcat 7.0.42 Catalina.stop() doesn't unregister all MBeans registered by
Catalina.start() for example :
- Catalina:type=Realm,realmPath=/realm0/realm0
- Catalina:type=RequestProcessor*

As there is no Catalina.destroy() what should I do ?

-- 
You are receiving this mail because:
You are the assignee for the bug.

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[Bug 55629] New: StatusManagerServlet does not remove JMX notification listener

2013-10-05 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55629

Bug ID: 55629
   Summary: StatusManagerServlet does not remove JMX notification
listener
   Product: Tomcat 7
   Version: 7.0.42
  Hardware: All
OS: All
Status: NEW
  Severity: normal
  Priority: P2
 Component: Catalina
  Assignee: dev@tomcat.apache.org
  Reporter: gael.lal...@laposte.net

StatusManagerServlet.destroy should call mBeanServer.removeNotificationListener
because init method call mBeanServer.addNotificationListener.

-- 
You are receiving this mail because:
You are the assignee for the bug.

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[Bug 55630] New: clean way to avoid setURLStreamHandlerFactory call

2013-10-05 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55630

Bug ID: 55630
   Summary: clean way to avoid setURLStreamHandlerFactory call
   Product: Tomcat 7
   Version: 7.0.42
  Hardware: All
OS: All
Status: NEW
  Severity: normal
  Priority: P2
 Component: Catalina
  Assignee: dev@tomcat.apache.org
  Reporter: gael.lal...@laposte.net

A current method is to set WebappLoader.first via reflection (because private).

I think the setURLStreamHandlerFactory should be move to Catalina.start
('first' static field can be move in Catalina).
So we could have a static method in Catalina to prevent
setURLStreamHandlerFactory call while first starting.

-- 
You are receiving this mail because:
You are the assignee for the bug.

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: 8.0.x / 7.0.x progress

2013-10-05 Thread Niki Dokovski
On Sat, Oct 5, 2013 at 4:56 PM, Konstantin Preißer wrote:

> Hi Niki,
> thank you for your reply.
>
> > -Original Message-
> > From: Niki Dokovski [mailto:nick...@gmail.com]
> > Sent: Saturday, October 5, 2013 7:47 AM
> > To: Tomcat Developers List
> > Subject: Re: 8.0.x / 7.0.x progress
>
> > > I have installed Wireshark now and can confirm that Firefox (after it
> is
> > > resumed) still sends data over the TCP connection which Tomcat seems
> not
> > to
> > > be able to read.
> > >
> >
> > Are there ACKs for the TCP packets?
> > I'll try to reproduce the case.
>
> Yes, I verified with Wireshark that Tomcat ACKs these packets correctly,
> but does not seem to be able to process them. I continued to send data from
> Firefox (SEQ went up to 61373) to ensure that the ACKs were not just
> resulting from buffering somewhere in the Windows or Java network stack,
> and I can confirm that Tomcat still ACKed these SEQ numbers.
>
> Note, that when using the BIO connector, everything works fine - the
> problems only appear with NIO or APR connector.
>
>
> > > > > B) For BIO connector:
> > > > > I noticed that on Tomcat with BIO connector, when using a
> > > > RemoteEndpoint.Async to asynchronously send data over the
> > WebSocket
> > > > connection, sendText(String, SendHandler) (or similar methods) will
> > > block if
> > > > the Remote endpoint does not read data from the connection, whereas
> > for
> > > > NIO and APR connector this method will always return immediately.
> > > > > Is it intended that for the BIO connector those methods are
> blocking?
> > > As
> > > > the javadoc says, "Initiates the asynchronous transmission of a text
> > > message.
> > > > This method returns before the message is transmitted.", I would have
> > > > expected that e.g. another Thread is used to write in blocking mode,
> so
> > > that
> > > > the sendText() method can return immediately.
> > > >
> > > > You can't do non-blocking IO with the BIO connector. All
> communication
> > > > with BIO is blocking. This is working as designed.
> > >
> > > OK, but my understanding was that there is a difference between the
> > terms
> > > "synchronous/asynchronous" and "blocking/non-blocking" (but maybe the
> > > meaning differs from programming language to programming language).
> > >
> >
> > An excellent and detailed explanation on this topic can be found in
>  "UNIX
> > Network Programing"  R. Stevens Vol 1 3td ed. p154-p160
>
> Thank you for that information.
> However, currently I don't have that book (and I'm not very familiar with
> UNIX as I'm a windows guy ;) ), but please let me try to illustrate my use
> case with the Snake example.
>
>
> The SnakeTimer class has a broadcast() method that broadcasts a message to
> all connected clients by looping over them and calling
> snake.sendMessage(...), which in turn  will call
> session.getBasicRemote().sendText(msg) to send the message. As the methods
> of RemoteEndpoint.Basic are blocking, this means that if some client
> establishes a Websocket connection and stops to read from it, then after
> some time the broadcast() method will hang waiting for sendText() to
> complete, which will block until that specific client continues to read
> data. This means that messages cannot be broadcasted to all other clients,
> so for them all snakes stop moving.
>
> A simple way that comes in my mind to solve this would be to use an
> additional thread for each connected client. This thread would take message
> from a Queue and send them to the client while the SnakeTimer's broadcast()
> would add a messages to the queue of each client. Then, if some client's
> sendText() method blocks (because the client does not read data from the
> connection), it does not interfere with the other clients, so they still
> would see the snakes moving.
>
> However, this is costly because it would require an additional thread per
> Websocket connection.
>
> So, another way would be to look at RemoteEndpoint.Async that can send
> messages asynchronously. The javadoc (from Oracle) of
> Async#sendText(String, SendHandler) says, "Initiates the asynchronous
> transmission of a text message. This method returns before the message is
> transmitted."
> For me, this looks like I can call this method and be sure that it does
> not block when some client does not read data from the websocket
> connection. Therefore, I could change the broadcast() method to use
> RemoteEndpoint.Async#sendText(String, SendHandler) to start async sending
> of a message, if no message is already on the way to the client (if it is,
> it would need to buffer them somewhere). Then, when SendHandler#onResult()
> callback is called, the code can look if it needs to send additional
> messages to the client (and if yes, call sendText(...) again).
> This will remove the need from using a separate thread for sending the
> data.
>
> The problem is now that if Tomcat's implementation of this
> Async#sendText(...) method is blocking when using the BIO c

Re: 8.0.x / 7.0.x progress

2013-10-05 Thread Mark Thomas
On 05/10/2013 14:56, Konstantin Preißer wrote:
> Hi Niki, thank you for your reply.
> 
>> -Original Message- From: Niki Dokovski
>> [mailto:nick...@gmail.com] Sent: Saturday, October 5, 2013 7:47 AM 
>> To: Tomcat Developers List Subject: Re: 8.0.x / 7.0.x progress
> 
>>> I have installed Wireshark now and can confirm that Firefox
>>> (after it is resumed) still sends data over the TCP connection
>>> which Tomcat seems not
>> to
>>> be able to read.
>>> 
>> 
>> Are there ACKs for the TCP packets? I'll try to reproduce the
>> case.
> 
> Yes, I verified with Wireshark that Tomcat ACKs these packets
> correctly, but does not seem to be able to process them. I continued
> to send data from Firefox (SEQ went up to 61373) to ensure that the
> ACKs were not just resulting from buffering somewhere in the Windows
> or Java network stack, and I can confirm that Tomcat still ACKed
> these SEQ numbers.
> 
> Note, that when using the BIO connector, everything works fine - the
> problems only appear with NIO or APR connector.

OK. Create a Bugzilla entry for this one. It could be a Tomcat issue, it
could also be lack of error handling in the snake example.


>>> OK, but my understanding was that there is a difference between
>>> the
>> terms
>>> "synchronous/asynchronous" and "blocking/non-blocking" (but maybe
>>> the meaning differs from programming language to programming
>>> language).

There are but...

WebSocket is built on top of Servlet 3.1 non-blocking IO. When you use
the BIO connector the non-blocking IO API still works but it uses
blocking IO.

It might be possible to refactor the BIO aspect so the observed
behaviour is more similar to NIO and APR/native but that will make
scalability worse rather than better as now you'll have two threads per
connection rather than one.



> The problem is now that if Tomcat's implementation of this
> Async#sendText(...) method is blocking when using the BIO connector,
> it will mean that with BIO I get the problem again that the snakes
> will stop moving on all clients if one client stops reading data
> (might be considered as a DoS), but if I use NIO or APR, everything
> will be fine. That would mean that I have to use different
> implementations of broadcasting data to clients, depending on the
> underlying connector that is being used (blocking or non-blocking).

Or, don't use BIO. It is going to get removed at some point, possibly
for Tomcat 9. There is a reason Tomcat 8 uses NIO by default and this is
part of it.

I'm leaning towards documentation being the way to address this - i.e.
make clear that if you use the BIO connector then various NIO components
either won't work (Comet) or will actually block (Servlet 3.1).

Mark

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



RE: 8.0.x / 7.0.x progress

2013-10-05 Thread Konstantin Preißer
Hi Mark,
thanks for your reply.

> -Original Message-
> From: Mark Thomas [mailto:ma...@apache.org]
> Sent: Saturday, October 5, 2013 9:00 PM
> To: Tomcat Developers List
> Subject: Re: 8.0.x / 7.0.x progress

> OK. Create a Bugzilla entry for this one. It could be a Tomcat issue, it
> could also be lack of error handling in the snake example.

OK, will do.

> >>> OK, but my understanding was that there is a difference between
> >>> the
> >> terms
> >>> "synchronous/asynchronous" and "blocking/non-blocking" (but maybe
> >>> the meaning differs from programming language to programming
> >>> language).
> 
> There are but...
> 
> WebSocket is built on top of Servlet 3.1 non-blocking IO. When you use
> the BIO connector the non-blocking IO API still works but it uses
> blocking IO.
> 
> It might be possible to refactor the BIO aspect so the observed
> behaviour is more similar to NIO and APR/native but that will make
> scalability worse rather than better as now you'll have two threads per
> connection rather than one.

> > The problem is now that if Tomcat's implementation of this
> > Async#sendText(...) method is blocking when using the BIO connector,
> > it will mean that with BIO I get the problem again that the snakes
> > will stop moving on all clients if one client stops reading data
> > (might be considered as a DoS), but if I use NIO or APR, everything
> > will be fine. That would mean that I have to use different
> > implementations of broadcasting data to clients, depending on the
> > underlying connector that is being used (blocking or non-blocking).
> 
> Or, don't use BIO. It is going to get removed at some point, possibly
> for Tomcat 9. There is a reason Tomcat 8 uses NIO by default and this is
> part of it.
> 
> I'm leaning towards documentation being the way to address this - i.e.
> make clear that if you use the BIO connector then various NIO components
> either won't work (Comet) or will actually block (Servlet 3.1).

OK, that makes sense to me.

One question, would it be possible to make Session.getAsyncRemote() throw some 
RuntimeException when using the BIO connector, instead of silently using 
blocking writes? As the methods are in fact blocking with BIO (but it is 
documented that they are async), this may be a surprise to someone which 
doesn't know much about the BIO and NIO connectors of Tomcat when he relies on 
that methods being run asynchronously but in fact will be blocking, and then 
uses such an application in production (where the problems might not show up 
immediately when doing some tests).

If getAsyncRemote() instead threw an exception saying that you need NIO or APR 
for this method, I think this might save someone such a surprise (but I must 
admit that I do not know much about Servlet 3.1's NIO features and how there 
the situation is with BIO connector).

What do you think?


Regards,
Konstantin Preißer


-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: 8.0.x / 7.0.x progress

2013-10-05 Thread Mark Thomas
On 05/10/2013 20:42, Konstantin Preißer wrote:

> One question, would it be possible to make Session.getAsyncRemote()
> throw some RuntimeException when using the BIO connector, instead of
> silently using blocking writes?

No. WebSocket is written on top of the Servlet 3.1 API. It has no access
to Tomcat internals.

> If getAsyncRemote() instead threw an exception saying that you need
> NIO or APR for this method, I think this might save someone such a
> surprise (but I must admit that I do not know much about Servlet
> 3.1's NIO features and how there the situation is with BIO
> connector).
> 
> What do you think?

I think breaking apps in this way is worse than using blocking IO.

Mark

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1529537 - in /tomcat/trunk/java/org/apache: coyote/AbstractProtocol.java tomcat/util/net/AbstractEndpoint.java tomcat/util/net/SocketWrapper.java

2013-10-05 Thread markt
Author: markt
Date: Sat Oct  5 22:21:40 2013
New Revision: 1529537

URL: http://svn.apache.org/r1529537
Log:
Make access of dispatcher list on socket wrapper thread safe

Modified:
tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1529537&r1=1529536&r2=1529537&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Sat Oct  5 
22:21:40 2013
@@ -18,6 +18,7 @@ package org.apache.coyote;
 
 import java.io.IOException;
 import java.net.InetAddress;
+import java.util.Iterator;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -616,14 +617,19 @@ public abstract class AbstractProtocol dispatches = null;
 do {
-if (wrapper.hasNextDispatch()) {
-// Associate with the processor with the connection as
-// these calls may result in a nested call to process()
-connections.put(socket, processor);
-DispatchType nextDispatch = wrapper.getNextDispatch();
-state = processor.asyncDispatch(
-nextDispatch.getSocketStatus());
+if (dispatches != null) {
+if (dispatches.hasNext()) {
+// Associate with the processor with the 
connection as
+// these calls may result in a nested call to 
process()
+connections.put(socket, processor);
+DispatchType nextDispatch = dispatches.next();
+state = processor.asyncDispatch(
+nextDispatch.getSocketStatus());
+} else {
+dispatches = null;
+}
 } else if (status == SocketStatus.DISCONNECT &&
 !processor.isComet()) {
 // Do nothing here, just wait for it to get recycled
@@ -670,9 +676,12 @@ public abstract class AbstractProtocolhttp://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1529537&r1=1529536&r2=1529537&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Sat Oct  
5 22:21:40 2013
@@ -23,6 +23,7 @@ import java.net.InetSocketAddress;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.StringTokenizer;
 import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
@@ -636,13 +637,11 @@ public abstract class AbstractEndpoint socketWrapper) {
-// Synchronise on the socket wrapper to ensure no other threads are
-// working with the socket
-synchronized (socketWrapper) {
-while (socketWrapper.hasNextDispatch()) {
-DispatchType dispatchType = socketWrapper.getNextDispatch();
-processSocket(socketWrapper, dispatchType.getSocketStatus(), 
false);
-}
+Iterator dispatches = 
socketWrapper.getIteratorAndClearDispatches();
+
+while (dispatches.hasNext()) {
+DispatchType dispatchType = dispatches.next();
+processSocket(socketWrapper, dispatchType.getSocketStatus(), 
false);
 }
 }
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java?rev=1529537&r1=1529536&r2=1529537&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java Sat Oct  5 
22:21:40 2013
@@ -17,8 +17,8 @@
 package org.apache.tomcat.util.net;
 
 import java.util.Iterator;
-import java.util.LinkedHashSet;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
@@ -62,7 +62,7 @@ public class SocketWrapper {
  */
 private final Object writeThreadLock = new Object();
 
-private Set dis

[Bug 55630] clean way to avoid setURLStreamHandlerFactory call

2013-10-05 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55630

Mark Thomas  changed:

   What|Removed |Added

  Component|Catalina|Catalina
Version|7.0.42  |trunk
Product|Tomcat 7|Tomcat 8
   Target Milestone|--- |

--- Comment #1 from Mark Thomas  ---
This isn't going to be changed for 7.0.x or 6.0.x but we should consider it for
8.0.x.

-- 
You are receiving this mail because:
You are the assignee for the bug.

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Need tomcat-native 1.1.29 for next 8.0.x/7.0.x releases

2013-10-05 Thread Mark Thomas
Sorry to be a pain. The JSR 356 WebSocket implementation is broken with
APR prior to r1525525 [1]. Tomcat 7.0.x and Tomcat 8.0.x need a 1.1.29
native release to pick up this fix. Any takers for the release?

Thanks,

Mark


[1] http://svn.apache.org/viewvc?view=revision&revision=1525525

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1529546 - in /tomcat/trunk: java/org/apache/catalina/realm/CombinedRealm.java test/org/apache/catalina/mbeans/TestRegistration.java

2013-10-05 Thread markt
Author: markt
Date: Sat Oct  5 22:53:05 2013
New Revision: 1529546

URL: http://svn.apache.org/r1529546
Log:
Partial fix for re-opened 
https://issues.apache.org/bugzilla/show_bug.cgi?id=49134
Ensure nested realms are correctly destroyed, ensuring that the associated 
MBeans are deregistered.

Modified:
tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java
tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java

Modified: tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java?rev=1529546&r1=1529545&r2=1529546&view=diff
==
--- tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java (original)
+++ tomcat/trunk/java/org/apache/catalina/realm/CombinedRealm.java Sat Oct  5 
22:53:05 2013
@@ -245,6 +245,20 @@ public class CombinedRealm extends Realm
 
 
 /**
+ * Ensure child Realms are destroyed when this Realm is destroyed.
+ */
+@Override
+protected void destroyInternal() throws LifecycleException {
+for (Realm realm : realms) {
+if (realm instanceof Lifecycle) {
+((Lifecycle) realm).destroy();
+}
+}
+super.destroyInternal();
+}
+
+
+/**
  * Return the Principal associated with the specified chain of X509
  * client certificates.  If there is none, return null.
  *

Modified: tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java?rev=1529546&r1=1529545&r2=1529546&view=diff
==
--- tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java 
(original)
+++ tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java Sat Oct  
5 22:53:05 2013
@@ -33,7 +33,11 @@ import static org.junit.Assert.fail;
 
 import org.junit.Test;
 
+import org.apache.catalina.Context;
+import org.apache.catalina.Realm;
 import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.realm.CombinedRealm;
+import org.apache.catalina.realm.NullRealm;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.modeler.Registry;
@@ -108,6 +112,10 @@ public class TestRegistration extends To
 ",host=" + host,
 "Tomcat:type=WebResourceRoot,context=" + context +
 ",host=" + host,
+"Tomcat:type=Realm,realmPath=/realm0,context=" + context +
+",host=" + host,
+"Tomcat:type=Realm,realmPath=/realm0/realm0,context=" + context +
+",host=" + host,
 };
 }
 
@@ -146,7 +154,13 @@ public class TestRegistration extends To
 if (!contextDir.mkdirs() && !contextDir.isDirectory()) {
 fail("Failed to create: [" + contextDir.toString() + "]");
 }
-tomcat.addContext(contextName, contextDir.getAbsolutePath());
+Context ctx = tomcat.addContext(contextName, 
contextDir.getAbsolutePath());
+
+CombinedRealm combinedRealm = new CombinedRealm();
+Realm nullRealm = new NullRealm();
+combinedRealm.addRealm(nullRealm);
+ctx.setRealm(combinedRealm);
+
 tomcat.start();
 
 // Verify there are no Catalina MBeans



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1529547 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/catalina/realm/CombinedRealm.java test/org/apache/catalina/mbeans/TestRegistration.java webapps/docs/changelog.xml

2013-10-05 Thread markt
Author: markt
Date: Sat Oct  5 22:55:25 2013
New Revision: 1529547

URL: http://svn.apache.org/r1529547
Log:
Partial fix for re-opened 
https://issues.apache.org/bugzilla/show_bug.cgi?id=49134
Ensure nested realms are correctly destroyed, ensuring that the associated 
MBeans are deregistered.

Modified:
tomcat/tc7.0.x/trunk/   (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/realm/CombinedRealm.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc7.0.x/trunk/
--
  Merged /tomcat/trunk:r1529546

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/realm/CombinedRealm.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/realm/CombinedRealm.java?rev=1529547&r1=1529546&r2=1529547&view=diff
==
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/realm/CombinedRealm.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/realm/CombinedRealm.java Sat 
Oct  5 22:55:25 2013
@@ -232,6 +232,20 @@ public class CombinedRealm extends Realm
 
 
 /**
+ * Ensure child Realms are destroyed when this Realm is destroyed.
+ */
+@Override
+protected void destroyInternal() throws LifecycleException {
+for (Realm realm : realms) {
+if (realm instanceof Lifecycle) {
+((Lifecycle) realm).destroy();
+}
+}
+super.destroyInternal();
+}
+
+
+/**
  * Return the Principal associated with the specified chain of X509
  * client certificates.  If there is none, return null.
  *

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java?rev=1529547&r1=1529546&r2=1529547&view=diff
==
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java 
Sat Oct  5 22:55:25 2013
@@ -33,7 +33,11 @@ import static org.junit.Assert.fail;
 
 import org.junit.Test;
 
+import org.apache.catalina.Context;
+import org.apache.catalina.Realm;
 import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.realm.CombinedRealm;
+import org.apache.catalina.realm.NullRealm;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.modeler.Registry;
@@ -106,6 +110,10 @@ public class TestRegistration extends To
 ",host=" + host + ",name=StandardContextValve",
 "Tomcat:type=WebappClassLoader,context=" + context +
 ",host=" + host,
+"Tomcat:type=Realm,realmPath=/realm0,context=" + context +
+",host=" + host,
+"Tomcat:type=Realm,realmPath=/realm0/realm0,context=" + context +
+",host=" + host,
 };
 }
 
@@ -146,7 +154,13 @@ public class TestRegistration extends To
 if (!contextDir.mkdirs() && !contextDir.isDirectory()) {
 fail("Failed to create: [" + contextDir.toString() + "]");
 }
-tomcat.addContext(contextName, contextDir.getAbsolutePath());
+Context ctx = tomcat.addContext(contextName, 
contextDir.getAbsolutePath());
+
+CombinedRealm combinedRealm = new CombinedRealm();
+Realm nullRealm = new NullRealm();
+combinedRealm.addRealm(nullRealm);
+ctx.setRealm(combinedRealm);
+
 tomcat.start();
 
 // Verify there are no Catalina MBeans

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1529547&r1=1529546&r2=1529547&view=diff
==
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Sat Oct  5 22:55:25 2013
@@ -64,6 +64,11 @@
 IOException may be in response to the client continuing to send a
 message after the server sent a close control message. (markt)
   
+  
+49134: Ensure nested realms are correctly destroyed, when a
+CombinedRealm is destroyed. This ensures that the associated MBeans are
+deregistered. (markt)
+  
 
   
   



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[Bug 49134] Server.stop() doesn't unregister all MBeans

2013-10-05 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=49134

--- Comment #5 from Mark Thomas  ---
I've fixed the realm MBean issues in 7.0.x and 8.0.x (the CombinedRealm wasn't
destroying nested Realms). I'll look at the RequestProcessor MBeans next.

-- 
You are receiving this mail because:
You are the assignee for the bug.

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1529549 - /tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java

2013-10-05 Thread markt
Author: markt
Date: Sat Oct  5 23:18:14 2013
New Revision: 1529549

URL: http://svn.apache.org/r1529549
Log:
Extend the test case to cover RequestProcessors

Modified:
tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java

Modified: tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java?rev=1529549&r1=1529548&r2=1529549&view=diff
==
--- tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java 
(original)
+++ tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java Sat Oct  
5 23:18:14 2013
@@ -96,6 +96,14 @@ public class TestRegistration extends To
 }
 }
 
+private static String[] requestMBeanNames(String port, String type) {
+return new String[] {
+"Tomcat:type=RequestProcessor,worker=" +
+ObjectName.quote("http-" + type + "-" + ADDRESS + "-" + 
port) +
+",name=HttpRequest1",
+};
+}
+
 private static String[] contextMBeanNames(String host, String context) {
 return new String[] {
 "Tomcat:j2eeType=WebModule,name=//" + host + context +
@@ -163,6 +171,8 @@ public class TestRegistration extends To
 
 tomcat.start();
 
+getUrl("http://localhost:"; + getPort());
+
 // Verify there are no Catalina MBeans
 onames = mbeanServer.queryNames(new ObjectName("Catalina:*"), null);
 log.info(MBeanDumper.dumpBeans(mbeanServer, onames));
@@ -176,8 +186,7 @@ public class TestRegistration extends To
 }
 
 // Create the list of expected MBean names
-String protocol=
-getTomcatInstance().getConnector().getProtocolHandlerClassName();
+String protocol = tomcat.getConnector().getProtocolHandlerClassName();
 if (protocol.indexOf("Nio") > 0) {
 protocol = "nio";
 } else if (protocol.indexOf("Apr") > 0) {
@@ -185,12 +194,14 @@ public class TestRegistration extends To
 } else {
 protocol = "bio";
 }
-String index = 
getTomcatInstance().getConnector().getProperty("nameIndex").toString();
+String index = 
tomcat.getConnector().getProperty("nameIndex").toString();
 ArrayList expected = new 
ArrayList<>(Arrays.asList(basicMBeanNames()));
 expected.addAll(Arrays.asList(hostMBeanNames("localhost")));
 expected.addAll(Arrays.asList(contextMBeanNames("localhost", 
contextName)));
 expected.addAll(Arrays.asList(connectorMBeanNames("auto-" + index, 
protocol)));
 expected.addAll(Arrays.asList(optionalMBeanNames("localhost")));
+expected.addAll(Arrays.asList(requestMBeanNames(
+"auto-" + index + "-" + getPort(), protocol)));
 
 // Did we find all expected MBeans?
 ArrayList missing = new ArrayList<>(expected);



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[Bug 49134] Server.stop() doesn't unregister all MBeans

2013-10-05 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=49134

Mark Thomas  changed:

   What|Removed |Added

 Status|REOPENED|NEEDINFO

--- Comment #6 from Mark Thomas  ---
I can't reproduce the RequestProcessor issue. Please provide the simplest
possible test case to reproduce - ideally as a patch to the existing unit test.
See http://svn.apache.org/r1529546 and http://svn.apache.org/r1529549 for some
examples of extending that test case.

-- 
You are receiving this mail because:
You are the assignee for the bug.

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



buildbot failure in ASF Buildbot on tomcat-7-trunk

2013-10-05 Thread buildbot
The Buildbot has detected a new failure on builder tomcat-7-trunk while 
building ASF Buildbot.
Full details are available at:
 http://ci.apache.org/builders/tomcat-7-trunk/builds/1449

Buildbot URL: http://ci.apache.org/

Buildslave for this Build: bb-vm_ubuntu

Build Reason: scheduler
Build Source Stamp: [branch tomcat/tc7.0.x/trunk] 1529547
Blamelist: markt

BUILD FAILED: failed compile_1

sincerely,
 -The Buildbot





[Bug 55633] New: [websocket] Tomcat can't read data from the client when the client temporarily pauses

2013-10-05 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55633

Bug ID: 55633
   Summary: [websocket] Tomcat can't read data from the client
when the client temporarily pauses
   Product: Tomcat 8
   Version: trunk
  Hardware: PC
Status: NEW
  Severity: normal
  Priority: P2
 Component: WebSocket
  Assignee: dev@tomcat.apache.org
  Reporter: kpreis...@apache.org

As reported on Re: 8.0.x / 7.0.x progress thread [1]:

For NIO and APR connector:
It seems that when a client establishes a Websocket connection and then stops
to read data from it (but doesn't close the connection, so that at Tomcat's
side writing data to the underlying TCP connection will be blocked), and then
after some time the client continues to read data from the Websocket
connection, then Tomcat seems not to be able to read data from that client any
more (and doesn't notice when the connection has been closed), but it can still
write data to the client.

To reproduce:

Update trunk to r1529443.

Then apply the following patch locally to make the issue easier to reproduce
(by blowing the amount of data that Tomcat sends to the client):


Index: webapps/examples/WEB-INF/classes/websocket/snake/SnakeTimer.java
===
--- webapps/examples/WEB-INF/classes/websocket/snake/SnakeTimer.java   
(revision 1529443)
+++ webapps/examples/WEB-INF/classes/websocket/snake/SnakeTimer.java   
(working copy)
@@ -73,8 +73,10 @@
 sb.append(',');
 }
 }
-broadcast(String.format("{\"type\": \"update\", \"data\" : [%s]}",
-sb.toString()));
+char[] random = new char[8192];
+java.util.Arrays.fill(random, 'x');
+broadcast(String.format("{\"type\": \"update\", \"data\" : [%s],
\"randomData\": \"[%s]\"}",
+sb.toString(), new String(random)));
 }

 protected static void broadcast(String message) {



1) Start Tomcat (current trunk) on Windows 64-bit with Java7 64-bit and either
NIO or APR connector.
2) Start IE (10+) and Firefox and with both browsers open the snake example. On
both browsers, press up or down key so that both snakes begin moving.
3) Suspend the Firefox processes. This can be done with "Process Explorer" [2]
tool by right-clicking on the firefox.exe entry and select "Suspend". You can
see that Firefox does not respond any more, but on IE the snakes continue to
move.
4) After some seconds, you can see that on IE the snakes suddenly stop moving.
This is correct because the current code uses RemoteEndpoint.Basic that may
block on write() methods.
5) Now resume Firefox with Process Explorer. You can see that on both browsers
the snakes will continue to move. This means that both browsers are able to
receive data from the Websocket connection.
6) When you try to change the direction of the snake in IE, everything works.
However on Firefox, the snake will not change its direction. This means that
while Tomcat continues to send data to this Websocket connection, it cannot
receive from it any more.
7) If you close Firefox, then the corresponding snake will not disappear (so it
seems Tomcat doesn't notice that the connection closed).


Note: This only applies to the NIO and APR connectors - with BIO, the problem
doesn't occur.


With Wireshark you can see that FF still sends the direction data correctly and
Tomcat ACKs the packets, but does not seem to be able to process them.


[1] http://markmail.org/message/z6qklqiceyftapfx
[2] http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

-- 
You are receiving this mail because:
You are the assignee for the bug.

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



RE: 8.0.x / 7.0.x progress

2013-10-05 Thread Konstantin Preißer
Hi Mark,

> -Original Message-
> From: Mark Thomas [mailto:ma...@apache.org]
> Sent: Saturday, October 5, 2013 9:46 PM
> To: Tomcat Developers List
> Subject: Re: 8.0.x / 7.0.x progress
> 
> On 05/10/2013 20:42, Konstantin Preißer wrote:
> 
> > One question, would it be possible to make Session.getAsyncRemote()
> > throw some RuntimeException when using the BIO connector, instead of
> > silently using blocking writes?
> 
> No. WebSocket is written on top of the Servlet 3.1 API. It has no access
> to Tomcat internals.
> 
> > If getAsyncRemote() instead threw an exception saying that you need
> > NIO or APR for this method, I think this might save someone such a
> > surprise (but I must admit that I do not know much about Servlet
> > 3.1's NIO features and how there the situation is with BIO
> > connector).
> >
> > What do you think?
> 
> I think breaking apps in this way is worse than using blocking IO.

OK, thank you for your explanation. (Personally I'm not convinced of this yet - 
I would think getting exceptions on getAsyncRemote() is more safe then silently 
risk a DoS (but I probably do not have as much knowledge and experience to 
fully understand the consequences) - but as you say Websocket has no access to 
Tomcat's internals so it doesn't matter either.)


When I was writing the bug report for the websocket problems with NIO and APR 
connector [1], I updated trunk to the current revision, and after I started 
Tomcat with NIO and opened the snakes example, I got corrupt data on Firefox 
and exceptions on Tomcat like the following:

06-Oct-2013 03:44:34.083 SEVERE [http-nio-8080-exec-2] 
org.apache.tomcat.websocket.pojo.PojoEndpointBase.onError Failed to call 
onError method of POJO end point for POJO of type 
[websocket.snake.SnakeAnnotation]
 java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at 
org.apache.tomcat.websocket.pojo.PojoEndpointBase.onError(PojoEndpointBase.java:131)
at 
org.apache.tomcat.websocket.pojo.PojoEndpointBase.handleOnOpenError(PojoEndpointBase.java:91)
at 
org.apache.tomcat.websocket.pojo.PojoEndpointBase.doOnOpen(PojoEndpointBase.java:71)
at 
org.apache.tomcat.websocket.pojo.PojoEndpointServer.onOpen(PojoEndpointServer.java:70)
at 
org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:129)
at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at 
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1620)
at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1578)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.nio.charset.CoderMalfunctionError: 
java.nio.BufferOverflowException
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:565)
at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase$TextMessageSendHandler.write(WsRemoteEndpointImplBase.java:620)
at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:197)
at 
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:154)
at 
org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
at websocket.snake.Snake.sendMessage(Snake.java:66)
at websocket.snake.SnakeTimer.broadcast(SnakeTimer.java:83)
at websocket.snake.SnakeAnnotation.onOpen(SnakeAnnotation.java:90)
at sun.reflect.GeneratedMethodAccessor40.invoke(Unknown Source)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at 
org.apache.tomcat.websocket.pojo.PojoEndpointBase.doOnOpen(PojoEndpointBase.java:58)
... 9 more
Caused by: java.nio.BufferOverflowException
at java.nio.Buffer.nextPutIndex(Buffer.java:513)
at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:163)
at 
org.apache.tomcat.util.buf.Utf8Encoder.encodeNotHasArray(Utf8Encoder.java:169)
at 
org.apache.tomcat.util.buf.Utf8Encoder.encodeLoop(Utf8Encoder.java:40)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:561)
... 20 more

06-Oct-2013 03:44:34.486 SEVERE [http-nio-8080-exec-2] 
org.apache.tomcat.websocket.pojo.Pojo

[Bug 55633] [websocket] Tomcat can't read data from the client after the client temporarily pauses

2013-10-05 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55633

Konstantin Preißer  changed:

   What|Removed |Added

Summary|[websocket] Tomcat can't|[websocket] Tomcat can't
   |read data from the client   |read data from the client
   |when the client temporarily |after the client
   |pauses  |temporarily pauses
 OS||All

-- 
You are receiving this mail because:
You are the assignee for the bug.
-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[GUMP@vmgump]: Project tomcat-trunk-test (in module tomcat-trunk) failed

2013-10-05 Thread Bill Barker
To whom it may engage...

This is an automated request, but not an unsolicited one. For 
more information please visit http://gump.apache.org/nagged.html, 
and/or contact the folk at gene...@gump.apache.org.

Project tomcat-trunk-test has an issue affecting its community integration.
This issue affects 1 projects,
 and has been outstanding for 11 runs.
The current state of this project is 'Failed', with reason 'Build Timed Out'.
For reference only, the following projects are affected by this:
- tomcat-trunk-test :  Tomcat 8.x, a web server implementing the Java 
Servlet 3.1,
...


Full details are available at:

http://vmgump.apache.org/gump/public/tomcat-trunk/tomcat-trunk-test/index.html

That said, some information snippets are provided here.

The following annotations (debug/informational/warning/error messages) were 
provided:
 -DEBUG- Dependency on junit exists, no need to add for property hamcrest.jar.
 -DEBUG- Dependency on commons-daemon exists, no need to add for property 
commons-daemon.native.src.tgz.
 -DEBUG- Dependency on commons-daemon exists, no need to add for property 
tomcat-native.tar.gz.
 -DEBUG- Dependency on tomcat-trunk exists, no need to add for property 
tomcat-dbcp.home.
 -INFO- Failed with reason build timed out
 -INFO- Project Reports in: 
/srv/gump/public/workspace/tomcat-trunk/output/build/logs



The following work was performed:
http://vmgump.apache.org/gump/public/tomcat-trunk/tomcat-trunk-test/gump_work/build_tomcat-trunk_tomcat-trunk-test.html
Work Name: build_tomcat-trunk_tomcat-trunk-test (Type: Build)
Work ended in a state of : Failed
Elapsed: 60 mins
Command Line: /usr/lib/jvm/java-7-oracle/bin/java -Djava.awt.headless=true 
-Dbuild.sysclasspath=only org.apache.tools.ant.Main 
-Dgump.merge=/srv/gump/public/gump/work/merge.xml 
-Djunit.jar=/srv/gump/public/workspace/junit/dist/junit-20131006.jar 
-Dobjenesis.jar=/srv/gump/public/workspace/objenesis/main/target/objenesis-2.1-SNAPSHOT.jar
 
-Dtomcat-native.tar.gz=/srv/gump/public/workspace/apache-commons/daemon/dist/bin/commons-daemon-20131006-native-src.tar.gz
 -Dexamples.sources.skip=true 
-Dtomcat-dbcp.home=/srv/gump/public/workspace/tomcat-trunk/tomcat-deps 
-Djdt.jar=/srv/gump/packages/eclipse/plugins/org.eclipse.jdt.core_3.4.2/jdtcore.jar
 
-Dcommons-daemon.jar=/srv/gump/public/workspace/apache-commons/daemon/dist/commons-daemon-20131006.jar
 
-Dcommons-daemon.native.src.tgz=/srv/gump/public/workspace/apache-commons/daemon/dist/bin/commons-daemon-20131006-native-src.tar.gz
 -Dtest.accesslog=true 
-Dcommons-pool.home=/srv/gump/public/workspace/apache-commons/pool 
-Dcommons-dbcp.home=/
 srv/gump/public/workspace/apache-commons/dbcp 
-Deasymock.jar=/srv/gump/public/workspace/easymock/easymock/target/easymock-3.3-SNAPSHOT.jar
 -Dhamcrest.jar=/srv/gump/public/workspace/junit/dist/junit-20131006.jar 
-Dcglib.jar=/srv/gump/packages/cglib/cglib-nodep-2.2.jar test 
[Working Directory: /srv/gump/public/workspace/tomcat-trunk]
CLASSPATH: 
/usr/lib/jvm/java-7-oracle/lib/tools.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/webapps/examples/WEB-INF/classes:/srv/gump/public/workspace/tomcat-trunk/output/testclasses:/srv/gump/public/workspace/ant/dist/lib/ant.jar:/srv/gump/public/workspace/ant/dist/lib/ant-launcher.jar:/srv/gump/public/workspace/ant/dist/lib/ant-jmf.jar:/srv/gump/public/workspace/ant/dist/lib/ant-junit.jar:/srv/gump/public/workspace/ant/dist/lib/ant-junit4.jar:/srv/gump/public/workspace/ant/dist/lib/ant-swing.jar:/srv/gump/public/workspace/ant/dist/lib/ant-apache-resolver.jar:/srv/gump/public/workspace/ant/dist/lib/ant-apache-xalan2.jar:/srv/gump/public/workspace/xml-commons/java/build/resolver.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/bin/bootstrap.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/bin/tomcat-juli.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/annotations-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/servle
 
t-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/jsp-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/el-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/websocket-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina-ant.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina-storeconfig.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/tomcat-coyote.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/jasper.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/jasper-el.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina-tribes.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/catalina-ha.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/tomcat-api.jar:/srv/gump/public/workspace/tomcat-trunk/output/build/lib/tomcat-jni.jar:/srv/gump/public/workspace/tomcat
 
-trunk/output/build/lib/tomcat-spd