Herhangi Bir Java Sınıfını Seam Componenti Haline Getirme

JBoss Seam

JBoss Seam


Seam içerisinde bir sınıfı component haline getirmek istiyorsanız sınıfın başına @Name tanımı ekleyebilirsiniz. Ancak sınıf derlenmiş veya bir paket içerisinde ise ne yapardınız ? Inheritance ile çözebiliriz diyebilirsiniz ancak final sınıflarda bu da işe yaramayacaktır.
Bu durumda elinizdeki diğer alternatif component tanımını components.xml içerisinde yapmaktır. Örneğin Apache StringUtils sınıfı için components.xml de aşağıdaki gibi bir tanım yaparsanız artık stringUtils diye bir component Seam context i içerisinde sizin için hazır bekliyor olur.

    <component name="stringUtils" class="org.apache.commons.lang.StringUtils" scope="event"/>

Bu durumda bu component i artık aşağıdaki gibi çağırabilirsiniz.

    #{stringUtils.repeat('Hello', 20)}
Jul 12th, 2011

Seam ve Hibernate Log Yönetimi

Hibernate Log4J Konfigurasyonu

Hibernate Log4J Konfigurasyonu

JBoss ile daha doğrusu aslında Hibernate kullarak geliştirdiğiniz uygulamalarda üretilen sql ler praperedStatement a göre hazırlanmaktadır. Bu yüzden sql ler içerisinde parametreler yerine ? görürsünüz. Eğer gönderdiğiniz parametereleri console ekranına basmak isterseniz aşağıdaki konfigürasyonu yapabilirsiniz.

Öncelikle JBoss_Dizini\server\all\conf altında jboss-log4j.xml dosyasını açın.
Sadece istediğimiz bilgileri basması için yeni bir appender tanımı yapalım. Bunun için aşağıdaki kodu diğer appendar ların arasına ekleyelim.
Read more…

Jul 11th, 2011

Seam ile Üretilen PDF leri İndirme

Seam ile ürettiğiniz PDF leri aşağıdaki kod ile download edebilirsiniz ? Tabi sadece pdf ile kısıtlı değil. Grafik veya chart gibi çıktıları da aynı kod ile indirebilirsiniz.
Read more…

Jul 11th, 2011
Tags: ,

RichFaces Ajax Push

RichFaces Ajax Push

RichFaces Ajax Push


Yeni nesil ajax mimarilerinde öne çıkan teknolojilerden biride Server Push teknolojisidir. Özellikle asenkron çalışan uygulamalarda istemcilerin sürekli sorgulama yaparak yoğunluk yaratmaması adına push teknolojisi kullanılabilir. Buna göre istemci sadece sunucuda değişiklik olduğu durumlarda talepleri alır. Bunun dışında talepler 0 kb olarak görünür. Buna pull benzeri gibi tekrar yenilemek yerine sadece sunucu tarafındaki değişlik anında işlem yapılır.
RichFaces kullanıyorsanız push kullanımı için a4j:push tagi işinizi görecektir. Bununla ilgili bir örnek aşağıda bulunmakta.
Read more…

Jul 8th, 2011

Java da Web Sayfalarını PDF ve Image Formatına Çevirme

Web uygulamalarında PDF ile çıktı üretmek zaman alabilen bir iş olabiliyor. Seam içerisinde pdf ile ilgili hali hazırda bir kütüphane bulunmakta ancak yinede istediğimiz gibi sonuçlar elde edebilmek bazen imkansız duruma gelebiliyor.

Java Seam PDF

JSF ve PDF Üretimi

Bu durumda aşağıdaki örnek işinizi görecektir. Bu örnekte herhangi bir web sayfasını bir servlet filter aracılığı ile parametrik olarak pdf ve image formatlarına çevirebiliyorsunuz.

Buradaki uygulama seam ortamına göre hazırlanmıştır. İsterseniz standart servlet operasyonlarında da çıktılar üretebilirsiniz. Bu durumda filter tanımlarını web.xml içerisinde yapmanız gerekiyor.

 

 
Read more…

Jun 28th, 2011

Seam-gen İle Console Üzerinden Proje Oluşturma

Seam ile proje oluşturma yöntemlerinden biriside console üzerinden ant scriptleri yardımı ile proje oluşturmaktır daha farklı olarak Eclipse üzerinden de projemizi oluşturuyor olabilirdik.

JBoss Seam

JBoss Seam

Bu iki yöntemde arka tarafta seam-gen mimarisini ve seam-gen içerisinde yer alan halihazırdaki proje yapısını ve template leri kullanır. Buradaki template standartı freemarker dır. Eğer bu template lere müdahele etmek istiyorsak azda olsa freemarker a göz atmakta fayda var.

