Hi Martin, all,

the native code, either a .so or .dll, lives in the uber.jar at /META-INF/lib/. We then link this in via wapmx's native loader:

import com.wapmx.nativeutils.jniloader.NativeLoader;

class LoadJNI {

static {
        String libName = "tsk4j";
        try {
            System.err.println( "Loading: " + libName );
            NativeLoader.loadLibrary( libName );
        } catch( IOException ioe ) {
            throw new ExceptionInInitializerError( ioe );
        }
    }
}

The NativeLoader will create ./tmplib and dump the .so in there and then call Java's regular loader. So the only side-effect is the ./tmplib creation. And I imagine you could register a deleteOnExit hook to even clean that up, I don't bother.

My LoadJNI class is essentially a dummy class purely to do the native load. In classes where I actually HAVE native methods which are to be found in the .so, I force a class dependency:

class HasNatives {

void native foo();

static {
  LoadJNI dummy = new LoadJNI();
}

Short of multi-class-loader issues, this seems to work. All of my classes which depend on the .so for their native are 'regular' classes with no fancy class loader things going on.

Any better ideas on how to ensure the .so loaded before any use would be welcomed.

Stuart



Stuart

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to