Merhabalar,
Uzun süredir yazı yazamıyordum, bugün öğrendiğim önemli bir konuyu yazıya dökmek istedim. Bilindiği üzere, XML, veri aktarma ve depolamada kullanılabilen oldukça yararlı bir format. Bu formatı Javada nesne yönelimli programlamaya uygun olarak kullanmak için ise çeşitlli frameworkler mevcut. Bunlardan biri de Castor dur. Bu frameworkle beraber elimizde bulunan objeleri XML'e aktarıp, daha sonradan bu XML dosyasından geri objeler oluşturabileceğiz.
Castor'un resmi sayfasında hoş bir dökümantasyonu var, bu işle ilgilenecek arkadaşlara tavsiyem bunu da mutlaka okumalarıdır.
Şimdi örnek kodlarda biraz daha ayrıntıya inelim.
Projemizde iki ayrı sınıf olacak, birincisi "Person" sınıfı, kişinin ismini, işini ve favori araba markalarını tutacak, diğeri ise main fonksiyonumuzu barındıran "Main" sınıfı. Bunların yanında, projemizin çalışabilmesi için bazı jar dosyalarını projemize eklememiz gerekiyor. İsimlerini aşağıya yazıyorum, googlede aratıp indirebilirsiniz.
- castor-1.3.2-core.jar
- castor-1.3.2-xml.jar
- commons-lang-2.6.jar
- commons-logging-1.1.1.jar
- xercesImpl.jar
Şimdide kodlar:
Öncelikle mapping işlemimiz için gerekli olan mapping.xml
Burada oluşacak xml'in yapısına karar veriliyor.
mapping.xml
<?xml version="1.0"?>
<mapping>
<class name="Person">
<map-to xml="Person" />
<field name="name" type="java.lang.String">
<bind-xml name="name" node="attribute" />
</field>
<field name="dob" type="java.util.Date">
<bind-xml name="dob" node="element" />
</field>
<field name="certificates" type="java.lang.String" collection="arraylist">
<bind-xml name="certificates" node="element" />
</field>
</class>
</mapping>
Person.java
import java.util.ArrayList;
public class Person {
public Person(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public ArrayList<String> getFavorites() {
return favorites;
}
public void setFavorites(ArrayList<String> favorites) {
this.favorites = favorites;
}
private String name;
private String job;
private ArrayList<String> favorites;
public Person(String name,String job,ArrayList<String> favorites){
this.name = name;
this.job = job;
this.favorites = favorites;
}
/**
* @return the String representation of the Person
*/
public String toString(){
return "Name: "+this.getName()+"\nJob: "+this.getJob()+"\nFavorites:"+this.getFavorites();
}
}
Main.java
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;
public class Main {
/**
* @param args
* @throws MappingException
* @throws IOException
* @throws ValidationException
* @throws MarshalException
*/
@SuppressWarnings("deprecation")
public static void main(String[] args) throws IOException, MappingException, MarshalException, ValidationException {
// TODO Auto-generated method stub
ArrayList<String> favorites1 = new ArrayList<String>();
ArrayList<String> favorites2 = new ArrayList<String>();
ArrayList<String> favorites3 = new ArrayList<String>();
favorites1.add("Audi");
favorites2.add("BMW");
favorites2.add("Mercedes");
favorites3.add("VW");
favorites3.add("Ford");
favorites3.add("Audi");
ArrayList<Person> personList = new ArrayList<Person>();
personList.add(new Person("Ahmet","Engineer",favorites1));
personList.add(new Person("Mehmet","Doctor",favorites2));
personList.add(new Person("Celil","Teacher",favorites3));
// mapping.xml dosyası tanımlaması
final String MAPPING_FILE = "file:///home/gozenem/workspace/mycastor/mapping.xml";
// Mapping oluşturma
Mapping mapping = new Mapping();
mapping.loadMapping(MAPPING_FILE);
// -------- Marshalling Başlangıcı --------
// mashhal için Writer oluşturma
FileWriter writer = new FileWriter("test.xml");
// formatlama için Serializer oluşturma
OutputFormat format = new OutputFormat();
format.setIndenting(true);
format.setIndent(4);
XMLSerializer serializer = new XMLSerializer(writer, format);
// Marshaller oluşturma
Marshaller marshaller = new Marshaller();
marshaller.setMapping(mapping);
marshaller.setSuppressXSIType(true);
marshaller.setWriter(writer);
marshaller.setDocumentHandler(serializer.asDocumentHandler());
// person objesini marshalla
marshaller.marshal(personList);
// -------- Marshalling bitti --------
// -------- Unmarshalling Başlangıcı --------
// unmarshalling için reader oluşturma
ArrayList<Person> personList2 = new ArrayList<Person>();
FileReader reader = new FileReader("test.xml");
// Unmarshaller oluşturma
Unmarshaller unmarshaller = new Unmarshaller(ArrayList.class);
unmarshaller.setMapping(mapping);
personList2 = (ArrayList<Person>) unmarshaller.unmarshal(reader);
// -------- Unmarshalling Bitti --------
// Bilgileri ekrana yazdırma
for (int i = 0; i < 3; i++) {
System.out.println(personList2.get(i).toString());
}
}
}
Bu yazıdaki büyük katkısı için Murat Sayılgan arkadaşıma teşekkür ederim. Kolay gelsin.
27 Temmuz 2011 Çarşamba
Castor Framework Kullanımı (XML Veri Dönüştürme)
11 Mart 2011 Cuma
JSF Rendered,Oncomplete ya da Disabled Gibi Özelliklere Çoklu Koşul Belirtme
Sizlere kodlamanızda işinize yarayacak küçük bir bilgi vermek istiyorum. JSF 2.0'da rendered,oncomplete gibi özelliğine birden çok koşul eklemek için, koşullar arasına "and" sözcüğünü koymamız yeterli oluyor.Örnek vermek gerekirse,
disabled="#{mybean.isApproved eq true and mybean.id ne 0}
Umarım işinize yarar, kolay gelsin.
disabled="#{mybean.isApproved eq true and mybean.id ne 0}
Umarım işinize yarar, kolay gelsin.
26 Şubat 2011 Cumartesi
JSF Projesinde SSL Kullanımı
Arkadaşlar Merhabalar,
Bu yazıda sizlerle bir JSF projesinde SSL nasıl kulanılır inceleyeceğiz. Doğrusu, benim biraz vaktimi aldı bunu gerçeklemek, çünkü Türkçe kaynak çok fazla yok bu konu hakkında, İngilizce olanların ise hepsi doğru bilgiler içermiyor. Ancak sonunda çözdük ve hizmetinize sunuyoruz :)
Şimdi nasıl yapılır hep beraber görelim.
İlk olarak, keytool umuzu oluşturacağız. Bunun için, komut satırına(Başlat->Çalıştır->cmd),
Düzeltme: Aşağıdaki resimde %JAVA_HOME% yazmayı unutmuşum, aşağıdaki gibi eklerseniz iyi olur.
%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
yazarak çalıştırıyoruz. Bundan sonra sistem bizden 6 karakter veya daha uzun olan bir şifre isteyecektir. Bunu girdikten sonra, aşağıdaki resimdeki gibi bilgilerimizi alacaktır.
Bunları da girdikten sonra, artık sertifikamız hazır hale gelmiş olacaktır. Sistem sertifikayı Belgelerim klasöründe, yani, C:\Users\"kullanıcı adı"\ ya da ${user.home}\ klasöründe oluşturacaktır. Oluşan dosyanın ismi .keystore dur.
Şimdi, Tomcat kısmındaki ayarlamaları yapacağız. Öncelikle Tomcat bilgisayarımızda nerede kuruluysa o klasöre giriyoruz. Daha sonra conf klasörünün altındaki server.xml dosyasını açıyoruz. Bunun içine aşağıdaki satırları ekliyoruz. Burada dikkat edilmesi gereken şey, password kısmına, komut satırında hangi şifreyi verdiysek onu yazmamız gerektiğidir.
<Connector
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="${user.home}/.keystore" keystorePass="hangi sifreyi verdiyseniz onu yazın"
clientAuth="false" sslProtocol="TLS"/>Şimdi, projemizde yapacağımız ayarlara gelelim. Proje klasörümüzün içinde
Web Contents-> WEB-INF -> web.xml dosyasına çift tıklayarak açıyoruz. Bunun içinde herhangi bir yere, mesela en alt satırın
bir üstüne aşağıdaki kodları ekliyoruz.
<security-constraint> <web-resource-collection> <web-resource-name>securedapp</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
Artık tüm ayarlarımız hazır duruma geldi. Projemizdeki herhangi bir sayfayı açtığımız zaman,
https://localhost:8443/... gibi bir link ile açıldığını göreceğiz. Bu, işlemleri başarıyla gerçekleştirdiğimiz manasına gelir. Eğer herhangi bir yerinde sıkıntı çekerseniz bana mesaj
atabilirsiniz, elimden geldiğince yardımcı olmaya çalışacağım.
Daha ayrıntılı bilgiler için aşağıdaki linke de göz atabilirsiniz.
http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html
Hepinize başarılar dilerim, esen kalın.
16 Şubat 2011 Çarşamba
Tübitak Bilgem Dergisi Çıktı !
Tübitak UEKAE(Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsü) ve BTE(Bilişim Teknolojileri Enstitüsü)'nin BİLGEM(Bilişim ve Bilgi Güvenliği İleri Teknolojiler Araştırma Merkezi) çatısı altında çıkardığı Bilgem Dergisi'nin yeni sayısı çıktı. Derginin bu sayısını özellikle kriptoloji ve güvenlik konularına ilgi duyanlara tavsiye ederim. Okumak isteyenler için linki veriyorum.
http://www.uekae.tubitak.gov.tr/uekae_content_files/flash/UEKAE_dergi_sayfa_flash/sayi_5/Default.html
http://www.uekae.tubitak.gov.tr/uekae_content_files/flash/UEKAE_dergi_sayfa_flash/sayi_5/Default.html
15 Şubat 2011 Salı
Eclipse'de Mercurial Kurulumu - Windows
Arkadaşlar Merhaba,
Bugün sizlerle Eclipse IDE için Mercurial kurulumuna adım adım gerçekleyeceğiz.
Adım 1) Eclipse -> Help -> Install New Software yolunu izliyoruz.
Adım 2) http://cbes.javaforge.com/update linkini resimde görülen boşluğa giriyoruz ve Add butonuna tıklıyoruz. Bundan sonra yüklenecek elemanlar aşağıda listelenecektir. Bunları seçip ilerliyoruz.
Adım 3) İlerliyoruz.
Adım 4) Burada "I accept the terms of...." seçeneğini seçip Finish butonuna tıklıyoruz. Bundan sonra bir yükleme ekranı çıkacak ve yükleme işlemi gerçekleştirilecektir. Yükleme bittikten sonra, Eclipse'yi yeniden başlatmamızı isteyecektir. Yeniden başlattıktan sonra Mercuriali kullanmaya başlayabiliriz.
Herkese kolay gelsin !
Bugün sizlerle Eclipse IDE için Mercurial kurulumuna adım adım gerçekleyeceğiz.
Adım 1) Eclipse -> Help -> Install New Software yolunu izliyoruz.
Adım 2) http://cbes.javaforge.com/update linkini resimde görülen boşluğa giriyoruz ve Add butonuna tıklıyoruz. Bundan sonra yüklenecek elemanlar aşağıda listelenecektir. Bunları seçip ilerliyoruz.
Adım 3) İlerliyoruz.
Adım 4) Burada "I accept the terms of...." seçeneğini seçip Finish butonuna tıklıyoruz. Bundan sonra bir yükleme ekranı çıkacak ve yükleme işlemi gerçekleştirilecektir. Yükleme bittikten sonra, Eclipse'yi yeniden başlatmamızı isteyecektir. Yeniden başlattıktan sonra Mercuriali kullanmaya başlayabiliriz.
Herkese kolay gelsin !
14 Şubat 2011 Pazartesi
Eclipse'de JSF Projesi Oluşturmak
Arkadaşlar Merhabalar,
Bu yazıda, son günlerde beni oldukça zorlayan, ama aslında kolay olan, Türkçe kaynak olsaydı ne de güzel olurdu diye dert yakındığım temel bir konudan bahsedeceğim, Eclipse IDE üzerinde JSF projesi oluşturmak.
1) Eclipse IDE'yi açtıktan sonra, File->New->Other yolunu izleyin.
2) Daha sonra, Dynamic Web Project seçeneğini tıklayarak ilerleriz.
3) Aşağıdaki gibi seçimlerimizi yaptıktan sonra ilerleriz. Burada, eğer Tomcat kullanacaksanız ve JSF 2.0 da proje geliştirecekseniz, Tomcat'ın 7.0 versiyonunu kullanmak zorundasınız, eski versiyonları JSF 2.0'ı desteklememektedir.
4)
5) Burada, Generate web.xml... seçeneğini seçerseniz, Web-Inf klasörünün altında web.xml dosyasını oluşturacaktır, ben seçili olmasını tercih ediyorum, seçilmeyebilir de.
6) Burada bir kütüphane seçmemiz gerekiyor. Aşağıda görülen 2 seçenekten herhangi birini seçmemiz işimizi görecektir. Eğer daha fazla kütüphane indirmeniz gerekiyorsa, seçeneklerin sağ tarafında altta bulunan butona tıklayarak indirebilirsiniz.
7) Projemiz artık hazır. Şimdi xhtml sayfası ekliyoruz.
8) Burada, sayfanın ismini verirken uzantıyı .xhtml yapmaya özen göstermeliyiz.
9) Burada da html seçeneklerinden en üstte olanı(New Facelet Composition Page) seçerek sayfamızı ekliyoruz.
10) Çalıştığını göstermek adına basitçe bir kod yazdım.
11) Ve işte sayfamız hazır.
Hepinizin kandilinizi kutlarım, esen kalın !
Bu yazıda, son günlerde beni oldukça zorlayan, ama aslında kolay olan, Türkçe kaynak olsaydı ne de güzel olurdu diye dert yakındığım temel bir konudan bahsedeceğim, Eclipse IDE üzerinde JSF projesi oluşturmak.
1) Eclipse IDE'yi açtıktan sonra, File->New->Other yolunu izleyin.
2) Daha sonra, Dynamic Web Project seçeneğini tıklayarak ilerleriz.
3) Aşağıdaki gibi seçimlerimizi yaptıktan sonra ilerleriz. Burada, eğer Tomcat kullanacaksanız ve JSF 2.0 da proje geliştirecekseniz, Tomcat'ın 7.0 versiyonunu kullanmak zorundasınız, eski versiyonları JSF 2.0'ı desteklememektedir.
4)
5) Burada, Generate web.xml... seçeneğini seçerseniz, Web-Inf klasörünün altında web.xml dosyasını oluşturacaktır, ben seçili olmasını tercih ediyorum, seçilmeyebilir de.
6) Burada bir kütüphane seçmemiz gerekiyor. Aşağıda görülen 2 seçenekten herhangi birini seçmemiz işimizi görecektir. Eğer daha fazla kütüphane indirmeniz gerekiyorsa, seçeneklerin sağ tarafında altta bulunan butona tıklayarak indirebilirsiniz.
7) Projemiz artık hazır. Şimdi xhtml sayfası ekliyoruz.
8) Burada, sayfanın ismini verirken uzantıyı .xhtml yapmaya özen göstermeliyiz.
9) Burada da html seçeneklerinden en üstte olanı(New Facelet Composition Page) seçerek sayfamızı ekliyoruz.
10) Çalıştığını göstermek adına basitçe bir kod yazdım.
11) Ve işte sayfamız hazır.
Hepinizin kandilinizi kutlarım, esen kalın !
1 Şubat 2011 Salı
JSF de İlk Uygulama !
Arkadaşlar merhabalar,
Kısa bir aradan sonra tekrar birlikteyiz. Bu yazıda basit bir JSF uygulaması geliştireceğiz.İlk önce kullanıcıdan bir isim istenecek, ve girilen isim için diğer sayfada bir hoşgeldiniz mesajı gösterilecektir. Şimdi kodlara geçelim.
1) Öncelikle IDE' mizde yeni bir proje açıyoruz.(Bu işlemi uzun uzadıya anlatan başka bir yazı blogda mevcuttur, merak edenler inceleyebilir.)Ben projeye myFirstJSFApp ismini verdim.
2) Daha sonra, Web Pages klasörünün altındaki index.xhtml yi açıyoruz. Burada bir inputText ve button koyuyoruz. inputText in required özelliğiyle, eğer kullanıcı bir isim girmezse hata verdiriyoruz.
...
<h:body>
<h:form>
</h:form></h:body>
<div>
Lutfen isminizi giriniz :
<h:inputtext required="true" requiredmessage="Bos bırakmayınız !" value="#{firstbean.name}"></h:inputtext></div>
<h:commandbutton action="showName" value="TAMAM"></h:commandbutton>
...
3) Şimdi yeni bir java sınıfı ve xhtml sayfası daha oluşturuyoruz. Java sınıfı na herhangi bir isim veriyoruz ve başağıdaki kodu sınıf tanımından önce yazıyoruz. Bu kod, sınıfın JSF sayfası tarafından görülmesini sağlayacaktır.
@ManagedBean(name="firstbean")
@SessionScoped
Daha sonra "name" stringi için getter & setter oluşturuyoruz ve yeni sınıfımız için bir yapıcı(constructor) yazıyoruz.
private String name;
public myFirstBean(){
name="";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
XHTML sayfasına ise aşağıdaki kodları yazarak karşılama mesajını gösteriyoruz.
...
<h:body>
<h:form>
</h:form></h:body>
<div style="font-weight: bold;">
Hosgeldin <h:outputtext value="#{firstbean.name}"></h:outputtext> !!!</div>
...
Örnek proje linktedir, eğer link ölüyse mesaj yazarak beni uyarabilirsiniz, linkleri yenileyebilirim.
UYGULAMAYI İNDİR
Bir sonraki yazıda görüşme dileğiyle. Hoşçakalın.
Kısa bir aradan sonra tekrar birlikteyiz. Bu yazıda basit bir JSF uygulaması geliştireceğiz.İlk önce kullanıcıdan bir isim istenecek, ve girilen isim için diğer sayfada bir hoşgeldiniz mesajı gösterilecektir. Şimdi kodlara geçelim.
1) Öncelikle IDE' mizde yeni bir proje açıyoruz.(Bu işlemi uzun uzadıya anlatan başka bir yazı blogda mevcuttur, merak edenler inceleyebilir.)Ben projeye myFirstJSFApp ismini verdim.
2) Daha sonra, Web Pages klasörünün altındaki index.xhtml yi açıyoruz. Burada bir inputText ve button koyuyoruz. inputText in required özelliğiyle, eğer kullanıcı bir isim girmezse hata verdiriyoruz.
...
<h:body>
<h:form>
</h:form></h:body>
<div>
Lutfen isminizi giriniz :
<h:inputtext required="true" requiredmessage="Bos bırakmayınız !" value="#{firstbean.name}"></h:inputtext></div>
<h:commandbutton action="showName" value="TAMAM"></h:commandbutton>
...
3) Şimdi yeni bir java sınıfı ve xhtml sayfası daha oluşturuyoruz. Java sınıfı na herhangi bir isim veriyoruz ve başağıdaki kodu sınıf tanımından önce yazıyoruz. Bu kod, sınıfın JSF sayfası tarafından görülmesini sağlayacaktır.
@ManagedBean(name="firstbean")
@SessionScoped
Daha sonra "name" stringi için getter & setter oluşturuyoruz ve yeni sınıfımız için bir yapıcı(constructor) yazıyoruz.
private String name;
public myFirstBean(){
name="";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
XHTML sayfasına ise aşağıdaki kodları yazarak karşılama mesajını gösteriyoruz.
...
<h:body>
<h:form>
</h:form></h:body>
<div style="font-weight: bold;">
Hosgeldin <h:outputtext value="#{firstbean.name}"></h:outputtext> !!!</div>
...
Örnek proje linktedir, eğer link ölüyse mesaj yazarak beni uyarabilirsiniz, linkleri yenileyebilirim.
UYGULAMAYI İNDİR
Bir sonraki yazıda görüşme dileğiyle. Hoşçakalın.
Kaydol:
Kayıtlar (Atom)














