Oracle PLSQL içerisinden Java sınıfı çağırma (Call the a Java Method From PLSQL)
Bazı durumlarda plsql üzerinden işlem yaptırmak yerine java dosyasından yapmak daha efektif olmaktadır. Örnek olarak şifre çözme,casting yada webservis çağırma gibi. Bunların plsql üzerinden yapılmalarıda mümkündür fakat bazen tercih edilmezler. Bu ihtiyaca göre şekillenebilir.
Öncelikle CallJava_AliKeskin.java dosyası oluşturuyoruz. Ardından aşağıdaki gibi içerisinde bir static bir sınıfı yaratıyoruz.
1 2 3 4 5 6 7 |
public class CallJava_AliKeskin { public static String xxWriteFunc(String pInputText) { return "Input Text : "+pInputText; } } |
Daha sonra bu dosyayı server üzerinde bir dizine atıyoruz. Ben örnek olarak $JAVA_TOP ‘ı seçtim. Sebebi classpathlerin çoğu burada direkt tanımlı olduğu için derleme esnasında sıkıntı çıkarmamasıdır.
SecureCRT yada Putty gibi uzak yönetim ile komut satırında sunucuya bağlanıyoruz. Aynı zamanda FileZilla yada benzeri bir programlada sunucuya bağlanıyoruz. CallJava_AliKeskin.java dosyasını FTP ‘den $JAVA_TOP dizinin altına atıyoruz. Sonra aynı dizine komut ekranında gidiyoruz.
Buradan itibaren iki yöntem var ikisini de söyleyeceğim ama tavsiye ettiğim yöntem birinci yöntemdir.
1.Yöntem
Sonrasında şu kodu çalıştırarak, derleme ve import yapılır.
1 |
loadjava -resolve -user dbusername/dbpassword@localhost:1521:SID CallJava_AliKeskin.java |
2. Yöntem
Aşağıdaki komut ile java dosyası derlenir.
1 |
javac CallJava_AliKeskin.java |
Sonrasında şu kodu çalıştırarak, daha önce derlenen class dosyası içeriye import edilir.
NOT: Burada önemli bir nokta şudur siz javac ile derleme yaptığınızda application makinesinin java sürümü ile derleme yaparsınız fakat içeriye import edildiğinde database makinesinin java sürüme uyumluluğu denetlenir. Yüksek ihtimalle versiyon uyumluluk hatası alırsınız. Bu yüzden 1. Yöntem kesin çözümdür.
1 |
loadjava -resolve -user dbusername/dbpassword@localhost:1521:SID CallJava_AliKeskin.class |
Bu adımdan sonrası iki yöntem içinde aynıdır.
Kontrol etmek istenirse database üzerinden şu sorgu ile kontrol edilebilir.
1 |
select * from JAVA$OPTION where what='CallJava_AliKeskin'; |
1 2 3 4 |
SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE 'JAVA%' AND object_name='CallJava_AliKeskin'; |
Çıktı
1 2 3 |
object_name object_type status CallJava_AliKeskin JAVA CLASS VALID CallJava_AliKeskin JAVA SOURCE VALID |
Bir problem yaşandığında yada redeploy yapılmak istenirse öncelikle java dosyası drop edilmelidir. Yine sunucu üzerinde aşağıdaki iki kodu teker teker çalıştırarak yapabilirsiniz.
1 |
dropjava -user dbusername/dbpassword@localhost:1521:SID CallJava_AliKeskin.java |
1 |
dropjava -user dbusername/dbpassword@localhost:1521:SID CallJava_AliKeskin.class |
Başarılı bir şekilde java dosyası deploy edildiğinde database üzerinde bir function tanımlanır. Şu kod ile tanımlayabilirsiniz.
1 2 3 4 |
CREATE OR REPLACE FUNCTION xxTestCallJava_AliKeskin ( pInputText IN VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'CallJava_AliKeskin.xxWriteFunc(java.lang.String) return java.lang.String'; |
Başarılı bir şekilde fonksiyonda oluştuktan sonra şu kod ile çalışabilirliğini test edebilirsiniz.
1 |
Select xxTestCallJava_AliKeskin('Merhaba java test') from dual; |
Çıktı
1 |
Merhaba java test |
İşlem bu kadar, iyi çalışmalar.