2013-04-02 93 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中指定它,但不幸的是我現在不記得如何從頭至尾完成它。 –