EJB’nin Özellikleri
Önceki EJB API’sinin üzerine EJB3.0 bazı özellikler getirmiştir. Bu özellikler:
- Üreteç(home) ve nesne arayüzlerine ihtiyaç olmaması
- Bileşen arayüzüne ihtiyaç olmaması
- Java Açıklayıcılarının(Annotation) kullanımı
- Çekirdeklerin ortamı esnek yapabilmek için API’leri basitleştirmesi
Üreteç ve Dolaylı(Remote) Arayüzlerinin Çıkarılması: Üreteç ve dolaylı arayüzlerin küçültülmesiyle geliştirim basitleştirilmiştir. Yeni oturum çekirdekleri(session beans), iş arayüzünün içerisinde tüm iş metodlarını içerir. Çekirdek sağlayıcı, yerel iş arayüzünü ya da dolaylı iş arayüzünü ya da istemcinin yerel ya da dolaylı olmasına göre her ikisini birden işaret eder. Dolaylı arayüzdeki iş metodları java.rmi.RemoteException fırlatmaya izinleri yokken isteğe bağlı uygulama aykırı durumları fırlatabilirler. Buna karşılık EJB2.12deki üretç ve nesne arayüzünün tüm metodları java.rmi.RemoteException fırlatabilir. javax.ejb.EJBException paketi protokoller, sistem katman problemleri ya da taşıyıcının istemciye döndüreceği diğer tüm şeyler gibi aykırı durumları sarmalar. EJBException java.rmi.RemoteException’ın bir alt sınıfı olduğu için iş metodlarının throws kısmında dahil edilmez.
Bir mesaj ileti güdümlü çekirdeğin(message driven çekirdek) iş arayüzü dahil etmeye ihtiyacı yoktur. Çünkü mesaj ileti güdümlü çekirdekle istemcinin direk bir etkileşimi yoktur. Bir MDB beklenmeyen bir problemle karşılaştığında, taşıyıcı hata günlüğe kaydeder ve onu javax.ejb.EJBException’nın yardımıyla istemciyle değil ilişkin kaynak bağdaştırıcıyla iletişime geçirir.
Bileşen Arayüzünün Çıkarılması: EJB2.1’deki ya da daha eski versiyonlardaki bileşen arayüzleri taşıyıcının onu etkileyen çeşitli yaşam döngülerinin çekirdek örneklerini(bean instances) bildirdiği şekilde bir kullanım sağlar. Bileşen arayüzünün daha önceki versiyonları kendi yaşam döngüsündeki olaylarda kalırdı. Bu bileşen arayüzleri çekirdek sınıfı tarafından gerçekleştirilen çeşitli yaşam döngüsü metodları içerir. Taşıyıcı, istediği şekle göre çekirdeklerinin örneklerinin yaşam döngüsü olaylarını tutmak için bileşen arayüzünün uygun metodlarını çağırırdı. Örnek olarak; taşıyıcı, yokedilmek üzere olan mesaj ileti güdümlü çekirdek örneğini mesaj ileti güdümlü çekirdeğin ilişkin sınıfındaki ejbDestroy() metodunu çağırarak bildirir.
Çekirdek sınıf JDBC veritabani bağlantısını kaynakları serbest bırakmak için ejbDestroy() metoduyla kapayabilir. Benzer olarak durumlu olarak bir istemciyle ilişkilenecek taşıyıcı çekirdek sınıfındaki ejbCreate() metodunu çağırarak bildirir ve çekirdek sınıf çekirdek örneğini destekler. Çekirdeğin onun yaşam taşıyıcının yaşam döngüsü metodları hakkında taşıyıcıdan belirtim almadığı durumda, çekirdek ihtiyacı olsa da olmasa da bileşen arayüzünü gerçekleştirir. Oturum çekirdeği durumunda, çekirdek sınıf javax.ejb.SessionBean ya da javax.ejb.MessageDrivenBean’i mesaj ileti güdümlü çekirdek vukuunda gerçekleştirmeye ihtiyacı yoktur.
Bir çekirdek sınıf, eğer ilgiliyse taşıyıcı tarafından nasıl bildirilir? Bunu yapmak için iki yol mevcuttur. Bunlardan birincisi, çekirdek sağlayıcısı ayrı bir çekirdek sınıf gerçekleştirebilir. Bu ayrı çekirdek sınıf dinleyici sınıf olarak tetiklemek için taşıyıcıyı bilgilendiren tüm geri çağrı metodlarını içerir. İkinci yol, çekirdek sağlayıcısının bildirim metodlarını çekirdek sınıf içerisinde gerçekleştirmesi ve çekirdek sınıfın açıklayıcıları kullandığı durumlarda ilişkin olayları tutmak için bu metodu işaret etmesidir. Açıklayıcılar EJB3.0 belirtiminin ilave anahtar özellikleridir.
Ortama Basitleştirilmiş Erişim: Dış kaynaklara, kurumsal çekirdeklere ve özellikler gibi diğer girdilere erişim kazanmak, ortama erişmek için nerdeyse tüm EJB’ler gereksenmektedir. Bütün girdileri yakalamak için EJB JNDI API’ye güvenmektedir. EJB 3.0, çekirdeğin bağımlıklarına erişmek için EJBContest ve bağımlılık içitimi(dependency injection)’deki arama(lookup) metodları gibi özellikler içerir.
Bağımlılık İçitimi(Dependency Injection): Bağımlılık içitimi, çekirdek örneğini herhangi bir çekirdek örneği kısmi bir örnekte çağrılmadan önce çekirdeği erişilebilir yapmak için taşıyıcının istenen ortamsal girdiye içitim yapması mekanizmasıdır. Ardından taşıyıcı bu girdileri çekirdek değişkenleri ya da metodlarına içe itme yapar. Hangi metodun ya da değişkenin işletim zamanında içe itme yapılması taşıyıcıya söylemek çekirdek sağlayıcının görevidir. Çekirdek sağlayıcı yayımlama belirticisini ya da açıklayıcıları kullanarak bunu yapar. Bağımlılık içitimi için kullanılan çekirdek metodları, setXXX() kuralını izleyen özellikler için java isimlendirme kuralını izlemelidir. Bağımlık içitiminin başarısız olduğu bazı sebepleri düşünürsek; taşıyıcı, kendisinin çekirdek örneklerini attığı ve yeni örnekler yarattığı durumlarda hangi çekirdeğin faal olduğuna göre ortamsal girdileri erişilebilir yapamayabilir.
EJB Bağlamı : Çekirdek güvenlik prensibi, metodunun çağrıldığındaki işlem(transaction)bağlamı vs olarak işletim zamanında kendi ortamı hakkında bilmelidir. Javax.ejb.EJBContext API çekirdeğin dış dünyaya açılan taşıcıyla etkileşimde olduğu bir penceresi gibi çalışır. EJBContext, oturum bağlamı(SessionContext) ve mesaj ileti güdümlü bağlam(MessageDrivenContext) olarak ortam çekirdekleri için ve mesaj ileti güdümlü çekirdekler için kategorilenir. Çekirdek örnekleri bağımlılık içitimini EJBContext örneklerine erişmek için kullanabilir. JNDI ortam değişkenlerine eriştiği bir değer yol ise EJBCContext arayüzünün lookup() metodlarıdır. Çekirdek JNDI API’yi ortamsal değişkenlere erişmek için kullanmalıdır.
Geliştirilmiş(Enhanced) Yaşam Döngüsü Metodları ve Geri Çağrı(Callback) Dinleyici Sınıfları(Listener Classes): EJB3.0, tüm gereksiz geriçağrı metodlarını gerçekleştirmeyi zorlamaz fakat diğer herhangi bir metodu yaşam döngüsü olayları için belirtim almada işarete edebilir. Aynı zamanda, aynı çekirdek sınıfta tanımlı geri çağrı metodlarının yerine geri çağrı dinleyici sınıfı da kullanılabilir.
Yol Kesiciler(Interceptors): Bir mesafe(intercept) bir iş sınıfı metoduna atıfı önlemek için kullanılan bir metoddur. Durumsuz(stateless) ortam çekirdekleri, durumlu ortam çekirdekleri ve mesaj ileti güdümlü çekirdekler yol kesicileri içerir. Aynı zamanda, çekirdek sınıfında yol kesici metodları tanımlamak yerine yol kesici bir sınıf tanımlayabiliriz.
EJB’nin Basit JNDI araması: EJB’nin araması, istemci EJB’de basitçe metod yaratımı çağrılarak çekirdek örnekleri yaratmak yerine EJB’de metodları direk çağırabilsin diye basitleştirildi.
Referans:
Leave a Reply