Web Servis İstemcisi (Web Service Client)

Web servis hizmetinin nasıl sağlanacağını önceki bir yazımda GlassFish uygulama sunucusu için anlatmıştım. Lâkin web servis hizmetlerini kullanan bir de istemciler vardır. Bu yazıda da bir istemcinin nasıl oluşturulacağını ve çalıştırılacağını anlatmaya çalışacağım.

Eclipse üzerinde bir web servis istemcisi oluşturmak için öncelikle standart bir java projesi açıyorum. Önceki projenin adı “WebServiceGlassFish” olduğundan buna da “WebServiceGlassFishClient” dedim, herhangi bir isim vermekte elbette özgürsünüz.

Proje adını girdikten sonra, tamam deyip projeyi oluşturuyoruz. Sırada istemciyi oluşturmak var; projeye sağ tıklayıp, New > Web Service Client diyoruz.

Bir sonraki ekranda bize istemcinin adresini soruyor, yani web servisi nerede diyor. GlassFish üzerinde çalışan web servisinin adresini aşağıda görüldüğü gibi giriyorum, bir kaç saniye sonra algılıyor ve devam et butonu ve diğerleri aktif oluyor. Tamam diyoruz.

Bu aşamalardan sonra artık Eclipse bizim için aşağıdaki gibi bir yapı hazırlıyor. Yapılanın özü şu; web service nerede, hangi metodları var, ne tür parametre alır vb sorulara cevap olacak sınıfları hazırlamak :)

Sırada artık web servisi sorgulamak ve cevabını almak var, bunun için “WebServiceTest” adında “org.sukru.webservices.test” paketi altında “main” metodu olan bir sınıf oluşturuyorum.

Vee oluşan sınıf içinden sırasıyla şu işlemleri yapıyorum;

  1. Web servis ile iletişime geçmek çin bir “service” oluşturuyorum.
  2. (HelloWorldService service = new HelloWorldServiceLocator();)

  3. “service” üzerinden bir bağlantı alıp HelloWorld nesneme atıyorum.
  4. (HelloWorld port = service.getHelloWorldPort();)

  5. Metodun herhangi aksi bir durumda exception fırlatabileceğini tahmin eden Eclipse exception eklemem konusunda beni uyarıyor, ekliyorum.
  6. (throws Exception)

  7. Web servisin çağıracağım metodu -sayHello()- String döneceğinden buna uygun tanımı yapıp, web servisi çalıştırıyorum.
package org.sukru.webservices.test;

import org.sukru.webservices.HelloWorld;
import org.sukru.webservices.HelloWorldService;
import org.sukru.webservices.HelloWorldServiceLocator;

public class WebServiceTest {

	public static void main(String[] args) throws Exception {
		HelloWorldService service = new HelloWorldServiceLocator();
		HelloWorld port = service.getHelloWorldPort();
		String cevap = port.sayHello("Melih Sakarya");
		System.out.println("Web Servisinin Cevabı: "+ cevap );
	}

}

Sağ tıklayıp Run As > Java Application deyince çıktının şu şekilde olduğunu görürsek Web Servisinin Cevabı: Merhaba Melih Sakarya!, sevinebiliriz :)

Kolay gelsin.

Java, Web Service kategorisine gönderildi | , , , ile etiketlendi | 16 yorum

Java System Properties

Java’da sistem bilgilerini Java’nın bize sunduğu anahtar kelimeler aracılığı ile alabiliriz.

Properties properties = System.getProperties();
ifadesi ile sistem özelliklerini bir “properties” nesnesine alalım, sonra entrySet i bir Set nesnesine aşağıdaki ifade ile alalım ki üzerinde dönerek tek tek değerlerine bakabilelim. Çünkü daha sonra sadece zaman zaman işimize yarayacak olanlara bakabilelim. Örnek kodu aşağıda görebilirsiniz.

package org.sukru.system;

import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class SystemProperties {

	public static void main(String[] args) {
		Properties properties = System.getProperties();
		Set<Entry<Object, Object>> sets = properties.entrySet();
		for (Entry<Object, Object> entry : sets) {
			System.out.println(entry.getKey());
		}
	}

}

