1

经过数小时的详尽探索和 Oracle 文档和支持页面,我们无法解决这个问题。

实用程序:loadjava

行动:尝试使用 loadjava 加载 .jar 文件并使用 PL/SQL Api 调用 Java 类。这个 java 类只是简单地向 JMS 队列添加一个值并返回一个状态为 SUCCESS 的字符串。注意:Hello.java 成功运行。

问题:使用 loadjava 成功加载后,当我们通过 Oracle PL/SQL 函数执行时,我们收到以下错误。

ORA-29532:Java 调用被未捕获的 Java 异常终止:javax.jms.JMSRuntimeException:无法实例化类:weblogic.jndi.WLInitialContextFactory

我们的试验:我们认为它缺少一些 Weblogic 库。因此,我们使用 loadjava 实用程序单独添加了 wlthint3client.jar。我们还尝试在“ORACLEHOME\jdk\jre\lib\ext”下添加 wlthint3client.jar,以便在实例加载时获取它。但错误不断发生。我们将此作为原始 jar 的一部分包含在同一问题中。

我们回到基础,创建了 Hello.java 和 Hello.class 并使用 loadjava 加载它们。用调用这个类的PL/SQL函数,它成功了。只有当我们加载一个 .jar 文件时,它才会抛出这个 ContextFactory 错误。

步骤 1:在 ORACLEHOME 命令提示符下:

loadjava -user userschema/password@instance -verbose -force JMessenger-1.0.jar.

它加载成功。以下是输出:

Classes Loaded: 97
Resources Loaded: 13
Sources Loaded: 0
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0

第 2 步:创建一个 PL/SQL 函数:

CREATE OR REPLACE FUNCTION FUN_CALL_JAVA_TST RETURN VARCHAR2 AS

LANGUAGE JAVA NAME 'xyz.abc.messenger.producer.MessageProducer.testPing() return java.lang.String';

/

第三步:我们写了一个调用者:

declare testoutput varchar2(100);

begin testoutput := FUN_CALL_JAVA_TST();

dbms_output.put_line(testoutput);

exception when others then

dbms_output.put_line(sqlerrm);

end;

同样的错误不断出现。

  • OracleHome 安装中的 Java 版本:java 版本“1.8.0_201”

  • Java(TM) SE 运行时环境 (build 1.8.0_201-b09)

  • Java HotSpot(TM) 64 位服务器 VM(内部版本 25.201-b09,混合模式)。

所以我们确保使用正确的 weblogic 版本库。

4

0 回答 0