2013-04-02 87 views
0

早上好@每个人,外部化Spring库Web应用程序

我想知道是否可以外部化Spring库。我们有很多应用程序/ Web服务都使用相同的Spring-libs,现在我们被迫在Websphere(8.5.0.1)服务器上部署应用程序。由于WebSphere和类加载比其他一切之前,我知道有一点不同......

嗯......

思想是:

创建一个包含所有Springlibraries一个mavenproject并添加此JAR-文件到服务器。我们希望继续在tomcat服务器上开发并部署在websphere上,而不必太麻烦......

但是,如果我将所有springlibs移动到外部文件,似乎应用程序无法正确加载( Classloader问题?)。所以如果你们中的任何一个人都可以给我一个提示或者一个很好的建议,我会很感激。 当然,如果我错过了一个事实,为什么它不可能?

编辑: 这是我的pom.xml实际上是如何样子(当然的一部分),我真的,真的不喜欢它... ...

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration> 
        <packagingExcludes>WEB-INF/lib/hibernate*.jar, 
         WEB-INF/lib/*spring*.jar, 
         WEB-INF/lib/xml-apis*.jar, 
         WEB-INF/lib/xpp3_min*.jar, 
         WEB-INF/lib/xstream*.jar, 
         WEB-INF/lib/antlr*.jar, 
         WEB-INF/lib/webservices-api*.jar, 
         WEB-INF/lib/commons-collections*.jar, 
         WEB-INF/lib/dom4j*.jar, 
         WEB-INF/lib/javassist*.jar, 
         WEB-INF/lib/jboss-logging*.jar, 
         WEB-INF/lib/jboss-transaction-api*.jar, 
         WEB-INF/lib/primefaces*.jar, 
         WEB-INF/lib/redmond*.jar, 
         WEB-INF/lib/sunny*.jar, 
         WEB-INF/lib/akka*.jar, 
         WEB-INF/lib/scala*.jar, 
         WEB-INF/lib/scala*.jar, 
         WEB-INF/lib/jsf-impl*.jar, 
         WEB-INF/lib/jsf-api*.jar, 
         WEB-INF/lib/config-0.3.1.jar, 
         WEB-INF/lib/commons-collections*.jar, 
         WEB-INF/lib/commons-lang*.jar, 
         WEB-INF/lib/cglib-nodep*.jar, 
         WEB-INF/lib/slf4j-api*.jar, 
         WEB-INF/lib/quartz*.jar, 
         WEB-INF/lib/c3p0*.jar, 
         WEB-INF/lib/ojdbc6*.jar, 
         WEB-INF/lib/mysql-connector-java*.jar, 
         WEB-INF/lib/aopalliance-1.0.jar, 
         WEB-INF/lib/aspectjrt-1.6.8.jar, 
         WEB-INF/lib/cdi-api-1.0.jar, 
         WEB-INF/lib/commons-cli-1.2.jar, 
         WEB-INF/lib/commons-io-2.3.jar, 
         WEB-INF/lib/commons-logging-1.1.1.jar, 
         WEB-INF/lib/freemarker-2.3.9.jar, 
         WEB-INF/lib/javax.inject-1.jar, 
         WEB-INF/lib/jboss-interceptor-api-1.1.jar, 
         WEB-INF/lib/jcl-over-slf4j-1.6.1.jar, 
         WEB-INF/lib/jettison-1.0.jar, 
         WEB-INF/lib/jsr250-api-1.0.jar, 
         WEB-INF/lib/validation-api-1.0.0.GA.jar 
        </packagingExcludes> 
       </configuration> 
      </plugin> 

,但如果我那样做,添加该库外部,我的应用程序的工作(但在WebSphere,这绝对不是我的本意JUST

+0

Spring库不会是包含WEB-INF/lib目录的WAR的一部分吗?这不会确保它能够在Tomcat和Websphere上无缝工作吗? –

+0

我完全认为是一样的,但在网络上它没有像预期的那样工作。我不得不在服务器上创建大量的共享库添加告诉我的应用程序它应该使用这个库。否则,我在应用程序中遇到了很多冲突。但说实话,我第一次和websphere一起工作..也许有办法让它工作效率更高..但据我所知,我几乎试过了一切。唯一的工作是从我的web.jar中排除* .jar文件,并将它们作为单独加载的库添加。 – djnose

+0

我不明白为什么将Spring库放在WAR文件的WEB-INF/lib中不起作用。我们一直这样做,虽然还没有在WAS 8.5上。当我们在那里测试时它工作在8.0,但是在8.5中可能有些不同? – dbreaux

回答

1

尽量保持WEB-INF/lib文件夹里面的弹簧库由@Dhanush纳思比的建议最后将类加载器更改为父类。

要更改类加载器,请转到域管理器控制台。

服务器>的WebSphere Application Server> $服务器名称>服务器中的特定应用程序设置

变化ClassLoader的政策,“单”和类加载模式为“父最后一个”。检查这是否有帮助。

enter image description here

+0

Thx,我已经尝试过了,但后来我用XML-DocumentBuilder得到了一些异常,错误的JSF版本,它或多或少是一个永无止境的故事......这最终迫使我外化库。我的应用程序以某种方式开始工作,但我相信必须有更好的方法来做到这一点(因为我的pom.xml中有很多libs列表,这些列表不应该被实现,而不是它应该如何实现,是吗?)但是我现在会再试一次..也许我以前做错了什么...... – djnose

+0

在这里你可以看到错误http://pastebin.com/cALXWVbg。任何其他提示?谢谢! – djnose

+0

嗨,关于XML错误,请尝试从应用程序中删除所有与XML相关的API(xerces,xalan等)。你应该依赖于WebSphere。关于JSF错误,可能您使用的是除WebSphere默认版本之外的其他JSF版本。有一种方法可以在WebSphere中指定它,但不幸的是我现在不记得如何从头至尾完成它。 –