Bu kodu çalıştırdığımızda gelen tüm anahtar kelimelere ulaşabiliriz. Çıktısında her bir satır sistem hakkında farklı bir bilgiyi veriyor, genellikle tek sefer anlarsınız neyi sorgulayabileceğinizi. Örnek: java.version size sistem üzerindeki Java versiyon bilgisini verecektir. Çıktıyı aşağıya ekledim.

java.runtime.name
sun.boot.library.path
java.vm.version
java.vm.vendor
java.vendor.url
path.separator
java.vm.name
file.encoding.pkg
sun.java.launcher
user.country
sun.os.patch.level
java.vm.specification.name
user.dir
java.runtime.version
java.awt.graphicsenv
java.endorsed.dirs
os.arch
java.io.tmpdir
line.separator
java.vm.specification.vendor
user.variant
os.name
sun.jnu.encoding
java.library.path
java.specification.name
java.class.version
sun.management.compiler
os.version
user.home
user.timezone
java.awt.printerjob
file.encoding
java.specification.version
java.class.path
user.name
java.vm.specification.version
sun.java.command
java.home
sun.arch.data.model
user.language
java.specification.vendor
awt.toolkit
java.vm.info
java.version
java.ext.dirs
sun.boot.class.path
java.vendor
file.separator
java.vendor.url.bug
sun.io.unicode.encoding
sun.cpu.endian
sun.desktop
sun.cpu.isalist

Yine de bir kaç tanesini kendi makinemde sorgulayayım, bakalım ben nasıl bir ortamda çalışıyormuşum :)
System.getProperty(String property) ifadesinde paramatre olarak vericez ve bize değerini dönecek.

package org.sukru.system;

public class SystemInfo {

	public static void main(String[] args) {
		System.out.println("Java version: " + System.getProperty("java.version"));
		System.out.println("Java vendor: " + System.getProperty("java.vendor"));
		System.out.println("Operating system name: " + System.getProperty("os.name"));
		System.out.println("Operating system architecture: " + System.getProperty("os.arch"));
		System.out.println("Operating system version: " + System.getProperty("os.version"));
	}

}

Çıktısı da görüldüğü üzere;
Java version: 1.6.0_25
Java vendor: Sun Microsystems Inc.
Operating system name: Windows 7
Operating system architecture: amd64
Operating system version: 6.1

Tabi bunları kullanmak isteğe bağlı olarak değişebileceği gibi sektörde yazdığınız bir programın açılışında yazılım versiyonunu ve çalıştığı ortamı özetlemek bakımından loglar arasına bastırılır.

Kolay gelsin.

Java kategorisine gönderildi | , , , , ile etiketlendi | 1 yorum

GlassFish Üzerinde Web Servis

Web servis (Web Service) kavramı, iki cihaz arasındaki iletişim yöntemlerinden biridir.
Java ile web servisi geliştirmenin birden çok yolu var. Son yeniliklerle beraber “Annotations” kavramı sayesinde bu iş daha da kolaylaştı, elle wsdl üretmeye gerek kalmadı, gerekli annotation işaretlerini yerine koyunca program çalışırken wsdl kendi kendine oluşuyor.

GlassFish bilindiği üzere JavaEE’nin temel taşlarından biri olan açık kaynak uygulama sunucusu, sektörde kullanımı diğer sunuculara göre az olabilir ama en bilindiklerden ve bana göre kullanması çok kolay olanlardan biri. Yönetim paneli kullanımını hakkaten kolaylaştırıyor.

Şimdi GlassFish üzerinde gerçekleştireceğimiz web servis örneğine gelirsek, edinmemiz gereken malzemeler şunlar;

Adım adım ilerleyelim. Yapacağımız web servisi, en basitinden aldığı “String” parametreye karşılık “Merhaba {parametre}” desin.

Eclipse üzerinde yeni bir “Dynamic Web Project” açalım. Resimde görüldüğü gibi adını “WebServiceGlassFish” koydum.

