Root > Documents > Programlama > How To Make NET speak With Java
Cyber-Warrior.Org \ Doküman \ Programlama > How To Make NET speak With Java
Madde
  Yazar : qopiL
  Date : 23.11.2005 18:48:58
 
# How To Make NET speak With Java
 

 Kullandigimiz araç gereç ve platformlar:

  1. Sun Application Server 8.1
  2. NetBeans IDE 4.1
  3. MySQL 4.1 ve MySQL Connector/J
  4. Microsoft Visual Studio 2003
Java ile ilgili hemen heryerde karsilasilan temel sorunlari da bu yazi ile dile getirmeye çalisalim. Java ile baslangiç düzeyinde ilgilenenlerin en büyük sikintisi CLASSPATH ayarlaridir ve bu sorunun hemen her kaynakta farkli çözümleri bulunmaktadir. Benim önerecegim çözüm de farkli olacak , çünkü önerdigim Sun Application Server C:\\Sun dizinine kendi JDK , J2EE ve JRE’sini kuruyor. Siz bu yazilimi yükleyerek aslinda J2ME hariç komple Java Platformunu yüklemis oluyorsunuz. Sun Java System Application Server’i yükledikten sonra Bilgisayarim üzerinde sag tus -> Gelismis sekmesindeki ortam degiskenlerinde Sistem degiskenleri bölümünde yeni bir Sistem degiskeni tanimlayarak adina CLASSPATH diyelim ve Degisken degeri olarak aynen sunlari yazalim :
C:\\Sun\\AppServer\\jdk\\bin; C:\\Sun\\AppServer\\jdk\\jre\\bin; C:\\Sun\\AppServer\\jdk\\jre\\lib; C:\\Sun\\AppServer\\jdk\\jre\\lib\\ext; C:\\Sun\\AppServer\\jdk\\jre\\lib\\ext; C:\\Sun\\AppServer\\jdk\\bin; C:\\Sun\\AppServer\\lib

Bu ortam degiskenleri Java’nin ihtiyaç duydugu bütün kitapliklari yükler. Daha sonra siz istediginiz veritabani sürücüsünü burada belirtilen C:\\Sun\\AppServer\\jdk\\jre\\lib\\ext dizinine atarsiniz ve bu dizin tanimli oldugu için veritabani sürücünüz de uygulamalariniz tarafindan çalistirilabilir.Dolayisiyle MySQL sürücüsünü de bu dizine koplayamaniz gerekiyor.

Veritabani, uygulama sunucusu ve web servisi için Java idelerinin belki de en basarilisi olan NetBeans disinda herhangi birseye ihtiyacimiz bulunmuyor , ancak bu IDE’de Java ile ilgili bütün islerimizi yapabilmek için bazi tanimlamalar yapmamiz lazim.

Önce Sun Application Server’i NetBeans’e tanitmamiz gerekiyor. Bunun için Tools -> Server Manager yolundan giderek Açilan Server Manager Penceresinde AddServer diyelim. Gelen pencerede admin kullanici adi ve parolasini yazdiktan sonra Sun Application Server artik NetBeans IDE ile bütünlesik çalismaya baslayacakitir.



MySQL sunucusunu NetBeans IDE’ye tanitmak için de benzer bir yol izliyoruz.Sol taraftaki Runtime arabiriminde bulunan Databases bölümündeki Drivers’e sag tus ile tiklayip Add Driver komutu veriyoruz. Gelen pencerde Add bunonuna tiklayarak C:\\Sun\\AppServer\\jdk\\jre\\lib\\ext\\ yolunda bulunan mysql-connector-java-3.1.10-bin.jar driverini gösteriyoruz.
Dikkat : Bu sürücü disindaki sürücüler MySQL 4.1’de Türkçe karakter problemi çikariyor.Bu sürücü ile MySQL character set’inizi latin5 olarak ayarlayabilirsiniz.



MySQL sürücüsünü tanittiktan sonraki durum



Bu asamalardan sonra simdi bilgisayarimizda kurulu bulunan MySQL sunucusuna baglanmamiz gerekiyor. Bu islem için Databases/Drivers/MySQL(MM.MySQL driver) bölümünde sag tus ile Connect Using komutu verelim.



