Methods Summary |
---|
public void | addJkHandler(java.lang.String type, org.apache.jk.core.JkHandler cb)Add a Handler for jni callbacks.
jkHandlers.put( type, cb );
|
public static java.lang.Object | createJavaContext(java.lang.String type, long cContext)
// XXX will be an instance method, fields accessible directly
AprImpl apr=aprSingleton;
JkChannel jkH=(JkChannel)apr.jkHandlers.get( type );
if( jkH==null ) return null;
MsgContext ep=jkH.createMsgContext();
ep.setSource( jkH );
ep.setJniContext( cContext );
return ep;
|
public native long | createJkHandler(long xEnv, java.lang.String compName)
|
public static byte[] | getBuffer(java.lang.Object ctx, int id)Return a buffer associated with the ctx.
return ((MsgContext)ctx).getBuffer( id );
|
public native long | getJkEnv()
|
public native long | getJkHandler(long xEnv, java.lang.String compName)Get a native component
|
public void | init()
try {
initialized=true;
loadNative();
initialize();
jkSetAttribute(0, 0, "channel:jni", "starting");
log.info("JK: Initialized apr" );
} catch( Throwable t ) {
throw new IOException( t.toString() );
}
ok=true;
|
public native int | initialize()Initialize APR
|
public boolean | isLoaded()
if( ! initialized ) {
try {
init();
} catch( Throwable t ) {
log.info("Apr not loaded: " + t);
}
}
return ok;
|
public native int | jkDestroy(long xEnv, long componentP)
|
public native java.lang.String | jkGetAttribute(long xEnv, long componentP, java.lang.String name)
|
public native int | jkInit(long xEnv, long componentP)
|
public static native int | jkInvoke(long xEnv, long componentP, long endpointP, int code, byte[] data, int off, int len, int raw)Send the packet to the C side. On return it contains the response
or indication there is no response. Asymetrical because we can't
do things like continuations.
|
public native void | jkRecycle(long xEnv, long endpointP)Recycle an endpoint after use.
|
public native int | jkSetAttribute(long xEnv, long componentP, java.lang.String name, java.lang.String val)
|
public static int | jniInvoke(long jContext, java.lang.Object ctx)
try {
MsgContext ep=(MsgContext)ctx;
ep.setJniEnv( jContext );
ep.setType( 0 );
return ((MsgContext)ctx).execute();
} catch( Throwable ex ) {
ex.printStackTrace();
return -1;
}
|
public static void | jniMode()
jniMode=true;
|
public void | loadNative()This method of loading the libs doesn't require setting
LD_LIBRARY_PATH. Assuming a 'right' binary distribution,
or a correct build all files will be in their right place.
The burden is on our code to deal with platform specific
extensions and to keep the paths consistent - not easy, but
worth it if it avoids one extra step for the user.
Of course, this can change to System.load() and putting the
libs in LD_LIBRARY_PATH.
if( aprHome==null )
aprHome=baseDir;
// XXX Update for windows
if( jniMode ) {
/* In JNI mode we use mod_jk for the native functions.
This seems the cleanest solution that works with multiple
VMs.
*/
if (jniModeSo.equals("inprocess")) {
ok=true;
return;
}
try {
log.info("Loading " + jniModeSo);
if( jniModeSo!= null ) System.load( jniModeSo );
} catch( Throwable ex ) {
// ignore
//ex.printStackTrace();
return;
}
ok=true;
return;
}
/*
jkjni _must_ be linked with apr and crypt -
this seem the only ( decent ) way to support JDK1.4 and
JDK1.3 at the same time
try {
System.loadLibrary( "crypt" );
} catch( Throwable ex ) {
// ignore
ex.printStackTrace();
}
try {
System.loadLibrary( "apr" );
} catch( Throwable ex ) {
System.out.println("can't load apr, that's fine");
ex.printStackTrace();
}
*/
try {
if( nativeSo == null ) {
// This will load libjkjni.so or jkjni.dll in LD_LIBRARY_PATH
log.debug("Loading jkjni from " + System.getProperty("java.library.path"));
System.loadLibrary( "jkjni" );
} else {
System.load( nativeSo );
}
} catch( Throwable ex ) {
ok=false;
//ex.printStackTrace();
throw ex;
}
|
public void | loadNative(java.lang.String libPath)
try {
System.load( libPath );
} catch( Throwable ex ) {
ok=false;
if( log.isDebugEnabled() )
log.debug( "Error loading native library ", ex);
}
|
public native void | releaseJkEnv(long xEnv)Clean the temp pool, put back the env in the pool
|
public void | setAprHome(java.lang.String s)
aprHome=s;
|
public void | setBaseDir(java.lang.String s)Native libraries are located based on base dir.
XXX Add platform, version, etc
baseDir=s;
|
public static void | setErr(java.lang.String filename)Sets the System.err stream
try{
if( filename !=null ){
System.setErr( new PrintStream(new FileOutputStream(filename )));
}
}catch (Throwable th){
}
|
public void | setJniModeSo(java.lang.String jniModeSo)Name of the so used in inprocess mode
this.jniModeSo=jniModeSo;
|
public void | setNativeSo(java.lang.String nativeSo)name of the so used by java. If not set we'll loadLibrary("jkjni" ),
if set we load( nativeSo )
this.nativeSo=nativeSo;
|
public static void | setOut(java.lang.String filename)Sets the System.out stream
try{
if( filename !=null ){
System.setOut( new PrintStream(new FileOutputStream(filename )));
}
}catch (Throwable th){
}
|
public void | setSoExt(java.lang.String s)
soExt=s;
|
public native int | terminate()
|