Seam-gen Framework

Seam-Gen Framework

Seam-Gen Framework

Seam içerisinde uygulamaları daha hızlı geliştirmek için Seam-Gen framework yapısı bulunmaktadır. Seam-gen in amacı code generation yani kod üretmektir. Bu özellikle hazır ekranları üretmek için Seam içerisindeki hazır templateleri kullanır.
Seam içerisinde kod üretmek için iki yöntem vardır. Bunlardan birincisi eclipse ile üretmek diğeri ise ant yardımı ile console ekranından çalışmak.
Eclipse kullanırken ekranda New -> Seam Entity dediğimiz zaman entity template leri ile kod oluşturma sağlanır. Bu durumda Ogrenci adında bir entity oluşturmuşsak bizim için Ogrenci.xhtml OgrenciList.xhtml OgrenciHome.java OgrenciList.java ve Ogrenci.java oluşturulur. Bu kodlar template ler vasıtasıyla oluşturulmuştur.

Bu template lere Seam runtime içerisinde seam-gen altında ulaşabilirsiniz. Örneğin bende aşağıdaki dizin içerisinde.
C:\seamDev\jboss-seam-2.2.2.Final\seam-gen

Peki burada hangi template ler bulunuyor ? Örneğin Ogrenci.java yı oluşturan template seam-gen/src/ altında Entity.java dır.
Seam içerisindeki code generation yapısı HibernateUtil den gelmektedir. Dolayısıyla FreeMarker template mimarisini kullanmaktadır. Eğer daha detaylı bir kod üretimi istiyorsanız FreeMarker ı ve Hibernate code generation mimarisini incelemenizde fayda var.

Aşağıda bendeki Entity.java içeriği bulunuyor.

    package @modelPackage@;
     
    import java.io.Serializable;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Version;
    import org.hibernate.validator.Length;
     
    @Entity
    public class @entityName@ implements Serializable
    {
        // seam-gen attributes (you should probably edit these)
        private Long id;
        private Integer version;
        private String name;
     
        // add additional entity attributes
     
        // seam-gen attribute getters/setters with annotations (you probably should edit)
     
        @Id @GeneratedValue
        public Long getId() {
            return id;
        }
     
        public void setId(Long id) {
            this.id = id;
        }
     
        @Version
        public Integer getVersion() {
            return version;
        }
     
        private void setVersion(Integer version) {
            this.version = version;
        }
     
        @Length(max = 20)
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
    }

Bu template içerisinde dışarıdan alınan parametreler bulunmaktadır. Örneğin @entityName@ entity ismini ifadece eder. Buna göre yeni bir entity oluştururken ekrandan girdiğimiz entity sınıfı ismi buraya parametre olarak gitmektedir.

Bu durumda template ler içerisinde oynayarak istediğimiz çıktıları üretme şansına sahibiz.

Bunlar haricinde ant scriptleri ike kod üretmek için aşağıdaki komutları kullanabilirsiniz. Bu komutlar seam-gen/build.xml de tanımlı bulunmaktadır. build.properties ise başlangıç tanımlarının bulunduğu tanım dosyasıdır. Bu dosya console üzerinden proje oluşturduğumuz anda üretilmektedir. Bununla ilgili aşağıdaki yazıyı inceleyebilirsiniz.
http://www.melihsakarya.com/2011/06/seam-gen-ile-console-uzerinden-proje-olusturma/

C:\seam\jboss-seam>seam setup;
Seam in proje tanım dosyasını oluşturur.

C:\seam\jboss-seam>seam new-project
Proje oluşturur

C:\seam\jboss-seam>seam new-entity
Templateler ile yeni bir entity ve arayüzlerini oluşturur.

C:\seam\jboss-seam>seam new-form
Örnek form ekranı ve componenti oluşturur.

C:\seam\jboss-seam>seam generate-model
Database den entitiy leri üretir.

C:\seam\jboss-seam>seam generate-entities
Database den entitiy, component ve xhtml leri üretir.

C:\seam\jboss-seam>seam generate-ui
Entity lerden component ve xhtml leri üretir.

Aug 15th, 2011
No comments yet.

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>