Oracle 调用另一台机器上的 Java 方法

Posted

技术标签:

【中文标题】Oracle 调用另一台机器上的 Java 方法【英文标题】:Oracle call to Java method on another machine 【发布时间】:2012-08-29 14:56:25 【问题描述】:

根据架构师的要求,我不允许将 java 类编译到我们正在运行的 Oracle 实例中,因此我正在寻找替代方案。要求是利用位于网络上的应用程序服务器上的 java 库。是否可以从 PL/SQL 调用位于另一台机器上的 java 方法?我发现this article 在谈论 Oracle 中的外部过程,但我不确定它是否允许这样做。另一方面,性能还必须足够快,才能用于批处理数千或数百万次调用。

【问题讨论】:

【参考方案1】:

我怀疑您能做的最好的事情就是将条目添加到您的 Java 进程轮询以获取每条或一批消息的另一个表中。 Oracle 并不是真正为消息处理而设计的。

无论如何,我会与您的建筑师讨论如何做,因为他是专家。 ;)

如果您的 Oracle 系统无法完成这项工作,您可能需要一个不使用 Oracle 的解决方案。

【讨论】:

谢谢。我们目前正在讨论这个问题,并且有与您的类似的替代方案,但采用逐步调度而不是轮询。我很好奇,为什么你排除了外部程序方法? @Alex 主要是因为我最后一次使用它(十多年前)它真的很慢。现在可能会更好。 现在看起来确实更好了,但您仍然有一个问题,即您的通信需要足够快,使用您的库作为外部程序并不好。 我希望有某种方法可以缓存外部过程以在第一次调用后在本地运行,或者只是从远程位置加载它以在本地运行,但我想这是不可能的。感谢您的洞察力。 你可以缓存它所做的一些工作,但是它总是会有一些开销,除非你异步调用方法,否则它会比调用库作为外部过程花费更长的时间。【参考方案2】:

您有三个选择:

1.) 我们通过使用 UTL_HTTP 让 PL/SQL 调用 HTTP,然后让应用服务器调用 java 过程来解决类似的问题。我们这样做是为了将我们的 Oracle 数据库与 Oracle Reports 连接起来。 PL/SQL 触发了一个 HTTP 请求,该请求由调用 Java 的应用服务器接收。 Java 可以通过普通的 JDBC 回调 PL/SQL。

2.) 您可能无法加载该 java proc,但也许您可以创建其他一些可以使用 RMI 调用它的 java 存储过程。

3.) AQ 是另一种方法。基本上,您可以使用 AQ 对消息进行排队,并在应用服务器上使用 JMS 将其出列并使用它。

选项 3 将是最快的,尽管我们已经尝试了选项 1,但它的延迟并没有您想象的那么大。它还提供了一种通过并行运行多个请求来进行一些并行处理的方法。

【讨论】:

以上是关于Oracle 调用另一台机器上的 Java 方法的主要内容,如果未能解决你的问题,请参考以下文章

RPC简介与Thrift框架

远程方法调用(RMI)原理与示例

远程方法调用(RMI)原理与示例 (转)

大家好!我想把linux服务器上的oracle客户端拷贝到另一台linux主机上请要考哪些文件啊 ,怎么个弄法?谢谢

如何把局域网内另一台电脑上的DMP文件导入到本机ORACLE数据库中?用PLSQL如何操作?最好有图解

尝试在另一台服务器上调用 EJB 方法时出现 Websphere 错误