2013-03-30 18 views
11

Bu kurulumu birkaç günlüğüne çalıştırmaya çalışıyorum ama yine de şanssızım. MyFaces + CDI, WebLogic 12c'de kullanılabilir mi?

@Named 
@RequestScoped 
public class Test { 

    private String test = "test"; 
    public String getTest() { return test; } 
    public void setTest(String test) { this.test = test; } 
} 

Ve jsf sayfasında

: Burada i kullanıyorum test uygulaması var

<h:outputText value="#{test.test}"/> 

MyFaces olmadan bu örnek çalışan iyi çalışıyor (olması gerektiği gibi "testi" kılan), ama ne zaman ı MyFaces'ı WAR dosyasına dağıtın ve weblogic.xml CDI içinde gerekli yapılandırmayı yapın CDI çalışmayı durdurur (veya en azından tümleştirme, on beş JSF ve CDI) ve çıktı html'de hiçbir şey görüntülenmez. MyFaces kendisi olsa iyi görünüyor. aşağıdaki gibi

Benim temel yapılandırma:

    ben sadece dün geliştirme sürümü indirilebilir olarak sadece
  • MyFaces emin olmak için güncel
  • WebLogic Sunucusu 12c (12.1.1.0), yamalar olmalıdır
  • org.apache.myfaces.webapp.StartupServletContextListener web.xml''deki tescil edilmiştir Beans.xml yer alıyor
  • WebLogic Myf kullanmak üzere yapılandırılmış
  • WEB INF içinde dağıtılan -2.1.10/kütüphaneleri weblogic.xml

Weblogic.xml içeriğini kullanarak aslar:

i şimdiye kadar öğrendiğim Ne
<prefer-application-packages> 
    <package-name>javax.faces.*</package-name> 
    <package-name>com.sun.faces.*</package-name> 
    <package-name>com.bea.faces.*</package-name> 
</prefer-application-packages> 
<prefer-application-resources> 
    <resource-name>javax.faces.*</resource-name> 
    <resource-name>com.sun.faces.*</resource-name> 
    <resource-name>com.bea.faces.*</resource-name> 
    <resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name> 
    <resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name> 
</prefer-application-resources> 

: Bu CDI uygulaması var olduğu

  • WL12c kaynak ile donatılmıştır 1.1.3.
  • JSF uygulamasını değiştirmeye karar verdiğinizde, JSF/CDI'yi kendiniz entegre etmekten sorumlu olduğunuz bir yeri (nerede olduğunu hatırlamıyorum) okuyorum. Bu doğru mu (emin değil)?

Sevdiğim şeyler şimdiye kadar denedim:

  • bir şekilde bir araya Weld ve MyFaces tutkal umuduyla karışımı içine MyFaces CODI ekle ama öyle olmadı.
  • Weld'i CDI uygulaması olarak OpenWebBeans ile değiştirin. Bu ilk başta çalışmak gibi görünüyordu ama bazı iç sun.reflection paketinde daha sonra her tür ilginç ClassCastExceptions verdi. Bu yine de kaçınmak istediğim bir çözüm.
  • Web.xml ve faces-config.xml'deki çeşitli seçenekleri kullanarak Weld'i manuel olarak tetikleyin. Bu, Weld'in her türlü hata mesajıyla günlüğe akmasını sağlayan bir şey gibi görünüyor. Bir dereceye kadar bu weblogic daha yeni bir Weld sürümüne yükselterek "sabit" olabilir, ancak bunu her defasında bir sonraki hataya çarpıyorum. Yine, bu rotadan da kaçınmayı tercih ederim.

CDI desteğini korurken MyFaces'ı WL12c'de kullanmak gerçekten çok mu zor? Herhangi bir yardım için teşekkürler.

+0

Bilginize: - CODI MyFaces herhangi başka şeyler bağımsızdır ve bu yüzden burada yardımcı olamaz. - Tam entegrasyonu kullanmak istiyorsanız, CDI 1.0 uygulama sunucuları belirli bir CDI uygulamasına (bir satıcının ve hatta belirli sürümlerin) bağlıdır. –

+0

Kullanımı: com.sun.faces. * , MyFaces-Core –

+0

Ok.So kullanmak isterseniz, Weblogic kullanarak Weld 1.1.3 kullanarak kullanmayı tahmin etmiyor sonra? Bunu umursamıyorum, sadece MyFaces'i çalıştırmakla ilgileniyorum, ancak CDI entegrasyonunu bozmadan ilgileniyorum. Aslında, weblogic yığının kalanını tek başına bırakmayı tercih ederim. Com.sun.faces. * Paketleri hakkında, bunların myFaces dağıtımının bir parçası olmadığını tahmin ediyorum, bu yüzden onları weblogic.xml dosyasından kaldırırım (config aslında burada bulunan bir (daha eski) weblogic thread'a dayanıyordu: https://forums.oracle.com/forums/thread.jspa?threadID=2335546). Yine de, MyFaces'ı WL12'de kullanmanın ve bir şekilde Weld ile bütünleştirmenin mümkün olup olmadığı hala net değil. Herhangi bir ipucu? –

cevap

1

Korkarım ki bunu yapmanın bir yolu yok. Kaynak tutkal kodunun orada olması gerekir. Jsf için wls konuşlandırılabilir kütüphanelerin bir parçası olan bu küçük küçük entegrasyon katmanı için kullanılabilir değil ....

