svn commit: r1497670 - /tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 07:35:49 2013
New Revision: 1497670

URL: http://svn.apache.org/r1497670
Log:
WebSocket 1.0, section 8.2
There is an implied restriction that any initial upgrade request must use HTTP 
GET.

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java?rev=1497670&r1=1497669&r2=1497670&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java Fri Jun 
28 07:35:49 2013
@@ -77,9 +77,13 @@ public class WsFilter implements Filter 
 !(response instanceof HttpServletResponse) ||
 !headerContainsToken((HttpServletRequest) request,
 Constants.UPGRADE_HEADER_NAME,
-Constants.UPGRADE_HEADER_VALUE)) {
+Constants.UPGRADE_HEADER_VALUE) ||
+!"GET".equals(((HttpServletRequest) request).getMethod())) {
 // Not an HTTP request that includes a valid upgrade request to
 // web socket
+// Note: RFC 2616 does not limit HTTP upgrade to GET requests but
+//   the the Java WebSocket spec 1.0, section 8.2 implies such 
a
+//   limitation
 chain.doFilter(request, response);
 return;
 }



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



Re: Tomcat 7.0.41 JNDIRealm revision 1491394

2013-06-28 Thread Brian Burch

On 27/06/13 21:03, Mark Thomas wrote:

On 27/06/2013 19:23, Brian Burch wrote:


So will you deal with it from now on, or would you like me to open
bugs on tc7 and tc8?


Fixed. It would be good if you could confirm the fix is correct.


I checked out the tc7 trunk. The source of JNDIRealm was exactly as I 
expected to fix the bug. I replaced my patched catalina.jar with the 
differently-sized version built from the trunk.


I confirm that authentication of SHA hashed passwords from an LDAP 
directory is working again.


Brian


Mark


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




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



[Bug 55031] Update MANIFEST.MF for OSGi headers

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55031

--- Comment #2 from Martin Lichtin  ---
I took the 7.0.40 sources artifact, as far as I can remember.

However, when getting the sources from trunk and using the Felix bundle plugin,
the same import/export headers are generated.

I don't understand why Bnd (http://www.aqute.biz/Bnd/Bnd) thinks 
the "interceptor" package is using classes from "jmx", but then again, 
I have never questioned Bnd's outcome either, because the creation 
of import/export headers is normally done under the hood.

Please feel free to remove "org.apache.tomcat.jdbc.pool.jmx" from the 
uses: clause of org.apache.tomcat.jdbc.pool.interceptor.

The rest, as far as I can see, is adequate.

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



WebSocket: to flip or not the ByteBuffer during sendBinary in RemoteEndpoint(s)

2013-06-28 Thread Niki Dokovski
Hi folks,
while playing around with tyrus and tomcat implementation of websocket I
spotted a difference in the way sendBinary is actually implemented. In
short: tyrus uses bytebuffer.array(), hence there is no change in buffer's
position while we end with channel write operation that does this. Neither
the spec nor the javadoc detail that but the result is that one application
can run perfectly on one of the implementations and could cause problem on
the other. Shall we contact the EG for clarification on this matter?
Opinions?

cheers
niki


svn commit: r1497741 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/catalina/core/AsyncContextImpl.java test/org/apache/catalina/core/TestAsyncContextImpl.java webapps/docs/changelog.xml

2013-06-28 Thread violetagg
Author: violetagg
Date: Fri Jun 28 12:01:42 2013
New Revision: 1497741

URL: http://svn.apache.org/r1497741
Log:
Merged revision 1497474 from tomcat/trunk:
When calculating the path in AsyncContext.dispatch(), methods 
ServletRequest.getRequestURI and ServletRequest.getContextPath cannot be used. 
That's because the first one returns a string that is not decoded and not 
normalized, but the second one returns decoded string. Instead of this methods 
ServletRequest.getServletPath and ServletRequest.getPathInfo will be used as 
requestURI = contextPath + servletPath + pathInfo.

Modified:
tomcat/tc7.0.x/trunk/   (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

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

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java?rev=1497741&r1=1497740&r2=1497741&view=diff
==
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java 
Fri Jun 28 12:01:42 2013
@@ -169,17 +169,19 @@ public class AsyncContextImpl implements
 public void dispatch() {
 check();
 String path;
-String cpath;
+String pathInfo;
 ServletRequest servletRequest = getRequest();
 if (servletRequest instanceof HttpServletRequest) {
 HttpServletRequest sr = (HttpServletRequest) servletRequest;
-path = sr.getRequestURI();
-cpath = sr.getContextPath();
+path = sr.getServletPath();
+pathInfo = sr.getPathInfo();
 } else {
-path = request.getRequestURI();
-cpath = request.getContextPath();
+path = request.getServletPath();
+pathInfo = request.getPathInfo();
+}
+if (pathInfo != null) {
+path += pathInfo;
 }
-if (cpath.length()>1) path = path.substring(cpath.length());
 dispatch(path);
 }
 

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java?rev=1497741&r1=1497740&r2=1497741&view=diff
==
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java 
Fri Jun 28 12:01:42 2013
@@ -1809,42 +1809,18 @@ public class TestAsyncContextImpl extend
 
 @Test
 public void testDispatchWithCustomRequestResponse() throws Exception {
-// Setup Tomcat instance
-Tomcat tomcat = getTomcatInstance();
-
-// Must have a real docBase - just use temp
-File docBase = new File(System.getProperty("java.io.tmpdir"));
-
-Context ctx = tomcat.addContext("", docBase.getAbsolutePath());
-
-DispatchingGenericServlet dispatch = new DispatchingGenericServlet();
-Wrapper wrapper = Tomcat.addServlet(ctx, "dispatch", dispatch);
-wrapper.setAsyncSupported(true);
-ctx.addServletMapping("/dispatch", "dispatch");
-
-CustomGenericServlet customGeneric = new CustomGenericServlet();
-Wrapper wrapper2 = Tomcat.addServlet(ctx, "customGeneric",
-customGeneric);
-wrapper2.setAsyncSupported(true);
-ctx.addServletMapping("/target", "customGeneric");
-
-tomcat.start();
-
-ByteChunk res = getUrl("http://localhost:"; + getPort()
-+ "/dispatch?crr=y");
+prepareApplicationWithGenericServlet("");
 
 StringBuilder expected = new StringBuilder();
 expected.append("OK");
 expected.append("CustomGenericServletGet-");
-assertEquals(expected.toString(), res.toString());
-
-res = getUrl("http://localhost:"; + getPort()
-+ "/dispatch?crr=y&empty=y");
+requestApplicationWithGenericServlet("/dispatch?crr=y", expected);
 
 expected = new StringBuilder();
 expected.append("OK");
 expected.append("DispatchingGenericServletGet-");
-assertEquals(expected.toString(), res.toString());
+requestApplicationWithGenericServlet("/dispatch?crr=y&empty=y",
+expected);
 }
 
 private static class CustomGenericServlet extends GenericServlet {
@@ -1861,4 +1837,75 @@ public class TestAsyncContextImpl extend
 }
 
 }
