Seam @Startup Annotation ı

JBoss Seam

JBoss Seam

Seam de @Startup annotation i ne işe yarar ? Component üzerine @Startup eklerseniz ilgili context inde direkt olarak çağırılır. Bu ne demek ? Öncelikle @Startup annotation ı sadece Session ve Application scope için kullanılır.

Peki Application scope ne zaman çalışır ? Uygulama ilk ayağa kalktığında mı ? Hayır component in ilk çağırımı ile birlikte instance context üzerine alınır ancak Application scope içerisindeki component e @Startup annotation ı eklersek işte bu durumda uygulama ayağa kalktığı anda bu nesne context üzerine alınır. Yani nesne uygulamanın ayağa kalkmasıyla context üzerinde hazır halde bekler.

Peki Session scope için durum nedir ? Session scope içerisinde @Startup kullanırsak ilk session ımızla birlikteki bu JSF yaşam dönügüsünde ilk çağırımı ifade eder nesnemis Session contexte yer almaya başlar.

Örnek kullanım aşağıdaki gibidir.

    import org.jboss.seam.ScopeType;
    import org.jboss.seam.annotations.Create;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.annotations.Scope;
    import org.jboss.seam.annotations.Startup;
     
    @Name("demoService")
    @Scope(ScopeType.APPLICATION)
    @Startup
    public class DemoService {
     
     @Create
     public void baslangic(){
      System.out.println("Nesne uygulama acilisiyla context üzerinde yer alir..");
     }
    }
Jul 28th, 2011
  1. Fatih
    Jul 29th, 2011 at 11:41 | #1


    @Name("demoService")
    @Scope(ScopeType.APPLICATION)
    public class DemoService {

    @Create @Out
    public void baslangic(){
    System.out.println("Nesne uygulama acilisiyla context üzerinde yer alir..");

    dersek @Startup annotation ile aynı işlemi yapmış olur mu ?

  2. Fatih
    Jul 29th, 2011 at 11:44 | #2

    @Fatih
    Yazınızı bir kez daha okuuynca anladım, sanırım olmaz ,SessionContext’e nesnenin Outject edilebilmesi için DemoService class’ın instance’i yaratılması gerekir. @Startup instance yaratılmadan (nesne çağırılmadan), Session context’e hazır ediliyor sanırım.

  3. Muhammed Sabır
    Jul 29th, 2011 at 14:02 | #3

    Hocam merhaba bir seam coponentini başka bir seam componenti içerisinde @In ediyorum fakat sürekli org.jboss.seam.RequiredException: @In attribute requires non-null value: easy.sample hatası alıyorum neden olabilir

    @Entity
    @Name(“sample”)
    @Scope(ScopeType.SESSION)

    public class Sample implements Serializable
    {
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    // seam-gen attributes (you should probably edit these)
    private Long id;
    private Integer version;
    private String name;

    ———————————————-
    @Name(“easy”)
    @Scope(ScopeType.PAGE)

    public class Easy {

    @In Sample sample;
    @In FacesMessages facesMessages;

    public void mesaj(){
    facesMessages.add(“sample seam çağrıldı :”+sample.getName());
    }

  4. Jul 31st, 2011 at 07:00 | #4

    dogrudur Fatih ;)

  5. Jul 31st, 2011 at 07:02 | #5

    @In(required=false) Sample sample; seklinde tanimlamak gerekir bu nesnenin context üzerinde olmasini beklemez.

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>