Ehcache + Terracotta:ConnectionClosedException

问题描述

我正在设置Terracotta集群以支持Ehcache。

我正在遵循基本示例here

我从Maven Central下载了ehcache-clustered-kit3.8.0,并将其解压缩到我的计算机上。除了修改sh脚本以正确设置JAVA_HOME之外,我没有进行任何修改

我使用认的OOB配置(即:省略-f参数)执行了该操作:

./start-tc-server.sh

来自[ehcache root]/server/bin文件夹。

我正在像这样初始化CacheManager:

private CacheManager setup() {
    CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder =
            CacheManagerBuilder.newCacheManagerBuilder()
                .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9410/my-application"))
                        .autocreate(s -> s));
        PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(true);
        return cacheManager;
}

我收到此异常:

org.terracotta.exception.ConnectionClosedException: Entity: org.terracotta.lease.LeaseAcquirer:SystemLeaseAcquirer Connection closed before sending message
at com.tc.object.ClientEntityManagerImpl.throwClosedExceptionOnMessage(ClientEntityManagerImpl.java:509)
at com.tc.object.ClientEntityManagerImpl.queueInFlightMessage(ClientEntityManagerImpl.java:651)
at com.tc.object.ClientEntityManagerImpl.queueInFlightMessage(ClientEntityManagerImpl.java:621)
at com.tc.object.ClientEntityManagerImpl.sendMessageWhileBusy(ClientEntityManagerImpl.java:592)
at com.tc.object.ClientEntityManagerImpl.internalRelease(ClientEntityManagerImpl.java:572)
at com.tc.object.ClientEntityManagerImpl.internalLookup(ClientEntityManagerImpl.java:558)
at com.tc.object.ClientEntityManagerImpl.fetchEntity(ClientEntityManagerImpl.java:182)
at com.terracotta.connection.entity.TerracottaEntityRef.fetchEntity(TerracottaEntityRef.java:82)
at org.terracotta.lease.LeaseMaintainerFactory.getLeaseAcquirer(LeaseMaintainerFactory.java:63)
at org.terracotta.lease.LeaseMaintainerFactory.createLeaseMaintainer(LeaseMaintainerFactory.java:46)
at org.terracotta.lease.connection.BasicLeasedConnection.create(BasicLeasedConnection.java:40)
at org.terracotta.lease.connection.LeasedConnectionServiceImpl.createLeasedConnection(LeasedConnectionServiceImpl.java:58)
at org.terracotta.lease.connection.LeasedConnectionServiceImpl.connect(LeasedConnectionServiceImpl.java:47)
at org.terracotta.lease.connection.LeasedConnectionFactory.getLeasedConnection(LeasedConnectionFactory.java:71)
at org.terracotta.lease.connection.LeasedConnectionFactory.connect(LeasedConnectionFactory.java:47)
at org.ehcache.clustered.client.internal.ConnectionSource$ClusterUri.connect(ConnectionSource.java:70)
at org.ehcache.clustered.client.internal.service.ConnectionState.connect(ConnectionState.java:151)
at org.ehcache.clustered.client.internal.service.ConnectionState.initClusterConnection(ConnectionState.java:128)
at org.ehcache.clustered.client.internal.service.DefaultClusteringService.start(DefaultClusteringService.java:122)
at org.ehcache.core.spi.ServiceLocator.startAllServices(ServiceLocator.java:128)
at org.ehcache.core.EhcacheManager.init(EhcacheManager.java:577)
at com.togather.web.webapp.www.mvc.cache.CacheWrapper.<init>(CacheWrapper.java:63)
at com.togather.web.webapp.www.config.CacheConfig.cacheWrapper(CacheConfig.java:37)
at com.togather.web.webapp.www.config.CacheConfig$$EnhancerBySpringcglib$$d8860419.cglib$cacheWrapper$1(<generated>)
at com.togather.web.webapp.www.config.CacheConfig$$EnhancerBySpringcglib$$d8860419$$FastClassBySpringcglib$$dfa29d4c.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:355)
at com.togather.web.webapp.www.config.CacheConfig$$EnhancerBySpringcglib$$d8860419.cacheWrapper(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.instantiateUsingFactoryMethod(AbstractAutowireCapablebeanfactory.java:1123)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBeanInstance(AbstractAutowireCapablebeanfactory.java:1018)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:482)
at org.springframework.beans.factory.support.Abstractbeanfactory$1.getobject(Abstractbeanfactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:302)
at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:197)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.findAutowireCandidates(DefaultListablebeanfactory.java:1192)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.doResolveDependency(DefaultListablebeanfactory.java:1116)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.resolveDependency(DefaultListablebeanfactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcesspropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.populateBean(AbstractAutowireCapablebeanfactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:482)
at org.springframework.beans.factory.support.Abstractbeanfactory$1.getobject(Abstractbeanfactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:302)
at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:197)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:368)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.instantiateUsingFactoryMethod(AbstractAutowireCapablebeanfactory.java:1123)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBeanInstance(AbstractAutowireCapablebeanfactory.java:1018)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:482)
at org.springframework.beans.factory.support.Abstractbeanfactory$1.getobject(Abstractbeanfactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:302)
at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:197)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.findAutowireCandidates(DefaultListablebeanfactory.java:1192)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.doResolveDependency(DefaultListablebeanfactory.java:1068)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.resolveDependency(DefaultListablebeanfactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:618)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcesspropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.populateBean(AbstractAutowireCapablebeanfactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:482)
at org.springframework.beans.factory.support.Abstractbeanfactory$1.getobject(Abstractbeanfactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:302)
at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:197)
at org.springframework.beans.factory.support.DefaultListablebeanfactory.preInstantiateSingletons(DefaultListablebeanfactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishbeanfactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328)
at org.springframework.web.context.ContextLoaderListener.contextinitialized(ContextLoaderListener.java:107)
at io.undertow.servlet.core.ApplicationListeners.contextinitialized(ApplicationListeners.java:187)
at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:215)
at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:184)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:249)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:96)
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:78)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossthread.run(JBossthread.java:485)