Artik btturk isimli bir veritabanimiz var ve bu veritabaninda NetBeans ile bilgiler isimli bir tablo olusturabiliriz.






Evet bilgiler isimli tablomuzu olusturduk ve içerisine okuyacagimiz verileri de yazdik.Simdi web servisimizi yazmaya baslayabiliriz.Web servisi için önce bir web uygulamasi projesi baslatmamiz gerekiyor. NetBeans menüsünden File -> New Project yolunu izliyoruz.Projemiz bir web uygulamasi ve adi da webServisiDeneme1




Projeyi olusturduktan sonra Web Servisinin çalisacagi java package’i olusturmamiz gerkiyor.Islemin nasil yapildigi resimlerde görülebilir.




WebServisi isimli package’i olusturduktan sonra bir web servisi yaratabiliriz.Bu islem ekran görüntüleriyle gösterilmistir:




Personel Web Servisini olusturduktan sonra servis üzerinde sag tus->Add Operation... komutu veriyoruz.



Operasyonumuz sonucunda bize personel bilgilerinin String türünden dönmesini istedigimiz için Return Type’i String olarak seçiyoruz.



Parametre olarak gönderecegimiz degerin veritabanindaki id alanina denk gelmesi nedeniyle parametre ekleme isleminde int deger göndermemiz gerekiyor. Bu islem için Add Operation penceresinde Add tusuna tiklayarak parametre tipi olarak int ve parametre ismi olarak id yaziyoruz. Web servisimiz çalistiginda olusacak WSDL dökümaninda bu degerler gidip gelecektir.



Bu islemlerden sonra projemizin görüntüsü asagidaki gibi olacaktir:



Simdi SQL baglantimiz için gerekli kodlari yazabiliriz :
Yeni bir java class olusturarak adini SQLSorgulari verelim ve içerisine su satirlari yazalim :

package WebServisi;
import java.sql.*;
public class SQLSorgulari {

public SQLSorgulari() {
}

public String bilgiDondur(int id) throws Exception{
Class.forName("org.gjt.mm.mysql.Driver");
java.sql.Connection baglanti = DriverManager.getConnection("jdbc:mysql://localhost/btturk","root","");
java.sql.Statement sorgulama = baglanti.createStatement();
java.sql.ResultSet veriler = sorgulama.executeQuery("SELECT * FROM bilgiler where id="+id);
String bilgiler=null;
while (veriler.next()){
bilgiler = veriler.getString(1)+" "+veriler.getString(2)+" "+veriler.getString(3);
}
return bilgiler;
}

}
Bu sinif sadece SQL sorgusu sonucunda dönecek deger için baglantilari saglamakta ve bilgiDondur() metodunu yazmaktadir bu metodun tek yaptigi kendisine gelen int türünden degeri veritabaninda aramak ve String türünden bir veri döndürmektir. Buna benzer java veritabani örnekleri heryerde bulunabilecegi için üzerinde fazla durmuyoruz. Asil isimiz PersonelImpl.java ile. Bu siniftan bilgiDondur metodumuzu çagirmamiz gerekiyor. Web servisini olustururken iki dosya olusmustu biri PersonelImpl.java ve digeri PersonelSEI.java bu iki dosyadan PersonelSEI.java sadece PersonelImpl.java sinifindaki metodlari java.rmi ile sunma isi yapmaktadir.Asil metodun tanimlama yeri PersonelImpl.java’dir ve buradan SQL medodumuzu çagirmamiz gerekiyor.