Seam üzerinden console ekranı ile belirli komutlar kullanarak projenizi oluşturabilir veya ekranlar hazırlayabilirsiniz. Bu durumda test ve deploy gibi işlemlerde ant komutları üzerinden yapılır.

Öncelikle daha önceki seam ortam kurulumu dokümanını okuduğunuzu ve uyguladığınızı varsayarak geliştirme ortamınızın hazır olduğunu düşünüyorum. Daha önceki dokümana göre bizim kurulum ortamımız C:\seamDev klasörü altında yer alıyor. Bu klasör altında jboss-seam-2.2.2.Final klasörü bulunuyor bu bizim seam runtime klasörümüz ve seam ile ilgili ihtiyacımız olan her şey bu klasör altında.

Read more…

Jun 27th, 2011
Tags: ,

Seam Geliştirme Ortamı Kurulumu – Yeni Versiyon

Daha önce yayınlamış olduğumuz Seam geliştirme ortamı kurulumu yazısını yeni versiyonlara göre tekrar düzenledim. Aşağıda kurulum ortamını Eclipse Helios, JBoss Tools 3.2 GA ve Seam 2.2.2 Final, JBoss-5.1.0.GA versiyonuna göre bulabilirsiniz.

Öncelikle ihtiyacımız olan dosyalar aşağıdaki gibidir. Ben çalışma alanı olarak c:/seamDev/ klasörünü oluşturdum. Desktop gibi bir dizinden ziyade bu şekilde bir dizinde çalışmanız çok daha iyi olacaktır.

eclipse-jee-helios-SR2-win32.zip
jbosstools-3.2.0.GA.aggregate-Update-2011-02-16_18-30-44-H329.zip
jboss-5.1.0.GA.zip
jboss-seam-2.2.2.Final.zip

Read more…

Seam Veritabanına Dosya Yükleme

Seam ile veritabanına dosya yükleme yapmak istiyorsanız aşağıdaki örneği kullanabilirsiniz.

Öncelikle yüklemeyi yapacağımız entity yi hazırlıyoruz. Bu dosyayı saklayacağımız alan içerik alanıdır. Bunu @Lob olarak tanıtıyoruz bu sayede veritabanında istediğimiz tipte saklayacaktır. Bunun haricinde @Basic(fetch = FetchType.LAZY) dersek sadece talep anında bilgiye ulaşacak ve dosya listesini çekmek istediğimizde gereksiz yere içerikleri çekmeyecektir.
Read more…

RichFaces İle Veritabanı Üzerinden Sayfalama

RichFaces ile sayfalama yapmak istediginizde bunu direkt olarak bean üzerinden yapiyor. Yani tüm datayi çekmis oluyorsunuz. Bu ciddi bir performs ve bellek sorunu yaratabilir. Eger sayfalamayi veritabani üzerinden yapmak istiyorsaniz asagida JPA ile birlikte kullanilan bir örnek bulabilirsiniz.
Read more…

Hibernate ve JPA tarafında Inheritance Kullanımı

Inheritance yani kalitim object oriented dünyasının önemli parçalarından biridir. Bu konu JPA tarafında da önemli bir yer teşkil etmektedir. Peki JPA ile entity tasarlarken inheritance bunun neresinde kaliyor ?
Model tasarimlarimizda kalitim kullandigimizda ornegin bir ogrenci bilgi sistemi tasarladigimizda bunun icerisinde 2 tip insan oldugunu varsayalim. Bunlar Ogrenci ve Ogretmen entityleri olsun. Bu entitylerin ortak bir yanlari var insan olmalari yani insana ait tum ozellikleri almalari. Bu durumda biz Insan adinda bir sinif yaratip diger entityleri bundan turetebiliriz.
Bu durumda entity iceriklerim asagidaki gibi olur.
Read more…

Hibernate Envers Projesi

Envers Nedir ?
Envers hibernate ekibi tarafindan gelistirilen entity lerin versiyonlanmasi icin kullanilan bir aractir.
Envers i gorev olarak dusunecek olursak amacı eski bilgilerin saklanmasıdır. Örneğin aşağıdaki gibi Kullanıcı adında bir entity niz bulunuyor ve bu entity içerisine aşağıdaki gibi bir kayıt eklediniz.

Kullanici Tablosu

Id Soyad Yaş Email
1 Melih Sakarya 30 melih@gmail.com

Sonrasında birisi gelip bu kayıt üzerinde yaş değerini 29 olarak update etti daha sonra yine bir başkası email alanını ahmet@gmail.com olarak değiştirdi. Peki bu değişiklikler sonrası eski bilgilerinize nasıl ulaşırsınız ? İşte envers projesi bu her transaction işlemi ile birlikte bilgilerinizin birer kopyasını versiyon tablolarında saklıyor.

