svn commit: r1519369 - /tomcat/trunk/webapps/docs/config/cluster-channel.xml

2013-09-02 Thread kfujino
Author: kfujino
Date: Mon Sep  2 09:17:45 2013
New Revision: 1519369

URL: http://svn.apache.org/r1519369
Log:
Add document for org.apache.catalina.tribes.group.GroupChannel.

Modified:
tomcat/trunk/webapps/docs/config/cluster-channel.xml

Modified: tomcat/trunk/webapps/docs/config/cluster-channel.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/cluster-channel.xml?rev=1519369&r1=1519368&r2=1519369&view=diff
==
--- tomcat/trunk/webapps/docs/config/cluster-channel.xml (original)
+++ tomcat/trunk/webapps/docs/config/cluster-channel.xml Mon Sep  2 09:17:45 
2013
@@ -96,6 +96,30 @@
 
   
 
+  
+
+
+
+  
+ Flag whether the channel manages its own heartbeat.
+ If set to true,  the channel start a local thread for the heart beat.
+ If set this flag to false, you must set 
SimpleTcpCluster#heartbeatBackgroundEnabled
+ to true. default value is true.
+  
+
+  
+If heartbeat == true, specifies the interval of heartbeat thread in 
milliseconds.
+  
+
+  
+If set to true, the GroupChannel will check the option flags that each
+interceptor is using. Reports an error if two interceptor share the 
same
+flag.
+  
+
+
+
+  
 
 
 



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



svn commit: r1519373 - in /tomcat/tc7.0.x/trunk/webapps/docs: changelog.xml config/cluster-channel.xml

2013-09-02 Thread kfujino
Author: kfujino
Date: Mon Sep  2 09:20:41 2013
New Revision: 1519373

URL: http://svn.apache.org/r1519373
Log:
Add document for org.apache.catalina.tribes.group.GroupChannel.

Modified:
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml

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=1519373&r1=1519372&r2=1519373&view=diff
==
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Sep  2 09:20:41 2013
@@ -305,6 +305,10 @@
 The WebSocket examples in the examples web application have been 
changed
 to use the new JSR-356 Java WebSocket 1.0 implementation. (markt)
   
+  
+Add document for
+org.apache.catalina.tribes.group.GroupChannel. (kfujino)
+  
 
   
   

Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml?rev=1519373&r1=1519372&r2=1519373&view=diff
==
--- tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/config/cluster-channel.xml Mon Sep  2 
09:20:41 2013
@@ -96,6 +96,30 @@
 
   
 
+  
+
+
+
+  
+ Flag whether the channel manages its own heartbeat.
+ If set to true,  the channel start a local thread for the heart beat.
+ If set this flag to false, you must set 
SimpleTcpCluster#heartbeatBackgroundEnabled
+ to true. default value is true.
+  
+
+  
+If heartbeat == true, specifies the interval of heartbeat thread in 
milliseconds.
+  
+
+  
+If set to true, the GroupChannel will check the option flags that each
+interceptor is using. Reports an error if two interceptor share the 
same
+flag.
+  
+
+
+
+  
 
 
 



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



svn commit: r1519384 - in /tomcat/trunk/java/org/apache/catalina/tribes: group/interceptors/MessageDispatch15Interceptor.java util/TcclThreadFactory.java

2013-09-02 Thread kfujino
Author: kfujino
Date: Mon Sep  2 10:45:02 2013
New Revision: 1519384

URL: http://svn.apache.org/r1519384
Log:
More definite thread name for MessageDispatch15Interceptor.

Modified:

tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java
tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java

Modified: 
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java?rev=1519384&r1=1519383&r2=1519384&view=diff
==
--- 
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java
 (original)
+++ 
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java
 Mon Sep  2 10:45:02 2013
@@ -83,7 +83,8 @@ public class MessageDispatch15Intercepto
 public void startQueue() {
 if ( run ) return;
 executor = ExecutorFactory.newThreadPool(maxSpareThreads, maxThreads,
-keepAliveTime, TimeUnit.MILLISECONDS, new TcclThreadFactory());
+keepAliveTime, TimeUnit.MILLISECONDS,
+new 
TcclThreadFactory("MessageDispatch15Interceptor.MessageDispatchThread"));
 run = true;
 }
 