+
+@Test
+public void testEmptyDispat

Re: WebSocket: to flip or not the ByteBuffer during sendBinary in RemoteEndpoint(s)

2013-06-28 Thread Mark Thomas
On 28/06/2013 12:47, Niki Dokovski wrote:
> Hi folks,
> while playing around with tyrus and tomcat implementation of websocket I
> spotted a difference in the way sendBinary is actually implemented. In
> short: tyrus uses bytebuffer.array(), hence there is no change in buffer's
> position while we end with channel write operation that does this. Neither
> the spec nor the javadoc detail that but the result is that one application
> can run perfectly on one of the implementations and could cause problem on
> the other. Shall we contact the EG for clarification on this matter?

No need. The EG has already stated its view (well, the EG lead did and
no-one disagreed)


Since the spec does not say anything about re-using ByteBuffers and they
are mutable objects, I would expect the conventional developer practice
to be to use a new one each time.


> Opinions?

I agree with the EG lead. Client's should not be making any assumptions
about what the implementation will or won't do with a ByteBuffer.

If you want to argue for a specific behaviour, open an issue against the
spec.

Mark


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



svn commit: r1497754 - /tomcat/trunk/modules/jdbc-pool/resources/MANIFEST.MF

2013-06-28 Thread violetagg
Author: violetagg
Date: Fri Jun 28 12:54:52 2013
New Revision: 1497754

URL: http://svn.apache.org/r1497754
Log:
Fixed Export-Package header and the "uses" directives. 
Import org.apache.juli.logging package with no version so that any version of a 
bundle that provides it can be used.

Modified:
tomcat/trunk/modules/jdbc-pool/resources/MANIFEST.MF

Modified: tomcat/trunk/modules/jdbc-pool/resources/MANIFEST.MF
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/resources/MANIFEST.MF?rev=1497754&r1=1497753&r2=1497754&view=diff
==
--- tomcat/trunk/modules/jdbc-pool/resources/MANIFEST.MF (original)
+++ tomcat/trunk/modules/jdbc-pool/resources/MANIFEST.MF Fri Jun 28 12:54:52 
2013
@@ -1,12 +1,13 @@
 Manifest-Version: 1.0
-Export-Package: 
-  org.apache.tomcat.jdbc.pool;version="@VERSION@";
-  uses:="javax.management,javax.naming,javax.naming.spi,javax.sql,
-  org.apache.tomcat.jdbc.pool.jmx",
-  org.apache.tomcat.jdbc.pool.interceptor;version="@VERSION@";
-  uses:="javax.management.openmbean,org.apache.tomcat.jdbc.pool",
-  org.apache.tomcat.jdbc.pool.jmx;version="@VERSION@";
-  uses:="javax.management,org.apache.tomcat.jdbc.pool"
+Export-Package: org.apache.tomcat.jdbc.naming;uses:="javax.naming,org.ap
+ ache.juli.logging,javax.naming.spi";version="@VERSION@",org.apache.tomc
+ at.jdbc.pool;uses:="org.apache.juli.logging,javax.sql,org.apache.tomcat
+ .jdbc.pool.jmx,javax.management,javax.naming,javax.naming.spi,org.apach
+ e.tomcat.jdbc.pool.interceptor";version="@VERSION@",org.apache.tomcat.j
+ dbc.pool.interceptor;uses:="org.apache.tomcat.jdbc.pool,org.apache.juli
+ .logging,javax.management.openmbean,javax.management";version="@VERSION@
+ ",org.apache.tomcat.jdbc.pool.jmx;uses:="org.apache.tomcat.jdbc.pool,or
+ g.apache.juli.logging,javax.management";version="@VERSION@"
 Ant-Version: Apache Ant 1.7.0
 Bundle-Vendor: Apache Software Foundation
 Bundle-Version: @VERSION@
@@ -20,4 +21,4 @@ Import-Package: 
   javax.naming;version="0",
   javax.naming.spi;version="0",
   javax.sql;version="0",
-  org.apache.juli.logging;version="[6.0.18, 7.1.0)"
+  org.apache.juli.logging;version="0"



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



svn commit: r1497756 - in /tomcat/trunk/java/org/apache/tomcat/websocket: WsSession.java WsWebSocketContainer.java server/WsHttpUpgradeHandler.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 12:55:21 2013
New Revision: 1497756

URL: http://svn.apache.org/r1497756
Log:
Add some plumbing to make the HTTP session ID available to the WeBSocket 
session. This will be required to implement WebSocket 1.0, section 7.2.

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java

tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1497756&r1=1497755&r2=1497756&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Fri Jun 28 
12:55:21 2013
@@ -69,6 +69,7 @@ public class WsSession implements Sessio
 private final String subProtocol;
 private final Map pathParameters;
 private final boolean secure;
+private final String httpSessionId;
 private final String id;
 
 // Expected to handle message types of  only
@@ -100,8 +101,8 @@ public class WsSession implements Sessio
 WsRemoteEndpointImplBase wsRemoteEndpoint,
 WsWebSocketContainer wsWebSocketContainer,
 URI requestUri, Map> requestParameterMap,
-String queryString, Principal userPrincipal, String subProtocol,
-Map pathParameters,
+String queryString, Principal userPrincipal, String httpSessionId,
+String subProtocol, Map pathParameters,
 boolean secure, EndpointConfig endpointConfig)
 throws DeploymentException {
 this.localEndpoint = localEndpoint;
@@ -127,6 +128,7 @@ public class WsSession implements Sessio
 }
 this.queryString = queryString;
 this.userPrincipal = userPrincipal;
+this.httpSessionId = httpSessionId;
 if (subProtocol == null) {
 this.subProtocol = "";
 } else {
@@ -522,6 +524,11 @@ public class WsSession implements Sessio
 }
 
 
+protected String getHttpSessionId() {
+return httpSessionId;
+}
+
+
 protected MessageHandler getTextMessageHandler() {
 return textMessageHandler;
 }

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1497756&r1=1497755&r2=1497756&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Fri 
Jun 28 12:55:21 2013
@@ -330,7 +330,7 @@ public class WsWebSocketContainer
 
 
 WsSession wsSession = new WsSession(endpoint, wsRemoteEndpointClient,
-this, null, null, null, null, subProtocol,
+this, null, null, null, null, null, subProtocol,
 Collections.EMPTY_MAP, false,
 clientEndpointConfiguration);
 endpoint.onOpen(wsSession, clientEndpointConfiguration);

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java?rev=1497756&r1=1497755&r2=1497756&view=diff
==
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java 
Fri Jun 28 12:55:21 2013
@@ -24,6 +24,7 @@ import javax.servlet.ReadListener;
 import javax.servlet.ServletInputStream;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.WriteListener;
+import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpUpgradeHandler;
 import javax.servlet.http.WebConnection;
 import javax.websocket.CloseReason;
