Recentemente, trabalhei em um projeto que suponho que poderia ser resolvido usando o procedimento armazenado Java (mais precisamente algum pacote de recebimento/envio de e-mail).
Depois de um tempo, descobri que há um número muito pequeno de classes Java e procedimentos armazenados Java no banco de dados da minha empresa. Perguntei ao DBA e ele disse que usar procedimentos armazenados em Java é proibido porque "Ele pode facilmente colocar o servidor fora do ar".
Eu ficaria grato se alguém pudesse me explicar: é realmente perigoso usar procedimentos armazenados Java que usam pacotes externos? Existem armadilhas? O uso de procedimentos armazenados Java não é uma prática comum?
É improvável que um procedimento armazenado Java bem escrito "desative o servidor", no entanto, as rotinas Java podem ter algumas implicações de desempenho, porque invocá-las significa que o Oracle precisa iniciar um processo de máquina virtual Java (JVM), transferir o controle para ele, e espere o código Java terminar. Como isso ainda está acontecendo no escopo de uma transação SQL, a simultaneidade pode ser prejudicada. Isso é especialmente verdadeiro quando o Java é usado para executar de forma síncrona algumas atividades potencialmente longas que dependem de recursos remotos, como enviar e receber e-mail.
Você provavelmente deseja evitar o uso do procedimento armazenado Java, se possível; considere usar o
UTL_MAIL
pacote integrado do Oracle para lidar com mensagens de e-mail.