# JNI und Tomcat



## LeXxXxXx (23. Jan 2007)

Hi, ich hab folgendes Problem. Ich habe auf der einen Seite eine Webanwendung basierend auf JavaServlets, diese sollen auf eine C++ DLL zugreifen, dafür habe ich die Hüllklasse JNIInterface geschrieben, welche im mom nicht allzuviel macht, außer eine native Methode über JNI aufzurufen, aber genau da schlägt sie fehl. Die klasse kann die Bibliothek noch laden, sobald sie aber die Methode ausführen soll bricht sie zsammen mit einem UnsatisfiedLinkError. Der selbe Code funktioniert in einer Java-Anwednung einwandfrei, deshalb glaub ich liegt es an den Tomcat settings, hat jmd eine Idee, was ich Tomcat beibringen muss?


----------



## Roar (23. Jan 2007)

die dll muss unter einem bestimmten pfad gespeichert sein. der pfad ist der selbe wie der, von dem aus java.exe ausgeführt wird.
gib mal die system properties "user.dir" und "java.library.path" aus im servlet dann siehst wo die hinmus.


----------



## LeXxXxXx (23. Jan 2007)

Das nützt nix, er findet die DLL ja irgendwie schon, aber er findets trotzdem nicht:

java.lang.UnsatisfiedLinkError: StartDTVLink
	at jni.JNIInterface.StartDTVLink(Native Method)
	at classes.DTVLinkTest.doGet(DTVLinkTest.java:34)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:833)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1285)
	at java.lang.Thread.run(Unknown Source)

//Ausgabe
User-Dir:\eclipse
Libary-Path:null


----------



## Roar (23. Jan 2007)

und die dll liegt in d:\eclipse ?
> Libary-Path:null
wenn du dich nicht verschrieben hast (wovon ich mal ausgehe: es heißt lib*r*ary) würd ich mir sorgen machen...


----------



## LeXxXxXx (23. Jan 2007)

Sie liegt drin, er meckrt ja nicht wegen der DLL sondern erst wenn er die Methode aufruft, wenn er die DLL net finden würde, würde er vorher meckern, bei dem anderen hab ich mich verschrieben, danke für den Tipp, aber vorran liegt es das er die Methode aus der DLL nicht findet obwohl er die DLL findet -.-


----------

