java - JDK 6 : Is there a way to run a new java process that executes the main method of a specified class

标签 java oracle11g java-6 java-stored-procedures

我正在尝试开发一个应用程序,在退出之前必须运行一个新的守护进程来执行类的主要方法。

我要求主应用程序退出后守护进程必须仍在执行中。

它是在 Oracle DB 上运行的 Java 存储过程,因此我无法使用 Runtime.exec,因为我无法从操作系统 Shell 中找到 java 类,因为它是在数据库结构而不是文件系统文件中定义的。

特别是,期望的行为应该是在远程数据库 session 期间我应该能够

调用第一个运行守护进程的java方法并退出,使守护进程处于执行状态

然后(让守护进程启动并进行 session 控制,因为最后一次调用终止)

调用与守护进程通信的方法(最终在通信结束时退出)

这可能吗?

谢谢

更新

我的确切需求是创建一个大文本文件并将其加载(达到最佳性能)到数据库中,假设主机没有使用 JDBC-11G oci 驱动程序连接到 Oracle 11gR1 DB 的 Java JDK6 客户端应用程序的文件传输服务。

我已经通过调用一个过程来开发一个可行的解决方案,该过程将作为输入给出的 LOB(大型数据库对象)存储到文件中,但这种方法使用了太多我想避免的中间结构。

因此,我考虑在数据库上创建一个 ServerSocket,首先进行调用,然后连接到它,并通过直接、快速的通信建立数据传输。

我遇到的问题是因为创建 ServerSocket 的 java 过程无法退出并让正在执行的线程/进程监听该 Socket 和客户端,以确保 ServerSocket 已创建,无法运行单独的线程来处理其余的工作。

希望说清楚

最佳答案

如果这是可能的,我会感到惊讶。实际上,您可以用无限数量的守护进程使数据库服务器计算机饱和。

如果这种事情是可能的,那么该技术很可能是 Oracle 特定的。

也许您可以使用数据库触发器或其他此类事件驱动的数据库功能来实现您想要的效果。

我建议解释一下您想要解决的确切问题,为什么需要守护进程?我的直觉是,尝试管理守护进程的生命将会变得非常复杂。您可能很需要处理诸如阻止启动两个实例、守护进程意外终止、需要维护时关闭守护进程等问题。这类事情可能会变得非常困惑。

例如,如果您想每小时运行一些 Java 代码,那么几乎可以肯定有更简单的方法可以实现该效果。操作系统和数据库往往有很好的方法来在所需的时间启动工作。因此,在需要时调用存储过程可能是您的环境中已经存在的功能。因此,您所需要做的就是将所需的代码放入存储过程中。无需您手工制定计划、启动和管理。这种方法的一个非常重要的优点是,您最终会使用环境中其他人已经理解的技术。

编写您正在考虑的代码非常有趣,但在商业环境中通常是浪费精力。

关于java - JDK 6 : Is there a way to run a new java process that executes the main method of a specified class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074972/

相关文章:

java - 在 mongodb 中检索下 N 条记录

java - java中使用HTMLParser获取所有节点

java - Jira API 自动化 - REST Assured

java - 无法访问类型 ... 的封闭实例

javascript - 从 testcomplete 连接到本地数据库

sql - Oracle SQL View : Multiple rows to one with help of foreign key

java - 从 java.io.File 获取 java.nio.file.Path 对象

oracle - 将游标中的数据合并为一个

java - JDK 6 regexp 与 org.apache.regexp 相比如何?

java - 如何快速加载大约 150 个静态 ImageIcon 对象。每个1KB