İleri dedikten sonra bize kaynak kodları nereye yazdığımı soruyor, hiç dokunmadan ileri diyoruz, karşımıza aşağıdaki ekran geliyor, web.xml oluşturmasını özellikle istiyoruz.

Sıra geldi kodlamamıza, artık sınıfımızı ve yazmak istediğimiz metodları gerçekleştirelim. Proje içinde yeni bir Java sınıfı oluşturup adını “HelloWorld” veriyorum, sınıfını da “org.sukru.webservices” olarak yazıyorum.

Bir sınıfın web servis olabilmesi için sınıfın başına @WebService() annotation işareti koyulur, web servis metodu olması istediğimiz metodun başına da @WebMethod() annotation işareti konulur. Tamam bilmemiz gerekenler bu kadardı, dağılabilirsiniz :) Şaka bir yana örnek java kodu aşağıda…

package org.sukru.webservices;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService()
public class HelloWorld {

	@WebMethod()
	public String sayHello(String name) {
		System.out.println("Merhaba " + name);
		return "Merhaba" + name + "!";
	}
}

Yapılması gereken ek bir şey de web.xml üzerinde servlet tanımlarını yapmak, en başta oluşan web.xml içerisine aşağıdaki kodu yazıyorum.

<servlet>
	<display-name>HelloWorld</display-name>
	<servlet-name>HelloWorld</servlet-name>
	<servlet-class>org.sukru.webservices.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>HelloWorld</servlet-name>
	<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>

Böylelikle, HelloWorld isminde bir servletim olduğunu, url bilgisi ve sınıfının nerede olduğunu eklemiş oldum ki uygulama sunucusu tanısın uygulamamızı.

Sıra artık önemli noktalardan birine yani GlassFish’e yüklemeye geldi. Eclipse’in Servers tabında yeni sunucu eklemek istiyoruz ama standartında GlassFish i bulamazsınız o sebeple, Servers altında New > Download Additional Adapters yolunu takip ediyoruz, gelen listeden “Oracle GlassFish Server Tools” seçimini yapıyoruz, kısa bir yüklemeden sonra Eclipse i yeniden başlatmak istiyor, başlat diyoruz.

Şimdi ekleyebiliriz. Aşağıda örneği var.

GlassFish kullanıcı adı ve şifremizi giriyoruz.

Şifre ekranından sonra hangi uygulamaları sunucuya atacağımızı soruyor, web servis uygulamamamızı seçiyoruz. Eğer sizin Eclipse inize GlassFish sunucusu tanımlanmışsa sadece sunucuya sağ tıklayıp “Add and Remove” ile de sadece uygulamayı yükleyebilirsiniz.

Son olarak projenin build-path ine GlassFish i göstermemiz lazım. proje sağ tıklayıp Build Path > Configure Build-Path yolunu takip edip Server Runtime üzerinden sunucuyu ekliyoruz.

Bundan sonra GlassFish’i başlatın ve uygulamanın artık GlassFish altında çalışıyor olması lazım :)

GlassFish Yönetim Ekranından (http://localhost:4848) -eğer değişiklik yapmadıysanız- görebiliriz, sunucuya giriş yaptıktan sonra soldaki “Applications” menüsüne tıklayarak yüklü uygulamaları görebiliriz.

Görüldüğü üzere WebServiceGlassFish projesi GlassFish altına yüklenmiş ki zaten server altına eclipse içinden ilk eklemenizde de konsola yüklenip yüklenemediği bilgisini yazar.

Şimdi o ekrandan “launch” yani çalıştır dedikten sonra /HelloWorld servlet ismini tarayıcıya aşağıdaki gibi ekleyince karşınıza web servis hakkında bazı bilgiler gelecektir.

WSDL adresine tıklayınca da wsdl a ulaşabileceksiniz, bendekinin ekran görüntüsü şu şekilde.

Web servisi artık kullanıma hazır. Başka bir yazıda da bu web servisinin testini yaparız inşallah :) (Ben yaptım da buraya yazması var bir de :D )

Kolay gelsin.

