2010-10-22 16 views
0

Est-il possible d'exécuter un fichier java jar à partir d'une base de données Oracle (10g)? Plus précisément, je suis à la recherche de planifier un travail d'Oracle à l'aideOracle Jobs exécutant Java

dbms_scheduler.create_job(...) 

Lors de l'exécution, la tâche appellerait une application Java qui exécute un processus impliquant parler à une autre application via HTTP, une logique métier, puis en exécutant une procédure stockée contre la base de données en utilisant JDBC.

Normalement, un travail de chron pour faire ceci fonctionnerait bien, mais l'application de Java doit parler à la base de données en tant que propriétaire de schéma donné. Je ne peux pas stocker les informations d'identification de l'utilisateur en tant que texte brut dans la configuration de l'application pour diverses raisons de confidentialité. En bref, je me demande s'il existe un moyen de planifier un travail pour exécuter un jar, en passant les informations d'identification de l'utilisateur qui a planifié le travail. Je ne suis pas familier avec la planification des Jobs Oracle et l'exécution de Java Code à partir d'une base de données Oracle afin que tous les pointeurs dans la bonne direction seraient géniaux. Je n'ai pas vraiment été capable de trouver des documents décents pour ce que j'essaie de faire non plus, bien que je sois sûr qu'il doit exister.

EDIT: trouvé de la documentation et il semble que je pouvais faire quelque chose comme

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'); 

puis utilisez dbms_scheduler.create_job (...)

pour créer un emploi pour le 'recurring_java_task' . Il semble que Les arguments sont définis à l'aide

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

Cela ne résout pas le problème de fournir des informations d'identification de connexion (nom d'utilisateur/mot de passe) à l'application java, cependant.

Répondre

3

Vous pouvez mettre le Java dans la base de données. Oracle 10.2 Java Dev Guide. Cela utilise une chaîne de connexion JDBC spéciale qui référence réellement la session interne. Il y a des considérations spéciales, c'est-à-dire pas de rendu de GUI, etc. Vous pouvez également appeler et envelopper ceci dans pl/sql.

+0

C'est ce qui a fini par être la seule vraie solution que j'ai trouvé sans avoir les problèmes d'autorisation avec la transmission des informations d'identification. Merci pour la référence! – BuffaloBuffalo