Modified: 
tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java?rev=1519384&r1=1519383&r2=1519384&view=diff
==
--- tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java 
Mon Sep  2 10:45:02 2013
@@ -39,15 +39,18 @@ public class TcclThreadFactory implement
 private final String namePrefix;
 
 public TcclThreadFactory() {
+this("pool-" + poolNumber.getAndIncrement() + "-thread-");
+}
+
+public TcclThreadFactory(String namePrefix) {
 SecurityManager s = System.getSecurityManager();
 group = (s != null) ? s.getThreadGroup() : 
Thread.currentThread().getThreadGroup();
-namePrefix = "pool-" + poolNumber.getAndIncrement() + "-thread-";
+this.namePrefix = namePrefix;
 }
 
 @Override
 public Thread newThread(Runnable r) {
-final Thread t = new Thread(group, r, namePrefix +
-threadNumber.getAndIncrement());
+final Thread t = new Thread(group, r, namePrefix + 
threadNumber.getAndIncrement());
 
 if (IS_SECURITY_ENABLED) {
 AccessController.doPrivileged(new PrivilegedAction() {



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



svn commit: r1519385 - in /tomcat/tc7.0.x/trunk: java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java java/org/apache/catalina/tribes/util/TcclThreadFactory.java webapp

2013-09-02 Thread kfujino
Author: kfujino
Date: Mon Sep  2 10:48:09 2013
New Revision: 1519385

URL: http://svn.apache.org/r1519385
Log:
More definite thread name for MessageDispatch15Interceptor.

Modified:

tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java

tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java?rev=1519385&r1=1519384&r2=1519385&view=diff
==
--- 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/MessageDispatch15Interceptor.java
 Mon Sep  2 10:48:09 2013
@@ -83,7 +83,8 @@ public class MessageDispatch15Intercepto
 public void startQueue() {
 if ( run ) return;
 executor = ExecutorFactory.newThreadPool(maxSpareThreads, maxThreads,
-keepAliveTime, TimeUnit.MILLISECONDS, new TcclThreadFactory());
+keepAliveTime, TimeUnit.MILLISECONDS,
+new 
TcclThreadFactory("MessageDispatch15Interceptor.MessageDispatchThread"));
 run = true;
 }
 

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java?rev=1519385&r1=1519384&r2=1519385&view=diff
==
--- 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/tribes/util/TcclThreadFactory.java
 Mon Sep  2 10:48:09 2013
@@ -39,9 +39,13 @@ public class TcclThreadFactory implement
 private final String namePrefix;
 
 public TcclThreadFactory() {
+this("pool-" + poolNumber.getAndIncrement() + "-thread-");
+}
+
+public TcclThreadFactory(String namePrefix) {
 SecurityManager s = System.getSecurityManager();
 group = (s != null) ? s.getThreadGroup() : 
Thread.currentThread().getThreadGroup();
-namePrefix = "pool-" + poolNumber.getAndIncrement() + "-thread-";
+this.namePrefix = namePrefix;
 }
 
 @Override

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=1519385&r1=1519384&r2=1519385&view=diff
==
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Sep  2 10:48:09 2013
@@ -283,6 +283,10 @@
 55332: Fix NPE in FileMessageFactory.main when
 specify empty file as arguments. (kfujino)
   
+  
+More definite thread name for 
MessageDispatch15Interceptor.
+(kfujino)
+  
 
   
   



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



svn commit: r1519392 - in /tomcat/trunk/java/org/apache: catalina/connector/CoyoteAdapter.java coyote/ajp/AbstractAjpProcessor.java coyote/http11/AbstractHttp11Processor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 11:15:01 2013
New Revision: 1519392

URL: http://svn.apache.org/r1519392
Log:
Fix Gump failure (hopefully)
Move the log failure to the adapter so that the logging occurs before the 
request and response are recycled. This should improve the information that 
appears in the logs.
The failure was caused because Gump runs with access logs enabled so when the 
failure occurred the context had been set to null. This meant the the default 
access logging kicked in which found the standard host level log and logged the 
issue there rather than in the context level TesterAccessLog.

Modified:
tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java

Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1519392&r1=1519391&r2=1519392&view=diff
==
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Mon Sep  
2 11:15:01 2013
@@ -439,6 +439,14 @@ public class CoyoteAdapter implements Ad
 success = false;
 log.error(sm.getString("coyoteAdapter.asyncDispatch"), t);
 } finally {
+if (!success) {
+res.setStatus(500);
+long time = 0;
+if (req.getStartTime() != -1) {
+time = System.currentTimeMillis() - req.getStartTime();
+}
+log(req, res, time);
+}
 req.getRequestProcessor().setWorkerThreadName(null);
 // Recycle the wrapper request and response
 if (!success || (!comet && !request.isAsync())) {

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519392&r1=1519391&r2=1519392&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep  
2 11:15:01 2013
@@ -554,12 +554,6 @@ public abstract class AbstractAjpProcess
 ExceptionUtils.handleThrowable(t);
 getLog().error(sm.getString("http11processor.request.process"), t);
 error = true;
-} finally {
-if (error) {
-// 500 - Internal Server Error
-response.setStatus(500);
-getAdapter().log(request, response, 0);
-}
 }
 
 rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1519392&r1=1519391&r2=1519392&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Mon 
Sep  2 11:15:01 2013
@@ -1604,16 +1604,6 @@ public abstract class AbstractHttp11Proc
 ExceptionUtils.handleThrowable(t);
 getLog().error(sm.getString("http11processor.request.process"), t);
 error = true;
-} finally {
-if (error) {
-// 500 - Internal Server Error
-response.setStatus(500);
-long time = 0;
-if (request.getStartTime() != -1) {
-time = System.currentTimeMillis() - request.getStartTime();
-}
-getAdapter().log(request, response, time);
-}
 }
 
 rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);



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



svn commit: r1519403 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 12:08:03 2013
New Revision: 1519403

URL: http://svn.apache.org/r1519403
Log:
Add the keptAlive flag to BIO. It is unused but adding it brings BIO closer to 
the other connectors which will aid refactoring.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1519403&r1=1519402&r2=1519403&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Sep  2 
12:08:03 2013
@@ -108,11 +108,13 @@ public class AjpProcessor extends Abstra
 // Error flag
 error = false;
 
+boolean keptAlive = false;
+
 while (!error && !endpoint.isPaused()) {
 // Parsing the request header
 try {
 // Get first message of the request
-if (!readMessage(requestHeaderMessage, true)) {
+if (!readMessage(requestHeaderMessage, !keptAlive)) {
 // This means a connection timeout
 break;
 }
@@ -144,6 +146,7 @@ public class AjpProcessor extends Abstra
 error = true;
 break;
 }
+keptAlive = true;
 request.setStartTime(System.currentTimeMillis());
 } catch (IOException e) {
 error = true;



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



svn commit: r1519409 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 12:16:54 2013
New Revision: 1519409

URL: http://svn.apache.org/r1519409
Log:
Remove comment to align with BIO and NIO to aid future refactoring

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519409&r1=1519408&r2=1519409&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep  2 
12:16:54 2013
@@ -122,9 +122,6 @@ public class AjpAprProcessor extends Abs
 try {
 // Get first message of the request
 if (!readMessage(requestHeaderMessage, !keptAlive)) {
-// This means that no data is available right now
-// (long keepalive), so that the processor should be 
recycled
-// and the method should return true
 break;
 }
 // Set back timeout if keep alive timeout is enabled



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



svn commit: r1519411 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 12:17:32 2013
New Revision: 1519411

URL: http://svn.apache.org/r1519411
Log:
Remove unnecessary call to recycle. recycle will be called by Ptoocol as part 
of releasing the connection.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519411&r1=1519410&r2=1519411&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep  2 
12:17:32 2013
@@ -132,7 +132,6 @@ public class AjpNioProcessor extends Abs
 log.debug("Unexpected message: " + type);
 }
 error = true;
-recycle(true);
 break;
 }
 keptAlive = true;



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



svn commit: r1519413 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 12:27:37 2013
New Revision: 1519413

URL: http://svn.apache.org/r1519413
Log:
Use output methods to write PONG packet. Aligns APR/native with BIO and NIO to 
aid future refactoring.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519413&r1=1519412&r2=1519413&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep  2 
12:27:37 2013
@@ -137,10 +137,12 @@ public class AjpAprProcessor extends Abs
 break;
 }
 cping = true;
-if (Socket.send(socketRef, pongMessageArray, 0,
-pongMessageArray.length) < 0) {
+try {
+output(pongMessageArray, 0, pongMessageArray.length);
+} catch (IOException e) {
 error = true;
 }
+recycle(false);
 continue;
 } else if(type != Constants.JK_AJP13_FORWARD_REQUEST) {
 // Unexpected packet type. Unread body packets should have



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



svn commit: r1519423 - in /tomcat/trunk/java/org/apache/coyote/ajp: AbstractAjpProcessor.java AjpAprProcessor.java AjpNioProcessor.java AjpProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 12:56:43 2013
New Revision: 1519423

URL: http://svn.apache.org/r1519423
Log:
Refactoring. Pull up process method.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519423&r1=1519422&r2=1519423&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep  
2 12:56:43 2013
@@ -576,6 +576,165 @@ public abstract class AbstractAjpProcess
 }
 
 
+/**
+ * Process pipelined HTTP requests using the specified input and output
+ * streams.
+ *
+ * @throws IOException error during an I/O operation
+ */
+@Override
+public SocketState process(SocketWrapper socket) throws IOException {
+
+RequestInfo rp = request.getRequestProcessor();
+rp.setStage(org.apache.coyote.Constants.STAGE_PARSE);
+
+// Setting up the socket
+this.socketWrapper = socket;
+
+setupSocket(socket);
+
+int soTimeout = endpoint.getSoTimeout();
+boolean cping = false;
+
+// Error flag
+error = false;
+
+boolean keptAlive = false;
+
+while (!error && !endpoint.isPaused()) {
+// Parsing the request header
+try {
+// Get first message of the request
+if (!readMessage(requestHeaderMessage, !keptAlive)) {
+break;
+}
+// Set back timeout if keep alive timeout is enabled
+if (keepAliveTimeout > 0) {
+setTimeout(socketWrapper, soTimeout);
+}
+// Check message type, process right away and break if
+// not regular request processing
+int type = requestHeaderMessage.getByte();
+if (type == Constants.JK_AJP13_CPING_REQUEST) {
+if (endpoint.isPaused()) {
+recycle(true);
+break;
+}
+cping = true;
+try {
+output(pongMessageArray, 0, pongMessageArray.length);
+} catch (IOException e) {
+error = true;
+}
+recycle(false);
+continue;
+} else if(type != Constants.JK_AJP13_FORWARD_REQUEST) {
+// Unexpected packet type. Unread body packets should have
+// been swallowed in finish().
+if (getLog().isDebugEnabled()) {
+getLog().debug("Unexpected message: " + type);
+}
+error = true;
+break;
+}
+keptAlive = true;
+request.setStartTime(System.currentTimeMillis());
+} catch (IOException e) {
+error = true;
+break;
+} catch (Throwable t) {
+ExceptionUtils.handleThrowable(t);
+getLog().debug(sm.getString("ajpprocessor.header.error"), t);
+// 400 - Bad Request
+response.setStatus(400);
+getAdapter().log(request, response, 0);
+error = true;
+}
+
+if (!error) {
+// Setting up filters, and parse some request headers
+rp.setStage(org.apache.coyote.Constants.STAGE_PREPARE);
+try {
+prepareRequest();
+} catch (Throwable t) {
+ExceptionUtils.handleThrowable(t);
+
getLog().debug(sm.getString("ajpprocessor.request.prepare"), t);
+// 400 - Internal Server Error
+response.setStatus(400);
+getAdapter().log(request, response, 0);
+error = true;
+}
+}
+
+if (!error && !cping && endpoint.isPaused()) {
+// 503 - Service unavailable
+response.setStatus(503);
+getAdapter().log(request, response, 0);
+error = true;
+}
+cping = false;
+
+// Process the request in the adapter
+if (!error) {
+try {
+rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
+getAdapter().service(request, response);
+} ca

svn commit: r1519424 - in /tomcat/trunk/java/org/apache/coyote/ajp: AjpAprProcessor.java AjpNioProcessor.java AjpProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 13:02:03 2013
New Revision: 1519424

URL: http://svn.apache.org/r1519424
Log:
Clean-up.
Remove comments that add zero value.
Make spacing more consistent.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519424&r1=1519423&r2=1519424&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep  2 
13:02:03 2013
@@ -29,7 +29,6 @@ import org.apache.tomcat.util.net.AprEnd
 import org.apache.tomcat.util.net.SocketStatus;
 import org.apache.tomcat.util.net.SocketWrapper;
 
-
 /**
  * Processes AJP requests.
  *
@@ -43,18 +42,12 @@ import org.apache.tomcat.util.net.Socket
  */
 public class AjpAprProcessor extends AbstractAjpProcessor {
 
-
-/**
- * Logger.
- */
 private static final Log log = LogFactory.getLog(AjpAprProcessor.class);
 @Override
 protected Log getLog() {
 return log;
 }
 
-// --- Constructors
-
 
 public AjpAprProcessor(int packetSize, AprEndpoint endpoint) {
 
@@ -69,8 +62,6 @@ public class AjpAprProcessor extends Abs
 }
 
 
-// - Instance Variables
-
 /**
  * Direct buffer used for input.
  */
@@ -83,8 +74,6 @@ public class AjpAprProcessor extends Abs
 protected final ByteBuffer outputBuffer;
 
 
-// - ActionHook Methods
-
 /**
  * Send an action to the connector.
  *
@@ -112,8 +101,6 @@ public class AjpAprProcessor extends Abs
 }
 
 
-// -- Protected Methods
-
 @Override
 protected void setupSocket(SocketWrapper socketWrapper) {
 long socketRef = socketWrapper.getSocket().longValue();
@@ -330,7 +317,6 @@ public class AjpAprProcessor extends Abs
 inputBuffer.get(message.getBuffer(), headerLength, messageLength);
 return true;
 }
-
 }
 
 

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519424&r1=1519423&r2=1519424&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep  2 
13:02:03 2013
@@ -31,24 +31,17 @@ import org.apache.tomcat.util.net.NioSel
 import org.apache.tomcat.util.net.SocketStatus;
 import org.apache.tomcat.util.net.SocketWrapper;
 
-
 /**
  * Processes AJP requests using NIO.
  */
 public class AjpNioProcessor extends AbstractAjpProcessor {
 
-
-/**
- * Logger.
- */
 private static final Log log = LogFactory.getLog(AjpNioProcessor.class);
 @Override
 protected Log getLog() {
 return log;
 }
 
-// --- Constructors
-
 
 public AjpNioProcessor(int packetSize, NioEndpoint endpoint) {
 
@@ -60,16 +53,12 @@ public class AjpNioProcessor extends Abs
 }
 
 
-// - Instance Variables
-
 /**
  * Selector pool for the associated endpoint.
  */
 protected final NioSelectorPool pool;
 
 
-// - ActionHook Methods
-
 /**
  * Send an action to the connector.
  *
@@ -95,13 +84,12 @@ public class AjpNioProcessor extends Abs
 } else if (actionCode == ActionCode.ASYNC_DISPATCH) {
 if (asyncStateMachine.asyncDispatch()) {
 ((NioEndpoint)endpoint).dispatchForEvent(
-socketWrapper.getSocket(), SocketStatus.OPEN_READ, 
true);}
+socketWrapper.getSocket(), SocketStatus.OPEN_READ, 
true);
 }
 }
+}
 
 
-// -- Protected Methods
-
 @Override
 protected void setupSocket(SocketWrapper socketWrapper)
 throws IOException {
@@ -135,15 +123,17 @@ public class AjpNioProcessor extends Abs
 Selector selector = null;
 try {
 selector = pool.get();
-} catch ( IOException x ) {
+} catch (IOException x) {
 //ignore
 }
 try {
 pool.write(writeBuffer, socketWrapper.getSocket(), selector,
 writeTimeout, true);
-}

svn commit: r1519429 - /tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 13:16:31 2013
New Revision: 1519429

URL: http://svn.apache.org/r1519429
Log:
Fix spacing

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519429&r1=1519428&r2=1519429&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep  
2 13:16:31 2013
@@ -451,7 +451,6 @@ public abstract class AbstractAjpProcess
 // needs to be done here
 
 } else if (actionCode == ActionCode.REQ_LOCAL_ADDR_ATTRIBUTE) {
-
 // Copy from local name for now, which should simply be an address
 request.localAddr().setString(request.localName().toString());
 
@@ -466,7 +465,6 @@ public abstract class AbstractAjpProcess
 // needs to be done here
 
 } else if (actionCode == ActionCode.REQ_SET_BODY_REPLAY) {
-
 // Set the given bytes as the content
 ByteChunk bc = (ByteChunk) param;
 int length = bc.getLength();



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



svn commit: r1519431 - in /tomcat/trunk/java/org/apache/coyote/ajp: AjpNioProcessor.java AjpProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 13:17:26 2013
New Revision: 1519431

URL: http://svn.apache.org/r1519431
Log:
Aligning the readMessage() method implementation and the read() method 
signature between BIO and NIo to aid future refactoring

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519431&r1=1519430&r2=1519431&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep  2 
13:17:26 2013
@@ -141,7 +141,7 @@ public class AjpNioProcessor extends Abs
 /**
  * Read the specified amount of bytes, and place them in the input buffer.
  */
-protected int read(byte[] buf, int pos, int n, boolean blockFirstRead)
+protected boolean read(byte[] buf, int pos, int n, boolean blockFirstRead)
 throws IOException {
 
 int read = 0;
@@ -153,13 +153,13 @@ public class AjpNioProcessor extends Abs
 if (res > 0) {
 read += res;
 } else if (res == 0 && !block) {
-break;
+return false;
 } else {
 throw new IOException(sm.getString("ajpprocessor.failedread"));
 }
 block = true;
 }
-return read;
+return true;
 }
 
 
@@ -205,13 +205,6 @@ public class AjpNioProcessor extends Abs
 }
 
 
-/**
- * Read an AJP message.
- *
- * @return true if a message was read, otherwise false
- *
- * @throws IOException any other failure, including incomplete reads
- */
 @Override
 protected boolean readMessage(AjpMessage message, boolean blockFirstRead)
 throws IOException {
@@ -219,9 +212,7 @@ public class AjpNioProcessor extends Abs
 byte[] buf = message.getBuffer();
 int headerLength = message.getHeaderLength();
 
-int bytesRead = read(buf, 0, headerLength, blockFirstRead);
-
-if (bytesRead == 0) {
+if (!read(buf, 0, headerLength, blockFirstRead)) {
 return false;
 }
 

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1519431&r1=1519430&r2=1519431&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Sep  2 
13:17:26 2013
@@ -124,8 +124,20 @@ public class AjpProcessor extends Abstra
 /**
  * Read at least the specified amount of bytes, and place them
  * in the input buffer.
+ *
+ * @param buf   Buffer to read data into
+ * @param pos   Start position
+ * @param n Number of bytes to read
+ * @param blockFirstReadShould the first read block?
+ *
+ * @return If blockFirstRead is false, the connector supports non-blocking
+ * IO and the first read does not return any data, this method
+ * reads no data into the buffer returns false. Otherwise, blocking
+ * reads are used read the specified number of bytes into the
+ * buffer.
+ * @throws IOException
  */
-protected boolean read(byte[] buf, int pos, int n)
+protected boolean read(byte[] buf, int pos, int n, boolean blockFirstRead)
 throws IOException {
 
 int read = 0;
@@ -143,23 +155,16 @@ public class AjpProcessor extends Abstra
 }
 
 
-/**
- * Read an AJP message.
- *
- * @param message   The message to populate
- * @param ignored   Not used in BIO
- * @return true if the message has been read, false if the short read
- * didn't return anything
- * @throws IOException any other failure, including incomplete reads
- */
 @Override
-protected boolean readMessage(AjpMessage message, boolean ignored)
+protected boolean readMessage(AjpMessage message, boolean block)
 throws IOException {
 
 byte[] buf = message.getBuffer();
 int headerLength = message.getHeaderLength();
 
-read(buf, 0, headerLength);
+if (!read(buf, 0, headerLength, block)) {
+return false;
+}
 
 int messageLength = message.processHeader(true);
 if (messageLength < 0) {
@@ -180,7 +185,7 @@ public class AjpProcessor extends Abstra
 Integer.valueOf(messageLength),
 Integer.valueOf(buf.length)));
 }
-read(buf, headerLength, messageLength);
+read(buf, headerLength, messageLength, true);
  

svn commit: r1519432 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 13:18:28 2013
New Revision: 1519432

URL: http://svn.apache.org/r1519432
Log:
Start to align the APR/native readMessage() method implementation with BIO and 
NIO to aid future refactoring.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519432&r1=1519431&r2=1519432&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep  2 
13:18:28 2013
@@ -273,32 +273,23 @@ public class AjpAprProcessor extends Abs
 }
 
 
-/**
- * Read an AJP message.
- *
- * @param block If there is no data available to read when this method is
- *  called, should this call block until data becomes 
available?
-
- * @return true if the message has been read, false if no data was read
- *
- * @throws IOException any other failure, including incomplete reads
- */
 @Override
 protected boolean readMessage(AjpMessage message, boolean block)
 throws IOException {
 
+byte[] buf = message.getBuffer();
 int headerLength = message.getHeaderLength();
 
 if (!read(headerLength, block)) {
 return false;
 }
 
-inputBuffer.get(message.getBuffer(), 0, headerLength);
+inputBuffer.get(buf, 0, headerLength);
 int messageLength = message.processHeader(true);
 if (messageLength < 0) {
 // Invalid AJP header signature
-// TODO: Throw some exception and close the connection to frontend.
-return false;
+throw new IOException(sm.getString("ajpmessage.invalidLength",
+Integer.valueOf(messageLength)));
 }
 else if (messageLength == 0) {
 // Zero length message.
@@ -311,10 +302,10 @@ public class AjpAprProcessor extends Abs
 throw new IllegalArgumentException(sm.getString(
 "ajpprocessor.header.tooLong",
 Integer.valueOf(messageLength),
-Integer.valueOf(message.getBuffer().length)));
+Integer.valueOf(buf.length)));
 }
 read(messageLength, true);
-inputBuffer.get(message.getBuffer(), headerLength, messageLength);
+inputBuffer.get(buf, headerLength, messageLength);
 return true;
 }
 }



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



svn commit: r1519435 - /tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 13:24:10 2013
New Revision: 1519435

URL: http://svn.apache.org/r1519435
Log:
Move the copying from the inputBuffer to the message buffer into the read() 
method to align read() in APR/native with BIO and NIO.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519435&r1=1519434&r2=1519435&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep  2 
13:24:10 2013
@@ -194,7 +194,8 @@ public class AjpAprProcessor extends Abs
  * @return
  * @throws IOException
  */
-protected boolean read(int n, boolean block) throws IOException {
+protected boolean read(byte[] buf, int pos, int n, boolean block)
+throws IOException {
 
 boolean nextReadBlocks = block;
 
@@ -224,6 +225,7 @@ public class AjpAprProcessor extends Abs
 }
 }
 
+inputBuffer.get(buf, pos, n);
 return true;
 }
 