Application Servers, GlassFish, Java, Web Service kategorisine gönderildi | , , , ile etiketlendi | 2 yorum

JSF Life Cycle (Yaşam Döngüsü)

Bu yazıda JSF Uygulama Çatısı (JavaServer Faces Framework)’nın nasıl bir hayat sürdüğünü yazmaya çalışacağım :) Geç yatar, geç kalkar, alkol de alırmış… Şaka bir yana, JSF’in web sayfasında işlem yapmamızdan işlemin sonucunu bize gösterene kadar hangi işlemleri yaptığı ve bize nasıl cevap verdiğini bu işlere ilk başlamam da çok merak etmiştim, hatta aramış taramış anlamamıştım, çünkü bunu açıkça anlatan pek bir kaynak yoktu, olanlar da benim dilimden anlatmıyordu (köylü usulü arıyordum çünkü :) ).

Bir JSF isteği 6 adımda işlenir.

JSF Referans kitabından aldığım şu resim olayı betimliyor. Ben de bu adımları tek tek açacağım.
jsf-life-cycle

Şimdi bu adımları sıralayalım;

  1. Create or Restore View
  2. Apply Values from User
  3. Ensure Values are Valid
  4. Update Model with Valid Values
  5. Fetch a New View, If Necessary
  6. Render View

1. Create or Restore View (Görünümü oluştur)
Bir JSF uygulamasını açtığımız anda karşımıza gelen sayfaya ait bileşenlerin oluşması gerçekleşir. Kullanıcı burada bir “submit” yani bir gönderme işlemi -genellikle bir buton aracılığı ile olur ama ajax ile başka yöntemler de mevcut- gerçekleştirir.

2. Apply Values from User (Kullanıcıdan verileri al)
Kullanıcının girdiği değerler bu “Apply Values” fazında alınır.

3. Ensure Values are Valid (Verilerin doğruluğunu kontrol et)
Kullanıcının girdiği değerlerin kritelerle uyup uymadığı, zorunlu alanların doldurup doldurulmadığı vb diğer işlemler bu fazda kontrol edilir, eğer herşey uygunsa bir sonraki faza geçilir, yoksa ilk faza dönülür. Mesela ilgili alana sadece sayı girilmesini istemişiz ama kullanıcı harf yazmış ya da ilgili alanı zorunlu yapmışız ama kullanıcı herhangi bir değer vermeden formu göndermiş gibi…

4. Update Model with Valid Values (Verilerle modeli güncelleştir)
Verilerin doğruluğunun bir önceki fazda kontrolünden sonra sıra artık modeli (bean, entity vb.) güncelleştirir yani formdan elde edilen verilen yapışmasını sağlar. Formdaki “name” alanına girilmiş veri “Student” sınıfının “name” alanına yapışması gibi…

5. Fetch a New View, If Necessary (Gerekliyse yeni bir görünüm oluştur)
Eğer formdaki işlemler sonucu yeni bir görünüm yaratmak istiyorsak onu oluşturur.

6. Render View (Görünümü İşle)
Son olarak web sayfasını kullanıcıya tekrardan göstermek için bu faz çalışır ve görünüm işlenmiş olur.

Genel hatlarıyla JSF’in böyle bir yaşantısı var, şimdilik mâkul görünüyor ne dersiniz :)

Java, JSF kategorisine gönderildi | , , ile etiketlendi | 3 yorum

Log4j Konfigürasyon

Apache log4j şu yazıda da bahsettiğim gibi bir loglama mekanızmasıdır ve bize şu soruların cevaplarını verir;

  1. Kim?
  2. Ne?
  3. Ne zaman?
  4. Nerede?

Şimdi bilmemiz gereken temel kavramlardan biraz bahsetmenin zamanıdır.

Log Seviyeleri (LEVELS)
TRACE,
DEBUG,
INFO,
WARN,
ERROR,
FATAL olmasına rağmen, kendi log seviyenizi de yazabilirsiniz ama önerilmediğini de belirteyim.

