org.apache.jk.common

Class ChannelJni

Implemented Interfaces:
JkChannel, MBeanRegistration, NotificationListener

public class ChannelJni
extends JniHandler
implements JkChannel

Pass messages using jni

Author:
Costin Manolache

Field Summary

Fields inherited from class org.apache.jk.common.JniHandler

C2B_NOTE, JK_HANDLE_JNI_DISPATCH, JK_HANDLE_SHM_DISPATCH, MB_NOTE, MSG_NOTE, apr, jkHome, nativeJkHandlerP

Fields inherited from class org.apache.jk.core.JkHandler

ERROR, HANDLE_FLUSH, HANDLE_RECEIVE_PACKET, HANDLE_SEND_PACKET, HANDLE_THREAD_END, LAST, OK, domain, id, mserver, name, next, nextName, oname, properties, wEnv

Constructor Summary

ChannelJni()

Method Summary

int
flush(Msg msg, MsgContext ep)
String
getChannelName()
void
init()
Should register the request types it can handle, same style as apache2.
int
invoke(Msg msg, MsgContext ep)
Receive a packet from the C side.
boolean
isSameAddress(MsgContext ep)
int
receive(Msg msg, MsgContext ep)
Receives does nothing - send will put the response in the same buffer
void
registerRequest(Request req, MsgContext ep, int count)
int
send(Msg msg, MsgContext ep)
Send the packet.

Methods inherited from class org.apache.jk.common.JniHandler

appendString, createMsgContext, destroyJkComponent, getJkHome, init, initJkComponent, initNative, invoke, nativeDispatch, pause, recycleNative, resume, setJkHome, setNativeAttribute, setNativeEndpoint

Methods inherited from class org.apache.jk.core.JkHandler

addHandlerCallback, createMsgContext, destroy, getDomain, getId, getName, getNext, getObjectName, getProperty, handleNotification, init, invoke, pause, postDeregister, postRegister, preDeregister, preRegister, resume, setId, setName, setNext, setNext, setProperty, setWorkerEnv

Constructor Details

ChannelJni

public ChannelJni()

Method Details

flush

public int flush(Msg msg,
                 MsgContext ep)
            throws IOException
Specified by:
flush in interface JkChannel


getChannelName

public String getChannelName()
Specified by:
getChannelName in interface JkChannel


init

public void init()
            throws IOException
Should register the request types it can handle, same style as apache2.
Overrides:
init in interface JniHandler


invoke

public int invoke(Msg msg,
                  MsgContext ep)
            throws IOException
Receive a packet from the C side. This is called from the C code using invocation, but only for the first packet - to avoid recursivity and thread problems. This may look strange, but seems the best solution for the problem ( the problem is that we don't have 'continuation' ). sendPacket will move the thread execution on the C side, and return when another packet is available. For packets that are one way it'll return after it is processed too ( having 2 threads is far more expensive ). Again, the goal is to be efficient and behave like all other Channels ( so the rest of the code can be shared ). Playing with java objects on C is extremely difficult to optimize and do right ( IMHO ), so we'll try to keep it simple - byte[] passing, the conversion done in java ( after we know the encoding and if anyone asks for it - same lazy behavior as in 3.3 ).
Specified by:
invoke in interface JkChannel
Overrides:
invoke in interface JniHandler


isSameAddress

public boolean isSameAddress(MsgContext ep)
Specified by:
isSameAddress in interface JkChannel


receive

public int receive(Msg msg,
                   MsgContext ep)
            throws IOException
Receives does nothing - send will put the response in the same buffer
Specified by:
receive in interface JkChannel


registerRequest

public void registerRequest(Request req,
                            MsgContext ep,
                            int count)
Specified by:
registerRequest in interface JkChannel


send

public int send(Msg msg,
                MsgContext ep)
            throws IOException
Send the packet. XXX This will modify msg !!! We could use 2 packets, or sendAndReceive().
Specified by:
send in interface JkChannel


Copyright B) 2000-2003 Apache Software Foundation. All Rights Reserved.