2013-09-25 6 views
5

JBoss 7.1, OmniFaces 1.6, ग्रहण केपलर, CDI 1.0एक ईएआर में दो WARs में OmniFaces 1.6 का उपयोग कैसे करें?

मैं नए Omnifaces 1.6, जब मैं OmniFaces 1.5 से OmniFaces 1.6 के लिए अद्यतन के साथ निम्न स्थिति मिल गया है। मुझे लगता है कि ओमनीफेस 1.6 की नई रोचक सीडीआई सुविधाओं के साथ इसका कुछ संबंध है।

मेरे पास एक ईएआर संग्रह में दो जेएसएफ आधारित युद्ध परियोजनाएं हैं, दोनों परियोजनाओं में ओमनीफेस निर्भरता के रूप में हैं और वे दोनों तैनात किए जाएंगे। तैनाती में, ओमनीफेस 1.6 दोनों WAR परियोजनाओं के /WEB-INF/lib में समाप्त होता है। जेबॉस की शुरुआत में IllegalArgumentException फेंक दिया गया था।

java.lang.IllegalArgumentException: Registering converter 'class org.omnifaces.converter.ListConverter' failed, duplicates converter ID 'omnifaces.ListConverter' of other converter 'class org.omnifaces.converter.ListConverter'. 
    at org.omnifaces.cdi.converter.ConverterExtension.processConverters(ConverterExtension.java:78) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:264) 
    at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52) 
    at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:137) 
    at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:260) 
    at org.jboss.weld.introspector.jlr.WeldMethodImpl.invokeOnInstance(WeldMethodImpl.java:170) 
    at org.jboss.weld.introspector.ForwardingWeldMethod.invokeOnInstance(ForwardingWeldMethod.java:51) 
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:154) 
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:241) 
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:229) 
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:207) 
    at org.jboss.weld.manager.BeanManagerImpl.notifyObservers(BeanManagerImpl.java:569) 
    at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:559) 
    at org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:60) 
    at org.jboss.weld.bootstrap.events.AbstractDefinitionContainerEvent.fire(AbstractDefinitionContainerEvent.java:38) 
    at org.jboss.weld.bootstrap.events.ProcessManagedBeanImpl.fire(ProcessManagedBeanImpl.java:30) 
    at org.jboss.weld.bootstrap.AbstractBeanDeployer.deploy(AbstractBeanDeployer.java:123) 
    at org.jboss.weld.bootstrap.BeanDeployment.deployBeans(BeanDeployment.java:204) 
    at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:344) 
    at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:82) 
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:76) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:662) 

अगर मैं एक युद्ध परियोजना, तो अपवाद गायब हो जाता है को हटाने और मैं EAR में अन्य युद्ध परियोजना का उपयोग कर सकते हैं।

क्या एक परियोजना के रूप में ओमनीफेस 1.6 का उपयोग करना संभव है, और एक ईएआर में जेबॉस 7.1.1 पर तैनात करना संभव है?

+2

यह समस्या पहले से ही पहचानी जा चुकी है और हम वर्तमान में इस पर काम कर रहे हैं: https://code.google.com/p/omnifaces/issues/detail?id=251 आज या कल 1.6.1 होगा अनिवार्य फिक्स – BalusC

+0

धन्यवाद, मैं एक फिक्स के लिए इंतजार कर रहा हूँ! – Tony

+1

मैंने इसे ठीक किया। कृपया 1.6.1 स्नैपशॉट आज़माएं: https://oss.sonatype.org/content/repositories/snapshots/org/omnifaces/omnifaces/1.6.1-SNAPSHOT/ यदि यह आपके लिए काम करता है तो मैं स्पष्टीकरण के साथ एक उत्तर पोस्ट करूंगा। – BalusC

उत्तर

3

यह बग 1.6.1 में तय किया गया है। इस बग के पीछे काफी कहानी है, इसलिए मैंने उस पर एक ब्लॉग लिखा है: CDI behaved unexpectedly in EAR, so OmniFaces 1.6.1 released!

संक्षेप में: सीडीआई संदर्भ युद्ध-व्यापी नहीं है, लेकिन ईएआर-चौड़ा है। आपके द्वारा उठाए गए विशेष अपवाद के कारण, ऐसा इसलिए हुआ क्योंकि केवल एक सीडीआई ConverterExtension एक डब्ल्यूएआर से लोड किया जा रहा था जिसे बाद में ईएआर-चौड़ा लगाया गया था और इस प्रकार कक्षाओं को से WAR के बजाय WARs जहां सीडीआई एक्सटेंशन लोड किया जा रहा था से।

ध्यान दें कि यह OmniFaces में कोई समस्या नहीं है। ईएआर में सीडीआई कैसे काम करता है इस तरह यह एक समस्या है।


अद्यतन: मुद्दा WELD-2143 के अनुसार इस अजीब समस्या अंत में वेल्ड 2.3.5 में तय किया गया है। मैंने इसे पैच किए गए वाइल्डफ्लि 10.0.0 में परीक्षण किया है और पुष्टि की है कि सभी ओमनीफेस सीडीआई विशेषताएं Extension पर निर्भर करती हैं, @ViewScoped, @Eager और @Param एक ही ईएआर में दोनों WARs में फिर से काम करती हैं।

तो, यदि आप कई WARs के साथ एक ईएआर में उपरोक्त ओमनीफेस सीडीआई सुविधाओं का उपयोग करने के साथ संघर्ष करते हैं, तो सुनिश्चित करें कि आप वेल्ड को कम से कम संस्करण 2.3.5 में अपग्रेड करें। OpenWebBeans में समस्या खुलती है।

+0

त्वरित प्रतिक्रिया और बग फिक्स के लिए धन्यवाद! दुर्भाग्य से मैं अभी तक 1.6.1 का उपयोग नहीं कर सकता। Http://stackoverflow.com/questions/19247876/required-fields-with-omnifaces-1-6-1 देखें – Tony

संबंधित मुद्दे