0

ロードした JAR ファイルを呼び出す関数を実行すると、Postgres 内で java.lang.ClassNotFoundException: エラーが発生します。PL/JAVA (配布されたサンプルを含む) をデータベースにインストールして構成し、サンプルを正常に実行できます。最初の JAR をロード/インストールしようとはしていませんが、何か問題があります。

私のホストは OS バージョンを制御します: CentOS 6.8. Postgres はバージョン 8.4 です。

提供されたサンプル Parameters.addOne クラスの派生物である、独自の非常に単純な Java クラスをインストールしようとしています。私のコードはすべて /tmp にあります。私が従った手順は次のとおりです。

Doug.java:

    package com.msmetric;
    import java.math.BigDecimal;
    import java.sql.Date;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Time;
    import java.sql.Timestamp;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.TimeZone;
    import java.util.logging.Logger;

    public class Doug {
      public static int addOne(int value) {
        return value + 1;
       }
    }
  1. 「javac Doug.java」を使用して Doug.java をコンパイルすると、成功します。

  2. 「jar -cvf Doug.jar Doug.class」を使用して、Doug.class ファイルを含む JAR ファイルを作成します。これはうまくいきます。

ここで、JAR ファイルを Postgres (パブリック スキーマ) にロードし、クラスパスを変更し、JAR を呼び出す関数を作成してから、psql プロンプトで実行を試みます。

  1. psql から sqlj.install_jar を実行します。

    select sqlj.install_jar('file:/tmp/Doug.jar','Doug',false);
    
  2. Postgres 内のクラスパスを設定します (psql プロンプト postgres=# から):

    select sqlj.set_classpath('public','Doug');
    
  3. JAR を呼び出す関数を作成します。この作成関数コードは、PL/JAVA に付属の examples.ddr ファイルから直接取得されます。org.postgres を com.msmetric に変更しただけです。

    create or replace function addone(int) returns int as 'com.msmetric.Doug.addOne(java.lang.Integer)' language java;
    

JAR が読み込まれ、関数が作成されたので、実行してみます。この関数は、提供された数値に 1 を加算するだけです。

    select addone(3);

結果: エラー: java.lang.ClassNotFoundException: com.msmetric.Doug

考え?

4

1 に答える 1