Bu işlemlere göre kullanıcı versiyon tablosunu düşünecek olursak bilgiler aşağıdaki gibi olacaktır.
Read more…

Custom Hibernate Validator

Hibernate validator i kullananlar için custom bir calidator yapmak istiyorsaniz asagidaki TCKimlik validator ornegini kullanabilirsiniz.

Oncelikle bir annotation tanimi yapiyoruz.

    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
     
    import org.hibernate.validator.ValidatorClass;
     
    @Target({ ElementType.FIELD, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @ValidatorClass(TcKimlikValidator.class)
    public @interface TcKimlik {
     String message() default "TC kimlik numaraniz hatali";
    }

Ardindan validator sinifimizi hazirliyoruz.

Read more…

Seam – Tomcat Entegrasyonu

Seam projenizi Tomcat ortamında koşturmak isterseniz aşağıdaki adımları izleyebilirsiniz.
Tomcat eclipse ortamında sunucu olarak tanıtılır.
Container üzerinde bir datasource tanımı yapılacağından jdbc driver tomcat/lib klasörü altına atılır. (Örneğin mysql-connector-java-5.1.7-bin.jar)


Seam ile bir war projesi oluşturulur. (Bunun için ilgili linki izleyebilirsiniz http://www.melihsakarya.com/2008/11/jboss-seam-gelistirme-ortami-kurulumu/)
Proje ismi olarak ben seamTomcat adini verdim doküman içerisindede bu ayarlar bu isim üzerinden yapılacak.

İlgili jar lar WEB-INF\lib altına eklenir. (Jar lar dokümanın sonunda yer almaktadır.)
Webcontent/META-INF altına context.xml aşağıdaki örnekteki gibi oluşturulmalı. Burada seamTomcat ismi ve veritabani ayarlarına dikkat edelim. Veritabanı ayarlarınızı kendinize göre değiştirebilirsiniz.
Read more…

Sep 28th, 2010

Recursive Fonksiyonlar İle Dosya ve Klasor Listesi

Asagidaki ornekte belirttiginiz bir path icerisindeki tum dosya ve dizinleri listeleme imkani sagliyor.

    package com.mergeCons.egitim;
     
    import java.io.File;
     
    public class DosyaListesi {
     
     public static void dosyaListesi(String path){
      File f = new File(path);
      File[] liste = f.listFiles();
      for (File dosya : liste) {
       System.out.println(dosya.getAbsolutePath());
       if(dosya.isDirectory()){
        dosyaListesi(dosya.getAbsolutePath());
       }
      }
     }
     
     
     public static void main(String[] args) {
      dosyaListesi("c:/");
     }
    }
Sep 18th, 2010

JBoss-EL ile Daha Yetenekli JSF

JSF ile gelen expression language’ i daha yetenekli hale getirmek için JBoss-EL iyi bir secim olabilir. Bunun icin asagidaki linkten JBoss-el.jar indirilip library lere eklenir.
http://repository.jboss.org/maven2/org/jboss/el/jboss-el/2.0.1.GA/jboss-el-2.0.1.GA.jar

Sonrasinda web.xml icerisine asagidaki context parametresini eklememiz gerekiyor.

    <context -param>
      <param -name>com.sun.faces.expressionFactory</param>
      <param -value>org.jboss.el.ExpressionFactoryImpl</param>
    </context>

Artik projemiz içerisinde daha farkli bir expression language kullanabiliriz. Örneğin aşağıdaki örnekteki metoda parametre göndermeyi normal expression language ile yapamayiz. Ancak JBoss-EL bu yeteneği sağluyor.
Read more…

Aug 25th, 2010

RichFaces için Özel Skin ler

RichFaces ortamında var olan skin ler haricinde özel skin ler geliştirmek isterseniz bunun icin properties dosyalarını kullanabilirsiniz. Oncelikle src klasoru altina skinAdi.skin.properties isimli bir dosya olusturalim. RichFaces skinlerinizi classes altinda .skin.properties uzantili dosyalar olarak kontrol eder. Asagida ornek bir skin dosyasi bulunuyor bunun icerisindeki renk, font gibi bilgileri istediginiz gibi degistirebilirsiniz. Son olarak web.xml altindaki skin parametresini dosyaya veridiniz isim olarak degistirmelisiniz. Ornek asagida bulunuyor.

web.xml değişikliği

    <context -param>
       <param -name>org.richfaces.SKIN</param>
       <param -value>skinAdi</param>
    </context>

skinAdi.skin.properties dosyası

Read more…