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
CREATE FUNCTION getsysprop(VARCHAR)
RETURNS VARCHAR AS
$body$
java.lang.System.getProperty
$body$
LANGUAGE java;
bringt der Befehl
SELECT getsysprop('user.home');
das erwartete Ergebnis:
/var/lib/postgresql
Nun zu meiner ersten eigenen Jave-Function. Folgender Java source 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
javac Functions.java
übersetzt und die entstandene Functions.class mittel
jar -cf common.jar *.class
in eine JAR common.jar gepackt.
Und das JAR file in die DB geladen:
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:
CREATE OR REPLACE FUNCTION javatest."CURRENT_USERNAME"(VARCHAR)
RETURNS VARCHAR AS 'allDatabasesPk.Functions.CURRENT_USERNAME'
LANGUAGE java;
Leider führt
SELECT javatest."CURRENT_USERNAME"('xxx');
aber immer zu dem Ergebnis
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.lang.String)’ oder auch
javatest weggelassen), was alles leider nicht zum gewünschten Erfolg geführt hat.
Danke für die Hilfe.