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 IOException
Should register the request types it can handle,
same style as apache2.
- 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 ).
- invoke in interface JkChannel
- invoke in interface JniHandler
receive
public int receive(Msg msg,
MsgContext ep)
throws IOException
Receives does nothing - send will put the response
in the same buffer
- receive 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().
- send in interface JkChannel
Copyright B) 2000-2003 Apache Software Foundation. All Rights Reserved.