Seviyeler arasındaki sıralama da şu şekilde DEBUG < INFO < WARN < ERROR < FATAL. Bu sıralamanın ne işe yaradığını aşağıdaki örnekte daha iyi anlayacağız.

Log Yazıcılar (APPENDERS)
Logları çeşitli ortamlara yazmak mümkün, aşağıda birkaçının adı var. Ben, daha çok dosyaya ve console ortamına yazıyorum.

  • FileAppender
  • ConsoleAppender
  • SocketAppender
  • SyslogAppender
  • NTEventLogAppender
  • SMTPAppender

Düzen (LAYOUTS)
Logun nasıl görüneceğine dair bilgileri içerir; zaman logun neresinde yazsın, hangi metod olduğu neresinde vb.

Kısaltma Anlamı
%r Loglama başlayana kadar ne kadar zaman harcandı.
%t Loglama olayını üreten thread’in ismi.
%p Logun seviyesi.
%c Logun kategorisi yani üretildiği sınıfın paket bilgisi vb.
%x Logun bazı kontrolleri için.
%m Mesaj
%n Yeni satıra geçmek için.
%L Hangi satırda olduğu bilgisi.
%d Logun üretildiği zaman.

Şimdi bu kadar teorik bilgi ile çalışan bir uygulama yapacağım. Projemin altına “config” adında bir klasör açıyorum altına da “log4j.xml” adını verdiğim aşağıdaki dosyayı hazırlıyorum.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>

 <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%d [%t] %5p %c{1}:%L - %m %n" />
	</layout>
  </appender>

 <root>
   <appender-ref ref="stdout" />
 </root>

</log4j:configuration>

Şimdi yukarıdaki xml’i biraz açıklayayım; Program bu xml’i okumaya başlarken önce root altına bakar ve bir appender arar ki oraya log’u yazabilsin. Bizimkinin stdout isminde bir tane var, gider onu appenderlar arasında bulur, bizimkinin ConsoleAppender yani console’a yazan bir appender olduğunu anlar, pattern‘ine göre appender üzerine yazar. Hikaye bu şekilde :)

Şimdi de pattern’i biraz açalım;

  • %d – Çalışma zamanını göster (herhangi bir formatter vermedim ama yaylı parantezler içinde istediğiniz date format patterni yazabilirsiniz)
  • [%t] – Hangi metodun çalıştığını göster, “[" ve "]” karakterleri arasına al.
  • %5p – Logun seviyesini göster.
  • %c{1} – Logun kategorisini 1. seviyeye kadar göster. (Bir de kaldırıp deneyin :) )
  • %L – Hangi satırın çalıştığını göster.
  • %m – Mesajı yaz.
  • %n – Yeni gelen mesajı bir alt satırda yaz.

Şimdi log4j’yi kullanalım. Önce bir sınıf yazalım.

package org.sukru.log4j;

public class Student {

 private Long studentNumber;
 private String firstName;
 private String lastName;

 public Student(Long studentNumber, String firstName, String lastName) {
   this.studentNumber = studentNumber;
   this.firstName = firstName;
   this.lastName = lastName;
 }
  // getters and setters
}

Log4j için test sınıfımız.

package org.sukru.log4j;

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

public class Log4jTest {

  private static Logger logger;

  public static void main(String[] args) {
	configureLog4j();   //log4j'yi ayağa kaldırması için bu metodu yazdım.
	logger.info("Initializing a new Student...");
	Student student = new Student(100L, "Tuncay", "Uzun");
	logger.info("new Student initialized: "+student.getFirstName()+" "+student.getLastName());
  }

  private static void configureLog4j() {
	DOMConfigurator.configureAndWatch("config/log4j.xml");   //log4j konfigürasyon dosyasının projedeki yerini veriyoruz.
	logger = Logger.getLogger(Log4jTest.class);
  }
}

Bakalım nasıl bir log elde ettik – bence gayet açıklayıcı- :)


2011-06-27 14:42:19,507 [main]  INFO Log4jTest:12 - Initializing a new Student...
2011-06-27 14:42:19,511 [main]  INFO Log4jTest:14 - new Student initialized: Tuncay Uzun