@@ -280,11 +282,10 @@ public class AjpAprProcessor extends Abs
 byte[] buf = message.getBuffer();
 int headerLength = message.getHeaderLength();
 
-if (!read(headerLength, block)) {
+if (!read(buf, 0, headerLength, block)) {
 return false;
 }
 
-inputBuffer.get(buf, 0, headerLength);
 int messageLength = message.processHeader(true);
 if (messageLength < 0) {
 // Invalid AJP header signature
@@ -304,8 +305,7 @@ public class AjpAprProcessor extends Abs
 Integer.valueOf(messageLength),
 Integer.valueOf(buf.length)));
 }
-read(messageLength, true);
-inputBuffer.get(buf, headerLength, messageLength);
+read(buf, headerLength, messageLength, true);
 return true;
 }
 }



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



svn commit: r1519453 - in /tomcat/trunk/java/org/apache/coyote/ajp: AbstractAjpProcessor.java AjpAprProcessor.java AjpNioProcessor.java AjpProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 14:35:31 2013
New Revision: 1519453

URL: http://svn.apache.org/r1519453
Log:
Refactoring. Pull up readMessage()

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519453&r1=1519452&r2=1519453&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep  
2 14:35:31 2013
@@ -800,13 +800,31 @@ public abstract class AbstractAjpProcess
 protected abstract void setupSocket(SocketWrapper socketWrapper)
 throws IOException;
 
