2012-11-13 47 views
2

我試圖將應用程序部署到weblogic服務器,並且出現以下錯誤。
我在我的classpath中有guava.jar,我嘗試了10次以上的所有最新版本。有人能幫我解決這個問題嗎?

部署應用程序時的Weblogic Guava問題

<Error> <Console> <BEA-240003> <Administration Console encountered the following error: weblogic.application.ModuleException: [HTTP:101216]Servlet: "action" failed to preload on startup in Web application: "...". 
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor()Lcom/google/common/util/concurrent/ListeningExecutorService; 
      at com.google.common.cache.LocalCache.<clinit>(LocalCache.java:155) 
      at com.google.common.cache.LocalCache$LocalManualCache.<init>(LocalCache.java:4750) 
      at com.google.common.cache.LocalCache$LocalLoadingCache.<init>(LocalCache.java:4858) 
      at com.google.common.cache.CacheBuilder.build(CacheBuilder.java:739) 
      at com.my.app.servers.UserServer.<clinit>(UserServer.java:42) 
      at com.my.app.ActionServlet.setAppProperties(DesActionServlet.java:207) 
      at com.my.app.ActionServlet.init(DesActionServlet.java:167) 
      at javax.servlet.GenericServlet.init(GenericServlet.java:240) 
      at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:299) 
      at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:250) 
      at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
      at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
      at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
      at weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:94) 
      at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:82) 
      at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:74) 
      at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:60) 
      at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:34) 
      at weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:624) 
      at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:565) 
      at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1874) 
      at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1848) 
      at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1738) 
      at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2740) 
      at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1704) 
      at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:781) 
      at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213) 
      at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208) 
      at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35) 
      at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:70) 
      at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:212) 
      at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:111) 
      at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) 
      at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213) 
      at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208) 
      at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35) 
      at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:70) 
      at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:24) 
      at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:729) 
      at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:35) 
      at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258) 
      at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:48) 
      at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) 
      at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79) 
      at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:582) 
      at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:148) 
      at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:114) 
      at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:335) 
      at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844) 
      at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253) 
      at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440) 
      at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163) 
      at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195) 
      at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13) 
      at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68) 
      at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:545) 
      at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) 
      at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 



Caused by: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor()Lcom/google/common/util/concurrent/ListeningExecutorService; 
+1

令我百思不解是一些番石榴類存在。你在使用ProGuard嗎?你在建什麼系統? –

+0

使用eclipse,並在weblogic控制檯上部署。 –

+0

更新!最後我從@Chris Povirk 解決了問題,但我解決了[這裏](http://stackoverflow.com/questions/13386474/are-guava-11-0-2-jar-conflicting- with-com-google-common-1-0-0-0-0-6-jar) –

回答

1

它是一個WAR項目?或者它只是一個EJB jar嗎?

如果最新的一個,你有幾種選擇:

  • 包裝你的jar文件到EAR,並在其中
  • 提供番石榴的jar添加番石榴的jar到AS
  • 的庫文件夾
  • 合併您的jar文件與番石榴的一個。例如,如果您是Maven的人,則可以使用Maven Shade Plugin
11

看起來您正在針對不同於您編譯的番石榴版本運行。可能你正在對多個番石榴版本運行,而你隨機得到錯誤的版本。如果您的其他依賴項之一錯誤地捆綁了Guava,則可能會發生這種情況。

要找出其中的MoreExecutors這個副本是從,我聽說你可以找到它在UserServer反思未來使用這個片段:

MoreExecutors.class.getProtectionDomain().getCodeSource().getLocation() 
+0

不知道我該怎麼辦,你能給我更多的細節嗎?一個磨坊! –

+2

@ElyeM。在'com.my.app'的靜態初始化塊中添加類似於'System.out.println(MoreExecutors.class.getProtectionDomain()。getCodeSource()。getLocation())'(或使用您選擇的日誌系統)。 servers.UserServer'或更可能在'com.my.app.ActionServlet.init()'在行167之前,所以它在引發異常之前執行。這將記錄包含加載的'MoreExecutors'類的jar的「路徑」,並幫助您擺脫jar衝突。 –

+0

好的,先謝謝!我做到了,它來自com.google.common_1.0.0.0_0-6.jar,它必須來自Guava-11.0.2.jar,你認爲我應該怎麼做?我想我不能只刪除其服務器所需的com.google.common_1.0.0.0_0-6.jar文件,您有什麼建議嗎? –

2

它這似乎是一個反覆出現的問題([1][2][3])。我自己也遇到了同樣的問題。 Weblogic首先加載它自己版本的(過時的)番石榴lib,與你的applcation版本一致。

的解決方案是增加的prefer-application-packagesweblogic.xmlweblogic-application.xml

<wls:container-descriptor> 
    <wls:prefer-application-packages> 
      <wls:package-name>com.google.common.*</wls:package-name> 
    </wls:prefer-application-packages> 
</wls:container-descriptor> 
0

我碰到這個問題跑爲好,不幸的是改變的weblogic.xml並沒有爲我工作。什麼工作,是將guava-14.0.1.jar放入$ JAVA_HOME/jre/lib/endorsed(如果該目錄不存在,則創建該目錄)。

另一個警告詞:起初我嘗試使用更近期的番石榴-18-這導致了兼容性問題(IllegalAccessError MapMaker.makeComputingMap - 更多細節here)。番石榴14.0.1似乎對我來說是一個甜蜜點 - MapMaker類已經足夠滿足WebLogic的需求,而MoreExecutors類已經足以使Cassandra Java驅動程序工作了(這就是我偶然發現這個問題的原因。)

1

我遇到過類似的問題。我可以通過將帶有prefer-application-packages的weblogic-application.xml添加到我的EAR來解決此問題。

<?xml version="1.0" encoding="UTF-8"?> 
<weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.0/weblogic-application.xsd"> 
    <prefer-application-packages> 
     <package-name>com.google.common.*</package-name> 
    </prefer-application-packages> 
</weblogic-application> 
0

我設法使用這兩個文件來解決這個問題:在戰爭中

這是WebLogic的應用程序的weblogic-application.xml中在耳朵和weblogic.xml。XML在耳 - >的src/main /應用/ META-INF/

<?xml version="1.0" encoding="UTF-8"?> 
<wls:weblogic-application 
    xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.4/weblogic-application.xsd"> 
    <wls:prefer-application-packages> 
     <wls:package-name>com.google.common.*</wls:package-name> 
    </wls:prefer-application-packages> 
</wls:weblogic-application> 

這是weblogic.xml中的戰爭 - >的src /主/ web應用/ WEB-INF/

<?xml version="1.0" encoding="UTF-8"?> 
<wls:weblogic-application 
    xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.4/weblogic-application.xsd"> 
    <wls:prefer-application-packages> 
     <wls:package-name>com.google.common.*</wls:package-name> 
    </wls:prefer-application-packages> 
</wls:weblogic-application>