@@ -99,6 +100,12 @@ public class WsHttpUpgradeHandler implem
 throw new IllegalStateException(e);
 }
 
+String httpSessionId = null;
+Object session = handshakeRequest.getHttpSession();
+if (session != null ) {
+httpSessionId = ((HttpSession) session).getId();
+}
+
 // Need to call onOpen using the web application's class loader
 // Create the frame using the application's class loader so it can pick
 // up application specific config from the ServerContainerImpl
@@ -112,8 +119,8 @@ public class WsHttpUpgradeHandler implem
 webSocketContainer, handshakeRequest.getRequestURI(),
 handshakeRequest.getParameterMap(),
 handsh

Re: WebSocket: to flip or not the ByteBuffer during sendBinary in RemoteEndpoint(s)

2013-06-28 Thread Niki Dokovski
On Fri, Jun 28, 2013 at 3:44 PM, Mark Thomas  wrote:

> On 28/06/2013 12:47, Niki Dokovski wrote:
> > Hi folks,
> > while playing around with tyrus and tomcat implementation of websocket I
> > spotted a difference in the way sendBinary is actually implemented. In
> > short: tyrus uses bytebuffer.array(), hence there is no change in
> buffer's
> > position while we end with channel write operation that does this.
> Neither
> > the spec nor the javadoc detail that but the result is that one
> application
> > can run perfectly on one of the implementations and could cause problem
> on
> > the other. Shall we contact the EG for clarification on this matter?
>
> No need. The EG has already stated its view (well, the EG lead did and
> no-one disagreed)
>
> 
> Since the spec does not say anything about re-using ByteBuffers and they
> are mutable objects, I would expect the conventional developer practice
> to be to use a new one each time.
> 
>

Thanks for sharing. This is an assumption about what is "conventional
developer practice" :)

>
> > Opinions?
>
> I agree with the EG lead. Client's should not be making any assumptions
> about what the implementation will or won't do with a ByteBuffer.
>
> If you want to argue for a specific behaviour, open an issue against the
> spec.
>
> I'll ask for a clarification and let's see. The effect is that because of
this we can lose portability.



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


Re: WebSocket: to flip or not the ByteBuffer during sendBinary in RemoteEndpoint(s)

2013-06-28 Thread Niki Dokovski
On Fri, Jun 28, 2013 at 3:57 PM, Niki Dokovski  wrote:

>
>
>
> On Fri, Jun 28, 2013 at 3:44 PM, Mark Thomas  wrote:
>
>> On 28/06/2013 12:47, Niki Dokovski wrote:
>> > Hi folks,
>> > while playing around with tyrus and tomcat implementation of websocket I
>> > spotted a difference in the way sendBinary is actually implemented. In
>> > short: tyrus uses bytebuffer.array(), hence there is no change in
>> buffer's
>> > position while we end with channel write operation that does this.
>> Neither
>> > the spec nor the javadoc detail that but the result is that one
>> application
>> > can run perfectly on one of the implementations and could cause problem
>> on
>> > the other. Shall we contact the EG for clarification on this matter?
>>
>> No need. The EG has already stated its view (well, the EG lead did and
>> no-one disagreed)
>>
>> 
>> Since the spec does not say anything about re-using ByteBuffers and they
>> are mutable objects, I would expect the conventional developer practice
>> to be to use a new one each time.
>> 
>>
>
> Thanks for sharing. This is an assumption about what is "conventional
> developer practice" :)
>
>>
>> > Opinions?
>>
>> I agree with the EG lead. Client's should not be making any assumptions
>> about what the implementation will or won't do with a ByteBuffer.
>>
>> If you want to argue for a specific behaviour, open an issue against the
>> spec.
>>
>> I'll ask for a clarification and let's see. The effect is that because of
> this we can lose portability.
>
https://java.net/jira/browse/WEBSOCKET_SPEC-209

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


svn commit: r1497763 - in /tomcat/trunk/java/org/apache/tomcat/websocket: WsSession.java WsWebSocketContainer.java server/WsHttpUpgradeHandler.java server/WsServerContainer.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 13:15:45 2013
New Revision: 1497763

URL: http://svn.apache.org/r1497763
Log:
Refactor to register and unregister endpoint instances and session instances 
rather than endpoint classes and session instances.
This is required to support implementation of WebSocket 1.0, section 7.2

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java

tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1497763&r1=1497762&r2=1497763&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Fri Jun 28 
13:15:45 2013
@@ -464,8 +464,7 @@ public class WsSession implements Sessio
 wsRemoteEndpoint.close();
 localEndpoint.onError(this, ioe);
 } finally {
-webSocketContainer.unregisterSession(
-localEndpoint.getClass(), this);
+webSocketContainer.unregisterSession(localEndpoint, this);
 }
 
 }

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1497763&r1=1497762&r2=1497763&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Fri 
Jun 28 13:15:45 2013
@@ -334,7 +334,7 @@ public class WsWebSocketContainer
 Collections.EMPTY_MAP, false,
 clientEndpointConfiguration);
 endpoint.onOpen(wsSession, clientEndpointConfiguration);
-registerSession(endpoint.getClass(), wsSession);
+registerSession(endpoint, wsSession);
 
 // Object creation will trigger input processing
 @SuppressWarnings("unused")
@@ -345,7 +345,11 @@ public class WsWebSocketContainer
 }
 
 