PersonelImpl.java sinifina gidip asagidakileri yazalim :
package WebServisi;
//SQL metodumuzu barindiran sinifi çagiriyoruz
import WebServisi.SQLSorgulari;
public class PersonelImpl implements PersonelSEI {

SQLSorgulari SQLSorgu= new SQLSorgulari();//SQLSorgulari isimli sinifin bir örnegini yarattik

public String bilgiGetir(int id){
try{
return SQLSorgu.bilgiDondur(id);//bilgiDondur isimli metodu çagiriyoruz
}catch(Exception hata){
return "hata";
}
}
Web servisimiz tamam artik uygulamayi run edebiliriz. F6 tusuna basarak uygulamayi çalistiriyoruz. Bu esnada uygulama derlenmekte, WAR dosyasi olarak birlestirilmekte ve uygulama sunucusunda deploy edilmektedir. Browser’imizi açip http://localhost:8080/webServisiDeneme1/Personel?WSDL yazarsak çalisan web servsinin WSDL dökümanini görebiliriz.



Simdi Java ile web servisimizi yazdik ve bunu .NET içerisindeki bir uygulamadan kullanmamiz gerekiyor. Bu is için Visual Studio açmak gerektigi için NetBeans’i ve bilimum açik programinizi kapatmanizi öneriyorum çünkü zaten Sun Application Server epey fazla RAM tüketiyor.Yalniz dikkat edilmesi gereken nokta su ki eger Sun Application Server’i NetBeans üzerinden Start ettiyseniz NetBeans’i kapattiginizda Sun Application Server de kapanacaktir. Böyle bir durumda Baslat->Programlar->Sun Microsystems->Application Server PE ->Start Default Server ile uygulama sunucusunu yeniden çalistirmaniz gerekebilir.

Eski ve daim dostumuz Visual Studio 2003 ’ü açiyoruz ve yeni bir proje olusturuyoruz.Projenin adi da JavaDotnet ve bu bir Visual Basic .NET projesi. Aslinda uygulamayi C# ile de yazabilirdik fakat o zaman Java ile Java konusuyormus gibi bir durum ortaya çikabilecegi için iki farkli teknolojinin daha iyi farkedilmesini saglamazdi.



Olusturdugumuz uygulamaya iki label ve iki metin kutusuyla bir de buton ekliyoruz.



Web Servisimizi .Net projesine bir Web Referansi olarak ekliyoruz .



Görüldügü gibi Web Servisimiz ve bilgiGetir() metodumuz Visual Studio tarafindan görüldü.



Web Referansini ekledikten sonra projemize geri dönüyoruz ve Web Servisi nesnesinin örnegini olusturuyoruz. Ben bu örnegi public olarak tanimladim ama genelde örneklerde tiklama olayinin (event’in) içinde Dim ile tanimlandigini görüyoruz. Bu web servisinin bize sagladiklarini baska form elementlerinde kullanmak gerekebilecegi için bence bunu bir üst scope’ta tanimlamak daha iyi.



Yine bir nesnenin bizden neler istegini ve bize ne verecegini görmenin en iyi yolu olarak iki öneri sunabilirim . Biri WSDL dökümanini incelemek bir digeri de örnekledigimiz nesnenin metod veya özelliklerini anlamak için yanina bir nokta koymak. Örnegimiz için gösterecek olursak :


personel nesnemizin bilgiGetir metodu bizden localhost.bilgiGetir türünden bir degisken istiyormus ve karsiliginda da localhost.bilgiGetirResponse tipinde bir yanit döndürüyormus.O halde bizim bu tipten degiskenler olusturmamiz gerekiyor. Biz de bu degiskenleri tanimliyoruz :
Public personel As
New localhost.Personel
Public bilgiGiden As New localhost.bilgiGetir
Public bilgiGelen As New localhost.bilgiGetirResponse
Butonun tiklama olayina asagidakileri yazdigimizda uygulamamiz çalisacaktir :
Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim texteYazilan As Integer = CType(TextBox1.Text, Integer)
bilgiGiden.int_1 = texteYazilan
bilgiGelen = personel.bilgiGetir(bilgiGiden)
TextBox2.Text = bilgiGelen.result
End Sub



Aslinda bu uygulama baska sekilerde de yapilabilirdi ve mesela dönüs degeri olarak bir String olacagina bir ResultSet olabilirdi. Belki o zaman bir dataset de daha kolay doldurulabilirdi. Ancak bu yaptigimiz çalisma Sun Application Server,NetBeans, gibi internette çok fazla Türkçe doküman bulunmayan konulara bir baslangiç saglamasi bakimindan yararli olur diye düsündüm

Saygilarimla... 

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©