+protected abstract void setTimeout(SocketWrapper socketWrapper,
+int timeout) throws IOException;
+
 // Methods called by prepareResponse()
 protected abstract void output(byte[] src, int offset, int length)
 throws IOException;
 
-// Methods used by process
-protected abstract void setTimeout(SocketWrapper socketWrapper,
-int timeout) throws IOException;
+// Methods used by readMessage
+/**
+ * Read at least the specified amount of bytes, and place them
+ * in the input buffer. Note that if any data is available to read then 
this
+ * method will always block until at least the specified number of bytes
+ * have been read.
+ *
+ * @param buf   Buffer to read data into
+ * @param pos   Start position
+ * @param n The minimum number of bytes to read
+ * @param block If there is no data available to read when this method is
+ *  called, should this call block until data becomes 
available?
+ * @return  true if the requested number of bytes were read
+ *  else false
+ * @throws IOException
+ */
+protected abstract boolean read(byte[] buf, int pos, int n, boolean block)
+throws IOException;
 
 // Methods used by SocketInputBuffer
 /** Receive a chunk of data. Called to implement the
@@ -848,8 +866,40 @@ public abstract class AbstractAjpProcess
  *
  * @throws IOException any other failure, including incomplete reads
  */
-protected abstract boolean readMessage(AjpMessage message,
-boolean blockOnFirstRead) throws IOException;
+protected boolean readMessage(AjpMessage message, boolean block)
+throws IOException {
+
+byte[] buf = message.getBuffer();
+int headerLength = message.getHeaderLength();
+
+if (!read(buf, 0, headerLength, block)) {
+return false;
+}
+
+int messageLength = message.processHeader(true);
+if (messageLength < 0) {
+// Invalid AJP header signature
+throw new IOException(sm.getString("ajpmessage.invalidLength",
+Integer.valueOf(messageLength)));
+}
+else if (messageLength == 0) {
+// Zero length message.
+return true;
+}
+else {
+if (messageLength > message.getBuffer().length) {
+// Message too long for the buffer
+// Need to trigger a 400 response
+throw new IllegalArgumentException(sm.getString(
+"ajpprocessor.header.tooLong",
+Integer.valueOf(messageLength),
+Integer.valueOf(buf.length)));
+}
+read(buf, headerLength, messageLength, true);
+return true;
+}
+}
+
 
 @Override
 public final boolean isComet() {

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519453&r1=1519452&r2=1519453&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep  2 
14:35:31 2013
@@ -182,18 +182,7 @@ public class AjpAprProcessor extends Abs
 }
 
 