在Terracotta日志中,我可以看到

2020-09-17 11:52:14,413 [WorkerThread(l2_state_change_stage,0)] INFO org.terracotta.console - Terracotta Server instance has started up as ACTIVE node on 0:0:0:0:0:0:0:0:9410 successfully,and is Now ready for work.
2020-09-17 11:52:14,0)] INFO org.terracotta.console - Moved to State[ ACTIVE-COORDINATOR ]
2020-09-17 11:52:35,144 [L2_L1:TCWorkerComm # 0_R] ERROR com.tc.net.protocol.TCNetworkMessage -  Hydrate Error - Message Class: com.tc.object.msg.ClientHandshakeMessageImpl
Sealed: true,Header Length: 8,Data Length: 105,Total Length: 113

2020-09-17 11:52:35,145 [L2_L1:TCWorkerComm # 0_R] ERROR com.tc.net.protocol.tcm.TcmessageHydrateSink - Error hydrating message of type CLIENT_HANDSHAKE_MESSAGE
com.tc.net.protocol.tcm.UnkNownNameException: unkNown name: 10 for message class com.tc.object.msg.ClientHandshakeMessageImpl
    at com.tc.net.protocol.tcm.TcmessageImpl.hydrate(TcmessageImpl.java:179)
    at com.tc.net.protocol.tcm.TcmessageHydrateSink.putMessage(TcmessageHydrateSink.java:36)
    at com.tc.net.protocol.tcm.TcmessageRouterImpl.putMessage(TcmessageRouterImpl.java:64)
    at com.tc.net.protocol.tcm.AbstractMessageChannel.receive(AbstractMessageChannel.java:215)
    at com.tc.net.protocol.transport.MessageTransportBase.receivetoReceiveLayer(MessageTransportBase.java:138)
    at com.tc.net.protocol.transport.ServerMessageTransport.receiveTransportMessageImpl(ServerMessageTransport.java:101)
    at com.tc.net.protocol.transport.MessageTransportBase.receiveTransportMessage(MessageTransportBase.java:113)
    at com.tc.net.protocol.transport.ServerStackProvider$MessageSink.putMessage(ServerStackProvider.java:267)
    at com.tc.net.protocol.transport.WireProtocolAdaptorImpl.addReadData(WireProtocolAdaptorImpl.java:75)
    at com.tc.net.core.TCConnectionImpl.addNetworkData(TCConnectionImpl.java:827)
    at com.tc.net.core.TCConnectionImpl.doReadFromBufferInternal(TCConnectionImpl.java:488)
    at com.tc.net.core.TCConnectionImpl.doReadFromBuffer(TCConnectionImpl.java:342)
    at com.tc.net.core.TCConnectionImpl.doReadInternal(TCConnectionImpl.java:325)
    at com.tc.net.core.TCConnectionImpl.doRead(TCConnectionImpl.java:309)
    at com.tc.net.core.CoreNIOServices$CommThread.selectLoop(CoreNIOServices.java:667)
    at com.tc.net.core.CoreNIOServices$CommThread.run(CoreNIOServices.java:371)
2020-09-17 11:52:35,158 [L2_L1:TCComm Main Selector Thread_R (listen 0:0:0:0:0:0:0:0:9410)] INFO com.tc.net.protocol.transport.ServerStackProvider - "Client Cannot Reconnect. Connection attempts from the Terracotta node at 127.0.0.1:50936 are being rejected by the Terracotta server array. Reason: Stack for ConnectionID(10.e25596a1cb1b459f89bf97f2cc9f500d.80b726cf-fe23-437a-953a-42b2b3a3333c-1749b7ac242.Permanent) not found."

我在做什么错了?

解决方法

我的错误。

对于一个错字,我在Java项目中包含了错误的依赖项:

<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>3.9.0</version>
</dependency>
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache-clustered</artifactId>
    <version>3.9.0</version>
</dependency>

代替版本3.8.0

这与我安装的Ehcache群集(3.8.0)产生了冲突。一旦更正了依赖版本,我就可以成功连接。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...