You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by ju...@bbs.darktech.org on 2002/09/10 17:19:52 UTC

Can't use JNI under Tomcat!

Hi,

   Java has a known limitation whereby native libraries can only be loaded once per JVM. That means that if two separate classloaders try to System.loadLibrary() on the same library, the second one will fail and subsequently all function calls requiring access to the library will fail.

   Sun has posted a workaround. To guarantee the library is only loaded once, all classes having a dependency on the native library should be instantiated in the child classloader. For for example if classes A and B make use of class C, where class C actually calls:

static
{
  System.loadLibrary("mylib");
}

     Then class C should be instanciated in a some classloader whereby classes A and B should be loaded in one of the children of that classloader. This guarantees for that any numbers of instances of classes A and B there will only be one instance of C, always.

     The problem is that there doesn't seem to be a way to do this under Tomcat and as a result, it is impossible to safely use JNI under Tomcat. For example, I found that upon modifying and recompiling classes A or B, hitting some JSP file which referred to them caused them to load in a new classloader which caused C to be loaded a second time (since I could only get class C to load in the same classloader as A and B).

     I await your feedback.

Thanks,
Gili

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>