Şimdi xml dosyası ile biraz oynayalım ve root altına şu ifadeyi yazarak log seviyemizi info dan daha az kapsamlı warna çekelim. (Yukarıda sıralamasını yazmıştım ;) )

<level value="warn" />

Şimdi tekrar çalıştırırsak, herhangi bir log yazmadığını görürüz :) Yani xml deki tek bir ifade ile tüm projedeki log seviyesini warn yaptık ve bizim info olara baktıklarımızın loga yazılmasını engelledik, varsa eğer warn ve üzeri ifadeler görülecek ;)

Kolay gelsin.

Java, Logging kategorisine gönderildi | , , , , ile etiketlendi | 2 yorum

Apache log4j

Apache loj4j Java tabanlı bir log (sistem günlüğü) tutma mekanizmasıdır. Sektörde sevilir, kullanışlıdır. Projelere entegre edilmesi ve kullanması da kolay sayılabilir.
Apache log4j
Yapmamız gerekenler;

  • jar dosyasını indirip projemizin kütüphaneleri arasına eklemek
  • projemizin build path’ine bu jarı göstermek.

Bu adımlardan sonra log4j ile çalışmaya hazırız. Örnek olması açısından bir “Student” sınıfı yazıp, onu loglamaya çalışacağım. Uygulama çok temek olacak, hatta o kadar temel olacak ki, normalde 2 çeşit log4j ayarlama yolu var;

  1. property file hazırlayarak
  2. XML dosyası hazırlayıp

fakat ben log4j’nin sağlamış olduğu “BasicConfigurator” sınıfının “configure()” metodu yardımıyla herhangi bir dosya kullanmadan log4j’i ayağa kaldıracağım.

package org.sukru.log4j;

public class Student {
	
	private Long studentNumber;
	private String firstName;
	private String lastName;
	
	public Student(Long studentNumber, String firstName, String lastName) {
		this.studentNumber = studentNumber;
		this.firstName = firstName;
		this.lastName = lastName;
	}
	// getters and setters
}

Loj4j’yi ayağa kaldırıp, kullandığımız test sınıfımızı da yazalım.

package org.sukru.log4j;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

public class Log4jTest {
	
	public static void main(String[] args) {
		BasicConfigurator.configure(); // log4j'yi ayağa kaldıralım.
		Logger logger = Logger.getLogger(Student.class); // hangi sınıfı takip edeceğimizi belirtelim.
		logger.info("Initializing new Student...");
		Student student = new Student(100L, "Yunus Emre", "Aslan");
		logger.info("new Student initialized: "+student.getFirstName()+" "+student.getLastName());
	}
}

Bu sınıfı çalıştırdığımız zaman çıktısı şu şekilde olacaktır.

0 [main] INFO org.sukru.log4j.Student  - Initializing a new Student...
2 [main] INFO org.sukru.log4j.Student  - new Student initialized: Yunus Emre Aslan

Bilgi amaçlı “info(Object message)” metodunu kullandım ama isteğe ve amaca göre şu metodlar kullanılabilir;

  • fatal()
  • error()
  • warn()
  • debug()
  • trace()
  • info()

Diğer yapılandırma usüllerini başka bir yazıda anlatacağım. Giriş için bunun yeterli olacağını düşünüyorum. Kolay gelsin.

Java, Logging kategorisine gönderildi | , , , ile etiketlendi | 3 yorum

XStream – Java to XML, XML to Java

 

 

Java nesnesinin XML çıktısını almak ya da XML olarak verdiğimiz bilgiyi Java nesnesine çevirmek için kullanabileceğimiz çok şık bir kütüphane. http://xstream.codehaus.org/ adresinde ikamet ediyor.

Yapılması gereken gayet basit, ilgili jarları indirip projemizin kütüphaneleri arasına ekliyoruz.

Kütüphanenin kullanımını anlaşılmasını kolaylaştırmak için “Ders” ve “Ogretmen” isimli iki nesne üzerinden aşağıda anlattım, kodları siz de kendi ortamınızda çalıştırabilirsiniz.

package org.sukru.xstream.entity;

