SORU
16 AĞUSTOS 2012, PERŞEMBE


Java 6 @javax EE.açıklama.@ManagedBean vs javax.enjekte edin.@Vs adında javax.yüzler.ManagedBean

Java EE 6 spec biraz karmaşa var gibi hissediyorum. Ek açıklamalar birkaç setleri vardır.

EJBs oluşturmak için @Stateful @Stateless 3 ** açıklamalar var.

Ayrıca yönetilen bir çekirdeği oluşturmak için @javax.annotation.ManagedBean var.

@SessionScoped @RequestScoped javax.enterprise.context ek açıklamalar vardır.

Dahası da var @ManagedBean javax.faces.bean paket 12* @SessionScoped/*ek açıklamalar vardır.

Ve şeyler olayı daha da karmaşık hale getirmek javax.inject @Named ile paket bir açıklama var.

Biri diğerine bağlı nasıl tarif edebilir misiniz?

Diğer fasulye enjekte @EJB, @Inject @ManagedPropery kullanabilir miyim?

CEVAP
17 AĞUSTOS 2012, Cuma


Öncelikle bazı açıklamalar yapalım:

Yönetilen bean tanımı: genellikle yönetilen bir fasulye yaşam döngüsü (yapım, yıkım, vs) bir konteyner tarafından yönetilen bir nesnedir.

Java ee kendi nesneler, konteyner, YEREL konteyner, CDI konteyner, konteyner Sunucu uygulaması, vb OLUMSUZLUK gibi yaşam döngüsü yönetmek çok kaplar.

Tüm bu kaplar iş biraz bağımsız, önyükleme uygulama sunucusu başlatma ve tarama sınıfların tüm eserler de dahil olmak üzere kavanoz, yerel-jar, war ve ear dosyaları dağıtım zamanı ve toplamak ve depolamak bazı meta verileri hakkında onlara ne zaman ihtiyacınız olan bir nesnenin bir sınıfa çalışma zamanında onlar size örneklerini bu sınıfların ve sonra son iş, yok ederler onları.

Biz söyleyebiliriz:

  • AKSARAY fasulye başardı
  • CDI fasulye başardı
  • YEREL fasulye başardı
  • Ve hatta sunucu uygulamalarına örneği çünkü fasulye yönetilen ve sunucu uygulaması bir kap olan bir kap, tarafından yok edilir.

Yönetilen Fasulye kelimesini gördüğünüzde, bağlam ya da türü hakkında sormalısınız.OLUMSUZLUK, CDI, YEREL, vb.)

Sonra sormasan neden pek çok kişinin Bu kaplar: AFAIK, Java EE çocuklar istediği için bir bağımlılık enjeksiyon çerçeve, ama başaramadılar toplamak tüm gereksinimleri bir ayrıntı çünkü onlar-ebil değil tahmin etmek, gelecekteki gereksinimleri ve yaptıkları YEREL 1.0 ve 2.0 ve 3.0 ve 3.1 şimdi ama YEREL hedef için sadece bazı gereksinimleri (işlem, dağıtılmış bileşen modeli, vs.).

Aynı anda (paralel) anladılar onlar için gereken destek OLUMSUZLUK da, sonra yaptıkları OLUMSUZLUK yönetilen fasulye ve bir konteyner için AKSARAY fasulye ve onlar kabul olgun bir Dİ konteyner, ama yine de değildi tam ve olgun bir kapsayıcı.

Bu Gavin King ve diğer bazı iyi adamlar ;) en olgun Dİ kabıdır CDI yapılmış gördüm. CDI (ilham Seam2, Guice ve Bahar) için yapıldı dolgu boşluğu arasında OLUMSUZLUK ve YEREL ve çok sayıda diğer yararlı şeyler gibi pojo enjeksiyon, yapımcı yöntemleri, önleyici, dekoratörler, entegrasyon bağlantı gibi, çok esnek, vb. hatta ve AKSARAY yönetilen YEREL fasulye olgun ve güçlü tek bir Dİ kabımız sonra ne yapabilir. Ama geriye dönük uyumluluk ve siyasi nedenlerden dolayı Java EE çocuklar onları tutmak istiyorum!!!

Burada farkı bulmak ve bu tür her durumda kullanabilirsiniz:

AKSARAY Fasulye, CDI Fasulye ve EJBs Başardı

AKSARAY AKSARAY başlangıçta 2.0 için geliştirilmiş olan kendi yönetilen fasulye ve bağımlılık enjeksiyon mekanizması ile açıklama göre, fasulye için geliştirilmiştir. CDI Java EE tabii bu platform için ve yönetilen bean çerçeve olarak kabul edildi 6, yayımlandığında, EJBs onların yanında olduğum her şey için bir on yıl eski.

Elbette sorun hangi ve ne zaman bunları kullanmak bilmektir.

Hadi, AKSARAY Yönetilen basit fasulye ile başlar.

AKSARAY Fasulye Başardı

Kısacası, eğer Java EE 6 için geliştirme ve CDI kullanıyorsanız bunları kullanmayın. Bağımlılık enjeksiyon ve tanımlamak için basit bir mekanizma web sayfaları için fasulye destek sağlarlar, ama CDI fasulye çok daha az güçlüdürler.

Adı isteğe bağlı bir parametre alır @javax.faces.bean.ManagedBean annotation kullanılarak tanımlanabilir. Bu adı AKSARAY sayfalarından fasulye başvurmak için kullanılabilir.

Kapsam bean isteği içeren farklı kapsamları javax.faces.bean paket içinde tanımlanan biri, oturum, uygulama, görünüm ve özel kapsamları kullanarak uygulanabilir.

@ManagedBean(name="someBean")
@RequestScoped
public class SomeBean {
    ....
    ....
}

AKSARAY fasulye manuel kodlama falan olmadan fasulye diğer türleri ile karışık olamaz.

CDI Fasulye

CDI EE 6 Java parçası olarak yayımlanan fasulye yönetimi ve bağımlılık enjeksiyon çerçeve ve tam, kapsamlı yönetilen bean tesisi içerir. CDI fasulye basit AKSARAY yönetilen fasulye çok daha gelişmiş ve esnek. Önleyicilerin, görüşme kapsamında, Olayları, türü güvenli enjeksiyon, mimarlar, kalıplaşmış ve yapımcı yöntemleri kullanabilirler.

CDI fasulye dağıtmak, sınıf, META-INF klasöründe bir dosya adı verilen bir beans.xml koymanız gerekir. Bunu yaptığınızda, sonra paketi her bir fasulye CDI fasulye olur. Orada bir sürü özellikleri CDI, çok fazla kapak burada, ama bir hızlı başvuru için OLUMSUZLUK gibi özellikler tanımlayabilirsiniz kapsam CDI bean birini kullanarak kapsamları tanımlanan javax.enterprise.context paket (yani, istek, konuşma, oturum ve uygulama scopes). Eğer AKSARAY sayfasından CDI bean kullanmak isterseniz, bir ad javax.inject.Named annotation kullanarak verebilirsiniz. Başka bir fasulye içine bir fasulye enjekte etmek, javax.inject.Inject açıklama alanı açıklama.

@Named("someBean")
@RequestScoped
public class SomeBean {

    @Inject
    private SomeService someService;
}

Yukarıda tanımlandığı gibi otomatik enjeksiyon enjekte istediğiniz özel sınıf maç yardımcı olabilir Elemeleri kullanılarak kontrol edilebilir. Eğer birden fazla ödeme türleri varsa, zaman uyumsuz olup olmadığını anlamak için bir niteleyici ekleyebilirsiniz. Bir niteleyici olarak @Named ek açıklama kullanabileceğiniz, EL fasulye sergilemek için verilir gibi olmamalı.

CDI vekiller aracılığıyla uyumsuz kapsamları ile fasulye enjeksiyon işler. Çünkü bu enjekte isteği kapsamlı fasulye içine kapsamlı bir oturum fasulye ve başvuru hala geçerli her isteği çünkü her istek, proxy yeniden bağlanır canlı bir örneğini isteği üzerine kapsamlı fasulye.

CDI da önleyici, olaylar, yeni diyalog kapsamında ve AKSARAY yönetilen fasulye üzerinde çok daha iyi bir seçim haline getiren birçok özellik için desteği vardır.

YEREL

EJBs CDI fasulye özelliğini ve diğer yollardan çok farklı someways CDI fasulye benzer. Öncelikle, CDI fasulye ve EJBs arasındaki farklar EJBs olmasıdır :

  • İşlem
  • Uzak veya yerel
  • Durum bilgisi fasulye passivate mümkün kaynaklarını boşaltarak
  • Zamanlayıcılar kullanmak mümkün
  • Zaman uyumsuz olabilir

EJBs iki tür durum bilgisi olan ve olmayan olarak adlandırılır. Vatansız EJBs iki web istekleri arasında durumunu korumak gereken bir iş parçacığı güvenli tek kullanımlık fasulye düşünülebilir. Durum bilgisi EJBs durumunu saklamak ve oluşturulabilir ve imha edilene kadar gerekli oldukları sürece oturup.

Bir YEREL basit tanımlama, sadece iki sınıfa javax.ejb.Stateless javax.ejb.Stateful bir açıklama ekleyin.

@Stateless
public class BookingService {

  public String makeReservation(Item Item, Customer customer) {
    ...
    ...
  }
}

Vatansız fasulye duruma özel bir oturum fasulye herhangi bir kapsam var ise bağımlı bir kapsam olmalıdır. Varsayılan işlem, ancak öznitelik açıklama işlem kullanabilirsiniz.

EJBs ve CDI fasulye özellikler açısından çok farklı olsa da, onları entegre etmek için kod yazma CDI fasulye EJBs enjekte edilebilir ve EJBs CDI fasulye enjekte edilebilir beri çok benzer. Diğer bir enjekte ederken herhangi bir ayrım yapmaya gerek yok. Yine, farklı kapsamları proxy kullanarak CDI tarafından yönetilir. Bunun tek istisnası CDI uzak EJBs enjeksiyon desteklemiyor ama bu yapımcı için basit bir yöntem yazarak uygulanabilir.

javax.inject.Named ek açıklama olarak herhangi Elemeleri enjeksiyon noktası için uygun bir YEREL kullanılabilir.

Hangi fasulye kullanma zamanı

Nasıl bean ne zaman kullanacağını biliyor musun? Basit.

Asla kullanma AKSARAY yönetilen fasulye sürece çalışan bir sunucu uygulaması konteyner ve istemiyorum girmek CDI çalışan Tomcat (her ne kadar bazı Maven sınıflar için o kadar yok bahane).

Genel olarak, gelişmiş işlevsellik işlem fonksiyonları gibi EJBs mevcut ihtiyacın yoksa CDI fasulye kullanmalısınız. Kendi uçağı CDI fasulye, işlem yapmak için yazabilirim, ama şimdilik daha basit bir işlem CDI CDI fasulye gelene kadar hemen köşesinde olan bir YEREL kullanım için. Sunucu uygulaması bir kap içinde sıkışmış ve CDI kullanıyorsanız, ya da el yazılı işlemler ya da kendi işlem ve avcı EJBs olmadan tek seçenektir.

Eğer CDI @ViewScoped kullanmanız gerekiyorsa

  • seam-faces MyFaces CODI modül kullanın. sadece sınıf için bir tanesini ekleyin ve @ViewScoped CDI çalışacak. MyFaces CODİ @ViewScoped daha sağlam bir destek var
  • @ViewAccessScoped, bir uzantısı Apache, download sadece CDI üstüne yazılmış CODİ MyFaces ve @ViewScoped yerine @ViewAccessScoped ek açıklama kullan.
  • @ConversationScoped CDI kullanımı ve uzun süren olun. here for more info bkz.

Bazı bölümleri here kazanılmış.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • Murray Winiata

    Murray Winia

    2 ŞUBAT 2009
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007