Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-users] Hot deploy context that uses JNI

Hello,

I can see from the archives that this question has come up before, but
I can't find an answer to it.  Apologies if I missed one.

I'm trying to hot deploy a web context that uses a JNI library.  I'm
using jetty-6.1.26, but I can switch versions if necessary.  The
library is scalaqlite [1].  The first time I start jetty, the library
loads fine and works.  But if I touch contexts/foo.xml, reloading the
app, the next access causes an exception:

  java.lang.UnsatisfiedLinkError: Native Library
/home/srhea/src/foo/lib/libscalaqlite.so already loaded in another
classloader

libscalaqlite.so contains the JNI implementation of the Sqlite3C
class, which is written in Java.

I've tried a number of things to fix this.  Setting

  <Set name="parentLoaderPriority">true</Set>

in jetty.xml causes the JVM (1.6.0_22-b04, although 1.5.0_22-b03
crashes as well) to crash with this error:

  # A fatal error has been detected by the Java Runtime Environment:
  #  SIGSEGV (0xb) at pc=0x6ef1adcc, pid=10998, tid=1852078992

I also tried calling setSystemClasses to include Sqlite3C [2], but
that caused another JVM crash:

*** glibc detected *** /home/srhea/src/jdk1.6.0_22/bin/java:
munmap_chunk(): invalid pointer: 0x6e310b44 ***

Am I missing something obvious?  Or do people just not do this sort of thing?

Also, if you'd like me to put together a small webapp that
demonstrates the problem, just let me know.  It shouldn't take long.

Thanks in advance for any help you can provide,
Sean

1. https://github.com/srhea/scalaqlite
2. The full command in my jetty.xml was:

  <Set name="systemClasses">
    <Array type="java.lang.String">
      <Item>java.</Item>
      <Item>javax.servlet.</Item>
      <Item>javax.xml.</Item>
      <Item>org.mortbay.</Item>
      <Item>org.xml.</Item>
      <Item>org.w3c.</Item>
      <Item>org.apache.commons.logging.</Item>
      <Item>org.apache.log4j.</Item>
      <Item>Sqlite3C</Item>
    </Array>
  </Set>

-- 
"I refuse to accept the idea that the ‘isness’ of man’s present nature
makes him morally incapable of reaching up for the eternal ‘oughtness’
that forever confronts him." --MLK


Back to the top