WebLogic 12c не подчиняется «предпочитают-веб-inf-классы» или «предпочитают-приложения-пакеты» во время развертывания - PullRequest
0 голосов
/ 03 июля 2019

У меня очень странная проблема с WebLogic 12.1.3.0.0. У меня есть приложение, которое вызывает NullPointerException внутри AdminServer во время развертывания, но приложение работает нормально после ошибки.

NullPointerException во время развертывания происходит потому, что процесс развертывания не учитывает следующие параметры в моих дескрипторах развертывания:

AppName.war/WEB-INF/weblogic.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>

  <context-root>AppName</context-root>
  <container-descriptor>
      <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>

</weblogic-web-app>

И AppName.ear/META-INF/weblogic-application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>

    <prefer-application-packages>
            <package-name>javax.faces.*</package-name>
    </prefer-application-packages>

</weblogic-application>

Так как эти настройки игнорируются, класс javax.faces.webapp.FacesServlet загружается загрузчиком системных классов (sun.misc.Launcher$AppClassLoader) из $WL_HOME/wlserver/modules/glassfish.jsf_2.0.0.0_2-1-20.jar, а не из загрузчика классов WAR. Это в конечном итоге приводит к NPE из-за некоторого плохо написанного кода в weblogic.servlet.internal.WebAnnotationProcessor, который предполагает, что javax.faces.webapp.FacesServlet будет аннотирован @MultipartConfig, чего нет в glassfish.jsf_2.0.0.0_2-1-20.jar. Правильная версия этого класса находится в AppName.ear/AppName.war/WEB-INF/lib/jsf-api-2.2.16.jar.

Я проверил все это удаленной отладкой AdminServer и включив ведение журнала Classloader, которое показывает это:

GCL[61ba0535][AppName.ear@AppName.war] GCL.loadClass(javax.faces.webapp.FacesServlet)>
FCL[10d372cb][] FCL.loadClass(javax.faces.webapp.FacesServlet)>
FCL[10d372cb][] FCL.findClass(javax.faces.webapp.FacesServlet)>
GCL[75bc8d74][DomainLib] GCL.loadClass(javax.faces.webapp.FacesServlet)>

Эта проблема делает невозможным открытие AppName Развертывания в консоли администратора, т.к. он всегда выдает ошибку (с вышеупомянутым NPE в журналах):

The configuration for AppName is still being loaded from your last request, please wait a moment and retry.

В отличие от этого, когда я запускаю EAR на сервере, где он был развернут, точно такой же EAR работает просто отлично. Чтобы доказать, что загрузка классов работает правильно, вот журнал:

CACL[6eb4b4ad][AppName@AppName] CACL.loadClass(javax.faces.webapp.FacesServlet)>
CACL[6eb4b4ad][AppName@AppName] GCL.loadClass(javax.faces.webapp.FacesServlet)>
FCL[37ee3b94][AppName@AppName] FCL.loadClass(javax.faces.webapp.FacesServlet)>
FCL[37ee3b94][AppName@AppName] FCL.findClass(javax.faces.webapp.FacesServlet)>
GCL[3cc63f62][AppName@] GCL.loadClass(javax.faces.webapp.FacesServlet)>
FCL[770e8d03][] FCL.loadClass(javax.faces.webapp.FacesServlet)>
FCL[770e8d03][] FCL.findClass(javax.faces.webapp.FacesServlet)>
FCL[770e8d03][] FCL.matchesClassFilterList(javax.faces.webapp.FacesServlet): javax.faces. index : 0 end : 12>
FCL[770e8d03][] FCL.findClass(javax.faces.webapp.FacesServlet): Found match>
GCL[3cc63f62][AppName@] GCL.findClass(javax.faces.webapp.FacesServlet)>
GCL[3cc63f62][AppName@] GCL.findLocalClass(javax.faces.webapp.FacesServlet): Classpath in use: <LIST OF ALL JARS IN MY EAR>
GCL[3cc63f62][AppName@] GCL.findLocalClass(javax.faces.webapp.FacesServlet): not found>
CACL[6eb4b4ad][AppName@AppName] CACL.findClass(javax.faces.webapp.FacesServlet)>
CACL[6eb4b4ad][AppName@AppName] CACL.findClass(javax.faces.webapp.FacesServlet): About to loadClass>
CACL[6eb4b4ad][AppName@AppName] GCL.findClass(javax.faces.webapp.FacesServlet)>
CACL[6eb4b4ad][AppName@AppName] GCL.findLocalClass(javax.faces.webapp.FacesServlet): Classpath in use: <LIST OF ALL JARS IN MY WAR>
CACL[6eb4b4ad][AppName@AppName] GCL.findLocalClass(javax.faces.webapp.FacesServlet): Found class>
CACL[6eb4b4ad][AppName@AppName] GCL.defineClass(javax.faces.webapp.FacesServlet)>

Я не знаю, как это исправить ... Почему AdminServer полностью игнорирует дескрипторы развертывания в моем EAR, в то время как сервер, который запускает EAR, все настраивает правильно?

Любые идеи приветствуются.

...