在EAR中部署时出现以下错误。elasticsearch连接期间发生异常。在我的EAR中,我使用的是番石榴版本18。这是ES 2.0+的推荐版本(我使用的是ES 2.3.3)
weblogic.application.ModuleException: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor; at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140) at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:216) ..... Caused By: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor; at org.elasticsearch.threadpool.ThreadPool.<clinit>(ThreadPool.java:190) at org.elasticsearch.client.transport.TransportClient$Builder.build(TransportClient.java:131) at com.ventyx.servicesuite.dispatcher.ESClientMgr.connect(ESClientMgr.java:80)
....
在大多数搜索中,它都提到它是因为番石榴jar有冲突。
java.lang.NoSuchMethodError:com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor
所以我在运行Weblogic时添加了-verbose:class作为Java选项,以查看是否加载了旧版本的番石榴。
但是令我惊讶的是,它没有发现任何番石榴罐被装载。但我怀疑weblogic.server.merged.jar是否已预先打包了Google库。
所以我的问题是,有什么办法可以告诉容器使用应用程序而非Weblogic的jar文件?
我可以通过将带有preferred-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" xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" 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>