2017-02-07 3 views
0

Ich habe ein Struts-Problem. Ich aktualisiere eine Anwendung von Struts 1.2.x auf 2.5.8. Ich habe einen einzelnen War und mehrere EJBs in einer einzelnen EAR-Datei, die auf WebSphere 8.5 bereitgestellt wird. Jedes Mal, wenn ich versuche, eine einfache hallo jsp Welt über eine Struts Aktion aufzuzurufen, erhalte ich diesen Stack-Trace in meinem Browser:Struts 2.5 ClassNotFoundException Problem

Error Message: javax.servlet.ServletException: Filter [struts2]: could not be initialized 
Error Code: 500 
Target Servlet: com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor 
Error Stack: 
Unable to load configuration. - bean - wsjar:file:/WEB-INF/lib/struts2-core-2.5.8.jar!/struts-default.xml:92:181 
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:499) 
    at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:75) 
    at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:63) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:145) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:607) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:514) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:319) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:392) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:931) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1107) 
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3928) 
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1007) 
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:287) 
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) 
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1881) 
    Caused by: Unable to load configuration. - bean - wsjar:file/WEB-INF/lib/struts2-core-2.5.8.jar!/struts-default.xml:92:181 
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:70) 
    at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:906) 
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:445) 
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:486) 
    ... 28 more 
    Caused by: Unable to load bean: type:org.apache.struts2.dispatcher.multipart.MultiPartRequest class:org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest - bean - wsjar:file:/WEB-INF/lib/struts2-core-2.5.8.jar!/struts-default.xml:92:181 
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:271) 
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:98) 
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:165) 
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67) 
    ... 31 more 
    Caused by: java.lang.NoClassDefFoundError: org.apache.commons.fileupload.FileUploadException 
    at java.lang.J9VMInternals.prepareClassImpl(Native Method) 
    at java.lang.J9VMInternals.prepare(J9VMInternals.java:283) 
    at java.lang.Class.getDeclaredConstructors(Class.java:721) 
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:263) 
    ... 34 more 
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:600) 
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:243) 
    at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:786) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:764) 
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:134) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:741) 
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62) 
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58) 
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:741) 
    ... 38 more 

ich überprüft habe, dass die erforderlichen commons-fileupload jar im Krieg ist und es ist nicht in einem Speicherort der gemeinsam genutzten Bibliothek, der Namensraumkonflikte verursachen würde. Classloader Einstellung wird zuerst auf Eltern festgelegt, und aufgrund der Komplexität des Projekts kann ich es nicht sicher ändern.

Was muss ich tun, um darüber zu kommen?

TIA Alex

Antwort

0

Sieht aus wie ich zu früh gesprochen. Aus irgendeinem Grund konnte meine erste Suche keine ältere Version von commons-fileupload im Ordner AppServer/plugins anzeigen. Es scheint, dass dieses Jar vom App-Server verwendet wird, und mit der Verwendung des ersten Classloads als Eltern wird eine Klassenkollision stattfinden. Jetzt muss ich herausfinden, wie ich das umgehen kann, aber das ursprüngliche Problem wurde gelöst.

+0

Das Commons-Fileupload-JAR im Plugins-Verzeichnis sollte für Apps nicht sichtbar sein. Es könnte also in eine Kollision verwickelt sein (eine Art doppeltes Sichtbarkeitsszenario), die sich jedoch nicht als ClassNotFoundException manifestieren sollte. Haben Sie einige Dinge in den Bereichen EAR und WAR in Ihrer App gepackt? Es sieht so aus, als gäbe es nur einen Anwendungslader (den CompoundClassLoader) im Stack der ClassNotFoundException, was impliziert, dass die Last nur durch die EAR, nicht durch die WAR ging. – Jarid

0

Solange die Klassen in Ihrem Commons-Fileupload-Jar keine Abhängigkeiten von Ihrer Anwendungs- oder WAR-Klasse aufweisen, können Sie diesen JAR als isolierte, gemeinsam genutzte Bibliothek bereitstellen und der Anwendung oder WAR zuordnen, je nachdem, welche davon abhängig ist Krug. Die Classloading-Semantik für isolierte gemeinsame Bibliotheken wird im Thema "Isolieren von Open-Source-Paketen" im WebSphere Application Server Knowledge Center für die Versionen 8.5.5 und 9.0 beschrieben.

Wenn Sie eine aktuelle Version von 8.5.5 verwenden, können Sie auch versuchen, immer geschützte Pakete, die auch in „Isolieren Open-Source-Pakete beschrieben wird ". Beachten Sie, dass sich immer geschützte Pakete auf alle Anwendungen auswirken können, die auf dem Anwendungsserver ausgeführt werden.

Verwandte Themen