Author: markt Date: Sun Feb 24 19:56:33 2013 New Revision: 1449540 URL: http://svn.apache.org/r1449540 Log: Checkstyle: remove nested blocks (Testing git-svn setup on new machine)
Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationFilterFactory.java tomcat/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java tomcat/trunk/java/org/apache/catalina/ha/session/DeltaRequest.java tomcat/trunk/java/org/apache/catalina/manager/util/SessionUtils.java tomcat/trunk/java/org/apache/catalina/tribes/group/RpcChannel.java tomcat/trunk/java/org/apache/catalina/util/Base64.java tomcat/trunk/java/org/apache/catalina/util/DOMWriter.java Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationFilterFactory.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationFilterFactory.java?rev=1449540&r1=1449539&r2=1449540&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/ApplicationFilterFactory.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/ApplicationFilterFactory.java Sun Feb 24 19:56:33 2013 @@ -320,39 +320,32 @@ public final class ApplicationFilterFact */ private boolean matchDispatcher(FilterMap filterMap, DispatcherType type) { switch (type) { - case FORWARD : { + case FORWARD : if ((filterMap.getDispatcherMapping() & FilterMap.FORWARD) > 0) { return true; } break; - } - case INCLUDE : { + case INCLUDE : if ((filterMap.getDispatcherMapping() & FilterMap.INCLUDE) > 0) { return true; } break; - } - case REQUEST : { + case REQUEST : if ((filterMap.getDispatcherMapping() & FilterMap.REQUEST) > 0) { return true; } break; - } - case ERROR : { + case ERROR : if ((filterMap.getDispatcherMapping() & FilterMap.ERROR) > 0) { return true; } break; - } - case ASYNC : { + case ASYNC : if ((filterMap.getDispatcherMapping() & FilterMap.ASYNC) > 0) { return true; } break; - } } return false; } - - } Modified: tomcat/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java?rev=1449540&r1=1449539&r2=1449540&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/ClusterRuleSet.java Sun Feb 24 19:56:33 2013 @@ -106,57 +106,58 @@ public class ClusterRuleSet extends Rule String channelPrefix = prefix + "Channel/"; - { //channel properties - digester.addObjectCreate(channelPrefix + "Membership", - null, // MUST be specified in the element - "className"); - digester.addSetProperties(channelPrefix + "Membership"); - digester.addSetNext(channelPrefix + "Membership", - "setMembershipService", - "org.apache.catalina.tribes.MembershipService"); - - digester.addObjectCreate(channelPrefix + "Sender", - null, // MUST be specified in the element - "className"); - digester.addSetProperties(channelPrefix + "Sender"); - digester.addSetNext(channelPrefix + "Sender", - "setChannelSender", - "org.apache.catalina.tribes.ChannelSender"); - - digester.addObjectCreate(channelPrefix + "Sender/Transport", - null, // MUST be specified in the element - "className"); - digester.addSetProperties(channelPrefix + "Sender/Transport"); - digester.addSetNext(channelPrefix + "Sender/Transport", - "setTransport", - "org.apache.catalina.tribes.transport.MultiPointSender"); - - - digester.addObjectCreate(channelPrefix + "Receiver", - null, // MUST be specified in the element - "className"); - digester.addSetProperties(channelPrefix + "Receiver"); - digester.addSetNext(channelPrefix + "Receiver", - "setChannelReceiver", - "org.apache.catalina.tribes.ChannelReceiver"); - - digester.addObjectCreate(channelPrefix + "Interceptor", - null, // MUST be specified in the element - "className"); - digester.addSetProperties(channelPrefix + "Interceptor"); - digester.addSetNext(channelPrefix + "Interceptor", - "addInterceptor", - "org.apache.catalina.tribes.ChannelInterceptor"); - - - digester.addObjectCreate(channelPrefix + "Interceptor/Member", - null, // MUST be specified in the element - "className"); - digester.addSetProperties(channelPrefix + "Interceptor/Member"); - digester.addSetNext(channelPrefix + "Interceptor/Member", - "addStaticMember", - "org.apache.catalina.tribes.Member"); - } + + //channel properties + digester.addObjectCreate(channelPrefix + "Membership", + null, // MUST be specified in the element + "className"); + digester.addSetProperties(channelPrefix + "Membership"); + digester.addSetNext(channelPrefix + "Membership", + "setMembershipService", + "org.apache.catalina.tribes.MembershipService"); + + digester.addObjectCreate(channelPrefix + "Sender", + null, // MUST be specified in the element + "className"); + digester.addSetProperties(channelPrefix + "Sender"); + digester.addSetNext(channelPrefix + "Sender", + "setChannelSender", + "org.apache.catalina.tribes.ChannelSender"); + + digester.addObjectCreate(channelPrefix + "Sender/Transport", + null, // MUST be specified in the element + "className"); + digester.addSetProperties(channelPrefix + "Sender/Transport"); + digester.addSetNext(channelPrefix + "Sender/Transport", + "setTransport", + "org.apache.catalina.tribes.transport.MultiPointSender"); + + + digester.addObjectCreate(channelPrefix + "Receiver", + null, // MUST be specified in the element + "className"); + digester.addSetProperties(channelPrefix + "Receiver"); + digester.addSetNext(channelPrefix + "Receiver", + "setChannelReceiver", + "org.apache.catalina.tribes.ChannelReceiver"); + + digester.addObjectCreate(channelPrefix + "Interceptor", + null, // MUST be specified in the element + "className"); + digester.addSetProperties(channelPrefix + "Interceptor"); + digester.addSetNext(channelPrefix + "Interceptor", + "addInterceptor", + "org.apache.catalina.tribes.ChannelInterceptor"); + + + digester.addObjectCreate(channelPrefix + "Interceptor/Member", + null, // MUST be specified in the element + "className"); + digester.addSetProperties(channelPrefix + "Interceptor/Member"); + digester.addSetNext(channelPrefix + "Interceptor/Member", + "addStaticMember", + "org.apache.catalina.tribes.Member"); + digester.addObjectCreate(prefix + "Valve", null, // MUST be specified in the element Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=1449540&r1=1449539&r2=1449540&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Sun Feb 24 19:56:33 2013 @@ -1001,7 +1001,7 @@ public class DeltaManager extends Cluste case SessionMessage.EVT_SESSION_EXPIRED: case SessionMessage.EVT_SESSION_ACCESSED: case SessionMessage.EVT_SESSION_DELTA: - case SessionMessage.EVT_CHANGE_SESSION_ID: { + case SessionMessage.EVT_CHANGE_SESSION_ID: synchronized(receivedMessageQueue) { if(receiverQueue) { receivedMessageQueue.add(msg); @@ -1009,11 +1009,9 @@ public class DeltaManager extends Cluste } } break; - } - default: { + default: //we didn't queue, do nothing break; - } } //switch messageReceived(msg, msg.getAddress() != null ? (Member) msg.getAddress() : null); @@ -1273,46 +1271,36 @@ public class DeltaManager extends Cluste if (log.isDebugEnabled()) log.debug(sm.getString("deltaManager.receiveMessage.eventType",getName(), msg.getEventTypeString(), sender)); switch (msg.getEventType()) { - case SessionMessage.EVT_GET_ALL_SESSIONS: { + case SessionMessage.EVT_GET_ALL_SESSIONS: handleGET_ALL_SESSIONS(msg,sender); break; - } - case SessionMessage.EVT_ALL_SESSION_DATA: { + case SessionMessage.EVT_ALL_SESSION_DATA: handleALL_SESSION_DATA(msg,sender); break; - } - case SessionMessage.EVT_ALL_SESSION_TRANSFERCOMPLETE: { + case SessionMessage.EVT_ALL_SESSION_TRANSFERCOMPLETE: handleALL_SESSION_TRANSFERCOMPLETE(msg,sender); break; - } - case SessionMessage.EVT_SESSION_CREATED: { + case SessionMessage.EVT_SESSION_CREATED: handleSESSION_CREATED(msg,sender); break; - } - case SessionMessage.EVT_SESSION_EXPIRED: { + case SessionMessage.EVT_SESSION_EXPIRED: handleSESSION_EXPIRED(msg,sender); break; - } - case SessionMessage.EVT_SESSION_ACCESSED: { + case SessionMessage.EVT_SESSION_ACCESSED: handleSESSION_ACCESSED(msg,sender); break; - } - case SessionMessage.EVT_SESSION_DELTA: { + case SessionMessage.EVT_SESSION_DELTA: handleSESSION_DELTA(msg,sender); break; - } - case SessionMessage.EVT_CHANGE_SESSION_ID: { + case SessionMessage.EVT_CHANGE_SESSION_ID: handleCHANGE_SESSION_ID(msg,sender); break; - } - case SessionMessage.EVT_ALL_SESSION_NOCONTEXTMANAGER: { + case SessionMessage.EVT_ALL_SESSION_NOCONTEXTMANAGER: handleALL_SESSION_NOCONTEXTMANAGER(msg,sender); break; - } - default: { + default: //we didn't recognize the message type, do nothing break; - } } //switch } catch (Exception x) { log.error(sm.getString("deltaManager.receiveMessage.error",getName()), x); Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaRequest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaRequest.java?rev=1449540&r1=1449539&r2=1449540&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaRequest.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaRequest.java Sun Feb 24 19:56:33 2013 @@ -161,7 +161,7 @@ public class DeltaRequest implements Ext for ( int i=0; i<actions.size(); i++ ) { AttributeInfo info = actions.get(i); switch ( info.getType() ) { - case TYPE_ATTRIBUTE: { + case TYPE_ATTRIBUTE: if ( info.getAction() == ACTION_SET ) { if ( log.isTraceEnabled() ) log.trace("Session.setAttribute('"+info.getName()+"', '"+info.getValue()+"')"); session.setAttribute(info.getName(), info.getValue(),notifyListeners,false); @@ -171,18 +171,15 @@ public class DeltaRequest implements Ext } break; - }//case - case TYPE_ISNEW: { - if ( log.isTraceEnabled() ) log.trace("Session.setNew('"+info.getValue()+"')"); + case TYPE_ISNEW: + if ( log.isTraceEnabled() ) log.trace("Session.setNew('"+info.getValue()+"')"); session.setNew(((Boolean)info.getValue()).booleanValue(),false); break; - }//case - case TYPE_MAXINTERVAL: { + case TYPE_MAXINTERVAL: if ( log.isTraceEnabled() ) log.trace("Session.setMaxInactiveInterval('"+info.getValue()+"')"); session.setMaxInactiveInterval(((Integer)info.getValue()).intValue(),false); break; - }//case - case TYPE_PRINCIPAL: { + case TYPE_PRINCIPAL: Principal p = null; if ( info.getAction() == ACTION_SET ) { SerializablePrincipal sp = (SerializablePrincipal)info.getValue(); @@ -190,16 +187,15 @@ public class DeltaRequest implements Ext } session.setPrincipal(p,false); break; - }//case - case TYPE_AUTHTYPE: { + case TYPE_AUTHTYPE: String authType = null; if ( info.getAction() == ACTION_SET ) { authType = (String)info.getValue(); } session.setAuthType(authType,false); break; - }//case - default : throw new java.lang.IllegalArgumentException("Invalid attribute info type="+info); + default : + throw new java.lang.IllegalArgumentException("Invalid attribute info type="+info); }//switch }//for session.endAccess(); Modified: tomcat/trunk/java/org/apache/catalina/manager/util/SessionUtils.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/util/SessionUtils.java?rev=1449540&r1=1449539&r2=1449540&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/manager/util/SessionUtils.java (original) +++ tomcat/trunk/java/org/apache/catalina/manager/util/SessionUtils.java Sun Feb 24 19:56:33 2013 @@ -109,33 +109,31 @@ public class SessionUtils { // Tapestry 3.0: Engine stored in session under "org.apache.tapestry.engine:" + config.getServletName() // TODO: Tapestry 4+ - { - final List<Object> tapestryArray = new ArrayList<>(); - for (Enumeration<String> enumeration = in_session.getAttributeNames(); enumeration.hasMoreElements();) { - String name = enumeration.nextElement(); - if (name.indexOf("tapestry") > -1 && name.indexOf("engine") > -1 && null != in_session.getAttribute(name)) {//$NON-NLS-1$ //$NON-NLS-2$ - tapestryArray.add(in_session.getAttribute(name)); - } - } - if (tapestryArray.size() == 1) { - // found a potential Engine! Let's call getLocale() on it. - Object probableEngine = tapestryArray.get(0); - if (null != probableEngine) { - try { - Method readMethod = probableEngine.getClass().getMethod("getLocale", (Class<?>[])null);//$NON-NLS-1$ - if (null != readMethod) { - // Call the property getter and return the value - Object possibleLocale = readMethod.invoke(probableEngine, (Object[]) null); - if (null != possibleLocale && possibleLocale instanceof Locale) { - locale = (Locale) possibleLocale; - } + final List<Object> tapestryArray = new ArrayList<>(); + for (Enumeration<String> enumeration = in_session.getAttributeNames(); enumeration.hasMoreElements();) { + String name = enumeration.nextElement(); + if (name.indexOf("tapestry") > -1 && name.indexOf("engine") > -1 && null != in_session.getAttribute(name)) {//$NON-NLS-1$ //$NON-NLS-2$ + tapestryArray.add(in_session.getAttribute(name)); + } + } + if (tapestryArray.size() == 1) { + // found a potential Engine! Let's call getLocale() on it. + Object probableEngine = tapestryArray.get(0); + if (null != probableEngine) { + try { + Method readMethod = probableEngine.getClass().getMethod("getLocale", (Class<?>[])null);//$NON-NLS-1$ + if (null != readMethod) { + // Call the property getter and return the value + Object possibleLocale = readMethod.invoke(probableEngine, (Object[]) null); + if (null != possibleLocale && possibleLocale instanceof Locale) { + locale = (Locale) possibleLocale; } - } catch (Exception e) { - Throwable t = ExceptionUtils - .unwrapInvocationTargetException(e); - ExceptionUtils.handleThrowable(t); - // stay silent } + } catch (Exception e) { + Throwable t = ExceptionUtils + .unwrapInvocationTargetException(e); + ExceptionUtils.handleThrowable(t); + // stay silent } } } @@ -146,19 +144,17 @@ public class SessionUtils { // Last guess: iterate over all attributes, to find a Locale // If there is only one, consider it to be /the/ locale - { - final List<Object> localeArray = new ArrayList<>(); - for (Enumeration<String> enumeration = in_session.getAttributeNames(); enumeration.hasMoreElements();) { - String name = enumeration.nextElement(); - Object obj = in_session.getAttribute(name); - if (null != obj && obj instanceof Locale) { - localeArray.add(obj); - } - } - if (localeArray.size() == 1) { - locale = (Locale) localeArray.get(0); + final List<Object> localeArray = new ArrayList<>(); + for (Enumeration<String> enumeration = in_session.getAttributeNames(); enumeration.hasMoreElements();) { + String name = enumeration.nextElement(); + Object obj = in_session.getAttribute(name); + if (null != obj && obj instanceof Locale) { + localeArray.add(obj); } } + if (localeArray.size() == 1) { + locale = (Locale) localeArray.get(0); + } return locale; } catch (IllegalStateException ise) { @@ -210,19 +206,17 @@ public class SessionUtils { // Last guess: iterate over all attributes, to find a java.security.Principal or javax.security.auth.Subject // If there is only one, consider it to be /the/ user - { - final List<Object> principalArray = new ArrayList<>(); - for (Enumeration<String> enumeration = httpSession.getAttributeNames(); enumeration.hasMoreElements();) { - String name = enumeration.nextElement(); - Object obj = httpSession.getAttribute(name); - if (null != obj && (obj instanceof Principal || obj instanceof Subject)) { - principalArray.add(obj); - } - } - if (principalArray.size() == 1) { - user = principalArray.get(0); + final List<Object> principalArray = new ArrayList<>(); + for (Enumeration<String> enumeration = httpSession.getAttributeNames(); enumeration.hasMoreElements();) { + String name = enumeration.nextElement(); + Object obj = httpSession.getAttribute(name); + if (null != obj && (obj instanceof Principal || obj instanceof Subject)) { + principalArray.add(obj); } } + if (principalArray.size() == 1) { + user = principalArray.get(0); + } if (null != user) { return user; Modified: tomcat/trunk/java/org/apache/catalina/tribes/group/RpcChannel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/RpcChannel.java?rev=1449540&r1=1449539&r2=1449540&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/tribes/group/RpcChannel.java (original) +++ tomcat/trunk/java/org/apache/catalina/tribes/group/RpcChannel.java Sun Feb 24 19:56:33 2013 @@ -249,10 +249,8 @@ public class RpcChannel implements Chann case ALL_REPLY: return destcnt == responses.size(); case MAJORITY_REPLY: - { float perc = ((float)responses.size()) / ((float)destcnt); return perc >= 0.50f; - } case FIRST_REPLY: return responses.size()>0; default: Modified: tomcat/trunk/java/org/apache/catalina/util/Base64.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/Base64.java?rev=1449540&r1=1449539&r2=1449540&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/util/Base64.java (original) +++ tomcat/trunk/java/org/apache/catalina/util/Base64.java Sun Feb 24 19:56:33 2013 @@ -199,21 +199,19 @@ public final class Base64 int dataIndex = start; char[] decodedData = null; + // this sizes the output array properly - rlw + int lastData = end - start; + // ignore the '=' padding + while (base64Data[start+lastData-1] == PAD) { - // this sizes the output array properly - rlw - int lastData = end - start; - // ignore the '=' padding - while (base64Data[start+lastData-1] == PAD) - { - if (--lastData == 0) - { - return; - } - } - decodedDataCC.allocate(lastData - numberQuadruple, -1); - decodedDataCC.setEnd(lastData - numberQuadruple); - decodedData = decodedDataCC.getBuffer(); + if (--lastData == 0) + { + return; + } } + decodedDataCC.allocate(lastData - numberQuadruple, -1); + decodedDataCC.setEnd(lastData - numberQuadruple); + decodedData = decodedDataCC.getBuffer(); for (int i = 0; i < numberQuadruple; i++) { @@ -280,21 +278,19 @@ public final class Base64 int dataIndex = start; byte[] decodedData = null; + // this sizes the output array properly - rlw + int lastData = end - start; + // ignore the '=' padding + while (base64Data[start+lastData-1] == PAD) { - // this sizes the output array properly - rlw - int lastData = end - start; - // ignore the '=' padding - while (base64Data[start+lastData-1] == PAD) - { - if (--lastData == 0) - { - return; - } - } - decodedDataBC.allocate(lastData - numberQuadruple, -1); - decodedDataBC.setEnd(lastData - numberQuadruple); - decodedData = decodedDataBC.getBuffer(); + if (--lastData == 0) + { + return; + } } + decodedDataBC.allocate(lastData - numberQuadruple, -1); + decodedDataBC.setEnd(lastData - numberQuadruple); + decodedData = decodedDataBC.getBuffer(); for (int i = 0; i < numberQuadruple; i++) { Modified: tomcat/trunk/java/org/apache/catalina/util/DOMWriter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/DOMWriter.java?rev=1449540&r1=1449539&r2=1449540&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/util/DOMWriter.java (original) +++ tomcat/trunk/java/org/apache/catalina/util/DOMWriter.java Sun Feb 24 19:56:33 2013 @@ -63,7 +63,7 @@ public class DOMWriter { int type = node.getNodeType(); switch (type) { // print document - case Node.DOCUMENT_NODE: { + case Node.DOCUMENT_NODE: if (!canonical) { String Encoding = getWriterEncoding(); if (Encoding.equalsIgnoreCase("DEFAULT")) @@ -79,10 +79,9 @@ public class DOMWriter { print(((Document) node).getDocumentElement()); out.flush(); break; - } // print element with attributes - case Node.ELEMENT_NODE: { + case Node.ELEMENT_NODE: out.print('<'); out.print(node.getLocalName()); Attr attrs[] = sortAttributes(node.getAttributes()); @@ -96,36 +95,22 @@ public class DOMWriter { out.print('"'); } out.print('>'); - NodeList children = node.getChildNodes(); - if (children != null) { - int len = children.getLength(); - for (int i = 0; i < len; i++) { - print(children.item(i)); - } - } + printChildren(node); break; - } // handle entity reference nodes - case Node.ENTITY_REFERENCE_NODE: { + case Node.ENTITY_REFERENCE_NODE: if (canonical) { - NodeList children = node.getChildNodes(); - if (children != null) { - int len = children.getLength(); - for (int i = 0; i < len; i++) { - print(children.item(i)); - } - } + printChildren(node); } else { out.print('&'); out.print(node.getLocalName()); out.print(';'); } break; - } // print cdata sections - case Node.CDATA_SECTION_NODE: { + case Node.CDATA_SECTION_NODE: if (canonical) { out.print(normalize(node.getNodeValue())); } else { @@ -134,16 +119,14 @@ public class DOMWriter { out.print("]]>"); } break; - } // print text - case Node.TEXT_NODE: { + case Node.TEXT_NODE: out.print(normalize(node.getNodeValue())); break; - } // print processing instruction - case Node.PROCESSING_INSTRUCTION_NODE: { + case Node.PROCESSING_INSTRUCTION_NODE: out.print("<?"); out.print(node.getLocalName()); @@ -155,7 +138,6 @@ public class DOMWriter { out.print("?>"); break; } - } if (type == Node.ELEMENT_NODE) { out.print("</"); @@ -167,6 +149,18 @@ public class DOMWriter { } // print(Node) + + private void printChildren(Node node) { + NodeList children = node.getChildNodes(); + if (children != null) { + int len = children.getLength(); + for (int i = 0; i < len; i++) { + print(children.item(i)); + } + } + } + + /** Returns a sorted list of attributes. */ protected Attr[] sortAttributes(NamedNodeMap attrs) { if (attrs == null) { @@ -213,24 +207,20 @@ public class DOMWriter { for (int i = 0; i < len; i++) { char ch = s.charAt(i); switch (ch) { - case '<': { + case '<': str.append("<"); break; - } - case '>': { + case '>': str.append(">"); break; - } - case '&': { + case '&': str.append("&"); break; - } - case '"': { + case '"': str.append("""); break; - } case '\r': - case '\n': { + case '\n': if (canonical) { str.append("&#"); str.append(Integer.toString(ch)); @@ -238,11 +228,9 @@ public class DOMWriter { break; } // else, default append char - } //$FALL-THROUGH$ - default: { + default: str.append(ch); - } } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org