# DLL, eigene Klasse, Tomcat und JSP



## manni (12. Jul 2006)

Hallo,
diesmal habe ich ein Problem beim aufrufen einer externen DLL (Codeauszug).

test.java:

```
package pack;
private class Test{
   private native short Initialize(String dll);
        private native short Version(StringBuffer retDllLoaded);
  static {
    System.loadLibrary("JavaWrapper");
    }
public static void main(String[] args)
    {
       Test test= new Test();
        System.out.println("connected");
       try {
          test.Initialize("contact"); // --> using contact.dll
       } catch (Exception e) {
          System.out.println("Error = " + e);
       }
}
```

Wenn ich meine zwei DLL Dateien contact.dll und JavaWrapper.dll gemeinsam mit der test.class in einem Eclipse Projekt anlege, und dann die test-Klasse starte, läuft alles wunderbar.

Mein Ziel ist aber, das über eine JSP Seite auf einem Tomcat Server aufzurufen, und da habe ich meine Probleme. Ich habs malso probiert:

test.jsp:
.....

```
<body>
   <%@ page import="pack.*" errorPage="" %>
   <%
        Test test= new Test();
        out.println("connected");
       try {
          test.Initialize("contact"); // --> using contact.dll
       } catch (Exception e) {
          out.println("Error = " + e);
       }
        %>
```
.....

Ausserdem habe ich die Klasse test und ihre Methoden von private auf public geändert.

Die DLL Dateien habe ich in WEB-INF der Applikation am TomcatServer ablegt.
Aber das klappt nicht, ich bekomme folgenden Fehler:
java.lang.UnsatisfiedLinkError: Initialize
   pack.Test.Initialize(Native Method)
Ich habe auch versucht die DLL's im Windows/System32 Verzeichnis abzulegen, aber das macht keinen Unterschied.

Hat jemand eine Idee wo der Fehler liegt?

Manni


----------



## kama (12. Jul 2006)

Hi,

ich würde zuerst mal versuchen, die Method "initalize" als public zu deklarieren und auch die dazugehörige Klasse "public" zu deklarieren. Weiterhin wäre es durchaus sinnvoll die Klasse für den Zugriff in eine eigene Datei zu legen.

MfG
Karl Heinz


----------



## manni (12. Jul 2006)

Hi,

ja, das public hab ich auch schon geändert - nützt aber nichts.

Was meinst du mit in eigene Datei legen? Ein JAR erstellen?

Manni


----------



## manni (12. Jul 2006)

ich habe gerade bemerkt, dass mein Problem schon auftritt, wenn ich die Java Klasse ins Tomcat Webverzeichnis meiner Applikation stelle.
Lokal klappt es, aber sobald ich ein Package am Tomcat Server anlege, und dann die Klasse Test starte, erhalte ich denselben Fehler:
java.lang.UnsatisfiedLinkError: Initialize 

Manni


----------



## manni (12. Jul 2006)

ok - jetzt habe ich die test.class wieder aus dem Package entfernt, und siehe da, das klappt doch auch auf dem Tomcat Server.

ABER
Nur möchte ich die Klasse mit ihren nativen Methoden ja eigentlich von einer JSP-Seite ansteuern, und das sieht jetzt so aus:

```
public class Test{
   public native short Initialize(String dll);
        
  static {
    System.loadLibrary("JavaWrapper");
    }
}
```

JSP Seite

```
<%@ page errorPage="" %>
   <%
        Test test=new Test();
       try {
          test.Initialize("contact"); // --> using contact.dll
       } catch (Exception e) {
          System.out.println("Error = " + e);
       }

        %>
```

Leider gibts einen Fehler:
..unable to compile
... Test cannot be resolved to a type

Also findet er die Test Klasse nicht, die in webapps\testapp\WEB-INF\classes liegt.
Aber warum?

Manni


----------