-protected void registerSession(Class endpoint, WsSession wsSession) {
+protected void registerSession(Object endpointInstance,
+WsSession wsSession) {
+
+Class endpointClazz = endpointInstance.getClass();
+
 if (!wsSession.isOpen()) {
 // The session was closed during onOpen. No need to register it.
 return;
@@ -354,10 +358,10 @@ public class WsWebSocketContainer
 if (endpointSessionMap.size() == 0) {
 BackgroundProcessManager.getInstance().register(this);
 }
-Set wsSessions = endpointSessionMap.get(endpoint);
+Set wsSessions = endpointSessionMap.get(endpointClazz);
 if (wsSessions == null) {
 wsSessions = new HashSet<>();
-endpointSessionMap.put(endpoint, wsSessions);
+endpointSessionMap.put(endpointClazz, wsSessions);
 }
 wsSessions.add(wsSession);
 }
@@ -365,13 +369,17 @@ public class WsWebSocketContainer
 }
 
 
-protected void unregisterSession(Class endpoint, WsSession wsSession) {
+protected void unregisterSession(Object endpointInstance,
+WsSession wsSession) {
+
+Class endpointClazz = endpointInstance.getClass();
+
 synchronized (endPointSessionMapLock) {
-Set wsSessions = endpointSessionMap.get(endpoint);
+Set wsSessions = endpointSessionMap.get(endpointClazz);
 if (wsSessions != null) {
 wsSessions.remove(wsSession);
 if (wsSessions.size() == 0) {
-endpointSessionMap.remove(endpoint);
+endpointSessionMap.remove(endpointClazz);
 }
 }
 if (endpointSessionMap.size() == 0) {

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java?rev=1497763&r1=1497762&r2=1497763&view=diff
==
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java 
Fri Jun 28 13:15:45 2013
@@ -128,7 +128,7 @@ public class WsHttpUpgradeHandler implem
 sos.setWriteListener(
 new WsWriteListener(this, wsRemoteEndpointServer));
 ep.onOpen(wsSession, endpointConfig);

svn commit: r1497764 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 13:16:37 2013
New Revision: 1497764

URL: http://svn.apache.org/r1497764
Log:
Trivial whitespace

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1497764&r1=1497763&r2=1497764&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Fri Jun 28 
13:16:37 2013
@@ -445,6 +445,7 @@ public class WsSession implements Sessio
 }
 }
 
+
 private void sendCloseMessage(CloseReason closeReason) {
 // 125 is maximum size for the payload of a control message
 ByteBuffer msg = ByteBuffer.allocate(125);
@@ -466,7 +467,6 @@ public class WsSession implements Sessio
 } finally {
 webSocketContainer.unregisterSession(localEndpoint, this);
 }
-
 }
 
 



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



svn commit: r1497765 - in /tomcat/tc7.0.x/trunk: ./ modules/jdbc-pool/resources/MANIFEST.MF webapps/docs/changelog.xml

2013-06-28 Thread violetagg
Author: violetagg
Date: Fri Jun 28 13:20:58 2013
New Revision: 1497765

URL: http://svn.apache.org/r1497765
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55031
Merged revision 1497754 from tomcat/trunk:
Fixed Export-Package header and the "uses" directives. 
Import org.apache.juli.logging package with no version so that any version of a 
bundle that provides it can be used.
Patch provided by Martin Lichtin.

Modified:
tomcat/tc7.0.x/trunk/   (props changed)
tomcat/tc7.0.x/trunk/modules/jdbc-pool/resources/MANIFEST.MF
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

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

Modified: tomcat/tc7.0.x/trunk/modules/jdbc-pool/resources/MANIFEST.MF
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/modules/jdbc-pool/resources/MANIFEST.MF?rev=1497765&r1=1497764&r2=1497765&view=diff
==
--- tomcat/tc7.0.x/trunk/modules/jdbc-pool/resources/MANIFEST.MF (original)
+++ tomcat/tc7.0.x/trunk/modules/jdbc-pool/resources/MANIFEST.MF Fri Jun 28 
13:20:58 2013
@@ -1,12 +1,13 @@
 Manifest-Version: 1.0
-Export-Package: 
-  org.apache.tomcat.jdbc.pool;version="@VERSION@";
-  uses:="javax.management,javax.naming,javax.naming.spi,javax.sql,
-  org.apache.tomcat.jdbc.pool.jmx",
-  org.apache.tomcat.jdbc.pool.interceptor;version="@VERSION@";
-  uses:="javax.management.openmbean,org.apache.tomcat.jdbc.pool",
-  org.apache.tomcat.jdbc.pool.jmx;version="@VERSION@";
-  uses:="javax.management,org.apache.tomcat.jdbc.pool"
+Export-Package: org.apache.tomcat.jdbc.naming;uses:="javax.naming,org.ap
+ ache.juli.logging,javax.naming.spi";version="@VERSION@",org.apache.tomc
+ at.jdbc.pool;uses:="org.apache.juli.logging,javax.sql,org.apache.tomcat
+ .jdbc.pool.jmx,javax.management,javax.naming,javax.naming.spi,org.apach
+ e.tomcat.jdbc.pool.interceptor";version="@VERSION@",org.apache.tomcat.j
+ dbc.pool.interceptor;uses:="org.apache.tomcat.jdbc.pool,org.apache.juli
+ .logging,javax.management.openmbean,javax.management";version="@VERSION@
+ ",org.apache.tomcat.jdbc.pool.jmx;uses:="org.apache.tomcat.jdbc.pool,or
+ g.apache.juli.logging,javax.management";version="@VERSION@"
 Ant-Version: Apache Ant 1.7.0
 Bundle-Vendor: Apache Software Foundation
 Bundle-Version: @VERSION@
@@ -20,4 +21,4 @@ Import-Package: 
   javax.naming;version="0",
   javax.naming.spi;version="0",
   javax.sql;version="0",
-  org.apache.juli.logging;version="[6.0.18, 7.1.0)"
+  org.apache.juli.logging;version="0"

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=1497765&r1=1497764&r2=1497765&view=diff
==
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Fri Jun 28 13:20:58 2013
@@ -156,6 +156,17 @@
   
 
   
+  
+
+  
+55031: Fixed Export-Package header and
+uses directives in MANIFEST.MF. Change the version for
+package org.apache.juli.logging to "0" in
+Import-Package header. Thus any version of that package
+can be used. Patch provided by Martin Lichtin. (violetagg)
+  
+
+  
   
 
   



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



[Bug 55031] Update MANIFEST.MF for OSGi headers

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55031

Violeta Georgieva  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

--- Comment #3 from Violeta Georgieva  ---
Fixed in trunk and 7.0.x and will be included in 7.0.42 onwards.

-- 
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 55155] New: running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

Bug ID: 55155
   Summary: running tomcat tests cause terminal to repeatedly grab
focus (on os x)
   Product: Tomcat 7
   Version: unspecified
  Hardware: Macintosh
OS: Mac OS X 10.4
Status: NEW
  Severity: minor
  Priority: P2
 Component: Packaging
  Assignee: dev@tomcat.apache.org
  Reporter: clu...@e-miles.com

Created attachment 30493
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=30493&action=edit
patch to add java.awt.headless=true for junit tests

On osx, when running tomcat tests via "ant test", "ant test-nio" or similar,
the terminal window running the tests grabs window focus each time a new jvm is
launched for the junit tests.  This makes it difficult/annoying to do other
things in other windows while the tests are running.  I am seeing the problem
on a mac - it is likely not a problem on other platforms.

Setting java.awt.headless=true fixes the issue.  I can't think of any reason
this shouldn't be set for tomcat tests - maybe there is a reason I don't know. 
Anyway, the attached patch adds the property (for junit tests).

-- 
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 55155] running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

--- Comment #1 from Mark Thomas  ---
Try again with 7.0.x HEAD please

-- 
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 55155] running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

--- Comment #2 from Casey Lucas  ---
Created attachment 30494
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=30494&action=edit
against head?

is this what you wanted?  if not, please provide a tip or link.

-- 
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 55155] running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

--- Comment #3 from Mark Thomas  ---
No, that isn't what I meant.

Please re-test with the latest source code for 7.0.x/trunk from subversion.

-- 
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: svn commit: r1497670 - /tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java

2013-06-28 Thread Nick Williams

On Jun 28, 2013, at 2:35 AM, ma...@apache.org wrote:

