Ergebnis 1 bis 4 von 4

Thema: plJava - java.lang.ClassNotFoundException:

  1. #1
    THILL ist offline Neuer Benutzer
    Registriert seit
    30.09.2007
    Beiträge
    23

    Standard plJava - java.lang.ClassNotFoundException:

    Hallo,

    bekomme meine erste eigene Java-Function nicht ans Laufen.

    Habe auf meinem PostgreSQL 8.3 Server plJava installiert und auch die mitgelieferten examples erfolgreich ausführen können, d.h.
    nach der erforderlichen Installation der benötigten Komponenten und Defintion der Funktion
    Code:
    CREATE FUNCTION getsysprop(VARCHAR)
      RETURNS VARCHAR AS
    $body$
      java.lang.System.getProperty
    $body$
    LANGUAGE java;
    bringt der Befehl
    Code:
    SELECT getsysprop('user.home');
    das erwartete Ergebnis:
    Code:
    /var/lib/postgresql
    Nun zu meiner ersten eigenen Jave-Function. Folgender Java source code
    Code:
    package allDatabasesPk;
    
    import java.sql.*;
    
    public class Functions {
        public static String CURRENT_USERNAME( String vcLogin )
        throws SQLException
    {
        String vcUserName = "Hill, Thomas";
        return vcUserName;
    }
    
    }
    wurde mit
    Code:
    javac Functions.java
    übersetzt und die entstandene Functions.class mittel
    Code:
    jar -cf common.jar *.class
    in eine JAR common.jar gepackt.

    Und das JAR file in die DB geladen:
    Code:
    SELECT sqlj.install_jar('file:///var/lib/tomcat5.5/webapps/postgreSQL/WEB-INF/lib/common.jar', 'common', false);
    SELECT sqlj.set_classpath('javatest', 'common');
    Mittels pgadmin wurde überprüft, dass die Funktion "CURRENT_USERNAME" im Schema javatest auch existert. Show class_path zeigt, dass javatest auch im Suchpfad ist.

    Mit folgendem Befehl wurde dann die Funktion definiert:
    Code:
    CREATE OR REPLACE FUNCTION javatest."CURRENT_USERNAME"(VARCHAR)
      RETURNS VARCHAR AS 'allDatabasesPk.Functions.CURRENT_USERNAME'
    LANGUAGE java;
    Leider führt
    Code:
    SELECT javatest."CURRENT_USERNAME"('xxx');
    aber immer zu dem Ergebnis
    Code:
    ERROR:  java.lang.ClassNotFoundException: allDatabasesPk.Functions
    
    ********** Fehler **********
    
    ERROR: java.lang.ClassNotFoundException: allDatabasesPk.Functions
    SQL Status:XX000
    Habe schon alle möglichen Varianten im Create Function Statement ausprobiert (z.B. RETURNS varchar AS 'allDatabasePk.Functions.CURRENT_USERNAME()' oder auch
    'allDatabasePk.Functions.CURRENT_USERNAME(java.lan g.String)' oder auch
    javatest weggelassen), was alles leider nicht zum gewünschten Erfolg geführt hat.

    Danke für die Hilfe.

  2. #2
    THILL ist offline Neuer Benutzer
    Registriert seit
    30.09.2007
    Beiträge
    23

    Standard

    Hallo,

    habe die Lösung gefunden.

    Anstelle von
    Code:
    jar -cf common.jar *.class
    im Verzeichnis allDatabasesPk abzusetzen

    muss man ein Verzeichnis höher
    Code:
    jar -cf common.jar allDatabasesPk/*.class
    zur Erzeugung des JAR Files verwenden.

  3. #3
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Ich habe irgendwie noch niemanden gefunden, der plJava ernsthaft einsetzt. Selbst die Firmen, die clientseitig mit Java arbeiten und sich das angeschaut haben, fanden das Handling zu kompliziert.

    Aber Danke, dass du die Problemlösung hier auch veröffentlicht hast, vielleicht hilft das jemandem anderes mal weiter.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  4. #4
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    493

    Standard

    Die Lösung hat jetzt nicht direkt was mit PL/Java zu tun.

    Das sind die ganz "normalen" Regeln bzgl. Package-Struktur und Erzeugung einer jar-Datei

    Das Programm hätte auch ausserhalb von PL/Java nicht funktioniert, wenn die jar Datei so gebaut wird.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum