JBoss 7.1, OmniFaces 1.6, Eclipse Kepler, CDI 1.0Làm thế nào để sử dụng OmniFaces 1.6 trong hai WAR trong một EAR?
Tôi đã tìm thấy tình huống sau đây với Omnifaces 1.6 mới, khi tôi cập nhật từ OmniFaces 1.5 lên OmniFaces 1.6. Tôi cho rằng nó có liên quan đến các tính năng CDI thú vị mới của OmniFaces 1.6.
Tôi có hai dự án WAR dựa trên JSF trong một bản lưu trữ EAR, cả hai dự án đều có OmniFaces làm phụ thuộc và cả hai dự án đều sẽ được triển khai. Khi triển khai, OmniFaces 1.6 kết thúc trong /WEB-INF/lib
của cả hai dự án WAR. Khi bắt đầu JBoss, IllegalArgumentException
bị ném.
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)
Nếu tôi xóa một dự án WAR, thì ngoại lệ sẽ biến mất và tôi có thể sử dụng dự án WAR khác trong EAR.
Có thể sử dụng OmniFaces 1.6 trong nhiều dự án và triển khai lên JBoss 7.1.1 trong một EAR không?
Sự cố này đã được xác định và chúng tôi hiện đang làm việc với nó: https://code.google.com/p/omnifaces/issues/detail?id=251 Hôm nay hoặc ngày mai sẽ có phiên bản 1.6.1 với các bản sửa lỗi bắt buộc. – BalusC
Cảm ơn bạn, tôi sẽ chờ đợi để sửa chữa! – Tony
Tôi đã sửa nó. Vui lòng thử ảnh chụp nhanh 1.6.1: https://oss.sonatype.org/content/repositories/snapshots/org/omnifaces/omnifaces/1.6.1-SNAPSHOT/ Nếu nó hoạt động cho bạn, tôi sẽ đăng câu trả lời với giải thích. – BalusC