Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The scaffolding tutorial fails with java.lang.UnsatisfiedLinkError: Can't obtain static newInstance method for class com.sun.jna.Structure at com.sun.jna.Native.initIDs #131

Closed
alf239 opened this issue Jun 24, 2016 · 11 comments
Labels

Comments

@alf239
Copy link
Contributor

alf239 commented Jun 24, 2016

Trying to follow https://github.com/aphyr/jepsen/blob/master/doc/scaffolding.md, got the following problem at the step "Next, we'll replace the example test that lein generated (test/jepsen/zookeeper_test.clj) with one that calls the zk-test function, runs the test that function returns, looks at the results, and ensures that the :valid? key is true."

The stack trace is as follows:

alexey@instance-1:~/jepsen.hazelcast$ lein test

lein test jepsen.hazelcast-test

lein test :only jepsen.hazelcast-test/hc-test

ERROR in (hc-test) (FutureTask.java:122)
expected: (:valid? (:results (jepsen/run! (hc/hc-test "3.6.3"))))
  actual: java.util.concurrent.ExecutionException: java.lang.UnsatisfiedLinkError: Can't obtain static newInstance method for class com.sun.jna.Structure
 at java.util.concurrent.FutureTask.report (FutureTask.java:122)
    java.util.concurrent.FutureTask.get (FutureTask.java:192)
    clojure.core$deref_future.invoke (core.clj:2186)
    clojure.core$future_call$reify__6736.deref (core.clj:6683)
    clojure.core$deref.invoke (core.clj:2206)
    clojure.core$pmap$step__6749$fn__6751.invoke (core.clj:6733)
    clojure.lang.LazySeq.sval (LazySeq.java:40)
    clojure.lang.LazySeq.seq (LazySeq.java:49)
    clojure.lang.RT.seq (RT.java:507)
    clojure.core/seq (core.clj:137)
    clojure.core$dorun.invoke (core.clj:3009)
    clojure.core$doall.invoke (core.clj:3025)
    jepsen.core$run_BANG_$fn__6833.invoke (core.clj:398)
    jepsen.core$run_BANG_.invoke (core.clj:379)
    jepsen.hazelcast_test/fn (hazelcast_test.clj:7)
    clojure.test$test_var$fn__7670.invoke (test.clj:704)
    clojure.test$test_var.invoke (test.clj:704)
    clojure.test$test_vars$fn__7692$fn__7697.invoke (test.clj:722)
    clojure.test$default_fixture.invoke (test.clj:674)
    clojure.test$test_vars$fn__7692.invoke (test.clj:722)
    clojure.test$default_fixture.invoke (test.clj:674)
    clojure.test$test_vars.invoke (test.clj:718)
    clojure.test$test_all_vars.invoke (test.clj:728)
    clojure.test$test_ns.invoke (test.clj:747)
    clojure.core$map$fn__4553.invoke (core.clj:2624)
    clojure.lang.LazySeq.sval (LazySeq.java:40)
    clojure.lang.LazySeq.seq (LazySeq.java:49)
    clojure.lang.Cons.next (Cons.java:39)
    clojure.lang.RT.boundedLength (RT.java:1735)
    clojure.lang.RestFn.applyTo (RestFn.java:130)
    clojure.core$apply.invoke (core.clj:632)
    clojure.test$run_tests.doInvoke (test.clj:762)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invoke (core.clj:630)
    user$eval85$fn__144$fn__175.invoke (form-init3003048779867791666.clj:1)
    user$eval85$fn__144$fn__145.invoke (form-init3003048779867791666.clj:1)
    user$eval85$fn__144.invoke (form-init3003048779867791666.clj:1)
    user$eval85.invoke (form-init3003048779867791666.clj:1)
    clojure.lang.Compiler.eval (Compiler.java:6782)
    clojure.lang.Compiler.eval (Compiler.java:6772)
    clojure.lang.Compiler.load (Compiler.java:7227)
    clojure.lang.Compiler.loadFile (Compiler.java:7165)
    clojure.main$load_script.invoke (main.clj:275)
    clojure.main$init_opt.invoke (main.clj:280)
    clojure.main$initialize.invoke (main.clj:308)
    clojure.main$null_opt.invoke (main.clj:343)
    clojure.main$main.doInvoke (main.clj:421)
    clojure.lang.RestFn.invoke (RestFn.java:421)
    clojure.lang.Var.invoke (Var.java:383)
    clojure.lang.AFn.applyToHelper (AFn.java:156)
    clojure.lang.Var.applyTo (Var.java:700)
    clojure.main.main (main.java:37)