-/**
- * Read at least the specified amount of bytes, and place them
- * in the input buffer. Note that if any data is available to read then 
this
- * method will always block until at least the specified number of bytes
- * have been read.
- *
- * @param n The minimum number of bytes to read
- * @param block If there is no data available to read when this method is
- *  called, should this call block until data becomes 
availa

svn commit: r1519456 - /tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 14:56:00 2013
New Revision: 1519456

URL: http://svn.apache.org/r1519456
Log:
Researched the TODOs from the review of the AJP code against the list of 
actions.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519456&r1=1519455&r2=1519456&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep  
2 14:56:00 2013
@@ -380,8 +380,6 @@ public abstract class AbstractAjpProcess
 
 } else if (actionCode == ActionCode.RESET) {
 // NO-OP
-// TODO Check if this is really a NO-OP for AJP or if something
-// needs to be done here
 
 } else if (actionCode == ActionCode.REQ_SSL_ATTRIBUTE ) {
 
@@ -429,7 +427,6 @@ public abstract class AbstractAjpProcess
 // AJP as the reverse proxy controls that connection.
 
 } else if (actionCode == ActionCode.REQ_HOST_ATTRIBUTE) {
-
 // Get remote host name using a DNS resolution
 if (request.remoteHost().isNull()) {
 try {
@@ -442,13 +439,11 @@ public abstract class AbstractAjpProcess
 
 } else if (actionCode == ActionCode.REQ_HOST_ADDR_ATTRIBUTE) {
 // NO-OP
-// TODO Check if this is really a NO-OP for AJP or if something
-// needs to be done here
+// Automatically populated during prepareRequest()
 
 } else if (actionCode == ActionCode.REQ_LOCAL_NAME_ATTRIBUTE) {
 // NO-OP
-// TODO Check if this is really a NO-OP for AJP or if something
-// needs to be done here
+// Automatically populated during prepareRequest()
 
 } else if (actionCode == ActionCode.REQ_LOCAL_ADDR_ATTRIBUTE) {
 // Copy from local name for now, which should simply be an address
@@ -456,13 +451,11 @@ public abstract class AbstractAjpProcess
 
 } else if (actionCode == ActionCode.REQ_REMOTEPORT_ATTRIBUTE) {
 // NO-OP
-// TODO Check if this is really a NO-OP for AJP or if something
-// needs to be done here
+// This information is not available when using the AJP protocol
 
 } else if (actionCode == ActionCode.REQ_LOCALPORT_ATTRIBUTE) {
 // NO-OP
-// TODO Check if this is really a NO-OP for AJP or if something
-// needs to be done here
+// Automatically populated during prepareRequest()
 
 } else if (actionCode == ActionCode.REQ_SET_BODY_REPLAY) {
 // Set the given bytes as the content



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



svn commit: r1519465 - /tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 15:44:31 2013
New Revision: 1519465

URL: http://svn.apache.org/r1519465
Log:
Enable AJP to work with Servlet 3.1 non-blocking reads. This is not a true 
non-blocking implementation. That requires further investigation marked by the 
TODOs in the code.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519465&r1=1519464&r2=1519465&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep  
2 15:44:31 2013
@@ -44,6 +44,7 @@ import org.apache.tomcat.util.http.HttpM
 import org.apache.tomcat.util.http.MimeHeaders;
 import org.apache.tomcat.util.net.AbstractEndpoint;
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
+import org.apache.tomcat.util.net.DispatchType;
 import org.apache.tomcat.util.net.SSLSupport;
 import org.apache.tomcat.util.net.SocketStatus;
 import org.apache.tomcat.util.net.SocketWrapper;
@@ -515,17 +516,34 @@ public abstract class AbstractAjpProcess
 sm.getString("ajpprocessor.comet.notsupported"));
 
 } else if (actionCode == ActionCode.AVAILABLE) {
-// TODO
+// Web Server only sends data when asked so unless end of stream 
has
+// been reached, there should be data available.
+// TODO Figure out if a 'true' non-blocking approach is possible
+//  for AJP and what changes would be required to support it.
+if (!endOfStream) {
+request.setAvailable(1);
+}
+
 } else if (actionCode == ActionCode.NB_WRITE_INTEREST) {
-// TODO
+// Assume it is always possible write data.
+// TODO Investigate 'true' non-blocking IO for AJP.
+AtomicBoolean isReady = (AtomicBoolean)param;
+isReady.set(true);
+
 } else if (actionCode == ActionCode.NB_READ_INTEREST) {
 // TODO
+System.out.println("AJP Non-blocking IO TODO: NB_READ_INTEREST");
+
 } else if (actionCode == ActionCode.REQUEST_BODY_FULLY_READ) {
-// TODO
+AtomicBoolean result = (AtomicBoolean) param;
+result.set(endOfStream);
+
 } else if (actionCode == ActionCode.DISPATCH_READ) {
-// TODO
+socketWrapper.addDispatch(DispatchType.NON_BLOCKING_READ);
+
 } else if (actionCode == ActionCode.DISPATCH_WRITE) {
-// TODO
+socketWrapper.addDispatch(DispatchType.NON_BLOCKING_WRITE);
+
 }  else {
 actionInternal(actionCode, param);
 }



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



[Bug 55383] Improve markup and design of Tomcat's HTML pages

2013-09-02 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55383

--- Comment #27 from Konstantin Preißer  ---
Created attachment 30793
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=30793&action=edit
Part 3 of updated documentation XMLs

Hi,

here is another part of updated Documentation XMLs.

I modified the CSS so that a table with class="detail-table" looks the same as
class="defaultTable". If you don't like it, you (or I) can change it so that a
detail-table has different colors.

When working through the documentation, I found the following page (and others
in appdev):
http://tomcat.apache.org/tomcat-8.0-doc/appdev/installation.html

which seemed a bit outdated, as it mentioned Tomcat 7 and Java 6 (I updated it
to Tomcat 8 and Java 7), but it also mentions CVS (I guess this was written
before SVN existed).

Furthermore, this example web.xml:
http://tomcat.apache.org/tomcat-8.0-doc/appdev/web.xml.txt
declares itself as "Web Application 2.3" instead of 3.1.


Note, that I also modified the HTTP and AJP configuration pages so that the
Connector Comparison Chart is now using a , instead of plain text, as it
is tabular data.

-- 
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: r1519478 - /tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 17:11:27 2013
New Revision: 1519478

URL: http://svn.apache.org/r1519478
Log:
Ensure available() is consistent with isFinished()

Modified:
tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java?rev=1519478&r1=1519477&r2=1519478&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/filters/VoidInputFilter.java Mon 
Sep  2 17:11:27 2013
@@ -123,7 +123,11 @@ public class VoidInputFilter implements 
 
 @Override
 public int available() {
-return 0;
+if (read) {
+return 0;
+} else {
+return 1;
+}
 }
 
 



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



svn commit: r1519481 - in /tomcat/trunk/webapps/examples: WEB-INF/classes/nonblocking/NumberWriter.java WEB-INF/web.xml servlets/index.html

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 17:31:15 2013
New Revision: 1519481

URL: http://svn.apache.org/r1519481
Log:
Simple non-blocking write example. Primarily written to have something to test 
AJP with. Sequential were chosen as it makes it easy to spot output corruption.

Added:
tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java 
  (with props)
Modified:
tomcat/trunk/webapps/examples/WEB-INF/web.xml
tomcat/trunk/webapps/examples/servlets/index.html

Added: 
tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java?rev=1519481&view=auto
==
--- tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java 
(added)
+++ tomcat/trunk/webapps/examples/WEB-INF/classes/nonblocking/NumberWriter.java 
Mon Sep  2 17:31:15 2013
@@ -0,0 +1,148 @@
+/*
+ * 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 nonblocking;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.servlet.AsyncContext;
+import javax.servlet.ReadListener;
+import javax.servlet.ServletException;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * This doesn't do anything particularly useful - it just writes a series of
+ * numbers to the response body while demonstrating how to perform non-blocking
+ * writes.
+ */
+public class NumberWriter extends HttpServlet {
+
+private static final long serialVersionUID = 1L;
+
+@Override
+protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+throws ServletException, IOException {
+
+resp.setContentType("text/plain");
+resp.setCharacterEncoding("UTF-8");
+
+// Non-blocking IO requires async
+AsyncContext ac = req.startAsync();
+
+// Use a single listener for read and write. Listeners often need to
+// share state to coordinate reads and writes and this is much easier 
as
+// a single object.
+@SuppressWarnings("unused")
+NumberWriterListener listener = new NumberWriterListener(
+ac, req.getInputStream(), resp.getOutputStream());
+
+}
+
+
+/**
+ * Keep in mind that each call may well be on a different thread to the
+ * previous call. Ensure that changes in values will be visible across
+ * threads. There should only ever be one container thread at a time 
calling
+ * the listener.
+ */
+private static class NumberWriterListener implements ReadListener,
+WriteListener {
+
+private static final int LIMIT =  1000;
+
+private final AsyncContext ac;
+private final ServletInputStream sis;
+private final ServletOutputStream sos;
+private final AtomicInteger counter = new AtomicInteger(0);
+
+private volatile boolean readFinished = false;
+private byte[] buffer = new byte[8192];
+
+private NumberWriterListener(AsyncContext ac, ServletInputStream sis,
+ServletOutputStream sos) {
+this.ac = ac;
+this.sis = sis;
+this.sos = sos;
+
+// In Tomcat, the order the listeners are set controls the order
+// that the first calls are made. In this case, the read listener
+// will be called before the write listener.
+sis.setReadListener(this);
+sos.setWriteListener(this);
+}
+
+@Override
+public void onDataAvailable() throws IOException {
+
+// There should be no data to read
+
+int read = 0;
+// Loop as long as there is data to read. If isReady() returns 
false
+// the socket will be added to the poller and onDataAvailable() 
will
+// be called again as soon as there is more data to read.
+while

svn commit: r1519501 - /tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 19:23:49 2013
New Revision: 1519501

URL: http://svn.apache.org/r1519501
Log:
Prevent NPE if dispatch results in a nested call to process()

Modified:
tomcat/trunk/java/org/apache/coyote/AbstractProtocol.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=1519501&r1=1519500&r2=1519501&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Mon Sep  2 
19:23:49 2013
@@ -618,6 +618,9 @@ public abstract class AbstractProtocol i
 SocketState state = SocketState.CLOSED;
 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());



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



Re: svn commit: r1519353 - in /tomcat/maven-plugin/trunk: common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/ tomcat6-maven-plugin/src/main/java/org/apache/tomcat/ma

2013-09-02 Thread Konstantin Kolinko
2013/9/2  :
> Author: olamy
> Date: Mon Sep  2 06:11:10 2013
> New Revision: 1519353
>
> URL: http://svn.apache.org/r1519353
> Log:
> display the reason phrase too
>
> Modified:
> 
> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
> 
> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
> 
> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
>
> Modified: 
> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
> URL: 
> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties?rev=1519353&r1=1519352&r2=1519353&view=diff
> ==
> --- 
> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
>  (original)
> +++ 
> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
>  Mon Sep  2 06:11:10 2013
> @@ -112,4 +112,4 @@ AbstractI18NTomcat6Mojo.tomcatHttStatusE
>
>  #AbstractTomcat7Mojo
>
> -AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: 
> {0}
> +AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: 
> {0}, Reason Phrase: {1}

1. Typo in message key:
s/ Htt / Http / ?

2. The file below references
"AbstractI18NTomcat6Mojo.tomcatHttStatusError",

but the message above is "Tomcat7" one.
Haven't you forgotten to change "Tomcat6" message as well?

Best regards,
Konstantin Kolinko

>
> Modified: 
> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java?rev=1519353&r1=1519352&r2=1519353&view=diff
> ==
> --- 
> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
>  (original)
> +++ 
> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
>  Mon Sep  2 06:11:10 2013
> @@ -68,10 +68,12 @@ public abstract class AbstractI18NTomcat
>
>  if ( statusCode >= 400 )
>  {
> -getLog().error( messagesProvider.getMessage( 
> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode ) );
> +getLog().error( messagesProvider.getMessage( 
> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode,
> + 
> tomcatResponse.getReasonPhrase() ) );
>
>  throw new MojoExecutionException(
> -messagesProvider.getMessage( 
> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode ) + ": "
> +messagesProvider.getMessage( 
> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode,
> + 
> tomcatResponse.getReasonPhrase() ) + ": "
>  + tomcatResponse.getHttpResponseBody() );
>  }
>  }
>
> Modified: 
> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java?rev=1519353&r1=1519352&r2=1519353&view=diff
> ==
> --- 
> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
>  (original)
> +++ 
> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
>  Mon Sep  2 06:11:10 2013
> @@ -43,7 +43,7 @@ public abstract class AbstractTomcat7Moj
>   * The webapp context path to use for the web application being run. 
> This must always start with a forward-slash
>   * ('/').
>   */
> -@Parameter( defaultValue = "/${project.artifactId}", property = 
> "maven.tomcat.path", required = true )
> +@Parameter(defaultValue = "/${project.artifactId}", property = 
> "maven.tomcat.path", required = true)
>  protected String path;
>
>
> @@ -56,7 +56,8 @@ public abstract class AbstractTomcat7Moj
>   * Check response of Tomcat to know if ok or not.
>   *
>   * @param tomcatResponse response of tomcat return by TomcatManager cla

svn commit: r1519508 - in /tomcat/trunk/java/org/apache: coyote/ajp/ coyote/http11/ tomcat/util/net/

2013-09-02 Thread markt
Author: markt
Date: Mon Sep  2 19:47:14 2013
New Revision: 1519508

URL: http://svn.apache.org/r1519508
Log:
Ensure that when multiple dispatches are requested (e.g. one for write and one 
for read) if the first calls AsyncContext.complete() that the second dispatch 
is not processed.

Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep  
2 19:47:14 2013
@@ -525,14 +525,13 @@ public abstract class AbstractAjpProcess
 }
 
 } else if (actionCode == ActionCode.NB_WRITE_INTEREST) {
-// Assume it is always possible write data.
-// TODO Investigate 'true' non-blocking IO for AJP.
+// Until 'true' non-blocking IO is implemented, assume it is always
+// possible write data.
 AtomicBoolean isReady = (AtomicBoolean)param;
 isReady.set(true);
 
 } else if (actionCode == ActionCode.NB_READ_INTEREST) {
-// TODO
-System.out.println("AJP Non-blocking IO TODO: NB_READ_INTEREST");
+// NO-OP. Not required until 'true' non-blocking IO is implemented.
 
 } else if (actionCode == ActionCode.REQUEST_BODY_FULLY_READ) {
 AtomicBoolean result = (AtomicBoolean) param;

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep  2 
19:47:14 2013
@@ -84,6 +84,7 @@ public class AjpAprProcessor extends Abs
 protected void actionInternal(ActionCode actionCode, Object param) {
 
 if (actionCode == ActionCode.ASYNC_COMPLETE) {
+socketWrapper.clearDispatches();
 if (asyncStateMachine.asyncComplete()) {
 ((AprEndpoint)endpoint).processSocketAsync(this.socketWrapper,
 SocketStatus.OPEN_READ);

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep  2 
19:47:14 2013
@@ -69,9 +69,10 @@ public class AjpNioProcessor extends Abs
 protected void actionInternal(ActionCode actionCode, Object param) {
 
 if (actionCode == ActionCode.ASYNC_COMPLETE) {
+socketWrapper.clearDispatches();
 if (asyncStateMachine.asyncComplete()) {
 ((NioEndpoint)endpoint).dispatchForEvent(
-socketWrapper.getSocket(), SocketStatus.OPEN_READ, 
false);
+socketWrapper.getSocket(), SocketStatus.OPEN_READ, 
true);
 }
 } else if (actionCode == ActionCode.ASYNC_SETTIMEOUT) {
 if (param == null) return;

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Sep  2 
19:47:14 2013
@@ -81,6 +81,7 @@ public class AjpProcessor extends Abstra
 protected void actionInternal(ActionCode actionCode, Object param) {
 
 if (actionCode == ActionCode.ASYNC_COMPLETE) {
+socketWrapper.clearDispatches();
 if (asyncStateMachine.asyncComplete()) {
 ((JIoEndpoint)endpoint).processSocketAsync(this.socketWrapper,
 SocketS

Re: Need a tc-native 1.1.28 release

2013-09-02 Thread Mark Thomas
On 27/08/2013 10:54, jean-frederic clere wrote:
> On 08/27/2013 10:00 AM, Mark Thomas wrote:
>> On 27/08/2013 04:07, Violeta Georgieva wrote:
>>> 2013/8/23 Mark Thomas wrote:

 Tomcat 8 needs tc-native with the fix for non-blocking IO [1]. Any
 takers for rolling the release?
>>>
>>> Mark,
>>>
>>> Do we need this for Tomcat 7 as well?
>>
>> Yes. It affects the JSR-356 WebSocket implementation.
> 
> Mladen or I should be able to do that next week.

Great.

Do you have a better estimate than sometime this week?

Cheers,

Mark

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



[Bug 55511] Reduce contention on WebappClassLoader

2013-09-02 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55511

Mark Thomas  changed:

   What|Removed |Added

  Attachment #30789|0   |1
   is patch||

--- Comment #2 from Mark Thomas  ---
Comment on attachment 30789
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=30789
Patch diff to WebappClassLoader to enable concurrent read of cache

Mark as patch

-- 
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 55511] Reduce contention on WebappClassLoader

2013-09-02 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55511

--- Comment #3 from Mark Thomas  ---
The patch doesn't apply cleanly with either Eclipse (which can be fussy) or
TortoiseSVN (which is usually quite tolerant).

I'd like to see some performance numbers before considering this patch given
the problems any solution that didn't sync the whole method has demonstrated in
the past.

-- 
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 55511] Reduce contention on WebappClassLoader

2013-09-02 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55511

--- Comment #4 from Konstantin Kolinko  ---
>   @Override
> - public synchronized Class loadClass(String name, boolean resolve)
> + public Class loadClass(String name, boolean resolve)

The method that is overridden here is marked as synchronized in
java.lang.ClassLoader in Java 6. Thus it is synchronized in Tomcat as well.

That method is not synchronized in Java 7, but as far as I remember, you need
to jump through some hoops such as "registerAsParallelCapable()" to make use of
parallel execution. See discussion in bug 48903 (esp. comments 2 and 6).

Discussion in issue 48903 was three years ago when Java 7 was still beta. I am
not aware of what is the current state of affairs in that API.

-- 
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



[jira] [Commented] (MTOMCAT-235) War file is being uploaded twice - Cookie rejected

2013-09-02 Thread *$^¨%`£

[ 
https://issues.apache.org/jira/browse/MTOMCAT-235?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13756290#comment-13756290
 ] 

Olivier Lamy (*$^¨%`£) commented on MTOMCAT-235:


using ProxyPassReverseCookiePath could help you?

> War file is being uploaded twice -  Cookie rejected
> ---
>
> Key: MTOMCAT-235
> URL: https://issues.apache.org/jira/browse/MTOMCAT-235
> Project: Apache Tomcat Maven Plugin
>  Issue Type: Bug
>  Components: tomcat6
>Affects Versions: 2.1
> Environment: Linux
>Reporter: George Smith
>Assignee: Olivier Lamy (*$^¨%`£)
>
> When I run maven task for (re)deploy, the file is always being uploaded 
> twice. I think the problem is  related to manager path. 
> In front of Tomcat there is a Apache server (from security reasons), which 
> redirects requests from /manager-server-app to /manager on Tomcat server. 
> Plugin should deal with it.
> {code}
>  [INFO] Deploying war to http://192.168.191.83/server-app
>  Uploading: 
> http://192.168.191.83/manager-server-app//deploy?path=%2Fserver-app
>  Uploaded: 
> http://192.168.191.83/manager-server-app//deploy?path=%2Fserver-app (13788 KB 
> at 468.1 KB/sec) 
> 28.8.2013 8:44:35 org.apache.http.client.protocol.ResponseProcessCookies 
> processCookies
> WARNING: Cookie rejected: "[version: 0][name: JSESSIONID][value: 
> 7ACBBD27F97F86C3477C988006B02073][domain: 192.168.191.83][path: 
> /manager][expiry: null]". Illegal path attribute "/manager". Path of origin: 
> "/server-app//deploy"
> Uploading: http://192.168.191.83/manager-server-app//deploy?path=%2Fserver-app
> Uploaded: http://192.168.191.83/manager-server-app//deploy?path=%2Fserver-app 
> (13788 KB at 332.8 KB/sec)
> {code}
> After second automatic upload it's deployed successfully.
> The htaccess file content:
> {code}
> RewriteEngine On
> RewriteRule ^manager-server-app/(.*)$ ajp://localhost:8010/manager/$1 [P,NE]
> RewriteRule ^manager-server-app$ /manager/ [L,R]
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

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



Re: svn commit: r1519353 - in /tomcat/maven-plugin/trunk: common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/ tomcat6-maven-plugin/src/main/java/org/apache/tomcat/ma

2013-09-02 Thread Olivier Lamy
On 3 September 2013 05:43, Konstantin Kolinko  wrote:
> 2013/9/2  :
>> Author: olamy
>> Date: Mon Sep  2 06:11:10 2013
>> New Revision: 1519353
>>
>> URL: http://svn.apache.org/r1519353
>> Log:
>> display the reason phrase too
>>
>> Modified:
>> 
>> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
>> 
>> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
>> 
>> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
>>
>> Modified: 
>> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
>> URL: 
>> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties?rev=1519353&r1=1519352&r2=1519353&view=diff
>> ==
>> --- 
>> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
>>  (original)
>> +++ 
>> tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
>>  Mon Sep  2 06:11:10 2013
>> @@ -112,4 +112,4 @@ AbstractI18NTomcat6Mojo.tomcatHttStatusE
>>
>>  #AbstractTomcat7Mojo
>>
>> -AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: 
>> {0}
>> +AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: 
>> {0}, Reason Phrase: {1}
>
> 1. Typo in message key:
> s/ Htt / Http / ?
>
> 2. The file below references
> "AbstractI18NTomcat6Mojo.tomcatHttStatusError",
>
> but the message above is "Tomcat7" one.
> Haven't you forgotten to change "Tomcat6" message as well?

Yup I missed to move to only one key as it's the same message.
Just fixed.

Thanks for the review!

Olivier

>
> Best regards,
> Konstantin Kolinko
>
>>
>> Modified: 
>> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
>> URL: 
>> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java?rev=1519353&r1=1519352&r2=1519353&view=diff
>> ==
>> --- 
>> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
>>  (original)
>> +++ 
>> tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
>>  Mon Sep  2 06:11:10 2013
>> @@ -68,10 +68,12 @@ public abstract class AbstractI18NTomcat
>>
>>  if ( statusCode >= 400 )
>>  {
>> -getLog().error( messagesProvider.getMessage( 
>> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode ) );
>> +getLog().error( messagesProvider.getMessage( 
>> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode,
>> + 
>> tomcatResponse.getReasonPhrase() ) );
>>
>>  throw new MojoExecutionException(
>> -messagesProvider.getMessage( 
>> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode ) + ": "
>> +messagesProvider.getMessage( 
>> "AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode,
>> + 
>> tomcatResponse.getReasonPhrase() ) + ": "
>>  + tomcatResponse.getHttpResponseBody() );
>>  }
>>  }
>>
>> Modified: 
>> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
>> URL: 
>> http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java?rev=1519353&r1=1519352&r2=1519353&view=diff
>> ==
>> --- 
>> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
>>  (original)
>> +++ 
>> tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
>>  Mon Sep  2 06:11:10 2013
>> @@ -43,7 +43,7 @@ public abstract class AbstractTomcat7Moj
>>   * The webapp context path to use for the web application being run. 
>> This must always start with a forward-slash
>>   * ('/').
>>   */
>> -@Parameter( defaultValue = "/${project.artifactId}", property = 
>> "maven.tomcat.path", required = true )
>> +@Parameter(defaultValue = "/${project.artifactId}", property = 
>> "m

svn commit: r1519539 - in /tomcat/maven-plugin/trunk: common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/ tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/

2013-09-02 Thread olamy
Author: olamy
Date: Tue Sep  3 01:54:53 2013
New Revision: 1519539

URL: http://svn.apache.org/r1519539
Log:
unify error message key

Modified:

tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties

tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties

tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java

tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java

Modified: 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
URL: 
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties?rev=1519539&r1=1519538&r2=1519539&view=diff
==
--- 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
 (original)
+++ 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages.properties
 Tue Sep  3 01:54:53 2013
@@ -106,10 +106,6 @@ UndeployMojo.undeployError = Cannot unde
 
 ReloadMojo.reloadingApp = Reloading application at {0}
 
-# AbstractI18NTomcat6Mojo
+#
 
-AbstractI18NTomcat6Mojo.tomcatHttStatusError = Tomcat return http status 
error: {0}
-
-#AbstractTomcat7Mojo
-
-AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat return http status error: 
{0}, Reason Phrase: {1}
+tomcatHttpStatusError = Tomcat return http status error: {0}, Reason Phrase: 
{1}

Modified: 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties
URL: 
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties?rev=1519539&r1=1519538&r2=1519539&view=diff
==
--- 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties
 (original)
+++ 
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/resources/org/apache/tomcat/maven/common/messages/messages_fr.properties
 Tue Sep  3 01:54:53 2013
@@ -106,10 +106,4 @@ UndeployMojo.undeployError = N'a pas pu 
 
 ReloadMojo.reloadingApp = Rechargement de l'application sur {0}
 
-# AbstractI18NTomcat6Mojo
-
-AbstractI18NTomcat6Mojo.tomcatHttStatusError = Tomcat a retourn\u00E9 un code 
HTTP en erreur: {0}
-
-#AbstractTomcat7Mojo
-
-AbstractTomcat7Mojo.tomcatHttStatusError = Tomcat a retourn\u00E9 un code HTTP 
en erreur: {0}
\ No newline at end of file
+tomcatHttpStatusError = Tomcat a retourn\u00E9 un code HTTP en erreur: {0}, 
raison: {1}
\ No newline at end of file

Modified: 
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
URL: 
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java?rev=1519539&r1=1519538&r2=1519539&view=diff
==
--- 
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
 (original)
+++ 
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractI18NTomcat6Mojo.java
 Tue Sep  3 01:54:53 2013
@@ -68,11 +68,11 @@ public abstract class AbstractI18NTomcat
 
 if ( statusCode >= 400 )
 {
-getLog().error( messagesProvider.getMessage( 
"AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode,
+getLog().error( messagesProvider.getMessage( 
"tomcatHttpStatusError", statusCode,
  
tomcatResponse.getReasonPhrase() ) );
 
 throw new MojoExecutionException(
-messagesProvider.getMessage( 
"AbstractI18NTomcat6Mojo.tomcatHttStatusError", statusCode,
+messagesProvider.getMessage( "tomcatHttpStatusError", 
statusCode,
  tomcatResponse.getReasonPhrase() 
) + ": "
 + tomcatResponse.getHttpResponseBody() );
 }

Modified: 
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/AbstractTomcat7Mojo.java
URL: 
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/Ab

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

2013-09-02 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 74 runs.
The current state of this project is 'Failed', with reason 'Build Failed'.
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 failed
 -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: 53 mins 11 secs
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-20130903.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-20130903-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-20130903.jar
 
-Dcommons-daemon.native.src.tgz=/srv/gump/public/workspace/apache-commons/daemon/dist/bin/commons-daemon-20130903-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-20130903.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-s