2

Oracle XML (BI) Publisher レポート (ビジネス インテリジェンスで使用される BI Publisher ではなく、Oracle Applications で使用される XML Publisher) 機能を取得し、レポートの出力を clob として提供できる Java 関数を徐々に作成しようとしています。したがって、基本的には、税金ファイルを出力するレポート定義とテンプレートを取得し、代わりに税金ファイルを clob に返し、PLSQL を使用してさらに操作できるようにしたいと考えています。これを行うことができる既存の関数を知っている人がいたら教えてください。

Java についてあまり知らなかったので、このStack Overflow Calling Java from PL/SQLの質問を取り上げて、それを開始して拡張しようとしました。

ただし、一部のクラスを Java プログラムにインポートできません。

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Hello" AS
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Serializable;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import oracle.apps.xdo.oa.schema.server.TemplateHelper;
public class Hello
{
   public static String world()
   {
      return "Hello world";
   }
};
/

私が試してみるとimport oracle.apps.xdo.oa.schema.server.TemplateHelper;、Javaコンパイルは失敗します

JAVA SOURCE のエラー Hello:

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0      Hello:13: cannot find symbol
0/0      symbol  : class TemplateHelper
0/0      1 error
0/0      import oracle.apps.xdo.oa.schema.server.TemplateHelper;
0/0      ^
0/0      location: package oracle.apps.xdo.oa.schema.server

クラス TemplateHelper は、$JAVA_TOP が CLASSPATH に含まれているサーバーの $JAVA_TOP/oracle/apps/xdo/oa/schema/server/TemplateHelper.class の下にあります。

私も試しました

loadjava -user apps ./oracle/apps/xdo/oa/schema/server/TemplateHelper.class

しかし、何らかの理由でこれが返されます

SQL Error while connecting with oci8 driver to default database: Closed Connection
exiting  : could not open connection

他のすべてのプログラムは接続で正常に動作しますが。

クラスをインポートする方法を知っている人はいますか?

4

1 に答える 1

2

あなたが試すことができますCREATE JAVA CLASS

CREATE OR REPLACE DIRECTORY xml_template_dir
  AS '/path/to/oracle/apps/xdo/oa/schema/server/';
/

CREATE JAVA CLASS USING BFILE (xml_template_dir, 'TemplateHelper.class' )
/

ただし、これはクラスをロードする可能性がありますが、ほぼ確実に他の依存関係があり、そのクラスを使用しようとすると失敗し、それらの依存関係をロードし、次に依存関係の依存関係などをロードする必要があります...

パッケージ全体を含むを見つけてJAR(または既存のディレクトリ構造から自分でパッケージを作成して)、次を使用することをお勧めしますloadjava

loadjava -user APPS/password@sid -resolve XML_Publisher.jar

(ロードに失敗した既存のクラスを上書きする必要がある場合は、-forceオプションも必要になる場合があります。)

次に、以下を使用してロードに失敗したかどうかをテストできます。

SELECT object_name
FROM   user_objects
WHERE  object_type = 'JAVA CLASS'
AND    status != 'VALID';

また、クラスが正常にロードされたからといって、クラスを呼び出したときに実行時例外が生成されないわけではありません。

于 2017-10-05T09:05:38.113 に答える