Caused by: java.lang.UnsatisfiedLinkError: Can't obtain static newInstance method for class com.sun.jna.Structure
 at com.sun.jna.Native.initIDs (Native.java:-2)
    com.sun.jna.Native.<clinit> (Native.java:135)
    com.jcraft.jsch.agentproxy.usocket.JNAUSocketFactory$CLibrary.<clinit> (JNAUSocketFactory.java:47)
    com.jcraft.jsch.agentproxy.usocket.JNAUSocketFactory.open (JNAUSocketFactory.java:114)
    com.jcraft.jsch.agentproxy.connector.SSHAgentConnector.open (SSHAgentConnector.java:80)
    com.jcraft.jsch.agentproxy.connector.SSHAgentConnector.<init> (SSHAgentConnector.java:48)
    clj_ssh.agent$sock_agent_connector.invoke (agent.clj:15)
    clj_ssh.agent$connect.invoke (agent.clj:35)
    clj_ssh.ssh$ssh_agent.invoke (ssh.clj:148)
    jepsen.control$session.invoke (control.clj:193)
    clojure.lang.AFn.applyToHelper (AFn.java:154)
    clojure.lang.AFn.applyTo (AFn.java:144)
    clojure.core$apply.invoke (core.clj:630)
    clojure.core$with_bindings_STAR_.doInvoke (core.clj:1868)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invoke (core.clj:634)
    clojure.core$bound_fn_STAR_$fn__4439.doInvoke (core.clj:1890)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invoke (core.clj:630)
    jepsen.core$fcatch$wrapper__6696.doInvoke (core.clj:55)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$pmap$fn__6744$fn__6745.invoke (core.clj:6729)
    clojure.core$binding_conveyor_fn$fn__4444.invoke (core.clj:1916)
    clojure.lang.AFn.call (AFn.java:18)
    java.util.concurrent.FutureTask.run (FutureTask.java:266)
    java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617)
    java.lang.Thread.run (Thread.java:745)
Ran 1 tests containing 1 assertions.
0 failures, 1 errors.
Tests failed.
alexey@instance-1:~/jepsen.hazelcast$

(I did call the test jepsen.hazelcast, but otherwise it's the same dummy test)

The system is as follows:

alexey@instance-1:~$ uname -a
Linux instance-1 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux
alexey@instance-1:~$ dpkg -s libjna-java
Package: libjna-java
Status: install ok installed
Priority: optional
Section: java
Installed-Size: 233
Maintainer: Debian Java maintainers <pkg-java-maintainers@lists.alioth.debian.org>
Architecture: all
Version: 4.1.0-1
@aphyr
Copy link
Collaborator

aphyr commented Jun 24, 2016

Sounds like some sort of JNA problem, but I haven't seen this before so I'm not sure. Perhaps your system java doesn't use that libjna?

@alf239
Copy link
Contributor Author

alf239 commented Jun 24, 2016

It does sound like that indeed; but I thought JNA is a self-containing .jar? Do I need any special dance for openjdk to use JNA? (I'll google for sure and will report if/when solved, it's just if you happen to know, that'd be great)

@alf239
Copy link
Contributor Author

alf239 commented Jun 24, 2016

One more question... at https://github.com/aphyr/jepsen, you say that one needs to install libjna-java; but then it's a self-containing jar, and maven/leiningen downloads it just fine on its own—why would one need to install it?

@alf239
Copy link
Contributor Author

alf239 commented Jun 24, 2016

JNA itself seems to be fine:

alexey@instance-1:~/jna-test$ cat HelloWorld.java 
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
/** Simple example of JNA interface mapping and usage. */
public class HelloWorld {
    // This is the standard, stable way of mapping, which supports extensive
    // customization and mapping of Java to native types.
    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary)
            Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
                               CLibrary.class);
        void printf(String format, Object... args);
    }
    public static void main(String[] args) {
        CLibrary.INSTANCE.printf("Hello, World\n");
        for (int i=0;i < args.length;i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }
    }
}
alexey@instance-1:~/jna-test$ javac -classpath /usr/share/java/jna.jar HelloWorld.java 
alexey@instance-1:~/jna-test$ java -classpath /usr/share/java/jna.jar:. HelloWorld 
Hello, World
alexey@instance-1:~/jna-test$ 

