Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 部署应用程序时的Weblogic Guava问题_Java_Deployment_Weblogic_Guava - Fatal编程技术网

Java 部署应用程序时的Weblogic Guava问题

Java 部署应用程序时的Weblogic Guava问题,java,deployment,weblogic,guava,Java,Deployment,Weblogic,Guava,我正在尝试将应用程序部署到weblogic服务器,但出现以下错误。我的类路径中有guava.jar,我尝试了10及以上的所有最新版本。有人能帮我解决这个问题吗? <Error> <Console> <BEA-240003> <Administration Console encountered the following error: weblogic.application.ModuleException: [HTTP:101216]Servl

我正在尝试将应用程序部署到weblogic服务器,但出现以下错误。
我的类路径中有guava.jar,我尝试了10及以上的所有最新版本。有人能帮我解决这个问题吗?

    <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)

这是一个战争计划吗?或者它只是一个ejbjar

如果是最新的,您有几个选择:

  • 把你的jar文件包在耳朵里,然后把番石榴的罐子放进去
  • 将番石榴罐添加到AS的库文件夹中
  • 将您的jar文件与Guava的文件合并。例如,如果你是一个专业人士,你可以使用

看起来您运行的番石榴版本与编译时使用的版本不同。可能您正在运行多个版本的番石榴,您随机得到了错误的一个。如果您的另一个依赖项错误地捆绑了番石榴,则可能会发生这种情况

为了弄清楚这一份
MoreExecutors
的来源,我听说您可以在
UserServer
中使用这段代码反省地找到它:

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

这似乎是一个反复出现的问题(,)。一、 我自己也遇到了同样的问题。Weblogic首先加载它自己的(过时的)番石榴库版本,该版本与应用程序的版本相冲突

解决方案是将
首选应用程序包添加到
weblogic.xml
weblogic应用程序.xml

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

com.google.common*

我也遇到了这个问题,不幸的是修改weblogic.xml对我来说不起作用。有效的方法是将guava-14.0.1.jar放到$JAVA_HOME/jre/lib/annowned中(如果这个目录不存在,就创建它)


另一个警告:起初,我尝试使用较新的guava-18-这导致了另一方面的兼容性问题(MapMaker.makeComputingMap上的IllegaAccess错误-更多详细信息)。Guava 14.0.1对我来说似乎达到了最佳状态——MapMaker类足够老,可以满足WebLogic的要求,而MoreExecutors类足够新,可以让Cassandra Java驱动程序工作(这就是我偶然发现这个问题的原因)。

我遇到了类似的问题。我可以通过在EAR中添加一个带有首选应用程序包的weblogic-application.xml来解决这个问题

<?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>

com.google.common*

我使用两个文件解决了这个问题:ear中的weblogic-application.xml和war中的weblogic.xml

这是ear->src/main/application/META-INF中的weblogic-application.xml/

<?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>

com.google.common*
这是war->src/main/webapp/WEB-INF中的weblogic.xml/

<?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>

com.google.common*

让我困惑的是,现在有一些番石榴类。你在用ProGuard吗?您要构建什么系统?使用eclipse,并在weblogic控制台上部署。更新!!最后,我从@Chris Povirk那里得到了解决方案的问题,但我解决了它。我不知道该怎么办,你能给我更多的细节吗?tnx工厂@埃尔耶姆。在
com.my.app.servers.UserServer
中的静态初始化块中,或者在第167行之前的
com.my.app.ActionServlet.init()中,或者更可能在
com.my.app.ActionServlet.init()中,添加类似于
System.out.println(MoreExecutors.class.getProtectionDomain().getCodeSource().getLocation())
(或者使用您选择的日志系统)的内容,因此,它在抛出异常之前执行。这将记录jar的“路径”,其中包含加载的
MoreExecutors
类,并帮助您摆脱jar冲突。好的,首先谢谢!我做了,它来自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文件,因为服务器需要它,你有什么建议吗?你可以在@ElyeM的“Clazzloading或Oracle and RedHat vs.google”下尝试weblogic-application.xml建议。Chris链接的解决方案应该可以解决您的问题,因为这是一个类加载问题:WLS打包了一个看起来像google collections的旧版本和重新打包的版本,它已经被Guava取代;默认情况下,您的应用程序将在打包类之前“看到”WLS加载的类,这就是您最终使用错误的
MoreExecutors
版本的原因。通过过滤Guava从应用程序类加载器导出的包,您将确保使用来自应用程序中打包的jar的所有Guava类,而不是WLS中的类。
<?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>