public class Ders {

 public Long id;
 public String ad;
 public Ogretmen ogretmen;

 public Ders(Long id, String ad, Ogretmen ogretmen) {
 this.id = id;
 this.ad = ad;
 this.ogretmen = ogretmen;
 }
//getters and setters
}

package org.sukru.xstream.entity;

public class Ogretmen {

 public String ad;
 public String soyad;

 public Ogretmen(String ad, String soyad) {
 this.ad = ad;
 this.soyad = soyad;
 }
//getters and setters

@Override
 public String toString() {
     return "Ogretmen [ad=" + ad + ", soyad=" + soyad + "]";
 }
}

package org.sukru.xstream.test;

import org.sukru.xstream.entity.Ders;
import org.sukru.xstream.entity.Ogretmen;

import com.thoughtworks.xstream.XStream;

public class XStreamTest {
 public static void main(String[] args) {
 // Yeni bir öğretmen üretelim.
 Ogretmen ogretmen = new Ogretmen("Yasin", "Kenar");
 // Yeni bir ders üretip öğretmenini belirtelim.
 Ders ders = new Ders((Long) 1L, "Software Engineering", ogretmen);

 // XStream sihiri şimdi başlıyor.
 XStream xstream = new XStream();
 xstream.alias("Ders", Ders.class); // Ders sınıfı için bir isim verdik,
 // yoksa paket isimlerini de dahil
 // ediyor.
 String xml = xstream.toXML(ders); // ders nesnesini xml'e çevir diyoruz.
 // Bakalım nasıl bir xml ürettik.
 System.out.println(xml);

 // Şimdi de oluşan xml i verip nesne alalım.
 Ders xmldenDers = (Ders) xstream.fromXML(xml);
 System.out.println("\n XML den Ders: "+xmldenDers.getId()+" - "+xmldenDers.getAd()+" - "+xmldenDers.getOgretmen().toString());
 }
}

ve XML çıktısı da aşağıdaki gibi oluyor.

<Ders>
  <id>1</id>
  <ad>Software Engineering</ad>
  <ogretmen>
    <ad>Yasin</ad>
    <soyad>Kenar</soyad>
  </ogretmen>
</Ders>

XML’den oluşturduğumuz nesneyi konsola bastırdığımız zaman aşağıdaki gibi olduğunu görürüz.

XML den Ders: 1 - Software Engineering - Ogretmen [ad=Yasin, soyad=Kenar]
Java, XML kategorisine gönderildi | , , , ile etiketlendi | 5 yorum

Concurrency – Aynı Anda Kullanım

Java’da “Concurrency” yani “Aynı Anda Kullanım” kavramı, aynı zamanda birden fazla iş yapmak gerektiği zaman kullanılır.

İki temel işlemi vardır;

  1. Processes
  2. Threads

Aslında hemen akla “Threads” gelir. Her bir “thread” başlıbaşına bir “process”tir. Yeni bir “thread” başlatmanın 2 tür yolu var; birincisi “Runnable” arayüzünden türetmek, ikincisi “Thread” nesnesinin alt sınıfı yapmak. Aşağıda 2 örnek de mevcut;

public class HelloRunnable implements Runnable {

	@Override
	public void run() {
		System.out.println("Hello from a thread!");
	}

	public static void main(String args[]) {
		Thread t = new Thread(new HelloRunnable());
		t.start();
		System.out.println("ID: "+ t.getId());
		System.out.println("NAME: "+ t.getName());
	}
}
public class HelloThread extends Thread {

	public void run() {
		System.out.println("Hello from a thread!");
	}

	public static void main(String[] args) {
		(new HelloThread()).start();

	}
}

Her iki örnekte de görüldüğü üzere “Thread.start()” ifadesi ile thread çalışmaya başlıyor. Thread çalışmaya başlayınca “run()” metodunu tetikliyor.

Not: http://download.oracle.com/javase/tutorial/essential/concurrency/index.html adresinden faydalanılmıştır.

Concurrency, Java kategorisine gönderildi | , , ile etiketlendi | Yorum bırakın