Author: markt
Date: Tue Aug 23 11:41:56 2011
New Revision: 1160640
URL: http://svn.apache.org/viewvc?rev=1160640&view=rev
Log:
Clean-up and re-factoring to reduce duplication
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Aug 23 11:41:56 2011
@@ -1 +1 @@
-/tomcat/trunk:1156171,1156276,1156304,1156530,1156602,1157015,1157018,1157151,1157198,1157204,1157810,1157832,1157834,1157847,1157908,1157939,1158155,1158160,1158176,1158195,1158198-1158199,1158227,1158331,1158334-1158335,1160347,1160592
+/tomcat/trunk:1156171,1156276,1156304,1156530,1156602,1157015,1157018,1157151,1157198,1157204,1157810,1157832,1157834,1157847,1157908,1157939,1158155,1158160,1158176,1158195,1158198-1158199,1158227,1158331,1158334-1158335,1160347,1160592,1160611,1160619,1160626
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1160640&r1=1160639&r2=1160640&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
Tue Aug 23 11:41:56 2011
@@ -29,8 +29,10 @@ import org.apache.coyote.AbstractProcess
import org.apache.coyote.ActionCode;
import org.apache.coyote.AsyncContextCallback;
import org.apache.coyote.InputBuffer;
+import org.apache.coyote.OutputBuffer;
import org.apache.coyote.Request;
import org.apache.coyote.RequestInfo;
+import org.apache.coyote.Response;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.ByteChunk;
@@ -146,9 +148,9 @@ public abstract class AbstractAjpProcess
/**
- * Message used for response header composition.
+ * Message used for response composition.
*/
- protected AjpMessage responseHeaderMessage = null;
+ protected AjpMessage responseMessage = null;
/**
@@ -234,7 +236,7 @@ public abstract class AbstractAjpProcess
request.setInputBuffer(new SocketInputBuffer());
requestHeaderMessage = new AjpMessage(packetSize);
- responseHeaderMessage = new AjpMessage(packetSize);
+ responseMessage = new AjpMessage(packetSize);
bodyMessage = new AjpMessage(packetSize);
// Set the getBody message buffer
@@ -458,11 +460,6 @@ public abstract class AbstractAjpProcess
}
}
- // Methods called by action()
- protected abstract void actionInternal(ActionCode actionCode, Object
param);
- protected abstract void flush(boolean tbd) throws IOException;
- protected abstract void finish() throws IOException;
-
@Override
public SocketState asyncDispatch(SocketStatus status) {
@@ -506,12 +503,6 @@ public abstract class AbstractAjpProcess
@Override
- protected final boolean isComet() {
- // AJP does not support Comet
- return false;
- }
-
- @Override
public SocketState event(SocketStatus status) throws IOException {
// Should never reach this code but in case we do...
throw new IOException(
@@ -541,8 +532,29 @@ public abstract class AbstractAjpProcess
byteCount = 0;
}
+
// ------------------------------------------------------ Protected Methods
+ // Methods called by action()
+ protected abstract void actionInternal(ActionCode actionCode, Object
param);
+ protected abstract void flush(boolean tbd) throws IOException;
+ protected abstract void finish() throws IOException;
+
+ // Methods called by prepareResponse()
+ protected abstract void output(byte[] src, int offset, int length)
+ throws IOException;
+
+ // Methods used by SocketInputBuffer
+ protected abstract boolean receive() throws IOException;
+ protected abstract boolean refillReadBuffer() throws IOException;
+
+
+ @Override
+ protected final boolean isComet() {
+ // AJP does not support Comet
+ return false;
+ }
+
/**
* After reading the request headers, we have to setup the request filters.
@@ -855,16 +867,15 @@ public abstract class AbstractAjpProcess
* When committing the response, we have to validate the set of headers, as
* well as setup the response filters.
*/
- protected void prepareResponse()
- throws IOException {
+ protected void prepareResponse() throws IOException {
response.setCommitted(true);
- responseHeaderMessage.reset();
- responseHeaderMessage.appendByte(Constants.JK_AJP13_SEND_HEADERS);
+ responseMessage.reset();
+ responseMessage.appendByte(Constants.JK_AJP13_SEND_HEADERS);
// HTTP header contents
- responseHeaderMessage.appendInt(response.getStatus());
+ responseMessage.appendInt(response.getStatus());
String message = null;
if (org.apache.coyote.Constants.USE_CUSTOM_STATUS_MSG_IN_HEADER &&
HttpMessages.isSafeInHttpHeader(response.getMessage())) {
@@ -878,7 +889,7 @@ public abstract class AbstractAjpProcess
message = Integer.toString(response.getStatus());
}
tmpMB.setString(message);
- responseHeaderMessage.appendBytes(tmpMB);
+ responseMessage.appendBytes(tmpMB);
// Special headers
MimeHeaders headers = response.getMimeHeaders();
@@ -897,30 +908,26 @@ public abstract class AbstractAjpProcess
// Other headers
int numHeaders = headers.size();
- responseHeaderMessage.appendInt(numHeaders);
+ responseMessage.appendInt(numHeaders);
for (int i = 0; i < numHeaders; i++) {
MessageBytes hN = headers.getName(i);
int hC = Constants.getResponseAjpIndex(hN.toString());
if (hC > 0) {
- responseHeaderMessage.appendInt(hC);
+ responseMessage.appendInt(hC);
}
else {
- responseHeaderMessage.appendBytes(hN);
+ responseMessage.appendBytes(hN);
}
MessageBytes hV=headers.getValue(i);
- responseHeaderMessage.appendBytes(hV);
+ responseMessage.appendBytes(hV);
}
// Write to buffer
- responseHeaderMessage.end();
- output(responseHeaderMessage.getBuffer(), 0,
- responseHeaderMessage.getLen());
+ responseMessage.end();
+ output(responseMessage.getBuffer(), 0,
+ responseMessage.getLen());
}
- // Methods called by prepareResponse()
- protected abstract void output(byte[] src, int offset, int length)
- throws IOException;
-
// ------------------------------------- InputStreamInputBuffer Inner Class
@@ -929,8 +936,7 @@ public abstract class AbstractAjpProcess
* This class is an input buffer which will read its data from an input
* stream.
*/
- protected class SocketInputBuffer
- implements InputBuffer {
+ protected class SocketInputBuffer implements InputBuffer {
/**
@@ -962,7 +968,59 @@ public abstract class AbstractAjpProcess
}
- // Methods used by SocketInputBuffer
- protected abstract boolean receive() throws IOException;
- protected abstract boolean refillReadBuffer() throws IOException;
+
+ // ----------------------------------- OutputStreamOutputBuffer Inner Class
+
+ /**
+ * This class is an output buffer which will write data to an output
+ * stream.
+ */
+ protected class SocketOutputBuffer implements OutputBuffer {
+
+ /**
+ * Write chunk.
+ */
+ @Override
+ public int doWrite(ByteChunk chunk, Response res)
+ throws IOException {
+
+ if (!response.isCommitted()) {
+ // Validate and write response headers
+ try {
+ prepareResponse();
+ } catch (IOException e) {
+ // Set error flag
+ error = true;
+ }
+ }
+
+ int len = chunk.getLength();
+ // 4 - hardcoded, byte[] marshaling overhead
+ // Adjust allowed size if packetSize != default
(Constants.MAX_PACKET_SIZE)
+ int chunkSize = Constants.MAX_SEND_SIZE + packetSize -
Constants.MAX_PACKET_SIZE;
+ int off = 0;
+ while (len > 0) {
+ int thisTime = len;
+ if (thisTime > chunkSize) {
+ thisTime = chunkSize;
+ }
+ len -= thisTime;
+ responseMessage.reset();
+ responseMessage.appendByte(Constants.JK_AJP13_SEND_BODY_CHUNK);
+ responseMessage.appendBytes(chunk.getBytes(),
chunk.getOffset() + off, thisTime);
+ responseMessage.end();
+ output(responseMessage.getBuffer(), 0,
responseMessage.getLen());
+
+ off += thisTime;
+ }
+
+ byteCount += chunk.getLength();
+ return chunk.getLength();
+ }
+
+ @Override
+ public long getBytesWritten() {
+ return byteCount;
+ }
+ }
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1160640&r1=1160639&r2=1160640&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Tue
Aug 23 11:41:56 2011
@@ -21,15 +21,12 @@ import java.io.InterruptedIOException;
import java.nio.ByteBuffer;
import org.apache.coyote.ActionCode;
-import org.apache.coyote.OutputBuffer;
import org.apache.coyote.RequestInfo;
-import org.apache.coyote.Response;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.jni.Socket;
import org.apache.tomcat.jni.Status;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.AprEndpoint;
import org.apache.tomcat.util.net.SocketStatus;
@@ -524,68 +521,4 @@ public class AjpAprProcessor extends Abs
}
}
}
-
-
- // ----------------------------------- OutputStreamOutputBuffer Inner Class
-
-
- /**
- * This class is an output buffer which will write data to an output
- * stream.
- */
- protected class SocketOutputBuffer
- implements OutputBuffer {
-
-
- /**
- * Write chunk.
- */
- @Override
- public int doWrite(ByteChunk chunk, Response res)
- throws IOException {
-
- if (!response.isCommitted()) {
- // Validate and write response headers
- try {
- prepareResponse();
- } catch (IOException e) {
- // Set error flag
- error = true;
- }
- }
-
- int len = chunk.getLength();
- // 4 - hardcoded, byte[] marshaling overhead
- // Adjust allowed size if packetSize != default
(Constants.MAX_PACKET_SIZE)
- int chunkSize = Constants.MAX_SEND_SIZE + packetSize -
Constants.MAX_PACKET_SIZE;
- int off = 0;
- while (len > 0) {
- int thisTime = len;
- if (thisTime > chunkSize) {
- thisTime = chunkSize;
- }
- len -= thisTime;
- if (outputBuffer.position() + thisTime +
- Constants.H_SIZE + 4 > outputBuffer.capacity()) {
- flush(false);
- }
- outputBuffer.put((byte) 0x41);
- outputBuffer.put((byte) 0x42);
- outputBuffer.putShort((short) (thisTime + 4));
- outputBuffer.put(Constants.JK_AJP13_SEND_BODY_CHUNK);
- outputBuffer.putShort((short) thisTime);
- outputBuffer.put(chunk.getBytes(), chunk.getOffset() + off,
thisTime);
- outputBuffer.put((byte) 0x00);
- off += thisTime;
- }
-
- byteCount += chunk.getLength();
- return chunk.getLength();
- }
-
- @Override
- public long getBytesWritten() {
- return byteCount;
- }
- }
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1160640&r1=1160639&r2=1160640&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Tue
Aug 23 11:41:56 2011
@@ -23,13 +23,10 @@ import java.nio.ByteBuffer;
import java.nio.channels.Selector;
import org.apache.coyote.ActionCode;
-import org.apache.coyote.OutputBuffer;
import org.apache.coyote.RequestInfo;
-import org.apache.coyote.Response;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.NioChannel;
import org.apache.tomcat.util.net.NioEndpoint;
@@ -499,61 +496,4 @@ public class AjpNioProcessor extends Abs
output(flushMessageArray, 0, flushMessageArray.length);
}
}
-
-
- // ----------------------------------- OutputStreamOutputBuffer Inner Class
-
-
- /**
- * This class is an output buffer which will write data to an output
- * stream.
- */
- protected class SocketOutputBuffer implements OutputBuffer {
-
- /**
- * Write chunk.
- */
- @Override
- public int doWrite(ByteChunk chunk, Response res)
- throws IOException {
-
- if (!response.isCommitted()) {
- // Validate and write response headers
- try {
- prepareResponse();
- } catch (IOException e) {
- // Set error flag
- error = true;
- }
- }
-
- int len = chunk.getLength();
- // 4 - hardcoded, byte[] marshaling overhead
- // Adjust allowed size if packetSize != default
(Constants.MAX_PACKET_SIZE)
- int chunkSize = Constants.MAX_SEND_SIZE + packetSize -
Constants.MAX_PACKET_SIZE;
- int off = 0;
- while (len > 0) {
- int thisTime = len;
- if (thisTime > chunkSize) {
- thisTime = chunkSize;
- }
- len -= thisTime;
- responseHeaderMessage.reset();
-
responseHeaderMessage.appendByte(Constants.JK_AJP13_SEND_BODY_CHUNK);
- responseHeaderMessage.appendBytes(chunk.getBytes(),
chunk.getOffset() + off, thisTime);
- responseHeaderMessage.end();
- output(responseHeaderMessage.getBuffer(), 0,
responseHeaderMessage.getLen());
-
- off += thisTime;
- }
-
- byteCount += chunk.getLength();
- return chunk.getLength();
- }
-
- @Override
- public long getBytesWritten() {
- return byteCount;
- }
- }
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1160640&r1=1160639&r2=1160640&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Tue Aug
23 11:41:56 2011
@@ -23,13 +23,10 @@ import java.io.OutputStream;
import java.net.Socket;
import org.apache.coyote.ActionCode;
-import org.apache.coyote.OutputBuffer;
import org.apache.coyote.RequestInfo;
-import org.apache.coyote.Response;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.JIoEndpoint;
import org.apache.tomcat.util.net.SocketStatus;
@@ -448,61 +445,4 @@ public class AjpProcessor extends Abstra
output.write(flushMessageArray);
}
}
-
-
- // ----------------------------------- OutputStreamOutputBuffer Inner Class
-
-
- /**
- * This class is an output buffer which will write data to an output
- * stream.
- */
- protected class SocketOutputBuffer implements OutputBuffer {
-
- /**
- * Write chunk.
- */
- @Override
- public int doWrite(ByteChunk chunk, Response res)
- throws IOException {
-
- if (!response.isCommitted()) {
- // Validate and write response headers
- try {
- prepareResponse();
- } catch (IOException e) {
- // Set error flag
- error = true;
- }
- }
-
- int len = chunk.getLength();
- // 4 - hardcoded, byte[] marshaling overhead
- // Adjust allowed size if packetSize != default
(Constants.MAX_PACKET_SIZE)
- int chunkSize = Constants.MAX_SEND_SIZE + packetSize -
Constants.MAX_PACKET_SIZE;
- int off = 0;
- while (len > 0) {
- int thisTime = len;
- if (thisTime > chunkSize) {
- thisTime = chunkSize;
- }
- len -= thisTime;
- responseHeaderMessage.reset();
-
responseHeaderMessage.appendByte(Constants.JK_AJP13_SEND_BODY_CHUNK);
- responseHeaderMessage.appendBytes(chunk.getBytes(),
chunk.getOffset() + off, thisTime);
- responseHeaderMessage.end();
- output.write(responseHeaderMessage.getBuffer(), 0,
responseHeaderMessage.getLen());
-
- off += thisTime;
- }
-
- byteCount += chunk.getLength();
- return chunk.getLength();
- }
-
- @Override
- public long getBytesWritten() {
- return byteCount;
- }
- }
}
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=1160640&r1=1160639&r2=1160640&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Aug 23 11:41:56 2011
@@ -110,7 +110,8 @@
(markt)
</fix>
<scode>
- Code clean-up in the AJP processor implementations. (markt)
+ Code clean-up and re-factoring to reduce duplicate code in the AJP
+ processor implementations. (markt)
</scode>
</changelog>
</subsection>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]