执行Java的Oracle作业

执行Java的Oracle作业,java,oracle,jdbc,scheduled-tasks,Java,Oracle,Jdbc,Scheduled Tasks,是否可以从Oracle(10g)数据库中运行java jar文件?更具体地说,我希望使用 dbms_scheduler.create_job(...) 运行时,该作业将调用一个Java应用程序,该应用程序执行一个过程,该过程涉及通过HTTP(一些业务逻辑)与另一个应用程序通信,然后使用JDBC对数据库执行一个存储过程 通常情况下,一个chron作业可以很好地完成这项工作,但是java应用程序需要作为给定的模式所有者与数据库通信。由于各种隐私原因,我无法在应用程序配置中以纯文本形式存储用户凭据

是否可以从Oracle(10g)数据库中运行java jar文件?更具体地说,我希望使用

dbms_scheduler.create_job(...)
运行时,该作业将调用一个Java应用程序,该应用程序执行一个过程,该过程涉及通过HTTP(一些业务逻辑)与另一个应用程序通信,然后使用JDBC对数据库执行一个存储过程

通常情况下,一个chron作业可以很好地完成这项工作,但是java应用程序需要作为给定的模式所有者与数据库通信。由于各种隐私原因,我无法在应用程序配置中以纯文本形式存储用户凭据

简言之,我想知道是否有一种方法可以安排一个作业来执行jar,并传递计划该作业的用户的凭据

我对调度Oracle作业和从Oracle数据库运行Java代码都不熟悉,因此任何指向正确方向的指针都会很好。我也没有找到任何关于我正在尝试做的事情的像样的文档,尽管我确信它必须存在

编辑:找到了一些文档,看起来我可以像

DBMS_SCHEDULER.create_program (
    program_name        => 'recurring_java_task',
    program_type        => 'EXECUTABLE',
    program_action      => 'java -jar /path/to/recurring-task.jar',
    number_of_arguments => 2,
    enabled             => TRUE,
    comments            => 'Program to perform cleanup');
然后使用 dbms_调度程序。创建_作业(…)

为“重复的java任务”创建作业。似乎参数是使用

DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
   job_name                IN VARCHAR2,
   argument_position       IN PLS_INTEGER,
   argument_value          IN VARCHAR2);

但是,这仍然不能解决向java应用程序提供连接凭据(用户名/密码)的问题。

您可以将java放入数据库中。这使用了一个特殊的JDBC连接字符串,它实际上引用了内部会话。有一些特殊的注意事项,例如没有GUI呈现等。您也可以调用并用pl/sql包装它。

您可以将Java放入数据库中。这使用了一个特殊的JDBC连接字符串,它实际上引用了内部会话。有一些特殊的考虑,例如没有GUI呈现等。您也可以调用并用pl/sql包装它。

这是我发现的唯一真正的解决方案,它没有传递凭证的授权问题。谢谢你的参考!这是我发现的唯一一个真正的解决方案,它在传递凭证时没有授权问题。谢谢你的参考!