> Author: markt
> Date: Fri Jun 28 07:35:49 2013
> New Revision: 1497670
> 
> URL: http://svn.apache.org/r1497670
> Log:
> WebSocket 1.0, section 8.2
> There is an implied restriction that any initial upgrade request must use 
> HTTP GET.
> 
> +!"GET".equals(((HttpServletRequest) request).getMethod())) {
> // Not an HTTP request that includes a valid upgrade request to
> // web socket
> +// Note: RFC 2616 does not limit HTTP upgrade to GET requests but
> +//   the the Java WebSocket spec 1.0, section 8.2 implies 
> such a
> +//   limitation

Unfortunate that the Java WebSocket spec is in direct contradiction with the 
RFC spec. IMO, the RFC spec is the authority and it seems like it should take 
precedence over the Java WebSocket spec. That would be like the RFC HTTP spec 
saying "you must do X when header Y is present" and the Java Servlet spec 
saying "you must not do X when header Y is present." The Java WebSocket spec is 
clearly wrong here.

How clear is the Java WebSocket spec? Does it just /seem/ to indicate this or 
does it /insist/ upon it?

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



Re: svn commit: r1497670 - /tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java

2013-06-28 Thread Mark Thomas
On 28/06/2013 17:00, Nick Williams wrote:
> 
> On Jun 28, 2013, at 2:35 AM, ma...@apache.org wrote:
> 
>> Author: markt Date: Fri Jun 28 07:35:49 2013 New Revision: 1497670
>> 
>> URL: http://svn.apache.org/r1497670 Log: WebSocket 1.0, section
>> 8.2 There is an implied restriction that any initial upgrade
>> request must use HTTP GET.
>> 
>> +!"GET".equals(((HttpServletRequest)
>> request).getMethod())) { // Not an HTTP request that includes a
>> valid upgrade request to // web socket +// Note: RFC
>> 2616 does not limit HTTP upgrade to GET requests but +
>> //   the the Java WebSocket spec 1.0, section 8.2 implies such
>> a +//   limitation
> 
> Unfortunate that the Java WebSocket spec is in direct contradiction
> with the RFC spec.

Please provide a reference for the part of RFC 6455 you believe this
change violates.

> IMO, the RFC spec is the authority and it seems
> like it should take precedence over the Java WebSocket spec. That
> would be like the RFC HTTP spec saying "you must do X when header Y
> is present" and the Java Servlet spec saying "you must not do X when
> header Y is present." The Java WebSocket spec is clearly wrong here.

I disagree with your view in precedence.

> How clear is the Java WebSocket spec? Does it just /seem/ to indicate
> this or does it /insist/ upon it?

It implies only GET requests are permitted. The RFC is more specific.

Mark

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



svn commit: r1497832 - /tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 16:28:13 2013
New Revision: 1497832

URL: http://svn.apache.org/r1497832
Log:
Clarify comment

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java?rev=1497832&r1=1497831&r2=1497832&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java Fri Jun 
28 16:28:13 2013
@@ -83,7 +83,8 @@ public class WsFilter implements Filter 
 // web socket
 // Note: RFC 2616 does not limit HTTP upgrade to GET requests but
 //   the the Java WebSocket spec 1.0, section 8.2 implies such 
a
-//   limitation
+//   limitation and RFC 6455 section 4.1 requires that a
+//   WebSocket Upgrade uses GET.
 chain.doFilter(request, response);
 return;
 }



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



svn commit: r1497851 - in /tomcat/trunk/java/org/apache/tomcat/websocket: WsSession.java WsWebSocketContainer.java server/WsSci.java server/WsServerContainer.java server/WsSessionListener.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 17:10:27 2013
New Revision: 1497851

URL: http://svn.apache.org/r1497851
Log:
WebSocket 1.0, section 7.2
Connections created under an authenticated HTTP session must be closed when the 
HTTP session ends.

Added:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSessionListener.java 
  (with props)
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1497851&r1=1497850&r2=1497851&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Fri Jun 28 
17:10:27 2013
@@ -523,7 +523,7 @@ public class WsSession implements Sessio
 }
 
 
-protected String getHttpSessionId() {
+public String getHttpSessionId() {
 return httpSessionId;
 }
 

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1497851&r1=1497850&r2=1497851&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Fri 
Jun 28 17:10:27 2013
@@ -345,10 +345,9 @@ public class WsWebSocketContainer
 }
 
 