@alf239
Copy link
Contributor Author

alf239 commented Jun 24, 2016

The JNA in the maven repo isn't:

alexey@instance-1:~/jna-test$ javac -classpath ~/.m2/repository/net/java/dev/jna/jna/3.4.0/jna-3.4.0.jar HelloWorld.java 
alexey@instance-1:~/jna-test$ java -classpath ~/.m2/repository/net/java/dev/jna/jna/3.4.0/jna-3.4.0.jar:. HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't obtain static newInstance method for class com.sun.jna.Structure
        at com.sun.jna.Native.initIDs(Native Method)
        at com.sun.jna.Native.<clinit>(Native.java:135)
        at HelloWorld$CLibrary.<clinit>(HelloWorld.java:14)
        at HelloWorld.main(HelloWorld.java:21)
alexey@instance-1:~/jna-test$ 

It seems that it might make sense to upgrade JNA in jepsen dependencies...

@alf239
Copy link
Contributor Author

alf239 commented Jun 24, 2016

Changing the project file to

(defproject jepsen.hazelcast "0.1.0-SNAPSHOT"
  :description "Jepsen: Hazelcast"
  :url "http://www.kamchatkaltd.co.uk/jepsen-hazelcast"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.7.0"]
                 [jepsen "0.0.9" :exclude net.java.dev.jna/jna]
                 [avout "0.5.4"]
                 [net.java.dev.jna/jna "4.1.0"]])

seems to do the trick.

@alf239
Copy link
Contributor Author

alf239 commented Jun 24, 2016

Yep, it does... @aphyr, will it make any sense to adjust the tutorial and/or the dependencies? I solved the problem for myself by overriding the dependency, but am happy to dig further, e.g. finding a compatible version of jsch.

@aphyr
Copy link
Collaborator

aphyr commented Jun 24, 2016

Looks like this jna dep is required by com.jcraft/jsch.agentproxy.usocket-jna, which is pulled in by clj-ssh 0.5.14, so if you're having compatibility problems with that jna package, perhaps it's worth filing a ticket on jsch? Since this has (so far) worked for other users, I'm hesitant to add a dep exclusion that could break that support--but I also don't understand JNA that well so I could be wrong.

@sani3854
Copy link

java.lang.ExceptionInInitializerError
at com.neurotec.lang.NCore.(NCore.java:140)
at com.muzima.biometric.activity.FingerActivity.onCreate(FingerActivity.java:93)
at android.app.Activity.performCreate(Activity.java:6010)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

How to solution this error

@sani3854
Copy link

java.lang.ExceptionInInitializerError
at com.neurotec.lang.NCore.(NCore.java:140)
at com.muzima.biometric.activity.FingerActivity.onCreate(FingerActivity.java:93)
at android.app.Activity.performCreate(Activity.java:6010)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.UnsatisfiedLinkError: Can't obtain static newInstance method for class com.sun.jna.Structure
at com.sun.jna.Native.initIDs(Native Method)
at com.sun.jna.Native.(Native.java:135)
at com.sun.jna.NativeLibrary.(NativeLibrary.java:67)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java)
at com.neurotec.lang.NCore.(NCore.java:132)
at com.muzima.biometric.activity.FingerActivity.onCreate(FingerActivity.java:93) 
at android.app.Activity.performCreate(Activity.java:6010) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
at android.app.ActivityThread.access$800(ActivityThread.java:155) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5343) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

how to solution of this error ??? rep me

@aphyr
Copy link
Collaborator

aphyr commented Nov 17, 2016

Sounds like your JVM doesn't have JNA set up?

@aphyr aphyr closed this as completed Nov 21, 2017
@mkcp mkcp added the question label Feb 5, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants