You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2002/04/18 00:32:46 UTC
cvs commit: jakarta-tomcat-connectors/jk/java/org/apache/jk/core MsgContext.java
costin 02/04/17 15:32:45
Modified: jk/java/org/apache/jk/core MsgContext.java
Log:
Few changes to MsgContext to allow it to be used in a more
flexible way.
Most of the methods can become generic 'notes' ( but we need
to support 'long' notes, I wouldn't like to convert to Long ).
MsgContext now has a 'type' ( from o.a.t.u.handler ) - that'll
eventually replace the Action and be commont to all coyote components.
We also store the 'source' - the handler that originally
initiated the callback ( to be used to send messages to the other
side ) and 'next' - the next handler in the chain.
All the changes are cleanups for jni and getting the code
closer to the target.
Revision Changes Path
1.3 +86 -5 jakarta-tomcat-connectors/jk/java/org/apache/jk/core/MsgContext.java
Index: MsgContext.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/core/MsgContext.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MsgContext.java 3 Apr 2002 23:56:08 -0000 1.2
+++ MsgContext.java 17 Apr 2002 22:32:45 -0000 1.3
@@ -81,11 +81,18 @@
* @author Costin Manolache
*/
public class MsgContext {
+ private int type;
private Object notes[]=new Object[32];
- private Channel ch;
+ private JkHandler next;
+ private JkHandler source;
private Object req;
private WorkerEnv wEnv;
+ private Msg msgs[]=new Msg[10];
+ // The context can be used by JNI components as well
+ private long jkEndpointP;
+ private long xEnvP;
+
public final Object getNote( int id ) {
return notes[id];
}
@@ -94,6 +101,14 @@
notes[id]=o;
}
+ /** The id of the chain */
+ public final int getType() {
+ return type;
+ }
+
+ public final void setType(int i) {
+ type=i;
+ }
// Common attributes ( XXX should be notes for flexibility ? )
@@ -105,12 +120,20 @@
this.wEnv=we;
}
- public final Channel getChannel() {
- return ch;
+ public final JkHandler getSource() {
+ return source;
+ }
+
+ public final void setSource(JkHandler ch) {
+ this.source=ch;
+ }
+
+ public final JkHandler getNext() {
+ return next;
}
- public final void setChannel(Channel ch) {
- this.ch=ch;
+ public final void setNext(JkHandler ch) {
+ this.next=ch;
}
/** The high level request object associated with this context
@@ -122,5 +145,63 @@
public final Object getRequest() {
return req;
}
+
+ /** The context may store a number of messages ( buffers + marshalling )
+ */
+ public final Msg getMsg(int i) {
+ return msgs[i];
+ }
+
+ public final void setMsg(int i, Msg msg) {
+ this.msgs[i]=msg;
+ }
+ /** Each context contains a number of byte[] buffers used for communication.
+ * The C side will contain a char * equivalent - both buffers are long-lived
+ * and recycled.
+ *
+ * This will be called at init time. A long-lived global reference to the byte[]
+ * will be stored in the C context.
+ */
+ public byte[] getBuffer( int id ) {
+ // We use a single buffer right now.
+ if( msgs[id]==null ) {
+ return null;
+ }
+ return msgs[id].getBuffer();
+ }
+
+ /** Invoke a java hook. The xEnv is the representation of the current execution
+ * environment ( the jni_env_t * )
+ */
+ public int execute() throws IOException {
+ int status=next.invoke(msgs[0], this);
+ return status;
+ }
+
+ // -------------------- Jni support --------------------
+
+ /** Store native execution context data when this handler is called
+ * from JNI. This will change on each call, represent temproary
+ * call data.
+ */
+ public void setJniEnv( long xEnvP ) {
+ this.xEnvP=xEnvP;
+ }
+
+ public long getJniEnv() {
+ return xEnvP;
+ }
+
+ /** The long-lived JNI context associated with this java context.
+ * The 2 share pointers to buffers and cache data to avoid expensive
+ * jni calls.
+ */
+ public void setJniContext( long cContext ) {
+ this.jkEndpointP=cContext;
+ }
+
+ public long getJniContext() {
+ return jkEndpointP;
+ }
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>