-protected void registerSession(Object endpointInstance,
-WsSession wsSession) {
+protected void registerSession(Endpoint endpoint, WsSession wsSession) {
 
-Class endpointClazz = endpointInstance.getClass();
+Class endpointClazz = endpoint.getClass();
 
 if (!wsSession.isOpen()) {
 // The session was closed during onOpen. No need to register it.
@@ -369,10 +368,9 @@ public class WsWebSocketContainer
 }
 
 
-protected void unregisterSession(Object endpointInstance,
-WsSession wsSession) {
+protected void unregisterSession(Endpoint endpoint, WsSession wsSession) {
 
-Class endpointClazz = endpointInstance.getClass();
+Class endpointClazz = endpoint.getClass();
 
 synchronized (endPointSessionMapLock) {
 Set wsSessions = endpointSessionMap.get(endpointClazz);

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java?rev=1497851&r1=1497850&r2=1497851&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsSci.java Fri Jun 28 
17:10:27 2013
@@ -126,12 +126,15 @@ public class WsSci implements ServletCon
 
 
 static WsServerContainer init(ServletContext servletContext) {
+
 WsServerContainer sc = WsServerContainer.getServerContainer();
 sc.setServletContext(servletContext);
 
 servletContext.setAttribute(
 Constants.SERVER_CONTAINER_SERVLET_CONTEXT_ATTRIBUTE, sc);
 
+servletContext.addListener(new WsSessionListener(sc));
+
 return sc;
 }
 }

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java?rev=1497851&r1=1497850&r2=1497851&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java 
Fri Jun 28 17:10:27 2013
@@ -16,11 +16,13 @@
  */
 package org.apache.tomcat.websocket.server;
 
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.EnumSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.WeakHashMap;
@@ -29,8 +31,11 @@ import java.util.concurrent.ConcurrentHa
 import javax.servlet.DispatcherType;
 import javax.servlet.FilterRegistration;
 import javax.servlet.ServletContext;
+import javax.websocket.CloseReason;
+import javax.websocket.CloseReason.CloseCodes;
 import javax.websocket.DeploymentException;
 import javax.websocket.Encoder;
+import javax.websocket.Endpoint;
 import javax.websocket.server.ServerContainer;
 import javax.websocke

Re: svn commit: r1497670 - /tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java

2013-06-28 Thread Nick Williams

On Jun 28, 2013, at 11:27 AM, Mark Thomas wrote:

> On 28/06/2013 17:00, Nick Williams wrote:
>> 
>> On Jun 28, 2013, at 2:35 AM, ma...@apache.org wrote:
>> 
>>> Author: markt Date: Fri Jun 28 07:35:49 2013 New Revision: 1497670
>>> 
>>> URL: http://svn.apache.org/r1497670 Log: WebSocket 1.0, section
>>> 8.2 There is an implied restriction that any initial upgrade
>>> request must use HTTP GET.
>>> 
>>> +!"GET".equals(((HttpServletRequest)
>>> request).getMethod())) { // Not an HTTP request that includes a
>>> valid upgrade request to // web socket +// Note: RFC
>>> 2616 does not limit HTTP upgrade to GET requests but +
>>> //   the the Java WebSocket spec 1.0, section 8.2 implies such
>>> a +//   limitation
>> 
>> Unfortunate that the Java WebSocket spec is in direct contradiction
>> with the RFC spec.
> 
> Please provide a reference for the part of RFC 6455 you believe this
> change violates.

I was going off your comment, which originally suggested this was the case. 
However, now that you have clarified your comment, my comments are no longer 
applicable.

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



[jira] [Commented] (MTOMCAT-195) Plugin uploads WAR file twice

2013-06-28 Thread Quintin Siebers (JIRA)

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

Quintin Siebers commented on MTOMCAT-195:
-

Same issue here, except it happens 3 times:

[INFO] --- tomcat6-maven-plugin:2.0:deploy (default) @ kamala-cloud ---
[INFO] Deploying war to http://kamala.mssm.nl/  
Uploading: http://kamala.mssm.nl/manager/deploy?path=%2F&update=true
Uploaded: http://kamala.mssm.nl/manager/deploy?path=%2F&update=true (50544 KB 
at 698.3 KB/sec)

Uploading: 
https://kamala.mssm.nl/manager/deploy?path=%2F&update=true/deploy?path=%2F&update=true
Uploaded: 
https://kamala.mssm.nl/manager/deploy?path=%2F&update=true/deploy?path=%2F&update=true
 (50544 KB at 687.8 KB/sec)

Uploading: 
https://kamala.mssm.nl/manager/deploy?path=%2F&update=true/deploy?path=%2F&update=true
Uploaded: 
https://kamala.mssm.nl/manager/deploy?path=%2F&update=true/deploy?path=%2F&update=true
 (50544 KB at 686.9 KB/sec)

[INFO] FAIL - Application already exists at path /

It fails to upload because the path already exists, but my pom specifies it 
should update the current deployed webapp:
true

> Plugin uploads WAR file twice
> -
>
> Key: MTOMCAT-195
> URL: https://issues.apache.org/jira/browse/MTOMCAT-195
> Project: Apache Tomcat Maven Plugin
>  Issue Type: Bug
>  Components: tomcat6
>Affects Versions: 2.0
> Environment: Win7/64, Maven 3.0.4
>Reporter: George Smith
>Assignee: Olivier Lamy (*$^¨%`£)
>
> When I deploy my WAR using maven, the target war (exact the same one) is 
> being uploaded to the server twice. Can someone explain that?
> I am using this on my module:
> {code}clean install org.apache.tomcat.maven:tomcat6-maven-plugin:2.0:redeploy 
> {code}
> From the Log file
> {code =xml}
> [INFO] --- maven-war-plugin:2.1.1:war (default-war) @ mobile-server ---
> [INFO] Packaging webapp
> [INFO] Assembling webapp [mobile-server] in 
> [C:\develope\mobile\mobile-server\target\mobile-server]
> [INFO] Processing war project
> [INFO] Copying webapp resources 
> [C:\develope\mobile\mobile-server\src\main\webapp]
> [INFO] Webapp assembled in [241 msecs]
> [INFO] Building war: C:\develope\mobile\mobile-server\target\mobile-server.war
> [INFO] 
> [INFO] <<< tomcat6-maven-plugin:2.0:redeploy (default-cli) @ mobile-server <<<
> [INFO] 
> [INFO] --- tomcat6-maven-plugin:2.0:redeploy (default-cli) @ mobile-server 
> ---
> [INFO] Deploying war to http://myserver.eu/pra-mobile-server  
> Uploading: 
> http://myserver.eu/manager-test/deploy?path=%2Fmobile-server&update=true
> Uploaded: 
> http://myserver.eu/manager-test/deploy?path=%2Fmobile-server&update=true 
> (12678 KB at 49.3 KB/sec)
> Uploading: 
> http://myserver.eu/manager-test/deploy?path=%2Fmobile-server&update=true
> Uploaded: 
> http://myserver.eu/manager-test/deploy?path=%2Fmobile-server&update=true
> {code}
> http://maven.apache.org/POM/4.0.0"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
> http://maven.apache.org/maven-v4_0_0.xsd";>
> 4.0.0
> 
> eu.company.prj.pramobile
> mobile-parent
> ../mobile-parent/pom.xml
> 1.0-SNAPSHOT
> 
> mobile-server
> war
> mobile server
> 
> 1.1.2
> 
> 
> 
> com.springsource.repository.libs-milestone
> SpringSource Enterprise Bundle Repository - libs
> http://repo.springsource.org/libs-milestone/
> 
>  
> 
> 
> ${project.groupId}
> mobile-test
> ${project.version}
> test
> 
> 
> ${project.groupId}
> mobile-common
> ${project.version}
> 
> 
> 
> org.springframework
> spring-asm
> ${version.spring}
> 
> 
> org.springframework
> spring-aop
> ${version.spring}
> 
> 
> org.springframework.security
> spring-security-config
> ${version.spring}
> 
> 
> org.springframework
> spring-web
> ${version.spring}
> 
> 
> org.springframework
> spring-oxm
> ${version.spring}
> 
> 
> org.springframework
> spring-webmvc
> ${version.spring}
> 
> 
> org.springframework.security
> spring-security-web
> ${version.spring}
> 
> 
> commons-codec
> commons-codec
> 1.7
> 
> 
> javax.servlet
> jsp-api
> 2.0
> provided
> 
> 
> commons-io
> commons-io
> 2.4
> 
> 
> commons-fileupload
> commons-fileupload
> 1.2.2
> 
> 
> javax.servlet
> servlet-api
> 2.5
> provided
> 
> 
> javax.servlet
>

[Bug 55155] running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

Mark Thomas  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |WORKSFORME

--- Comment #4 from Mark Thomas  ---
I don;t see the described behaviour on OSX. This sounds like the AWT issue that
has already been fixed in trunk. (change log entry: Update the
JreMemoryLeakPreventionListener to take account of changes in the behaviour of
java.beans.Introspector.flushCaches() and sun.awt.AppContext.getAppContext() in
Java 7.)

-- 
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: r1497876 - in /tomcat/trunk/java/org/apache/jasper/el: ELContextImpl.java JasperELResolver.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 18:53:13 2013
New Revision: 1497876

URL: http://svn.apache.org/r1497876
Log:
Add TODOs for the EL 3.0 related changes in JSP 2.3

Modified:
tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java
tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java

Modified: tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java?rev=1497876&r1=1497875&r2=1497876&view=diff
==
--- tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java (original)
+++ tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java Fri Jun 28 
18:53:13 2013
@@ -128,6 +128,8 @@ public final class ELContextImpl extends
 public static ELResolver getDefaultResolver() {
 if (Constants.IS_SECURITY_ENABLED) {
 CompositeELResolver defaultResolver = new CompositeELResolver();
+// TODO ExpressionFactory.getStreamELResolver()
+// TODO javax.el.StaticFieldResolver
 defaultResolver.add(new MapELResolver());
 defaultResolver.add(new ResourceBundleELResolver());
 defaultResolver.add(new ListELResolver());

Modified: tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java?rev=1497876&r1=1497875&r2=1497876&view=diff
==
--- tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java (original)
+++ tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java Fri Jun 28 
18:53:13 2013
@@ -51,6 +51,8 @@ public class JasperELResolver extends Co
 for (ELResolver appResolver : appResolvers) {
 add(appResolver);
 }
+// TODO ExpressionFactory.getStreamELResolver()
+// TODO javax.el.StaticFieldResolver
 add(new MapELResolver());
 add(new ResourceBundleELResolver());
 add(new ListELResolver());
@@ -80,6 +82,7 @@ public class JasperELResolver extends Co
 throws NullPointerException, PropertyNotFoundException, ELException {
 context.setPropertyResolved(false);
 
+// TODO Review this once the additional resolvers have been implemented
 int start;
 Object result = null;
 



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



svn commit: r1497878 - in /tomcat/trunk/java/org/apache/jasper: resources/LocalStrings.properties servlet/JspServlet.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 18:53:47 2013
New Revision: 1497878

URL: http://svn.apache.org/r1497878
Log:
JSP 2.3, section JSP.11.1
Reduce supported verbs to GET, POST and HEAD

Modified:
tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties
tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java

Modified: tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties?rev=1497878&r1=1497877&r2=1497878&view=diff
==
--- tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties Fri 
Jun 28 18:53:47 2013
@@ -367,6 +367,9 @@ jsp.error.tag.invalid.trimdirectivewhite
 jsp.error.page.conflict.trimdirectivewhitespaces=Page directive: illegal to 
have multiple occurrences of 'trimDirectiveWhitespaces' with different values 
(old: {0}, new: {1})
 jsp.error.tag.conflict.trimdirectivewhitespaces=Tag directive: illegal to have 
multiple occurrences of 'trimDirectiveWhitespaces' with different values (old: 
{0}, new: {1})
 
+# JSP Servlet
+jsp.error.servlet.invalid.method=JSPs only permit GET POST or HEAD
+
 # JarScanner
 jsp.warning.noJarScanner=Warning: No org.apache.tomcat.JarScanner set in 
ServletContext. Falling back to default JarScanner implementation.
 

Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java?rev=1497878&r1=1497877&r2=1497878&view=diff
==
--- tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java (original)
+++ tomcat/trunk/java/org/apache/jasper/servlet/JspServlet.java Fri Jun 28 
18:53:47 2013
@@ -280,6 +280,19 @@ public class JspServlet extends HttpServ
 public void service (HttpServletRequest request,
  HttpServletResponse response)
 throws ServletException, IOException {
+
+String method = request.getMethod();
+
+if (!"GET".equals(method) && !"POST".equals(method) &&
+!"HEAD".equals(method)) {
+// Specification states behaviour is undefined
+// Jasper opts to reject any other verbs, partly as they are
+// unlikely to make sense in a JSP context and partly to protect
+// against verb tampering
+response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED,
+Localizer.getMessage("jsp.error.servlet.invalid.method"));
+}
+
 //jspFile may be configured as an init-param for this servlet instance
 String jspUri = jspFile;
 



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



[Bug 55155] running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

--- Comment #5 from Casey Lucas  ---
I ran the tests (again) after updating trunk. Same results (lots of window
focus change). Are you trying the osx built-in Terminal app?  Maybe that has
something to do with it.  I'm running tests under jdk6.  I'll try some more
variations.

-- 
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: r1497894 - /tomcat/trunk/java/javax/el/ArrayELResolver.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 19:10:42 2013
New Revision: 1497894

URL: http://svn.apache.org/r1497894
Log:
Re-order to make checking against EL Spec RI easier

Modified:
tomcat/trunk/java/javax/el/ArrayELResolver.java

Modified: tomcat/trunk/java/javax/el/ArrayELResolver.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/ArrayELResolver.java?rev=1497894&r1=1497893&r2=1497894&view=diff
==
--- tomcat/trunk/java/javax/el/ArrayELResolver.java (original)
+++ tomcat/trunk/java/javax/el/ArrayELResolver.java Fri Jun 28 19:10:42 2013
@@ -35,7 +35,7 @@ public class ArrayELResolver extends ELR
 }
 
 @Override
-public Object getValue(ELContext context, Object base, Object property)
+public Class getType(ELContext context, Object base, Object property)
 throws NullPointerException, PropertyNotFoundException, 
ELException {
 if (context == null) {
 throw new NullPointerException();
@@ -44,17 +44,15 @@ public class ArrayELResolver extends ELR
 if (base != null && base.getClass().isArray()) {
 context.setPropertyResolved(true);
 int idx = coerce(property);
-if (idx < 0 || idx >= Array.getLength(base)) {
-return null;
-}
-return Array.get(base, idx);
+checkBounds(base, idx);
+return base.getClass().getComponentType();
 }
 
 return null;
 }
 
 @Override
-public Class getType(ELContext context, Object base, Object property)
+public Object getValue(ELContext context, Object base, Object property)
 throws NullPointerException, PropertyNotFoundException, 
ELException {
 if (context == null) {
 throw new NullPointerException();
@@ -63,8 +61,10 @@ public class ArrayELResolver extends ELR
 if (base != null && base.getClass().isArray()) {
 context.setPropertyResolved(true);
 int idx = coerce(property);
-checkBounds(base, idx);
-return base.getClass().getComponentType();
+if (idx < 0 || idx >= Array.getLength(base)) {
+return null;
+}
+return Array.get(base, idx);
 }
 
 return null;



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



svn commit: r1497895 - /tomcat/trunk/java/javax/el/BeanELResolver.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 19:13:07 2013
New Revision: 1497895

URL: http://svn.apache.org/r1497895
Log:
Reduce visibility

Modified:
tomcat/trunk/java/javax/el/BeanELResolver.java

Modified: tomcat/trunk/java/javax/el/BeanELResolver.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/BeanELResolver.java?rev=1497895&r1=1497894&r2=1497895&view=diff
==
--- tomcat/trunk/java/javax/el/BeanELResolver.java (original)
+++ tomcat/trunk/java/javax/el/BeanELResolver.java Fri Jun 28 19:13:07 2013
@@ -211,7 +211,7 @@ public class BeanELResolver extends ELRe
 return null;
 }
 
-protected static final class BeanProperties {
+static final class BeanProperties {
 private final Map properties;
 
 private final Class type;
@@ -250,7 +250,7 @@ public class BeanELResolver extends ELRe
 }
 }
 
-protected static final class BeanProperty {
+static final class BeanProperty {
 private final Class type;
 
 private final Class owner;



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



svn commit: r1497896 - /tomcat/trunk/java/javax/el/BeanELResolver.java

2013-06-28 Thread markt
Author: markt
Date: Fri Jun 28 19:16:24 2013
New Revision: 1497896

URL: http://svn.apache.org/r1497896
Log:
Re-order to make checking against EL Spec RI easier

Modified:
tomcat/trunk/java/javax/el/BeanELResolver.java

Modified: tomcat/trunk/java/javax/el/BeanELResolver.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/BeanELResolver.java?rev=1497896&r1=1497895&r2=1497896&view=diff
==
--- tomcat/trunk/java/javax/el/BeanELResolver.java (original)
+++ tomcat/trunk/java/javax/el/BeanELResolver.java Fri Jun 28 19:16:24 2013
@@ -72,6 +72,20 @@ public class BeanELResolver extends ELRe
 }
 
 @Override
+public Class getType(ELContext context, Object base, Object property)
+throws NullPointerException, PropertyNotFoundException, 
ELException {
+if (context == null) {
+throw new NullPointerException();
+}
+if (base == null || property == null) {
+return null;
+}
+
+context.setPropertyResolved(true);
+return this.property(context, base, property).getPropertyType();
+}
+
+@Override
 public Object getValue(ELContext context, Object base, Object property)
 throws NullPointerException, PropertyNotFoundException, 
ELException {
 if (context == null) {
@@ -104,20 +118,6 @@ public class BeanELResolver extends ELRe
 }
 
 @Override
-public Class getType(ELContext context, Object base, Object property)
-throws NullPointerException, PropertyNotFoundException, 
ELException {
-if (context == null) {
-throw new NullPointerException();
-}
-if (base == null || property == null) {
-return null;
-}
-
-context.setPropertyResolved(true);
-return this.property(context, base, property).getPropertyType();
-}
-
-@Override
 public void setValue(ELContext context, Object base, Object property,
 Object value) throws NullPointerException,
 PropertyNotFoundException, PropertyNotWritableException,
@@ -158,6 +158,113 @@ public class BeanELResolver extends ELRe
 }
 }
 
+/**
+ * @since EL 2.2
+ */
+@Override
+public Object invoke(ELContext context, Object base, Object method,
+Class[] paramTypes, Object[] params) {
+if (context == null) {
+throw new NullPointerException();
+}
+if (base == null || method == null) {
+return null;
+}
+
+ExpressionFactory factory = ExpressionFactory.newInstance();
+
+String methodName = (String) factory.coerceToType(method, 
String.class);
+
+// Find the matching method
+Method matchingMethod = null;
+Class clazz = base.getClass();
+if (paramTypes != null) {
+try {
+matchingMethod =
+getMethod(clazz, clazz.getMethod(methodName, paramTypes));
+} catch (NoSuchMethodException e) {
+throw new MethodNotFoundException(e);
+}
+} else {
+int paramCount = 0;
+if (params != null) {
+paramCount = params.length;
+}
+Method[] methods = clazz.getMethods();
+for (Method m : methods) {
+if (methodName.equals(m.getName())) {
+if (m.getParameterTypes().length == paramCount) {
+// Same number of parameters - use the first match
+matchingMethod = getMethod(clazz, m);
+break;
+}
+if (m.isVarArgs()
+&& paramCount > m.getParameterTypes().length - 2) {
+matchingMethod = getMethod(clazz, m);
+}
+}
+}
+if (matchingMethod == null) {
+throw new MethodNotFoundException(
+"Unable to find method [" + methodName + "] with ["
++ paramCount + "] parameters");
+}
+}
+
+Class[] parameterTypes = matchingMethod.getParameterTypes();
+Object[] parameters = null;
+if (parameterTypes.length > 0) {
+parameters = new Object[parameterTypes.length];
+@SuppressWarnings("null")  // params.length >= 
parameterTypes.length
+int paramCount = params.length;
+if (matchingMethod.isVarArgs()) {
+int varArgIndex = parameterTypes.length - 1;
+// First argCount-1 parameters are standard
+for (int i = 0; (i < varArgIndex); i++) {
+parameters[i] = factory.coerceToType(params[i],
+parameterTypes[i]);
+}
+// Last parameter is the varargs
+Class varArgClass =
+   

[Bug 55155] running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

Mark Thomas  changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Resolution|WORKSFORME  |---

--- Comment #6 from Mark Thomas  ---
OK, I do see it with Java 6. It would have helped if you mentioned that in your
original report.

-- 
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 55155] running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

--- Comment #7 from Casey Lucas  ---
Sorry for not mentioning the jdk version originally.  More digging revealed
what I believe to be a better fix for the problem:

https://developer.apple.com/library/mac/#documentation/Java/Reference/Java_PropertiesRef/Articles/JavaSystemProperties.html
 (See apple.awt.UIElement property.)

Setting it to true allows awt calls but does not steal focus. I'll add a new
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 55155] running tomcat tests cause terminal to repeatedly grab focus (on os x)

2013-06-28 Thread bugzilla
https://issues.apache.org/bugzilla/show_bug.cgi?id=55155

--- Comment #8 from Casey Lucas  ---
Created attachment 30497
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=30497&action=edit
set apple.awt.UIElement=true

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




[Tomcat Wiki] Update of "TomcatVersions" by markt

2013-06-28 Thread Apache Wiki
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Tomcat Wiki" for change 
notification.

The "TomcatVersions" page has been changed by markt:
https://wiki.apache.org/tomcat/TomcatVersions?action=diff&rev1=20&rev2=21

Comment:
Add Tomcat 8 (mainly to test the wiki after an OS upgrade)

  It is anticipated that releases will be provided for a maximum of 3 major 
versions at any one time.
  
  The "Process" field in the following tables documents what development model 
is accepted by that project, either 
[[http://www.apache.org/foundation/glossary.html#ReviewThenCommit|Review-Then-Commit]]
 or 
[[http://www.apache.org/foundation/glossary.html#CommitThenReview|Commit-Then-Review]].
 For RTC model the changes are first proposed in the `STATUS.txt` file in the 
root of the project and have to gain at least 3 "`+1`" votes before being 
applied. The project members have agreed on several 
[[#RTC_Exceptions|exceptions]] from the RTC rule (documented below).
+ 
+ = Tomcat 8.0.x =
+ ||Spec versions: ||Servlet 3.1, JSP 2.3, EL 3.0, WebSocket 1.0 ||
+ ||Stable: ||No ||
+ ||Enhancements: ||Yes ||
+ ||Bug Fixes: ||Yes ||
+ ||Security Fixes: ||Yes ||
+ ||Releases: ||Not yet ||
+ ||Release Manager: ||TBD ||
+ ||Process: ||CTR ||
+ ||Listed on download pages: ||No ||
  
  = Tomcat 7.0.x =
  ||Spec versions: ||Servlet 3.0, JSP 2.2, EL 2.2 ||

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