+1

Aynı sonuca vardım. WL12, Mojarra/Weld entegrasyon kodunu içerdiğine inandığım com.oracle.injection.provider.weld_1.0.0.0 isimli bu kavanoza gönderilir ve maalesef ne standart ne de CDI veya JSF'nin bir parçası değildir. Aynı zamanda yeni WL12 yaması (12.1.1.0.4) ile aynı sonuçları tekrar denedik (ve halen Kasım 2011'e kadar devam eden Kaynak 1.1.3 üzerinde çalışıyor). Bunun en doğru cevap olduğuna inandığımdan (sadece mümkün değil), ödül süresi biter bitmez bu cevabı kabul edeceğim. –

+0

Ayrıca, WLS kablonuzun herhangi bir şeyi değiştirmenin WLS enduser lisansı tarafından izin verilmediğini lütfen unutmayın. – struberg

1

Sadece merak ediyor, uygulamanızda kaynak sunucu uygulamasını etkinleştirmeyi denediniz mi?

sordum nedeni bu ifadenin geçerli:

yerde okudum

(hatırlayamıyorum) Eğer JSF uygulaması değiştirmeye karar verdikten sonra size MTU/Kendine

CDI entegre sorumlu olduğunuzu

Bu oldukça doğrudur. Kap, JSF impl ve CDI'nin birlikte bir araya getirilmesiyle bir araya getirilmiş olanı bir araya getirir. Kendi JSF impl ile değiştirirseniz, kabın size verdiği şeyi atlarsınız. Henüz yapmadıysanız, uygulamanızdaki Weld Servlet'i etkinleştirmeyi, CDI'nin özel JSF uygulamasına izin verip vermediğini görmek için şiddetle tavsiye etmenizi öneririm.

+0

Evet. 2 ay geçti bu yüzden tam olarak ne denediğimizi hatırlamıyorum, ama eminim ki 'jsf' altında belirtilen çeşitli yapılandırma seçeneklerini denedim http://docs.jboss.org/weld/reference/1.1.5.Final /en-US/html/ri-spi.html, şanssız. Bazı dinleyici sınıflarını cdi/jsf entegrasyonunu önyüklemek için yapılandırmaktan sakınmıyorum, ama entegrasyon sınıfları demetini yazmak üzereyim. (Şimdiye kadar) bu çalışmayı elde etmek için gerekli olduğuna inanıyorum. –

+0

Kaynak sunucu uygulamasına geçiş farklı bir yapılandırma değildir, farklı bir yapı yapısıdır. JSF'yi SAVAŞINIZA taşıdığınız için, CDI çalışma zamanını savaşınıza da taşıyacaksınız. JSF, fasulye yöneticisini JNDI üzerinden bulabilir, bu yüzden bir atış yapmaya değer. –

+0

Aslında şunu da hatırlıyorum, aynı zamanda savaşın içinde kaynak çekirdeği ve kaynak-servlet paketlemeyi ama işe yaramadı. Her neyse, bu John ve diğer herkes için yardımın için teşekkürler ama şimdi mojarra'ya bağlı kalmaya karar verdik. Sadece çok daha kolay görünüyor. –

3

Örneğinizde net olmayan birkaç şey var. Örneğin. @RequestScoped hangi paketten geliyor? Bu javax.enterprise.context.RequestScoped (çalışması gerekir) veya javax.faces.bean.RequestScoped (işe yaramaz mı)? Yalnızca CDI çekirdekleri kullanıyorsanız (ve javax.faces.bean öğelerini kullanmıyorsanız), JSF kabı ve CDI konteynerinin birbiriyle bütünleme biçimleri aslında birleştirilmiş İfade Dili javax.el.ELResolver'dır. Ve bu kutunun dışında çalışmalıdır.

org.apache.myfaces.webapp.StartupServletContextListener gerçekten gerekli değildir. Tek ihtiyacınız olan FacesServlet'i ayarlamak.

Sorunlu nokta, JSF EG'nin, uygulama JSF'yi hiç kullanmasa bile, JSF uygulamasının körü körüne etkinleştirilmesi için ServletContainerInitializer [1] 'i kullanmaya zorlanması olabilir. Bu servlet-3.0 spec sadece otomatik olarak bu özelliklerin nasıl etkinleştirileceğini tanımladığı için etrafta dolaşmak zordur, ancak bunları tekrar devre dışı bırakmanın bir yolu yoktur.

[1] http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html

+0

RequestScoped enterprise.context kaynaklıdır ve gerçekten CDI tarafından yönetilen Bean'i çalışmayan EL ile çözmeye çalışıyoruz. "Körü körüne aktive jsf" yorumunuz hakkında 2 eş zamanlı aktif JSF uygulamasıyla sonuçlanabileceğimizi mi söylüyorsunuz? –

+0

Görünüşe göre, @Markus yorumları ile birlikte haklısınız. Weblogic'te JSF dağıtımına (glassfish.jsf_1.0.0.0_2-1-5.jar) baktım ve ilk olarak Mojarra'yı kaydeden bir com.bea.faces.WeblogicInjectionProvider paketinin bir parçası olarak görüyorum. Ayrıca, özel bir Kaynak (CDI) çerçevesi olduğu konusunda şüpheleniyorum. –