JDK 6:有没有办法运行一个新的java进程来执行指定类的main方法

我正在尝试开发一个应用程序,在退出之前必须运行一个新的守护程序进程来执行类的main方法。 我要求在主应用程序退出后,守护进程仍然必须执行。 它是在Oracle DB上运行的Java存储过程,因此我无法使用Runtime.exec,因为我无法从操作系统Shell中找到java类,因为它是在数据库结构而不是文件系统文件中定义的。 特别是期望的行为应该是在远程数据库会话期间我应该能够 调用运行守护程序进程的第一个java方法并退出,使守护进程处于执行状态 然后(让守护程序进程和会话控制,因为最后一次调用终止)因此 调用与守护进程通信的方法(最终在通信结束时退出) 这可能吗? 谢谢 更新 我确切需要创建并加载(达到最佳性能)大文本文件到数据库中,假设主机没有使用JDBC-11G oci驱动程序连接到Oracle 11gR1 DB的Java JDK6客户端应用程序的文件传输服务。 我已经通过调用一个过程来开发一个工作解决方案,该过程将LOB(大型数据库对象)存储到文件中作为输入,但是这样的方法使用了太多我想避免的中间结构。 所以我考虑在第一次调用时在DB上创建一个ServerSocket,然后连接到它并通过直接和快速的通信建立数据传输。 我遇到的问题出来了,因为创建ServerSocket的java过程无法退出,并且正在执行的线程/进程监听该Socket和客户端,以确保已创建ServerSocket,无法运行单独的线程处理剩下的工作。 希望明确     
已邀请:
如果可能,我会感到惊讶。实际上,您可以使用无限数量的守护进程来使数据库服务器机器饱和。 如果可能这样的话,该技术可能是特定于Oracle的。 也许您可以使用数据库触发器或其他此类事件驱动的数据库功能来实现您期望的效果。 我建议您解释您要解决的确切问题,为什么需要一个守护进程?我的箴言是,试图管理你的守护进程的生活将变得非常复杂。您可能需要处理一些问题,例如阻止启动两个实例,意外终止守护进程,在需要维护时关闭守护进程。这种东西可能会变得非常混乱。 例如,如果您希望每小时运行一些Java代码,那么几乎可以有更简单的方法来实现这种效果。操作系统和数据库往往具有在所需时间启动工作的好方法。因此,在需要时调用存储过程可能是您的环境中已存在的功能。因此,您需要做的就是将所需的代码放入存储过程中。你无需手工制作,启动和管理。这种方法的一个非常显着的优点是,您最终使用了环境中其他人已经理解的技术。 编写您正在考虑的代码类型非常有趣且非常有趣,但在商业环境中往往是浪费精力。     
为您的其他Main类创建另一个jar,并在主应用程序中使用Runtime.getRuntime()。exec()方法调用jar,该方法应运行运行其他Main类的外部程序(另一个JVM)。     
在Java中启动子进程的方式是
Runtime.exec()
(或者它更方便的包装器,
ProcessBuilder
)。如果这不起作用,你就是SOL,除非你可以使用本机代码来实现等效功能(在这里提出另一个问题来学习如何在C ++级别启动子进程),但这至少会像使用本机代码那样容易出错。标准方法。 如果像Oracle这样的应用程序服务器允许您访问启动子进程或加载本机代码的功能,我会感到震惊;两者都可能导致巨大的恶作剧,因此不受信任的代码被禁止。查看您的编辑,您最好的方法是重新思考如何解决您的真实问题,例如,通过使用NIO以更有效的方式管理套接字(并尝试不在磁盘上创建额外的文件;您将只是必须加入额外精心设计的代码来清理它们......)     

要回复问题请先登录注册