Pessoal, é possivel um stored procedure fazer chamadas a classes que estão dentro de um jar? Existe alguma maneira de fazer algo desse tipo? O bd é o oracle.
Valeu.
Tudo eh possivel, a questao eh se vale a pena criar uma aberracao dessas
Pra que vc quer fazer isso?
A sp é pra fazer uma inclusão de dados no banco que estão em um arquivo, so que é preciso fazer validações que estão nas regras de negocio. A ideia seria chamar essa validação a partir do jar pois ficaria inviavel duplicar todo o codigo de validação dentro da propria sp (que é em java). Alguma dica de solução melhor?
[quote=Duende Macabro]A sp é pra fazer uma inclusão de dados no banco que estão em um arquivo, so que é preciso fazer validações que estão nas regras de negocio. A ideia seria chamar essa validação a partir do jar pois ficaria inviavel duplicar todo o codigo de validação dentro da propria sp (que é em java). Alguma dica de solução melhor?
[/quote]
Deixa eu ver se eu entendi:
- Você já tem uma “Java Stored Procedure” que lê um arquivo.
- Você quer incluir validações nesta Java Stored Procedure para a leitura do arquivo, e as regras estão implementadas em Java.
- Se tudo o que eu conclui estiver certo, o que você quer é instanciar classes/chamar métodos que estão em um jar. Se for isto é só incluir o jar no classpath da JVM do Oracle Server e mudar o código da sua “Java Stored Procedure”.
- Agora se é um “PL/SQL Stored Procedure” que faz a leitura do arquivo e você quer incluir a validação feito em código Java no código do seu “PL/SQL Stored Procedure”, pode-se criar um “Java Stored Procedure” que simplesmente instancie a classe que está definida no jar.
PS: Eu também não recomendo usar “Java Stored Procedure”, pois pode ser difícil administrar e dar manutenção nisto.
[quote=oyama]
Deixa eu ver se eu entendi:
- Você já tem uma “Java Stored Procedure” que lê um arquivo.
- Você quer incluir validações nesta Java Stored Procedure para a leitura do arquivo, e as regras estão implementadas em Java.
- Se tudo o que eu conclui estiver certo, o que você quer é instanciar classes/chamar métodos que estão em um jar. Se for isto é só incluir o jar no classpath da JVM do Oracle Server e mudar o código da sua “Java Stored Procedure”.
PS: Eu também não recomendo usar “Java Stored Procedure”, pois pode ser difícil administrar e dar manutenção nisto.[/quote]
É exatamente isso, quero chamar esses metodos de validação a partir da minha sp. Tem solução melhor?
Valeu.
Se você já está usando “Java Stored Procedure”, faça o que eu disse no item 3.
Sugestão:
- Como a “Java Stored Procedure” é chamada hoje (ou melhor que programa/sistema aciona esta “Java Stored Procedure”)? Não dá para “tirar” esta “Java Stored Procedure” do Oracle e rodar em uma JVM a parte? Ou seja não dá para ler o arquivo em Java, validar em Java e só depois chamar o Oracle?
Ela será agendada e chamada de tempos em tempos. Não teria como tirar a validação por que ela gera coisas que devem ser inseridas no banco tb, ou seja, ela ler, valida e insere os dados e os erros da validação no oracle.
Está usando o “agendador” do Oracle (DBMS_JOB ou Oracle Scheduller)? Pode ser usado um “agendador” em Java (Quartz, por exemplo) externo ao banco de dados?
Não dá para usar JDBC para inserir ou chamar Stored Procedure do Oracle?
De novo, não dá para usar JDBC?
Se as respostas forem negativas, vai pela solução de rodar “Java Stored Procedure”.
Não da pq os erros da validação estão amarrados aos dados que são inseridos.
Sobre o passo 3, então eu poderia fazer chamadas ao codigo de validação normalmente na minha sp ne isso? Vc sabe algum lugar onde tenha esse procedimento de colocar o jar no classpath pois eu tenho que repassar, não sou eu quem faz.
[quote=Duende Macabro]Não da pq os erros da validação estão amarrados aos dados que são inseridos.
Sobre o passo 3, então eu poderia fazer chamadas ao codigo de validação normalmente na minha sp ne isso? Vc sabe algum lugar onde tenha esse procedimento de colocar o jar no classpath pois eu tenho que repassar, não sou eu quem faz.
[/quote]
Tem que usar o loadjava http://www.developer.com/db/article.php/3337411
Ola, valeu, parece simple mas uma coisa que eu nao tinha pensado, essa validação na minha lógica de negócio usa hibernate, eu poderia usar normalmente esse jar na minha sp?
[quote=Duende Macabro]Ola, valeu, parece simple mas uma coisa que eu nao tinha pensado, essa validação na minha lógica de negócio usa hibernate, eu poderia usar normalmente esse jar na minha sp?
:)[/quote]
Repense a arquitetura deste módulo. Isto está parecendo gambiarra.
Você está criando um “monstrinho” que vai ser o caos em termos de manutenção. Tente componentizar para poder reaproveitar.
Sugestão (não conheço a sua arquitetura): ao invés de chamar as classes diretamente na Stored Procedure, acesse via uma camada de serviço através de RMI. Assim você não duplica código e nem cria problemas de carregar estas classes nas stored procedures.