org.apache.jk.common
Class ChannelJni
- JkChannel, MBeanRegistration, NotificationListener
Pass messages using jni
- Costin Manolache
ERROR, HANDLE_FLUSH, HANDLE_RECEIVE_PACKET, HANDLE_SEND_PACKET, HANDLE_THREAD_END, LAST, OK, domain, id, mserver, name, next, nextName, oname, properties, wEnv |
appendString, createMsgContext, destroyJkComponent, getJkHome, init, initJkComponent, initNative, invoke, nativeDispatch, pause, recycleNative, resume, setJkHome, setNativeAttribute, setNativeEndpoint |
addHandlerCallback, createMsgContext, destroy, getDomain, getId, getName, getNext, getObjectName, getProperty, handleNotification, init, invoke, pause, postDeregister, postRegister, preDeregister, preRegister, resume, setId, setName, setNext, setNext, setProperty, setWorkerEnv |
ChannelJni
public ChannelJni()
init
public void init()
throws IOExceptionShould register the request types it can handle,
same style as apache2.
- init in interface JniHandler
invoke
public int invoke(Msg msg,
MsgContext ep)
throws IOExceptionReceive 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 ).
- invoke in interface JkChannel
- invoke in interface JniHandler
receive
public int receive(Msg msg,
MsgContext ep)
throws IOExceptionReceives does nothing - send will put the response
in the same buffer
- receive in interface JkChannel
send
public int send(Msg msg,
MsgContext ep)
throws IOExceptionSend the packet. XXX This will modify msg !!!
We could use 2 packets, or sendAndReceive().
- send in interface JkChannel
Copyright B) 2000-2003 Apache Software Foundation. All Rights Reserved.