2015-09-28 3 views
2

Мы работаем с JSF 1.2 на Websphere 7 и 8 в течение многих лет. Мы строим нашу войну с JSF в комплекте и всегда устанавливаем загрузчик классов как PARENT LAST.JSF Mojarra 2.2 на Websphere 8.x

Обновлено до JSF 2.2 (и RF4 и PF4 - до завершения миграции). Теперь мы сталкиваемся с проблемами развертывания на одном сервере (WAS 8.0, а также WAS 8.5).

Мы уже сделали аналогичный подход (с комплектом JSF и PARENT LAST). Приложение не запускается, он упоминает инициализацию Mojarra 2.2.11, но по запросу первой страницы, мы получаем ниже ошибок:

java.lang.reflect.UndeclaredThrowableException 
at com.sun.proxy.$Proxy34.markResourceRendered(Unknown Source) 
at org.richfaces.resource.ResourceFactoryImpl.createMappedResource(ResourceFactoryImpl.java:366) 
at org.richfaces.resource.ResourceFactoryImpl.createResource(ResourceFactoryImpl.java:343) 
at org.richfaces.resource.ResourceHandlerImpl.createResource(ResourceHandlerImpl.java:266) 
at javax.faces.application.ResourceHandlerWrapper.createResource(ResourceHandlerWrapper.java:137) 
at org.apache.myfaces.custom.captcha.CAPTCHAResourceHandlerWrapper.createResource(CAPTCHAResourceHandlerWrapper.java:83) 
at org.apache.myfaces.tomahawk.resource.UncompressedResourceHandlerWrapper.createResource(UncompressedResourceHandlerWrapper.java:109) 
at org.apache.myfaces.tomahawk.resource.UncompressedResourceHandlerWrapper.createResource(UncompressedResourceHandlerWrapper.java:61) 
at com.sun.faces.renderkit.html_basic.ScriptRenderer.encodeEnd(ScriptRenderer.java:104) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) 
Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
at java.lang.reflect.Method.invoke(Method.java:611) 
at org.richfaces.application.ServiceTracker$1.invoke(ServiceTracker.java:153) 
... 52 more 
Caused by: java.lang.ExceptionInInitializerError 
at org.richfaces.resource.external.ResourceTrackerForMyFaces.<init>(ResourceTrackerForMyFaces.java:58) 
at org.richfaces.resource.external.ResourceTrackerImpl.getImplementation(ResourceTrackerImpl.java:86) 
at org.richfaces.resource.external.ResourceTrackerImpl.markResourceRendered(ResourceTrackerImpl.java:67) 
... 57 more 
Caused by: java.lang.NoSuchMethodException: org.apache.myfaces.shared_impl.renderkit.html.util.ResourceUtils.isRenderedStylesheet(javax.faces.context.FacesContext, java.lang.String, java.lang.String) 
at java.lang.Class.throwNoSuchMethodException(Class.java:356) 
at java.lang.Class.getMethod(Class.java:1018) 
at org.richfaces.resource.external.ResourceTrackerForMyFaces.<init>(ResourceTrackerForMyFaces.java:49) 
... 59 more 

я явно видел много предложений с использованием разделяемой библиотеки, но я так же обнаружил, что CDI не поддерживается, если не используется реализация JSF по умолчанию, предоставляемая websphere.

Предпочитаемое решение, очевидно, должно было состоять в одной войне с развертыванием, но мне интересно, возможно ли это в websphere?

отметить также, что это приложение работает отлично на WebLogic и tomcat7

+1

Вы упомянули Mojarra в названии. Сообщение об исключении указывает, что это MyFaces. – Tiny

+0

@Tiny: AND Mojarra: com.sun.faces.renderkit.html_basic.ScriptRenderer.encodeEnd (ScriptRenderer.java:104) ... Может ли быть, что другие классы связаны с Tomahawk (некоторые из них, но shared_impl один может не ... См. https://issues.jboss.org/browse/RF-13901. Таким образом, OP вполне может быть прав, и на самом деле используется mojarra. – Kukeltje

+0

Mojarra, безусловно, находится на пути к классам, а также tomahawk. websphere, есть и мои изменения, но мой вопрос точно направлен на то, как заставить мое приложение работать на WAS, как на всех других серверах, которые я пробовал. –

ответ

1

Я отслеживаются это вниз с ошибкой в ​​RichFaces, присутствует в самой последней версии 4.5.9, в классе org.richfaces.resource.external.ResourceTrackerImpl.

Этот класс определяет, какой ResourceTracker использовать (существуют разные классы для Mojarra и Myfaces), но просто проверяет, находится ли какой-либо класс из MyFaces в пути к классам. Так обстоит дело, но JSF инициализируется как Mojarra.

Вот новый метод, в котором я предотвращаю поиск классов в MyFaces, если используемая реализация JSF - Mojarra.

private ResourceTracker getImplementation() { 
    ResourceTracker tracker = externalResourceTracker.get(); 
    if (tracker == null) { 
     Class<?> myfacesResUtilClass = null; 
     if (!MOJARRA_IMPLTITLE.equals(FacesContext.class.getPackage().getImplementationTitle())) { 
      for (String myFacesResourceUtilsClass : MYFACES_RESOURCE_UTILS_CLASSES) { 
       try { 
        myfacesResUtilClass = this.getClass().getClassLoader().loadClass(myFacesResourceUtilsClass); 
        break; 
       } catch (Exception e) { 
        LOG.debug("could not load myfaces resource utils class: " + myFacesResourceUtilsClass, e); 
       } 
      } 
     } 
     if (myfacesResUtilClass != null) { 
      externalResourceTracker.compareAndSet(null, new ResourceTrackerForMyFaces(myfacesResUtilClass)); 
     } else { 
      externalResourceTracker.compareAndSet(null, new ResourceTrackerForMojarra()); 
     } 
     tracker = externalResourceTracker.get(); 
    } 

    return tracker; 
} 

Это решается, но это беспокоит меня довольно много, что, помимо ошибки, этот класс даже проверяет на WEBSPHERE определенный класс, показывая, как MyFaces фактически была адаптирована для работы на Websphere, а другой наоборот.

+0

Добро пожаловать ;-) – Kukeltje

+0

Извините, не вижу ссылку на вашу проблему. В то время было отклонено, но с примечаниями, что «патч будет приветствоваться и проверяться, когда он доступен». Итак, теперь у них есть одна новая проблема. Https://issues.jboss.org/browse/RF-14155 –

+0

Отличные ... надеюсь, они исправят это странное обходное решение из-за некоторой аномалии websphere – Kukeltje