JBoss Remoting SVN: r4027 - remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-19 00:38:03 -0400 (Sat, 19 Apr 2008)
New Revision: 4027
Modified:
remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java
Log:
Fix an unfinished refactor
Modified: remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java
===================================================================
--- remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java 2008-04-19 04:24:59 UTC (rev 4026)
+++ remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java 2008-04-19 04:38:03 UTC (rev 4027)
@@ -19,6 +19,7 @@
import org.jboss.cx.remoting.util.AbstractOutputStreamByteMessageOutput;
import org.jboss.cx.remoting.util.IoUtil;
import org.jboss.cx.remoting.util.NamingThreadFactory;
+import org.jboss.cx.remoting.util.InputStreamByteMessageInput;
/**
*
@@ -178,7 +179,7 @@
}
final InputStream inputStream = httpConnection.getInputStream();
try {
- channelContext.processInboundMessage(INIT_ME);
+ channelContext.processInboundMessage(new InputStreamByteMessageInput(inputStream, -1));
} finally {
IoUtil.closeSafely(inputStream);
}
17 years, 6 months
JBoss Remoting SVN: r4025 - in remoting3/trunk: jrpp/src/main/java/org/jboss/cx/remoting/jrpp and 1 other directories.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-19 00:24:07 -0400 (Sat, 19 Apr 2008)
New Revision: 4025
Added:
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericClientIdentifier.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericIdentifier.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericRequestIdentifier.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericServiceIdentifier.java
remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericStreamIdentifier.java
Removed:
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppClientIdentifier.java
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppRequestIdentifier.java
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppServiceIdentifier.java
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppStreamIdentifier.java
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppSubChannelIdentifier.java
Modified:
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppConnection.java
Log:
Make the numeric identifier system generally available
Copied: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericClientIdentifier.java (from rev 4023, remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppClientIdentifier.java)
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericClientIdentifier.java (rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericClientIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -0,0 +1,21 @@
+package org.jboss.cx.remoting.spi.protocol;
+
+/**
+ *
+ */
+@SuppressWarnings ({"EqualsAndHashcode"})
+public final class NumericClientIdentifier extends NumericIdentifier implements ClientIdentifier {
+
+ private static final long serialVersionUID = 1L;
+
+ public NumericClientIdentifier() {
+ }
+
+ public NumericClientIdentifier(final boolean client, final int id) {
+ super(client, id);
+ }
+
+ public boolean equals(Object obj) {
+ return obj instanceof NumericClientIdentifier && super.equals(obj);
+ }
+}
Copied: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericIdentifier.java (from rev 4023, remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppSubChannelIdentifier.java)
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericIdentifier.java (rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -0,0 +1,52 @@
+package org.jboss.cx.remoting.spi.protocol;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+/**
+ *
+ */
+public abstract class NumericIdentifier implements Externalizable {
+
+ private static final long serialVersionUID = 1L;
+
+ private /*final*/ boolean client;
+ private /*final*/ int id;
+
+ protected NumericIdentifier() {
+ }
+
+ protected NumericIdentifier(final boolean client, final int id) {
+ if (id < 0) {
+ throw new IllegalArgumentException("id must be >= 0");
+ }
+ this.client = client;
+ this.id = id;
+ }
+
+ public final void writeExternal(ObjectOutput out) throws IOException {
+ out.writeInt(id << 1 | (client ? 0 : 1));
+ }
+
+ public final void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ int i = in.readInt();
+ id = i >>> 1;
+ client = (i & 1) == 0;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public boolean equals(Object obj) {
+ if (!(obj instanceof NumericIdentifier)) return false;
+ NumericIdentifier other = (NumericIdentifier) obj;
+ return other.id == id && other.client == client;
+ }
+
+ public int hashCode() {
+ return id << 1 | (client ? 0 : 1);
+ }
+}
Copied: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericRequestIdentifier.java (from rev 4023, remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppRequestIdentifier.java)
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericRequestIdentifier.java (rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericRequestIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -0,0 +1,21 @@
+package org.jboss.cx.remoting.spi.protocol;
+
+/**
+ *
+ */
+@SuppressWarnings ({"EqualsAndHashcode"})
+public final class NumericRequestIdentifier extends NumericIdentifier implements RequestIdentifier {
+
+ private static final long serialVersionUID = 1L;
+
+ public NumericRequestIdentifier() {
+ }
+
+ public NumericRequestIdentifier(final boolean client, final int id) {
+ super(client, id);
+ }
+
+ public boolean equals(Object obj) {
+ return obj instanceof NumericRequestIdentifier && super.equals(obj);
+ }
+}
Copied: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericServiceIdentifier.java (from rev 4023, remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppServiceIdentifier.java)
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericServiceIdentifier.java (rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericServiceIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -0,0 +1,21 @@
+package org.jboss.cx.remoting.spi.protocol;
+
+/**
+ *
+ */
+@SuppressWarnings ({"EqualsAndHashcode"})
+public final class NumericServiceIdentifier extends NumericIdentifier implements ServiceIdentifier {
+
+ private static final long serialVersionUID = 1L;
+
+ public NumericServiceIdentifier() {
+ }
+
+ public NumericServiceIdentifier(final boolean client, final int id) {
+ super(client, id);
+ }
+
+ public boolean equals(Object obj) {
+ return obj instanceof NumericServiceIdentifier && super.equals(obj);
+ }
+}
Copied: remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericStreamIdentifier.java (from rev 4023, remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppStreamIdentifier.java)
===================================================================
--- remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericStreamIdentifier.java (rev 0)
+++ remoting3/trunk/api/src/main/java/org/jboss/cx/remoting/spi/protocol/NumericStreamIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -0,0 +1,21 @@
+package org.jboss.cx.remoting.spi.protocol;
+
+/**
+ *
+ */
+@SuppressWarnings ({"EqualsAndHashcode"})
+public final class NumericStreamIdentifier extends NumericIdentifier implements StreamIdentifier {
+
+ private static final long serialVersionUID = 1L;
+
+ public NumericStreamIdentifier() {
+ }
+
+ public NumericStreamIdentifier(final boolean client, final int id) {
+ super(client, id);
+ }
+
+ public boolean equals(Object obj) {
+ return obj instanceof NumericStreamIdentifier && super.equals(obj);
+ }
+}
Modified: remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppConnection.java
===================================================================
--- remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppConnection.java 2008-04-19 04:19:02 UTC (rev 4024)
+++ remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppConnection.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -20,10 +20,10 @@
import org.apache.mina.handler.multiton.SingleSessionIoHandler;
import org.jboss.cx.remoting.CommonKeys;
import org.jboss.cx.remoting.RemoteExecutionException;
-import org.jboss.cx.remoting.jrpp.id.JrppClientIdentifier;
-import org.jboss.cx.remoting.jrpp.id.JrppRequestIdentifier;
-import org.jboss.cx.remoting.jrpp.id.JrppServiceIdentifier;
-import org.jboss.cx.remoting.jrpp.id.JrppStreamIdentifier;
+import org.jboss.cx.remoting.spi.protocol.NumericClientIdentifier;
+import org.jboss.cx.remoting.spi.protocol.NumericRequestIdentifier;
+import org.jboss.cx.remoting.spi.protocol.NumericServiceIdentifier;
+import org.jboss.cx.remoting.spi.protocol.NumericStreamIdentifier;
import org.jboss.cx.remoting.jrpp.mina.IoBufferByteMessageInput;
import org.jboss.cx.remoting.jrpp.mina.IoBufferByteMessageOutput;
import org.jboss.cx.remoting.log.Logger;
@@ -160,8 +160,8 @@
ioSession.setAttribute(JRPP_CONNECTION, this);
this.ioSession = ioSession;
client = true;
- remoteRootClientIdentifier = new JrppClientIdentifier(false, 0);
- localRootClientIdentifier = new JrppClientIdentifier(true, 0);
+ remoteRootClientIdentifier = new NumericClientIdentifier(false, 0);
+ localRootClientIdentifier = new NumericClientIdentifier(true, 0);
} finally {
state.releaseExclusive();
}
@@ -176,8 +176,8 @@
ioSession.setAttribute(JRPP_CONNECTION, this);
this.ioSession = ioSession;
client = false;
- remoteRootClientIdentifier = new JrppClientIdentifier(true, 0);
- localRootClientIdentifier = new JrppClientIdentifier(false, 0);
+ remoteRootClientIdentifier = new NumericClientIdentifier(true, 0);
+ localRootClientIdentifier = new NumericClientIdentifier(false, 0);
} finally {
state.releaseExclusive();
}
@@ -418,36 +418,36 @@
}
}
- private JrppClientIdentifier getNewContextIdentifier() {
+ private NumericClientIdentifier getNewContextIdentifier() {
for (;;) {
- final JrppClientIdentifier contextIdentifier = new JrppClientIdentifier(client, contextIdSequence.getAndIncrement());
+ final NumericClientIdentifier contextIdentifier = new NumericClientIdentifier(client, contextIdSequence.getAndIncrement());
if (liveClientSet.add(contextIdentifier)) {
return contextIdentifier;
}
}
}
- private JrppRequestIdentifier getNewRequestIdentifier() {
+ private NumericRequestIdentifier getNewRequestIdentifier() {
for (;;) {
- final JrppRequestIdentifier requestIdentifier = new JrppRequestIdentifier(client, requestIdSequence.getAndIncrement());
+ final NumericRequestIdentifier requestIdentifier = new NumericRequestIdentifier(client, requestIdSequence.getAndIncrement());
if (liveRequestSet.add(requestIdentifier)) {
return requestIdentifier;
}
}
}
- private JrppStreamIdentifier getNewStreamIdentifier() {
+ private NumericStreamIdentifier getNewStreamIdentifier() {
for (;;) {
- final JrppStreamIdentifier streamIdentifier = new JrppStreamIdentifier(client, streamIdSequence.getAndIncrement());
+ final NumericStreamIdentifier streamIdentifier = new NumericStreamIdentifier(client, streamIdSequence.getAndIncrement());
if (liveStreamSet.add(streamIdentifier)) {
return streamIdentifier;
}
}
}
- private JrppServiceIdentifier getNewServiceIdentifier() {
+ private NumericServiceIdentifier getNewServiceIdentifier() {
for (;;) {
- final JrppServiceIdentifier serviceIdentifier = new JrppServiceIdentifier(client, serviceIdSequence.getAndIncrement());
+ final NumericServiceIdentifier serviceIdentifier = new NumericServiceIdentifier(client, serviceIdSequence.getAndIncrement());
if (liveServiceSet.add(serviceIdentifier)) {
return serviceIdentifier;
}
Deleted: remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppClientIdentifier.java
===================================================================
--- remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppClientIdentifier.java 2008-04-19 04:19:02 UTC (rev 4024)
+++ remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppClientIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -1,23 +0,0 @@
-package org.jboss.cx.remoting.jrpp.id;
-
-import org.jboss.cx.remoting.spi.protocol.ClientIdentifier;
-
-/**
- *
- */
-@SuppressWarnings ({"EqualsAndHashcode"})
-public final class JrppClientIdentifier extends JrppSubChannelIdentifier implements ClientIdentifier {
-
- private static final long serialVersionUID = 1L;
-
- public JrppClientIdentifier() {
- }
-
- public JrppClientIdentifier(final boolean client, final int id) {
- super(client, id);
- }
-
- public boolean equals(Object obj) {
- return obj instanceof JrppClientIdentifier && super.equals(obj);
- }
-}
Deleted: remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppRequestIdentifier.java
===================================================================
--- remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppRequestIdentifier.java 2008-04-19 04:19:02 UTC (rev 4024)
+++ remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppRequestIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -1,23 +0,0 @@
-package org.jboss.cx.remoting.jrpp.id;
-
-import org.jboss.cx.remoting.spi.protocol.RequestIdentifier;
-
-/**
- *
- */
-@SuppressWarnings ({"EqualsAndHashcode"})
-public final class JrppRequestIdentifier extends JrppSubChannelIdentifier implements RequestIdentifier {
-
- private static final long serialVersionUID = 1L;
-
- public JrppRequestIdentifier() {
- }
-
- public JrppRequestIdentifier(final boolean client, final int id) {
- super(client, id);
- }
-
- public boolean equals(Object obj) {
- return obj instanceof JrppRequestIdentifier && super.equals(obj);
- }
-}
Deleted: remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppServiceIdentifier.java
===================================================================
--- remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppServiceIdentifier.java 2008-04-19 04:19:02 UTC (rev 4024)
+++ remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppServiceIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -1,23 +0,0 @@
-package org.jboss.cx.remoting.jrpp.id;
-
-import org.jboss.cx.remoting.spi.protocol.ServiceIdentifier;
-
-/**
- *
- */
-@SuppressWarnings ({"EqualsAndHashcode"})
-public final class JrppServiceIdentifier extends JrppSubChannelIdentifier implements ServiceIdentifier {
-
- private static final long serialVersionUID = 1L;
-
- public JrppServiceIdentifier() {
- }
-
- public JrppServiceIdentifier(final boolean client, final int id) {
- super(client, id);
- }
-
- public boolean equals(Object obj) {
- return obj instanceof JrppServiceIdentifier && super.equals(obj);
- }
-}
Deleted: remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppStreamIdentifier.java
===================================================================
--- remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppStreamIdentifier.java 2008-04-19 04:19:02 UTC (rev 4024)
+++ remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppStreamIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -1,23 +0,0 @@
-package org.jboss.cx.remoting.jrpp.id;
-
-import org.jboss.cx.remoting.spi.protocol.StreamIdentifier;
-
-/**
- *
- */
-@SuppressWarnings ({"EqualsAndHashcode"})
-public final class JrppStreamIdentifier extends JrppSubChannelIdentifier implements StreamIdentifier {
-
- private static final long serialVersionUID = 1L;
-
- public JrppStreamIdentifier() {
- }
-
- public JrppStreamIdentifier(final boolean client, final int id) {
- super(client, id);
- }
-
- public boolean equals(Object obj) {
- return obj instanceof JrppStreamIdentifier && super.equals(obj);
- }
-}
Deleted: remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppSubChannelIdentifier.java
===================================================================
--- remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppSubChannelIdentifier.java 2008-04-19 04:19:02 UTC (rev 4024)
+++ remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/id/JrppSubChannelIdentifier.java 2008-04-19 04:24:07 UTC (rev 4025)
@@ -1,52 +0,0 @@
-package org.jboss.cx.remoting.jrpp.id;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- *
- */
-public abstract class JrppSubChannelIdentifier implements Externalizable {
-
- private static final long serialVersionUID = 1L;
-
- private /*final*/ boolean client;
- private /*final*/ int id;
-
- protected JrppSubChannelIdentifier() {
- }
-
- protected JrppSubChannelIdentifier(final boolean client, final int id) {
- if (id < 0) {
- throw new IllegalArgumentException("id must be >= 0");
- }
- this.client = client;
- this.id = id;
- }
-
- public final void writeExternal(ObjectOutput out) throws IOException {
- out.writeInt(id << 1 | (client ? 0 : 1));
- }
-
- public final void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- int i = in.readInt();
- id = i >>> 1;
- client = (i & 1) == 0;
- }
-
- public int getId() {
- return id;
- }
-
- public boolean equals(Object obj) {
- if (!(obj instanceof JrppSubChannelIdentifier)) return false;
- JrppSubChannelIdentifier other = (JrppSubChannelIdentifier) obj;
- return other.id == id && other.client == client;
- }
-
- public int hashCode() {
- return id << 1 | (client ? 0 : 1);
- }
-}
17 years, 6 months
JBoss Remoting SVN: r4024 - in remoting3/trunk: http-se6/src/main/java/org/jboss/cx/remoting/http/se6 and 1 other directories.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-19 00:19:02 -0400 (Sat, 19 Apr 2008)
New Revision: 4024
Added:
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpMessageWriter.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpMessageWriter.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpChannelContext.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpServerContext.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpSessionContext.java
Removed:
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/OutputAction.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/
Modified:
remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java
remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpChannel.java
Log:
More cleanup in the HTTP area
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpChannel.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpChannel.java 2008-04-19 03:58:16 UTC (rev 4023)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpChannel.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -1,12 +1,11 @@
package org.jboss.cx.remoting.http;
-import org.jboss.cx.remoting.http.spi.HttpChannel;
-import org.jboss.cx.remoting.http.spi.RemotingHttpChannelContext;
+import org.jboss.cx.remoting.http.RemotingHttpChannelContext;
/**
*
*/
-public abstract class AbstractHttpChannel implements HttpChannel {
+public abstract class AbstractHttpChannel {
protected AbstractHttpChannel() {
}
Copied: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpMessageWriter.java (from rev 4023, remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/AbstractOutgoingHttpMessage.java)
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpMessageWriter.java (rev 0)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpMessageWriter.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -0,0 +1,8 @@
+package org.jboss.cx.remoting.http;
+
+/**
+ *
+ */
+public abstract class AbstractHttpMessageWriter implements HttpMessageWriter {
+
+}
Copied: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpMessageWriter.java (from rev 4023, remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/OutgoingHttpMessage.java)
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpMessageWriter.java (rev 0)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpMessageWriter.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -0,0 +1,11 @@
+package org.jboss.cx.remoting.http;
+
+import java.io.IOException;
+import org.jboss.cx.remoting.util.ByteMessageOutput;
+
+/**
+ *
+ */
+public interface HttpMessageWriter {
+ void writeMessageData(ByteMessageOutput byteOutput) throws IOException;
+}
Deleted: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/OutputAction.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/OutputAction.java 2008-04-19 03:58:16 UTC (rev 4023)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/OutputAction.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -1,11 +0,0 @@
-package org.jboss.cx.remoting.http;
-
-import org.jboss.cx.remoting.util.ByteMessageOutput;
-import java.io.IOException;
-
-/**
- *
- */
-public interface OutputAction {
- void run(ByteMessageOutput target) throws IOException;
-}
Copied: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpChannelContext.java (from rev 4023, remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpChannelContext.java)
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpChannelContext.java (rev 0)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpChannelContext.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -0,0 +1,25 @@
+package org.jboss.cx.remoting.http;
+
+import org.jboss.cx.remoting.util.ByteMessageInput;
+
+/**
+ *
+ */
+public interface RemotingHttpChannelContext {
+ /**
+ * Process an HTTP message that has arrived.
+ *
+ * @param input the source of the message data
+ */
+ void processInboundMessage(ByteMessageInput input);
+
+ /**
+ * Wait for an outgoing HTTP message to become available, up to a certain time limit. If no message is available
+ * within the specified time limit, or if the thread is interrupted before a message could become available, return
+ * an empty message.
+ *
+ * @param millis the amount of time to wait in millseconds, {@code 0} to not wait, or {@code -1} to wait indefinitely.
+ * @return an outgoing HTTP message
+ */
+ HttpMessageWriter waitForOutgoingHttpMessage(int millis);
+}
Copied: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpServerContext.java (from rev 4023, remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java)
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpServerContext.java (rev 0)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpServerContext.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -0,0 +1,10 @@
+package org.jboss.cx.remoting.http;
+
+import org.jboss.cx.remoting.util.ByteMessageInput;
+
+/**
+ *
+ */
+public interface RemotingHttpServerContext {
+ RemotingHttpChannelContext processUnsolicitedInboundMessage(ByteMessageInput messageInput);
+}
Copied: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpSessionContext.java (from rev 4023, remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpSessionContext.java)
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpSessionContext.java (rev 0)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpSessionContext.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -0,0 +1,14 @@
+package org.jboss.cx.remoting.http;
+
+/**
+ *
+ */
+public interface RemotingHttpSessionContext {
+
+ /**
+ * Get a channel context that can be used to transport HTTP messages for this session.
+ *
+ * @return the channel context
+ */
+ RemotingHttpChannelContext getChannelContext();
+}
Modified: remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java
===================================================================
--- remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java 2008-04-19 03:58:16 UTC (rev 4023)
+++ remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -8,17 +8,15 @@
import java.util.concurrent.ConcurrentMap;
import java.security.SecureRandom;
import org.jboss.cx.remoting.http.AbstractHttpChannel;
+import org.jboss.cx.remoting.http.HttpMessageWriter;
import org.jboss.cx.remoting.http.cookie.Cookie;
import org.jboss.cx.remoting.http.cookie.CookieParser;
-import org.jboss.cx.remoting.http.spi.AbstractIncomingHttpMessage;
-import org.jboss.cx.remoting.http.spi.OutgoingHttpMessage;
-import org.jboss.cx.remoting.http.spi.RemotingHttpChannelContext;
-import org.jboss.cx.remoting.http.spi.RemotingHttpServerContext;
+import org.jboss.cx.remoting.http.RemotingHttpChannelContext;
+import org.jboss.cx.remoting.http.RemotingHttpServerContext;
import org.jboss.cx.remoting.util.AbstractOutputStreamByteMessageOutput;
-import org.jboss.cx.remoting.util.ByteMessageInput;
import org.jboss.cx.remoting.util.CollectionUtil;
-import org.jboss.cx.remoting.util.InputStreamByteMessageInput;
import org.jboss.cx.remoting.util.IoUtil;
+import org.jboss.cx.remoting.util.InputStreamByteMessageInput;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpContext;
@@ -133,17 +131,12 @@
RemotingHttpChannelContext context = sessions.get(sessionId);
final InputStream inputStream = exchange.getRequestBody();
try {
- final AbstractIncomingHttpMessage incomingMessage = new AbstractIncomingHttpMessage() {
- public ByteMessageInput getMessageData() throws IOException {
- return new InputStreamByteMessageInput(inputStream, -1);
- }
- };
if (context == null) {
needToSetSession = true;
- context = serverContext.processUnsolicitedInboundMessage(incomingMessage);
+ context = serverContext.processUnsolicitedInboundMessage(new InputStreamByteMessageInput(inputStream, -1));
} else {
needToSetSession = false;
- context.processInboundMessage(incomingMessage);
+ context.processInboundMessage(new InputStreamByteMessageInput(inputStream, -1));
}
} finally {
IoUtil.closeSafely(inputStream);
@@ -163,10 +156,10 @@
}
exchange.getResponseHeaders().set("Set-Cookie", setCookieBuilder.toString());
}
- final OutgoingHttpMessage outgoingMessage = context.waitForOutgoingHttpMessage(parkTimeout);
+ final HttpMessageWriter messageWriter = context.waitForOutgoingHttpMessage(parkTimeout);
final OutputStream outputStream = exchange.getResponseBody();
try {
- outgoingMessage.writeMessageData(new AbstractOutputStreamByteMessageOutput(outputStream) {
+ messageWriter.writeMessageData(new AbstractOutputStreamByteMessageOutput(outputStream) {
public void commit() throws IOException {
}
});
Modified: remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java
===================================================================
--- remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java 2008-04-19 03:58:16 UTC (rev 4023)
+++ remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java 2008-04-19 04:19:02 UTC (rev 4024)
@@ -13,13 +13,10 @@
import java.util.concurrent.Future;
import org.jboss.cx.remoting.http.AbstractHttpChannel;
import org.jboss.cx.remoting.http.cookie.CookieClientSession;
-import org.jboss.cx.remoting.http.spi.AbstractIncomingHttpMessage;
-import org.jboss.cx.remoting.http.spi.OutgoingHttpMessage;
-import org.jboss.cx.remoting.http.spi.RemotingHttpChannelContext;
+import org.jboss.cx.remoting.http.HttpMessageWriter;
+import org.jboss.cx.remoting.http.RemotingHttpChannelContext;
import org.jboss.cx.remoting.log.Logger;
import org.jboss.cx.remoting.util.AbstractOutputStreamByteMessageOutput;
-import org.jboss.cx.remoting.util.ByteMessageInput;
-import org.jboss.cx.remoting.util.InputStreamByteMessageInput;
import org.jboss.cx.remoting.util.IoUtil;
import org.jboss.cx.remoting.util.NamingThreadFactory;
@@ -158,7 +155,7 @@
final RemotingHttpChannelContext channelContext = getChannelContext();
final int localParkTime = getLocalParkTime();
final int remoteParkTime = getRemoteParkTime();
- final OutgoingHttpMessage message = channelContext.waitForOutgoingHttpMessage(localParkTime);
+ final HttpMessageWriter messageWriter = channelContext.waitForOutgoingHttpMessage(localParkTime);
try {
final HttpURLConnection httpConnection = intializeConnection(connectUrl);
try {
@@ -168,7 +165,7 @@
httpConnection.connect();
final OutputStream outputStream = httpConnection.getOutputStream();
try {
- message.writeMessageData(new AbstractOutputStreamByteMessageOutput(outputStream) {
+ messageWriter.writeMessageData(new AbstractOutputStreamByteMessageOutput(outputStream) {
public void commit() throws IOException {
}
});
@@ -181,11 +178,7 @@
}
final InputStream inputStream = httpConnection.getInputStream();
try {
- channelContext.processInboundMessage(new AbstractIncomingHttpMessage() {
- public ByteMessageInput getMessageData() throws IOException {
- return new InputStreamByteMessageInput(inputStream, -1);
- }
- });
+ channelContext.processInboundMessage(INIT_ME);
} finally {
IoUtil.closeSafely(inputStream);
}
17 years, 6 months
JBoss Remoting SVN: r4023 - in remoting3/trunk: http-se6/src/main/java/org/jboss/cx/remoting/http/se6 and 1 other directory.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-18 23:58:16 -0400 (Fri, 18 Apr 2008)
New Revision: 4023
Removed:
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpSession.java
Modified:
remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java
Log:
Remove old http protocol support
Deleted: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java 2008-04-19 03:29:10 UTC (rev 4022)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java 2008-04-19 03:58:16 UTC (rev 4023)
@@ -1,131 +0,0 @@
-package org.jboss.cx.remoting.http;
-
-import java.io.IOException;
-import java.net.URI;
-import java.security.SecureRandom;
-import java.util.Random;
-import java.util.concurrent.ConcurrentMap;
-import org.jboss.cx.remoting.Endpoint;
-import org.jboss.cx.remoting.RemotingException;
-import org.jboss.cx.remoting.spi.Registration;
-import org.jboss.cx.remoting.spi.protocol.ProtocolContext;
-import org.jboss.cx.remoting.spi.protocol.ProtocolHandler;
-import org.jboss.cx.remoting.spi.protocol.ProtocolHandlerFactory;
-import org.jboss.cx.remoting.util.AttributeMap;
-import org.jboss.cx.remoting.util.CollectionUtil;
-
-/**
- *
- */
-public final class HttpProtocolSupport {
-
- public HttpProtocolSupport() {/* empty */}
-
- // Accessors: dependency
-
- private Endpoint endpoint;
- private Random random;
-
- public Endpoint getEndpoint() {
- return endpoint;
- }
-
- public void setEndpoint(final Endpoint endpoint) {
- this.endpoint = endpoint;
- }
-
- public Random getRandom() {
- return random;
- }
-
- public void setRandom(final Random random) {
- this.random = random;
- }
-
- // Accessors: configuration
- // (none)
-
- // Lifecycle
-
- private Registration registration;
-
- public void create() throws RemotingException {
- registration = endpoint.registerProtocol("http", new ProtocolHandlerFactory() {
- public boolean isLocal(final URI uri) {
- return false;
- }
-
- public ProtocolHandler createHandler(final ProtocolContext context, final URI remoteUri, final AttributeMap attributeMap) throws IOException {
- final RemotingHttpSession session = new RemotingHttpSession();
- final String sessionId;
- for (;;) {
- final String generatedId = generateSessionId();
- if (sessionMap.putIfAbsent(generatedId, session) == null) {
- sessionId = generatedId;
- break;
- }
- }
- session.intialize(HttpProtocolSupport.this, sessionId, context);
- return session.getProtocolHandler();
- }
-
- public void close() {
- }
- });
- if (random == null) {
- random = new SecureRandom();
- }
- }
-
- public void start() {
- registration.start();
- }
-
- public void stop() {
- registration.stop();
- }
-
- public void destroy() {
- try {
- registration.unregister();
- } finally {
- endpoint = null;
- random = null;
- registration = null;
- }
- }
-
- // Session management
-
- private final ConcurrentMap<String, RemotingHttpSession> sessionMap = CollectionUtil.concurrentWeakValueMap();
-
- public String generateSessionId() {
- final byte[] bytes = new byte[16];
- StringBuilder builder = new StringBuilder(bytes.length * 2);
- random.nextBytes(bytes);
- for (byte b : bytes) {
- builder.append(Character.forDigit(b >>> 4 & 15, 16));
- builder.append(Character.forDigit(b & 15, 16));
- }
- return builder.toString();
- }
-
- // todo - additional marshaller negotiation
- public void establishInboundSession() throws RemotingException {
- final RemotingHttpSession session = new RemotingHttpSession();
- final String sessionId;
- for (;;) {
- final String generatedId = generateSessionId();
- if (sessionMap.putIfAbsent(generatedId, session) == null) {
- sessionId = generatedId;
- break;
- }
- }
- final ProtocolContext protocolContext = endpoint.openIncomingSession(session.getProtocolHandler());
- session.intialize(this, sessionId, protocolContext);
- }
-
- RemotingHttpSession lookupSession(String sessionId) {
- return sessionMap.get(sessionId);
- }
-}
Deleted: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpSession.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpSession.java 2008-04-19 03:29:10 UTC (rev 4022)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/RemotingHttpSession.java 2008-04-19 03:58:16 UTC (rev 4023)
@@ -1,293 +0,0 @@
-package org.jboss.cx.remoting.http;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Executor;
-import org.jboss.cx.remoting.RemoteExecutionException;
-import org.jboss.cx.remoting.http.spi.AbstractOutgoingHttpMessage;
-import org.jboss.cx.remoting.http.spi.IncomingHttpMessage;
-import org.jboss.cx.remoting.http.spi.RemotingHttpSessionContext;
-import org.jboss.cx.remoting.util.ByteMessageOutput;
-import org.jboss.cx.remoting.util.ObjectMessageOutput;
-import org.jboss.cx.remoting.spi.protocol.ClientIdentifier;
-import org.jboss.cx.remoting.spi.protocol.ProtocolContext;
-import org.jboss.cx.remoting.spi.protocol.ProtocolHandler;
-import org.jboss.cx.remoting.spi.protocol.RequestIdentifier;
-import org.jboss.cx.remoting.spi.protocol.ServiceIdentifier;
-import org.jboss.cx.remoting.spi.protocol.StreamIdentifier;
-import org.jboss.cx.remoting.util.AtomicStateMachine;
-import static org.jboss.cx.remoting.util.AtomicStateMachine.start;
-import org.jboss.cx.remoting.util.CollectionUtil;
-
-/**
- *
- */
-public final class RemotingHttpSession {
-// private final RemotingHttpSessionContext context = new SessionContext();
- private ProtocolContext protocolContext;
- private ProtocolHandler protocolHandler = new ProtocolHandlerImpl();
- private final BlockingQueue<IncomingHttpMessage> incomingQueue = CollectionUtil.synchronizedQueue(new LinkedList<IncomingHttpMessage>());
- private final BlockingQueue<OutputAction> outgoingQueue = CollectionUtil.synchronizedQueue(new LinkedList<OutputAction>());
-
- private String sessionId;
-
- public void setSessionId(final String sessionId) {
- this.sessionId = sessionId;
- }
-
- public void intialize(final HttpProtocolSupport httpProtocolSupport, final String sessionId, final ProtocolContext protocolContext) {
-
- }
-
- private enum State implements org.jboss.cx.remoting.util.State<State> {
- INITIAL,
- UP,
- DOWN,
- ;
-
- public boolean isReachable(final State dest) {
- return compareTo(dest) < 0;
- }
- }
-
- private final AtomicStateMachine<State> state = start(State.INITIAL);
-
- private static final int PROTOCOL_VERSION = 0;
-
- public RemotingHttpSession() {
- }
-
- public String getSessionId() {
- return sessionId;
- }
-
- public RemotingHttpSessionContext getContext() {
-// return context;
- return null;
- }
-
- public ProtocolHandler getProtocolHandler() {
- return protocolHandler;
- }
-
-// private final class SessionContext implements RemotingHttpSessionContext {
-// private final Set<ReadyNotifier> readyNotifiers = CollectionUtil.synchronizedSet(new HashSet<ReadyNotifier>());
-//
-// public void queueMessage(IncomingHttpMessage message) {
-// incomingQueue.add(message);
-// synchronized(readyNotifiers) {
-// for (ReadyNotifier notifier : readyNotifiers) {
-// notifier.notifyReady(this);
-// }
-// }
-// }
-//
-// public void addReadyNotifier(ReadyNotifier notifier) {
-// readyNotifiers.add(notifier);
-// }
-//
-// public OutgoingHttpMessage getNextMessageImmediate() {
-// final List<OutputAction> actions = CollectionUtil.arrayList();
-// outgoingQueue.drainTo(actions);
-// if (actions.isEmpty()) {
-// return null;
-// }
-// return new OutgoingActionHttpMessage(actions);
-// }
-//
-// public OutgoingHttpMessage getNextMessage(long timeoutMillis) throws InterruptedException {
-// synchronized(outgoingQueue) {
-// final OutputAction first = outgoingQueue.poll(timeoutMillis, TimeUnit.MILLISECONDS);
-// if (first != null) {
-// final List<OutputAction> actions = CollectionUtil.arrayList();
-// actions.add(first);
-// outgoingQueue.drainTo(actions);
-// return new OutgoingActionHttpMessage(actions);
-// } else {
-// return null;
-// }
-// }
-// }
-// }
-
- private final class ProtocolHandlerImpl implements ProtocolHandler {
-
- public void sendReply(final ClientIdentifier remoteClientIdentifier, final RequestIdentifier requestIdentifier, final Object reply) throws IOException {
- }
-
- public void sendException(final ClientIdentifier remoteClientIdentifier, final RequestIdentifier requestIdentifier, final RemoteExecutionException exception) throws IOException {
- }
-
- public void sendCancelAcknowledge(final ClientIdentifier remoteClientIdentifier, final RequestIdentifier requestIdentifier) throws IOException {
- }
-
- public void sendServiceClosing(final ServiceIdentifier remoteServiceIdentifier) throws IOException {
- }
-
- public void sendClientClosing(final ClientIdentifier remoteClientIdentifier, final boolean done) throws IOException {
- }
-
- public ClientIdentifier getLocalRootClientIdentifier() {
- return null;
- }
-
- public ClientIdentifier getRemoteRootClientIdentifier() {
- return null;
- }
-
- public ClientIdentifier openClient(final ServiceIdentifier serviceIdentifier) throws IOException {
- return null;
- }
-
- public void sendClientClose(final ClientIdentifier clientIdentifier, final boolean immediate, final boolean cancel, final boolean interrupt) throws IOException {
- }
-
- public RequestIdentifier openRequest(final ClientIdentifier clientIdentifier) throws IOException {
- return null;
- }
-
- public void sendServiceClose(final ServiceIdentifier serviceIdentifier) throws IOException {
- }
-
- public void sendRequest(final ClientIdentifier clientIdentifier, final RequestIdentifier requestIdentifier, final Object request, final Executor streamExecutor) throws IOException {
- }
-
- public void sendCancelRequest(final ClientIdentifier clientIdentifier, final RequestIdentifier requestIdentifier, final boolean mayInterrupt) throws IOException {
- }
-
- public ClientIdentifier openClient() throws IOException {
- return null;
- }
-
- public ServiceIdentifier openService() throws IOException {
- return null;
- }
-
- public StreamIdentifier openStream() throws IOException {
- return null;
- }
-
- public void closeStream(final StreamIdentifier streamIdentifier) throws IOException {
- }
-
- public ObjectMessageOutput sendStreamData(final StreamIdentifier streamIdentifier, final Executor streamExecutor) throws IOException {
- return null;
- }
-
- public void closeSession() throws IOException {
- }
-
- public String getRemoteEndpointName() {
- return null;
- }
- }
-
- public class BufferedByteMessageOutput implements ByteMessageOutput, OutputAction {
- private final int bufsize;
- private final List<byte[]> bufferList = new ArrayList<byte[]>();
- private int sizeOfLast;
-
- public BufferedByteMessageOutput(final int bufsize) {
- this.bufsize = bufsize;
- }
-
- public void write(int b) throws IOException {
- final byte[] last = bufferList.get(bufferList.size());
- if (sizeOfLast == last.length) {
- final byte[] bytes = new byte[bufsize];
- bufferList.add(bytes);
- bytes[0] = (byte) b;
- sizeOfLast = 1;
- } else {
- last[sizeOfLast++] = (byte) b;
- }
- }
-
- public void write(byte[] b) throws IOException {
- write(b, 0, b.length);
- }
-
- public void write(byte[] b, int offs, int len) throws IOException {
- byte[] bytes = bufferList.get(bufferList.size());
- while (len > 0) {
- final int copySize = bytes.length - sizeOfLast;
- if (len <= copySize) {
- System.arraycopy(b, offs, bytes, sizeOfLast, len);
- sizeOfLast += len;
- return;
- } else {
- System.arraycopy(b, offs, bytes, sizeOfLast, copySize);
- bytes = new byte[bufsize];
- bufferList.add(bytes);
- sizeOfLast = 0;
- len -= copySize;
- offs += copySize;
- }
- }
- }
-
- public void commit() throws IOException {
- outgoingQueue.add(this);
- }
-
- public int getBytesWritten() throws IOException {
- Iterator<byte[]> it = bufferList.iterator();
- if (! it.hasNext()) {
- return 0;
- }
- int t = 0;
- for (;;) {
- byte[] b = it.next();
- if (it.hasNext()) {
- t += b.length;
- } else {
- return t + sizeOfLast;
- }
- }
- }
-
- public void close() throws IOException {
- bufferList.clear();
- }
-
- public void flush() throws IOException {
- }
-
- public void run(ByteMessageOutput output) throws IOException {
- final Iterator<byte[]> iterator = bufferList.iterator();
- if (! iterator.hasNext()) {
- return;
- }
- for (;;) {
- byte[] bytes = iterator.next();
- if (iterator.hasNext()) {
- output.write(bytes);
- } else {
- output.write(bytes, 0, sizeOfLast);
- return;
- }
- }
- }
- }
-
- private final class OutgoingActionHttpMessage extends AbstractOutgoingHttpMessage {
- private final List<OutputAction> actions;
-
- public OutgoingActionHttpMessage(final List<OutputAction> actions) {
- this.actions = actions;
- }
-
- public void writeMessageData(ByteMessageOutput byteOutput) throws IOException {
- final ObjectMessageOutput msgOut = protocolContext.getMessageOutput(byteOutput);
- msgOut.writeInt(PROTOCOL_VERSION);
- msgOut.commit();
- for (OutputAction action : actions) {
- action.run(byteOutput);
- }
- }
- }
-}
Modified: remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java
===================================================================
--- remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java 2008-04-19 03:29:10 UTC (rev 4022)
+++ remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java 2008-04-19 03:58:16 UTC (rev 4023)
@@ -4,9 +4,10 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
+import java.util.Random;
import java.util.concurrent.ConcurrentMap;
+import java.security.SecureRandom;
import org.jboss.cx.remoting.http.AbstractHttpChannel;
-import org.jboss.cx.remoting.http.HttpProtocolSupport;
import org.jboss.cx.remoting.http.cookie.Cookie;
import org.jboss.cx.remoting.http.cookie.CookieParser;
import org.jboss.cx.remoting.http.spi.AbstractIncomingHttpMessage;
@@ -46,18 +47,10 @@
// Dependencies
- private HttpProtocolSupport protocolSupport;
private RemotingHttpServerContext serverContext;
private HttpContext httpContext;
+ private Random random;
- public HttpProtocolSupport getProtocolSupport() {
- return protocolSupport;
- }
-
- public void setProtocolSupport(final HttpProtocolSupport protocolSupport) {
- this.protocolSupport = protocolSupport;
- }
-
public RemotingHttpServerContext getServerContext() {
return serverContext;
}
@@ -74,12 +67,23 @@
this.httpContext = httpContext;
}
+ public Random getRandom() {
+ return random;
+ }
+
+ public void setRandom(final Random random) {
+ this.random = random;
+ }
+
// Lifecycle
public void create() {
if (serverContext == null) {
throw new NullPointerException("serverContext is null");
}
+ if (random == null) {
+ random = new SecureRandom();
+ }
}
public void start() {
@@ -97,6 +101,7 @@
public void destroy() {
serverContext = null;
httpContext = null;
+ random = null;
}
// Implementation
@@ -147,7 +152,7 @@
final StringBuilder setCookieBuilder = new StringBuilder(60);
setCookieBuilder.append("JSESSIONID=");
for (;;) {
- String jsessionid = protocolSupport.generateSessionId();
+ String jsessionid = generateSessionId();
if (sessions.putIfAbsent(jsessionid, context) == null) {
setCookieBuilder.append(jsessionid);
break;
@@ -169,4 +174,15 @@
IoUtil.closeSafely(outputStream);
}
}
+
+ private String generateSessionId() {
+ final byte[] bytes = new byte[16];
+ StringBuilder builder = new StringBuilder(bytes.length * 2);
+ random.nextBytes(bytes);
+ for (byte b : bytes) {
+ builder.append(Character.forDigit(b >>> 4 & 15, 16));
+ builder.append(Character.forDigit(b & 15, 16));
+ }
+ return builder.toString();
+ }
}
17 years, 6 months
JBoss Remoting SVN: r4022 - in remoting3/trunk: http/src/main/java/org/jboss/cx/remoting/http/cookie and 2 other directories.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-18 23:29:10 -0400 (Fri, 18 Apr 2008)
New Revision: 4022
Added:
remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java
Removed:
remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/ServerInstance.java
Modified:
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/cookie/CookieParser.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/cookie/SimpleCookieParser.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java
Log:
javase6 http server channel
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java 2008-04-19 00:51:04 UTC (rev 4021)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java 2008-04-19 03:29:10 UTC (rev 4022)
@@ -100,12 +100,12 @@
private final ConcurrentMap<String, RemotingHttpSession> sessionMap = CollectionUtil.concurrentWeakValueMap();
public String generateSessionId() {
- final byte[] bytes = new byte[32];
+ final byte[] bytes = new byte[16];
StringBuilder builder = new StringBuilder(bytes.length * 2);
random.nextBytes(bytes);
for (byte b : bytes) {
- builder.append(Character.digit(b >>> 4 & 15, 16));
- builder.append(Character.digit(b & 15, 16));
+ builder.append(Character.forDigit(b >>> 4 & 15, 16));
+ builder.append(Character.forDigit(b & 15, 16));
}
return builder.toString();
}
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/cookie/CookieParser.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/cookie/CookieParser.java 2008-04-19 00:51:04 UTC (rev 4021)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/cookie/CookieParser.java 2008-04-19 03:29:10 UTC (rev 4022)
@@ -1,8 +1,12 @@
package org.jboss.cx.remoting.http.cookie;
+import java.util.List;
+
/**
*
*/
public interface CookieParser {
Cookie parseSetCookie(String setCookie, String defaultDomain, String defaultPath);
+
+ List<Cookie> parseCookie(String cookie);
}
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/cookie/SimpleCookieParser.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/cookie/SimpleCookieParser.java 2008-04-19 00:51:04 UTC (rev 4021)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/cookie/SimpleCookieParser.java 2008-04-19 03:29:10 UTC (rev 4022)
@@ -4,7 +4,10 @@
import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.List;
import org.jboss.cx.remoting.log.Logger;
+import org.jboss.cx.remoting.util.CollectionUtil;
+import static org.jboss.cx.remoting.util.CollectionUtil.arrayList;
/**
*
@@ -81,4 +84,20 @@
}
return new Cookie(name, value, path, domain, expires, secure);
}
+
+ public List<Cookie> parseCookie(final String cookie) {
+ if (cookie == null) {
+ throw new NullPointerException("cookie is null");
+ }
+ List<Cookie> cookieList = arrayList();
+ final Matcher matcher = PAIR_PATTERN.matcher(cookie);
+ while (matcher.find()) {
+ final String name = matcher.group(1);
+ final String value = matcher.group(2);
+ if (name != null && value != null) {
+ cookieList.add(new Cookie(name, value, "/", ".unknown.local", -1L, false));
+ }
+ }
+ return cookieList;
+ }
}
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java 2008-04-19 00:51:04 UTC (rev 4021)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java 2008-04-19 03:29:10 UTC (rev 4022)
@@ -4,5 +4,5 @@
*
*/
public interface RemotingHttpServerContext {
- RemotingHttpSessionContext locateSession(String remotingSessionId);
+ RemotingHttpChannelContext processUnsolicitedInboundMessage(IncomingHttpMessage incomingHttpMessage);
}
Deleted: remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/ServerInstance.java
===================================================================
--- remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/ServerInstance.java 2008-04-19 00:51:04 UTC (rev 4021)
+++ remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/ServerInstance.java 2008-04-19 03:29:10 UTC (rev 4022)
@@ -1,140 +0,0 @@
-package org.jboss.cx.remoting.http.se6;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.util.concurrent.Executor;
-
-import com.sun.net.httpserver.BasicAuthenticator;
-import com.sun.net.httpserver.HttpContext;
-import com.sun.net.httpserver.HttpExchange;
-import com.sun.net.httpserver.HttpHandler;
-import com.sun.net.httpserver.HttpServer;
-
-/**
- *
- */
-public final class ServerInstance {
- private final HttpServer httpServer;
- private final InetAddress localAddress;
- private final int localPort;
-
- public ServerInstance(String context, HttpServer httpServer) {
- this.httpServer = httpServer;
- final HttpContext httpContext = httpServer.createContext(context, new MyHttpHandler());
- httpContext.setAuthenticator(new BasicAuthenticator("Remote Access") {
- public boolean checkCredentials(final String user, final String password) {
- final char[] passwordChars = password.toCharArray();
-
- // todo - use endpoint callbacks
- return false;
- }
- });
- final InetSocketAddress socketAddress = httpServer.getAddress();
- localAddress = socketAddress.getAddress();
- localPort = socketAddress.getPort();
- }
-
- public ServerInstance(String context, InetSocketAddress address, Executor executor) throws IOException {
- this(context, HttpServer.create(address, 0));
- httpServer.setExecutor(executor);
- }
-
- public void start() {
- httpServer.start();
- }
-
- public void stop() {
- // todo - magic #
- httpServer.stop(30);
- }
-
- private class MyHttpHandler implements HttpHandler {
- public void handle(final HttpExchange httpExchange) throws IOException {
-// final URI requestURI = httpExchange.getRequestURI();
-// final Headers requestHeaders = httpExchange.getRequestHeaders();
-// final InetSocketAddress inetSocketAddress = httpExchange.getRemoteAddress();
-// final InetAddress remoteAddress = inetSocketAddress.getAddress();
-// final int remotePort = inetSocketAddress.getPort();
-// RemotingHttpSessionContext httpSessionContext = null; // todo locate
-// httpSessionContext.queueMessage(new AbstractIncomingHttpMessage() {
-// public ByteMessageInput getMessageData() {
-// final InputStream inputStream = httpExchange.getRequestBody();
-// return new ByteMessageInput() {
-// public int read() throws IOException {
-// return inputStream.read();
-// }
-//
-// public int read(byte[] data) throws IOException {
-// return inputStream.read(data);
-// }
-//
-// public int read(byte[] data, int offs, int len) throws IOException {
-// return inputStream.read(data, offs, len);
-// }
-//
-// public int remaining() {
-// return -1;
-// }
-//
-// public void close() throws IOException {
-// inputStream.close();
-// }
-// };
-// }
-// });
-// // todo - WAIT untit the input stream is consumed? or - just don't close the output until the input is done
-// // todo - consume all of input stream
-// OutgoingHttpMessage httpReply = null;
-// try {
-// // todo - magic # - timeout should be configurable
-// httpReply = httpSessionContext.getNextMessage(8000L);
-// } catch (InterruptedException e) {
-// Thread.currentThread().interrupt();
-// }
-// if (httpReply == null) {
-// // send empty OK
-// httpExchange.sendResponseHeaders(200, 0);
-// } else {
-// // send reply
-// final Headers responseHeaders = httpExchange.getResponseHeaders();
-// for (final String name : httpReply.getHeaderNames()) {
-// for (final String value : httpReply.getHeaderValues(name)) {
-// responseHeaders.set(name, value);
-// }
-// }
-// httpExchange.sendResponseHeaders(200, 0); // todo - preset response size?
-// final OutputStream outputStream = httpExchange.getResponseBody();
-// httpReply.writeMessageData(new ByteMessageOutput() {
-// public void write(int b) throws IOException {
-// outputStream.write(b);
-// }
-//
-// public void write(byte[] b) throws IOException {
-// outputStream.write(b);
-// }
-//
-// public void write(byte[] b, int offs, int len) throws IOException {
-// outputStream.write(b, offs, len);
-// }
-//
-// public void commit() throws IOException {
-// }
-//
-// public int getBytesWritten() throws IOException {
-// return -1;
-// }
-//
-// public void close() throws IOException {
-// outputStream.close();
-// }
-//
-// public void flush() throws IOException {
-// outputStream.flush();
-// }
-// });
-// }
-// httpExchange.close();
- }
- }
-}
Added: remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java
===================================================================
--- remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java (rev 0)
+++ remoting3/trunk/http-se6/src/main/java/org/jboss/cx/remoting/http/se6/SunHttpServerChannel.java 2008-04-19 03:29:10 UTC (rev 4022)
@@ -0,0 +1,172 @@
+package org.jboss.cx.remoting.http.se6;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.concurrent.ConcurrentMap;
+import org.jboss.cx.remoting.http.AbstractHttpChannel;
+import org.jboss.cx.remoting.http.HttpProtocolSupport;
+import org.jboss.cx.remoting.http.cookie.Cookie;
+import org.jboss.cx.remoting.http.cookie.CookieParser;
+import org.jboss.cx.remoting.http.spi.AbstractIncomingHttpMessage;
+import org.jboss.cx.remoting.http.spi.OutgoingHttpMessage;
+import org.jboss.cx.remoting.http.spi.RemotingHttpChannelContext;
+import org.jboss.cx.remoting.http.spi.RemotingHttpServerContext;
+import org.jboss.cx.remoting.util.AbstractOutputStreamByteMessageOutput;
+import org.jboss.cx.remoting.util.ByteMessageInput;
+import org.jboss.cx.remoting.util.CollectionUtil;
+import org.jboss.cx.remoting.util.InputStreamByteMessageInput;
+import org.jboss.cx.remoting.util.IoUtil;
+
+import com.sun.net.httpserver.Headers;
+import com.sun.net.httpserver.HttpContext;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+
+/**
+ *
+ */
+public final class SunHttpServerChannel extends AbstractHttpChannel implements HttpHandler {
+
+ public SunHttpServerChannel() {
+ }
+
+ // Configuration
+
+ private CookieParser cookieParser;
+
+ public CookieParser getCookieParser() {
+ return cookieParser;
+ }
+
+ public void setCookieParser(final CookieParser cookieParser) {
+ this.cookieParser = cookieParser;
+ }
+
+ // Dependencies
+
+ private HttpProtocolSupport protocolSupport;
+ private RemotingHttpServerContext serverContext;
+ private HttpContext httpContext;
+
+ public HttpProtocolSupport getProtocolSupport() {
+ return protocolSupport;
+ }
+
+ public void setProtocolSupport(final HttpProtocolSupport protocolSupport) {
+ this.protocolSupport = protocolSupport;
+ }
+
+ public RemotingHttpServerContext getServerContext() {
+ return serverContext;
+ }
+
+ public void setServerContext(final RemotingHttpServerContext serverContext) {
+ this.serverContext = serverContext;
+ }
+
+ public HttpContext getHttpContext() {
+ return httpContext;
+ }
+
+ public void setHttpContext(final HttpContext httpContext) {
+ this.httpContext = httpContext;
+ }
+
+ // Lifecycle
+
+ public void create() {
+ if (serverContext == null) {
+ throw new NullPointerException("serverContext is null");
+ }
+ }
+
+ public void start() {
+ httpContext.setHandler(this);
+ }
+
+ public void stop() {
+ httpContext.setHandler(new HttpHandler() {
+ public void handle(final HttpExchange exchange) throws IOException {
+ throw new IOException("Context is not available");
+ }
+ });
+ }
+
+ public void destroy() {
+ serverContext = null;
+ httpContext = null;
+ }
+
+ // Implementation
+
+ private final ConcurrentMap<String, RemotingHttpChannelContext> sessions = CollectionUtil.concurrentMap();
+
+ public void handle(final HttpExchange exchange) throws IOException {
+ // it could be a non-https exchange (in the case of a separate SSL frontend)
+ final boolean secure = "https".equals(exchange.getProtocol());
+ final Headers requestHeader = exchange.getRequestHeaders();
+ final List<String> cookieHeaders = requestHeader.get("Cookie");
+ int parkTimeout = -1;
+ String sessionId = null;
+ for (String cookieString : cookieHeaders) {
+ final List<Cookie> cookies = cookieParser.parseCookie(cookieString);
+ for (Cookie cookie : cookies) {
+ if ("Park-Timeout".equals(cookie.getName())) {
+ try {
+ parkTimeout = Integer.parseInt(cookie.getValue());
+ } catch (NumberFormatException e) {
+ // oh well
+ }
+ } else if ("JSESSIONID".equals(cookie.getName())) {
+ sessionId = cookie.getValue();
+ }
+ }
+ }
+ final boolean needToSetSession;
+ RemotingHttpChannelContext context = sessions.get(sessionId);
+ final InputStream inputStream = exchange.getRequestBody();
+ try {
+ final AbstractIncomingHttpMessage incomingMessage = new AbstractIncomingHttpMessage() {
+ public ByteMessageInput getMessageData() throws IOException {
+ return new InputStreamByteMessageInput(inputStream, -1);
+ }
+ };
+ if (context == null) {
+ needToSetSession = true;
+ context = serverContext.processUnsolicitedInboundMessage(incomingMessage);
+ } else {
+ needToSetSession = false;
+ context.processInboundMessage(incomingMessage);
+ }
+ } finally {
+ IoUtil.closeSafely(inputStream);
+ }
+ if (needToSetSession) {
+ final StringBuilder setCookieBuilder = new StringBuilder(60);
+ setCookieBuilder.append("JSESSIONID=");
+ for (;;) {
+ String jsessionid = protocolSupport.generateSessionId();
+ if (sessions.putIfAbsent(jsessionid, context) == null) {
+ setCookieBuilder.append(jsessionid);
+ break;
+ }
+ }
+ if (secure) {
+ setCookieBuilder.append("; secure");
+ }
+ exchange.getResponseHeaders().set("Set-Cookie", setCookieBuilder.toString());
+ }
+ final OutgoingHttpMessage outgoingMessage = context.waitForOutgoingHttpMessage(parkTimeout);
+ final OutputStream outputStream = exchange.getResponseBody();
+ try {
+ outgoingMessage.writeMessageData(new AbstractOutputStreamByteMessageOutput(outputStream) {
+ public void commit() throws IOException {
+ }
+ });
+ } finally {
+ IoUtil.closeSafely(outputStream);
+ }
+ }
+}
17 years, 6 months
JBoss Remoting SVN: r4021 - in remoting3/trunk: http/src/main/java/org/jboss/cx/remoting/http/spi and 1 other directories.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-18 20:51:04 -0400 (Fri, 18 Apr 2008)
New Revision: 4021
Added:
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpChannel.java
Removed:
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/OutboundHttpChannelProvider.java
Modified:
remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/HttpChannel.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpChannelContext.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java
remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpSessionContext.java
Log:
Progress towards http urlconnection client
Added: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpChannel.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpChannel.java (rev 0)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/AbstractHttpChannel.java 2008-04-19 00:51:04 UTC (rev 4021)
@@ -0,0 +1,94 @@
+package org.jboss.cx.remoting.http;
+
+import org.jboss.cx.remoting.http.spi.HttpChannel;
+import org.jboss.cx.remoting.http.spi.RemotingHttpChannelContext;
+
+/**
+ *
+ */
+public abstract class AbstractHttpChannel implements HttpChannel {
+
+ protected AbstractHttpChannel() {
+ }
+
+ // Configuration
+
+ private int localParkTime = -1;
+ private int remoteParkTime = -1;
+
+ /**
+ * Get the amount of time that a given channel member may be locally parked. A value of {@code -1} means "park
+ * indefinitely". A value of {@code 0} means "do not park". Otherwise the value is interpreted as milliseconds.
+ *
+ * In the case of an HTTP server, the minimum of this time and the client-requested timeout should be used.
+ *
+ * @return the local park time
+ */
+ public int getLocalParkTime() {
+ return localParkTime;
+ }
+
+ /**
+ * Set the amount of time that a given channel member may be locally parked. A value of {@code -1} means "park
+ * indefinitely". A value of {@code 0} means "do not park". Otherwise the value is interpreted as milliseconds.
+ *
+ * In the case of an HTTP server, the minimum of this time and the client-requested timeout should be used.
+ *
+ * @param localParkTime the local park time
+ */
+ public void setLocalParkTime(final int localParkTime) {
+ this.localParkTime = localParkTime;
+ }
+
+ /**
+ * Get the amount of time that a given channel member may be remotely parked. A value of {@code -1} means "park
+ * indefinitely". A value of {@code 0} means "do not park". Otherwise the value is interpreted as milliseconds.
+ *
+ * @return the remote park time
+ */
+ public int getRemoteParkTime() {
+ return remoteParkTime;
+ }
+
+ /**
+ * Set the amount of time that a given channel member may be remotely parked. A value of {@code -1} means "park
+ * indefinitely". A value of {@code 0} means "do not park". Otherwise the value is interpreted as milliseconds.
+ *
+ * @param remoteParkTime the remote park time
+ */
+ public void setRemoteParkTime(final int remoteParkTime) {
+ this.remoteParkTime = remoteParkTime;
+ }
+
+ // Dependencies
+
+ private RemotingHttpChannelContext channelContext;
+
+ public RemotingHttpChannelContext getChannelContext() {
+ return channelContext;
+ }
+
+ public void setChannelContext(final RemotingHttpChannelContext channelContext) {
+ this.channelContext = channelContext;
+ }
+
+ // Lifecycle
+
+ public void create() {
+ if (channelContext == null) {
+ throw new NullPointerException("channelContext is null");
+ }
+ }
+
+ public void start() {
+
+ }
+
+ public void stop() {
+
+ }
+
+ public void destroy() {
+
+ }
+}
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java 2008-04-18 23:29:39 UTC (rev 4020)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/HttpProtocolSupport.java 2008-04-19 00:51:04 UTC (rev 4021)
@@ -99,7 +99,7 @@
private final ConcurrentMap<String, RemotingHttpSession> sessionMap = CollectionUtil.concurrentWeakValueMap();
- private String generateSessionId() {
+ public String generateSessionId() {
final byte[] bytes = new byte[32];
StringBuilder builder = new StringBuilder(bytes.length * 2);
random.nextBytes(bytes);
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/HttpChannel.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/HttpChannel.java 2008-04-18 23:29:39 UTC (rev 4020)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/HttpChannel.java 2008-04-19 00:51:04 UTC (rev 4021)
@@ -4,9 +4,4 @@
*
*/
public interface HttpChannel {
- void setChannelContext(RemotingHttpChannelContext channelContext);
-
- void sendMessage(OutgoingHttpMessage message);
-
- void close();
}
Deleted: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/OutboundHttpChannelProvider.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/OutboundHttpChannelProvider.java 2008-04-18 23:29:39 UTC (rev 4020)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/OutboundHttpChannelProvider.java 2008-04-19 00:51:04 UTC (rev 4021)
@@ -1,8 +0,0 @@
-package org.jboss.cx.remoting.http.spi;
-
-/**
- *
- */
-public interface OutboundHttpChannelProvider {
-
-}
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpChannelContext.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpChannelContext.java 2008-04-18 23:29:39 UTC (rev 4020)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpChannelContext.java 2008-04-19 00:51:04 UTC (rev 4021)
@@ -4,8 +4,20 @@
*
*/
public interface RemotingHttpChannelContext {
+ /**
+ * Process an HTTP message that has arrived.
+ *
+ * @param incomingHttpMessage the HTTP message
+ */
+ void processInboundMessage(IncomingHttpMessage incomingHttpMessage);
- void receiveMessage(IncomingHttpMessage incomingHttpMessage);
-
- void sendComplete(OutgoingHttpMessage outgoingHttpMessage);
+ /**
+ * Wait for an outgoing HTTP message to become available, up to a certain time limit. If no message is available
+ * within the specified time limit, or if the thread is interrupted before a message could become available, return
+ * an empty message.
+ *
+ * @param millis the amount of time to wait in millseconds, {@code 0} to not wait, or {@code -1} to wait indefinitely.
+ * @return an outgoing HTTP message
+ */
+ OutgoingHttpMessage waitForOutgoingHttpMessage(int millis);
}
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java 2008-04-18 23:29:39 UTC (rev 4020)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpServerContext.java 2008-04-19 00:51:04 UTC (rev 4021)
@@ -4,5 +4,5 @@
*
*/
public interface RemotingHttpServerContext {
- RemotingHttpSessionContext locateSession(IncomingHttpMessage message);
+ RemotingHttpSessionContext locateSession(String remotingSessionId);
}
Modified: remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpSessionContext.java
===================================================================
--- remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpSessionContext.java 2008-04-18 23:29:39 UTC (rev 4020)
+++ remoting3/trunk/http/src/main/java/org/jboss/cx/remoting/http/spi/RemotingHttpSessionContext.java 2008-04-19 00:51:04 UTC (rev 4021)
@@ -4,9 +4,11 @@
*
*/
public interface RemotingHttpSessionContext {
- void processInboundMessage(IncomingHttpMessage incomingHttpMessage);
- OutgoingHttpMessage getOutgoingHttpMessage();
-
- OutgoingHttpMessage waitForOutgoingHttpMessage(long millis);
+ /**
+ * Get a channel context that can be used to transport HTTP messages for this session.
+ *
+ * @return the channel context
+ */
+ RemotingHttpChannelContext getChannelContext();
}
Modified: remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java
===================================================================
--- remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java 2008-04-18 23:29:39 UTC (rev 4020)
+++ remoting3/trunk/http-urlconnection/src/main/java/org/jboss/cx/remoting/http/urlconnection/AbstractHttpUrlChannel.java 2008-04-19 00:51:04 UTC (rev 4021)
@@ -9,20 +9,24 @@
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.Future;
+import org.jboss.cx.remoting.http.AbstractHttpChannel;
import org.jboss.cx.remoting.http.cookie.CookieClientSession;
import org.jboss.cx.remoting.http.spi.AbstractIncomingHttpMessage;
import org.jboss.cx.remoting.http.spi.OutgoingHttpMessage;
-import org.jboss.cx.remoting.http.spi.RemotingHttpSessionContext;
+import org.jboss.cx.remoting.http.spi.RemotingHttpChannelContext;
import org.jboss.cx.remoting.log.Logger;
import org.jboss.cx.remoting.util.AbstractOutputStreamByteMessageOutput;
import org.jboss.cx.remoting.util.ByteMessageInput;
import org.jboss.cx.remoting.util.InputStreamByteMessageInput;
import org.jboss.cx.remoting.util.IoUtil;
+import org.jboss.cx.remoting.util.NamingThreadFactory;
/**
*
*/
-public abstract class AbstractHttpUrlChannel {
+public abstract class AbstractHttpUrlChannel extends AbstractHttpChannel {
private static final Logger log = Logger.getLogger(AbstractHttpUrlChannel.class);
@@ -35,7 +39,8 @@
private int concurrentRequests = 2;
private int connectTimeout = 5000;
- private int readTimeout = 5000;
+ private int readTimeout = 0; // Default to unlimited to support "parking" the connection at the other end
+ private int errorBackoffTime = 5000;
private URL connectUrl;
public int getConcurrentRequests() {
@@ -62,6 +67,14 @@
this.readTimeout = readTimeout;
}
+ public int getErrorBackoffTime() {
+ return errorBackoffTime;
+ }
+
+ public void setErrorBackoffTime(final int errorBackoffTime) {
+ this.errorBackoffTime = errorBackoffTime;
+ }
+
public URL getConnectUrl() {
return connectUrl;
}
@@ -72,17 +85,8 @@
// Dependencies
- private RemotingHttpSessionContext sessionContext;
private Executor executor;
- public RemotingHttpSessionContext getSessionContext() {
- return sessionContext;
- }
-
- public void setSessionContext(final RemotingHttpSessionContext sessionContext) {
- this.sessionContext = sessionContext;
- }
-
public Executor getExecutor() {
return executor;
}
@@ -94,47 +98,73 @@
// Lifecycle
private ExecutorService executorService;
+ private Future[] futures;
public void create() {
+ super.create();
if (executor == null) {
- executor = executorService = Executors.newFixedThreadPool(concurrentRequests);
+ executor = executorService = Executors.newFixedThreadPool(concurrentRequests, new NamingThreadFactory(Executors.defaultThreadFactory(), "Remoting HTTP client %s"));
}
if (connectUrl == null) {
throw new NullPointerException("connectUrl is null");
}
- if (sessionContext == null) {
- throw new NullPointerException("sessionContext is null");
- }
}
public void start() {
-
+ final Future[] futures = new Future[concurrentRequests];
+ for (int i = 0; i < futures.length; i++) {
+ final FutureTask task = new FutureTask<Void>(null) {
+ public void run() {
+ while (! isCancelled()) try {
+ handleRequest();
+ } catch (Throwable t) {
+ log.trace(t, "Request hander failed");
+ }
+ }
+ };
+ executor.execute(task);
+ futures[i] = task;
+ }
+ this.futures = futures;
}
public void stop() {
-
+ if (futures != null) {
+ final Future[] futures = this.futures;
+ this.futures = null;
+ for (Future future : futures) try {
+ future.cancel(true);
+ } catch (Throwable t) {
+ log.trace(t, "Error cancelling task");
+ }
+ }
}
public void destroy() {
try {
-
+ super.destroy();
} finally {
if (executorService != null) {
executorService.shutdown();
}
}
executor = executorService = null;
- sessionContext = null;
}
// Interface
- protected void handleRequest(final URL connectUrl) {
- final RemotingHttpSessionContext sessionContext = getSessionContext();
- final OutgoingHttpMessage message = sessionContext.getOutgoingHttpMessage();
+ protected void handleRequest() {
+ final URL connectUrl = getConnectUrl();
+ final RemotingHttpChannelContext channelContext = getChannelContext();
+ final int localParkTime = getLocalParkTime();
+ final int remoteParkTime = getRemoteParkTime();
+ final OutgoingHttpMessage message = channelContext.waitForOutgoingHttpMessage(localParkTime);
try {
final HttpURLConnection httpConnection = intializeConnection(connectUrl);
try {
+ if (remoteParkTime >= 0) {
+ httpConnection.addRequestProperty("Park-Timeout", Integer.toString(remoteParkTime));
+ }
httpConnection.connect();
final OutputStream outputStream = httpConnection.getOutputStream();
try {
@@ -151,7 +181,7 @@
}
final InputStream inputStream = httpConnection.getInputStream();
try {
- sessionContext.processInboundMessage(new AbstractIncomingHttpMessage() {
+ channelContext.processInboundMessage(new AbstractIncomingHttpMessage() {
public ByteMessageInput getMessageData() throws IOException {
return new InputStreamByteMessageInput(inputStream, -1);
}
@@ -178,7 +208,16 @@
} catch (IOException e2) {
log.trace(e2, "Error consuming the error stream from remote URL '%s'", connectUrl);
}
- // todo - need a backoff timer to prevent a storm of HTTP errors. Or perhaps the session should be torn down.
+ final int time = errorBackoffTime;
+ if (time > 0) {
+ try {
+ log.debug("HTTP error occurred; backing off for %d milliseconds", Integer.valueOf(time));
+ Thread.sleep(time);
+ } catch (InterruptedException e1) {
+ log.trace("Thread interrupted while waiting for error backoff time to expire");
+ Thread.currentThread().interrupt();
+ }
+ }
}
} catch (IOException e) {
log.trace(e, "Error establishing connection");
17 years, 6 months
JBoss Remoting SVN: r4020 - remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-18 19:29:39 -0400 (Fri, 18 Apr 2008)
New Revision: 4020
Modified:
remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting/Remoting.java
Log:
Add a lifecycle lock for idiot-proofing purposes
Modified: remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting/Remoting.java
===================================================================
--- remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting/Remoting.java 2008-04-18 23:04:38 UTC (rev 4019)
+++ remoting3/trunk/standalone/src/main/java/org/jboss/cx/remoting/Remoting.java 2008-04-18 23:29:39 UTC (rev 4020)
@@ -18,77 +18,86 @@
private static final String JRPP_SUPPORT_KEY = "org.jboss.cx.remoting.standalone.jrpp.support";
+ // lifecycle lock
+ private static final Object lifecycle = new Object();
+
public static <I, O> Endpoint createEndpoint(String name, RequestListener<I, O> listener) throws IOException {
- boolean ok = false;
- final CoreEndpoint coreEndpoint = new CoreEndpoint();
- coreEndpoint.setName(name);
- coreEndpoint.setRootListener(listener);
- coreEndpoint.create();
- try {
- coreEndpoint.start();
+ synchronized (lifecycle) {
+ boolean ok = false;
+ final CoreEndpoint coreEndpoint = new CoreEndpoint();
+ coreEndpoint.setName(name);
+ coreEndpoint.setRootListener(listener);
+ coreEndpoint.create();
try {
- LocalProtocolHandlerFactory.addTo(coreEndpoint);
- final JrppProtocolSupport jrppProtocolSupport = new JrppProtocolSupport();
- jrppProtocolSupport.setEndpoint(coreEndpoint);
- jrppProtocolSupport.create();
+ coreEndpoint.start();
try {
- jrppProtocolSupport.start();
+ LocalProtocolHandlerFactory.addTo(coreEndpoint);
+ final JrppProtocolSupport jrppProtocolSupport = new JrppProtocolSupport();
+ jrppProtocolSupport.setEndpoint(coreEndpoint);
+ jrppProtocolSupport.create();
try {
- final ConcurrentMap<Object, Object> attributes = coreEndpoint.getAttributes();
- attributes.put(JRPP_SUPPORT_KEY, jrppProtocolSupport);
- ok = true;
- return coreEndpoint;
+ jrppProtocolSupport.start();
+ try {
+ final ConcurrentMap<Object, Object> attributes = coreEndpoint.getAttributes();
+ attributes.put(JRPP_SUPPORT_KEY, jrppProtocolSupport);
+ ok = true;
+ return coreEndpoint;
+ } finally {
+ if (! ok) {
+ jrppProtocolSupport.stop();
+ }
+ }
} finally {
if (! ok) {
- jrppProtocolSupport.stop();
+ jrppProtocolSupport.destroy();
}
}
} finally {
if (! ok) {
- jrppProtocolSupport.destroy();
+ coreEndpoint.stop();
}
}
} finally {
if (! ok) {
- coreEndpoint.stop();
+ coreEndpoint.destroy();
}
}
- } finally {
- if (! ok) {
- coreEndpoint.destroy();
- }
}
}
public static void closeEndpoint(Endpoint endpoint) {
- if (endpoint instanceof CoreEndpoint) {
- final CoreEndpoint coreEndpoint = (CoreEndpoint) endpoint;
- final ConcurrentMap<Object, Object> attributes = coreEndpoint.getAttributes();
- final JrppProtocolSupport jrppProtocolSupport = (JrppProtocolSupport) attributes.remove(JRPP_SUPPORT_KEY);
- coreEndpoint.stop();
- coreEndpoint.destroy();
- if (jrppProtocolSupport != null) {
- jrppProtocolSupport.stop();
- jrppProtocolSupport.destroy();
+ synchronized (lifecycle) {
+ if (endpoint instanceof CoreEndpoint) {
+ final CoreEndpoint coreEndpoint = (CoreEndpoint) endpoint;
+ final ConcurrentMap<Object, Object> attributes = coreEndpoint.getAttributes();
+ final JrppProtocolSupport jrppProtocolSupport = (JrppProtocolSupport) attributes.remove(JRPP_SUPPORT_KEY);
+ coreEndpoint.stop();
+ coreEndpoint.destroy();
+ if (jrppProtocolSupport != null) {
+ jrppProtocolSupport.stop();
+ jrppProtocolSupport.destroy();
+ }
}
}
}
public static JrppServer addJrppServer(Endpoint endpoint, SocketAddress address, AttributeMap attributeMap) throws IOException {
- boolean ok = false;
- final JrppServer jrppServer = new JrppServer();
- jrppServer.setProtocolSupport((JrppProtocolSupport) endpoint.getAttributes().get(JRPP_SUPPORT_KEY));
- jrppServer.setSocketAddress(address);
- jrppServer.setAttributeMap(attributeMap);
- jrppServer.setEndpoint(endpoint);
- jrppServer.create();
- try {
- jrppServer.start();
- ok = true;
- return jrppServer;
- } finally {
- if (! ok) {
- jrppServer.destroy();
+ synchronized (lifecycle) {
+ boolean ok = false;
+ final JrppServer jrppServer = new JrppServer();
+ jrppServer.setProtocolSupport((JrppProtocolSupport) endpoint.getAttributes().get(JRPP_SUPPORT_KEY));
+ jrppServer.setSocketAddress(address);
+ jrppServer.setAttributeMap(attributeMap);
+ jrppServer.setEndpoint(endpoint);
+ jrppServer.create();
+ try {
+ jrppServer.start();
+ ok = true;
+ return jrppServer;
+ } finally {
+ if (! ok) {
+ jrppServer.destroy();
+ }
}
}
}
17 years, 6 months
JBoss Remoting SVN: r4019 - in remoting3/trunk: jrpp/src/main/java/org/jboss/cx/remoting/jrpp and 1 other directory.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-18 19:04:38 -0400 (Fri, 18 Apr 2008)
New Revision: 4019
Modified:
remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreEndpoint.java
remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppProtocolSupport.java
Log:
Use naming thread factory if no executor is specified
Modified: remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreEndpoint.java
===================================================================
--- remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreEndpoint.java 2008-04-18 23:01:53 UTC (rev 4018)
+++ remoting3/trunk/core/src/main/java/org/jboss/cx/remoting/core/CoreEndpoint.java 2008-04-18 23:04:38 UTC (rev 4019)
@@ -24,6 +24,7 @@
import org.jboss.cx.remoting.util.AtomicStateMachine;
import org.jboss.cx.remoting.util.AttributeMap;
import org.jboss.cx.remoting.util.CollectionUtil;
+import org.jboss.cx.remoting.util.NamingThreadFactory;
import org.jboss.cx.remoting.version.Version;
import javax.security.auth.callback.Callback;
@@ -115,7 +116,7 @@
public void start() {
// todo security check
if (executor == null) {
- executorService = Executors.newCachedThreadPool();
+ executorService = Executors.newCachedThreadPool(new NamingThreadFactory(Executors.defaultThreadFactory(), "Remoting endpoint %s"));
setExecutor(executorService);
}
state.requireTransition(State.INITIAL, State.UP);
Modified: remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppProtocolSupport.java
===================================================================
--- remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppProtocolSupport.java 2008-04-18 23:01:53 UTC (rev 4018)
+++ remoting3/trunk/jrpp/src/main/java/org/jboss/cx/remoting/jrpp/JrppProtocolSupport.java 2008-04-18 23:04:38 UTC (rev 4019)
@@ -29,6 +29,7 @@
import org.jboss.cx.remoting.spi.protocol.ProtocolHandler;
import org.jboss.cx.remoting.spi.protocol.ProtocolHandlerFactory;
import org.jboss.cx.remoting.util.AttributeMap;
+import org.jboss.cx.remoting.util.NamingThreadFactory;
/**
*
@@ -79,7 +80,7 @@
public void create() throws RemotingException {
if (executor == null) {
- executor = executorService = Executors.newCachedThreadPool();
+ executor = executorService = Executors.newCachedThreadPool(new NamingThreadFactory(Executors.defaultThreadFactory(), "Remoting JRPP %s"));
}
ExceptionMonitor.setInstance(new ExceptionMonitor() {
public void exceptionCaught(final Throwable cause) {
17 years, 6 months
JBoss Remoting SVN: r4018 - remoting3/trunk/util/src/main/java/org/jboss/cx/remoting/util.
by jboss-remoting-commits@lists.jboss.org
Author: david.lloyd(a)jboss.com
Date: 2008-04-18 19:01:53 -0400 (Fri, 18 Apr 2008)
New Revision: 4018
Added:
remoting3/trunk/util/src/main/java/org/jboss/cx/remoting/util/NamingThreadFactory.java
Log:
Naming thread factory class
Added: remoting3/trunk/util/src/main/java/org/jboss/cx/remoting/util/NamingThreadFactory.java
===================================================================
--- remoting3/trunk/util/src/main/java/org/jboss/cx/remoting/util/NamingThreadFactory.java (rev 0)
+++ remoting3/trunk/util/src/main/java/org/jboss/cx/remoting/util/NamingThreadFactory.java 2008-04-18 23:01:53 UTC (rev 4018)
@@ -0,0 +1,35 @@
+package org.jboss.cx.remoting.util;
+
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * A wrapper {@code ThreadFactory} that gives the threads a sensible name.
+ */
+public final class NamingThreadFactory implements ThreadFactory {
+ private final ThreadFactory delegate;
+ private final String namePattern;
+
+ /**
+ * Create a new instance. The pattern is a format string such as one would provide to
+ * {@link String#format(String, Object[])}. The format string should contain one {@code %s} which will be replaced
+ * with the original thread name.
+ *
+ * @param delegate the thread factory to actually use to produce the thread
+ * @param namePattern the name pattern to apply
+ */
+ public NamingThreadFactory(final ThreadFactory delegate, final String namePattern) {
+ this.delegate = delegate;
+ this.namePattern = namePattern;
+ }
+
+ public Thread newThread(final Runnable r) {
+ final Thread thread = delegate.newThread(r);
+ final String originalName = thread.getName();
+ try {
+ thread.setName(String.format(namePattern, originalName));
+ } catch (SecurityException ex) {
+ // oh well, we tried
+ }
+ return thread;
+ }
+}
17 years, 6 months