{"action":"created","issue":{"url":"https://api.github.com/repos/spring-projects/spring-session/issues/1055","repository_url":"https://api.github.com/repos/spring-projects/spring-session","labels_url":"https://api.github.com/repos/spring-projects/spring-session/issues/1055/labels{/name}","comments_url":"https://api.github.com/repos/spring-projects/spring-session/issues/1055/comments","events_url":"https://api.github.com/repos/spring-projects/spring-session/issues/1055/events","html_url":"https://github.com/spring-projects/spring-session/issues/1055","id":314629927,"node_id":"MDU6SXNzdWUzMTQ2Mjk5Mjc=","number":1055,"title":"Hazelcast Store throws exception if used with Standalone Hazelcast instance","user":{"login":"philnate","id":780196,"node_id":"MDQ6VXNlcjc4MDE5Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/780196?v=4","gravatar_id":"","url":"https://api.github.com/users/philnate","html_url":"https://github.com/philnate","followers_url":"https://api.github.com/users/philnate/followers","following_url":"https://api.github.com/users/philnate/following{/other_user}","gists_url":"https://api.github.com/users/philnate/gists{/gist_id}","starred_url":"https://api.github.com/users/philnate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philnate/subscriptions","organizations_url":"https://api.github.com/users/philnate/orgs","repos_url":"https://api.github.com/users/philnate/repos","events_url":"https://api.github.com/users/philnate/events{/privacy}","received_events_url":"https://api.github.com/users/philnate/received_events","type":"User","site_admin":false},"labels":[{"id":108462539,"node_id":"MDU6TGFiZWwxMDg0NjI1Mzk=","url":"https://api.github.com/repos/spring-projects/spring-session/labels/duplicate","name":"duplicate","color":"cccccc","default":true}],"state":"closed","locked":false,"assignee":{"login":"vpavic","id":1149230,"node_id":"MDQ6VXNlcjExNDkyMzA=","avatar_url":"https://avatars1.githubusercontent.com/u/1149230?v=4","gravatar_id":"","url":"https://api.github.com/users/vpavic","html_url":"https://github.com/vpavic","followers_url":"https://api.github.com/users/vpavic/followers","following_url":"https://api.github.com/users/vpavic/following{/other_user}","gists_url":"https://api.github.com/users/vpavic/gists{/gist_id}","starred_url":"https://api.github.com/users/vpavic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vpavic/subscriptions","organizations_url":"https://api.github.com/users/vpavic/orgs","repos_url":"https://api.github.com/users/vpavic/repos","events_url":"https://api.github.com/users/vpavic/events{/privacy}","received_events_url":"https://api.github.com/users/vpavic/received_events","type":"User","site_admin":false},"assignees":[{"login":"vpavic","id":1149230,"node_id":"MDQ6VXNlcjExNDkyMzA=","avatar_url":"https://avatars1.githubusercontent.com/u/1149230?v=4","gravatar_id":"","url":"https://api.github.com/users/vpavic","html_url":"https://github.com/vpavic","followers_url":"https://api.github.com/users/vpavic/followers","following_url":"https://api.github.com/users/vpavic/following{/other_user}","gists_url":"https://api.github.com/users/vpavic/gists{/gist_id}","starred_url":"https://api.github.com/users/vpavic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vpavic/subscriptions","organizations_url":"https://api.github.com/users/vpavic/orgs","repos_url":"https://api.github.com/users/vpavic/repos","events_url":"https://api.github.com/users/vpavic/events{/privacy}","received_events_url":"https://api.github.com/users/vpavic/received_events","type":"User","site_admin":false}],"milestone":null,"comments":4,"created_at":"2018-04-16T12:32:17Z","updated_at":"2018-07-17T20:15:16Z","closed_at":"2018-06-13T17:28:09Z","author_association":"NONE","body":"With the improvements made in #850/#983 to the hazelcast backend, Hazelcast if ran as a Standalone service requires now the spring-session jar in it's class path. Otherwise the application is completely inaccessible, throwing this exception during access:\r\n\r\n```\r\ncom.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: org.springframework.session.hazelcast.HazelcastSessionRepository$SessionUpdateEntryProcessor\r\n\tat com.hazelcast.internal.serialization.impl.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:224) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:48) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.internal.serialization.impl.AbstractSerializationService.toObject(AbstractSerializationService.java:184) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.impl.protocol.task.map.MapExecuteOnKeyMessageTask.prepareOperation(MapExecuteOnKeyMessageTask.java:42) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.impl.protocol.task.AbstractPartitionMessageTask.processMessage(AbstractPartitionMessageTask.java:62) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.impl.protocol.task.AbstractMessageTask.initializeAndProcessMessage(AbstractMessageTask.java:123) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.impl.protocol.task.AbstractMessageTask.run(AbstractMessageTask.java:103) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:142) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:125) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:100) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat ------ submitted from ------.(Unknown Source) ~[?:?]\r\n\tat com.hazelcast.client.spi.impl.ClientInvocationFuture.resolveAndThrowIfException(ClientInvocationFuture.java:95) ~[hazelcast-client-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.spi.impl.ClientInvocationFuture.resolveAndThrowIfException(ClientInvocationFuture.java:32) ~[hazelcast-client-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.spi.impl.AbstractInvocationFuture.get(AbstractInvocationFuture.java:155) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.spi.ClientProxy.invokeOnPartition(ClientProxy.java:171) ~[hazelcast-client-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.spi.ClientProxy.invoke(ClientProxy.java:165) ~[hazelcast-client-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.proxy.ClientMapProxy.executeOnKeyInternal(ClientMapProxy.java:1255) ~[hazelcast-client-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.proxy.ClientMapProxy.executeOnKey(ClientMapProxy.java:1249) ~[hazelcast-client-3.8.9.jar:3.8.9]\r\n\tat org.springframework.session.hazelcast.HazelcastSessionRepository.save(HazelcastSessionRepository.java:209) ~[spring-session-1.3.2.RELEASE.jar:?]\r\n\tat org.springframework.session.hazelcast.HazelcastSessionRepository.save(HazelcastSessionRepository.java:111) ~[spring-session-1.3.2.RELEASE.jar:?]\r\n\tat org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:245) ~[spring-session-1.3.2.RELEASE.jar:?]\r\n\tat org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:217) ~[spring-session-1.3.2.RELEASE.jar:?]\r\n\tat org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:170) ~[spring-session-1.3.2.RELEASE.jar:?]\r\n\tat org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80) ~[spring-session-1.3.2.RELEASE.jar:?]\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE]\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE]\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106) ~[spring-boot-actuator-1.5.12.RELEASE.jar:1.5.12.RELEASE]\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.16.RELEASE.jar:4.3.16.RELEASE]\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_162]\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_162]\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.29.jar:8.5.29]\r\n\tat java.lang.Thread.run(Thread.java:748) [?:1.8.0_162]\r\nCaused by: java.lang.ClassNotFoundException: org.springframework.session.hazelcast.HazelcastSessionRepository$SessionUpdateEntryProcessor\r\n\tat java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_162]\r\n\tat java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_162]\r\n\tat sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) ~[?:1.8.0_162]\r\n\tat java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_162]\r\n\tat com.hazelcast.nio.ClassLoaderUtil.tryLoadClass(ClassLoaderUtil.java:149) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:123) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.nio.IOUtil$ClassLoaderAwareObjectInputStream.resolveClass(IOUtil.java:522) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1859) ~[?:1.8.0_162]\r\n\tat java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1745) ~[?:1.8.0_162]\r\n\tat java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2033) ~[?:1.8.0_162]\r\n\tat java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567) ~[?:1.8.0_162]\r\n\tat java.io.ObjectInputStream.readObject(ObjectInputStream.java:427) ~[?:1.8.0_162]\r\n\tat com.hazelcast.internal.serialization.impl.JavaDefaultSerializers$JavaSerializer.read(JavaDefaultSerializers.java:219) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:48) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.internal.serialization.impl.AbstractSerializationService.toObject(AbstractSerializationService.java:184) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.impl.protocol.task.map.MapExecuteOnKeyMessageTask.prepareOperation(MapExecuteOnKeyMessageTask.java:42) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.impl.protocol.task.AbstractPartitionMessageTask.processMessage(AbstractPartitionMessageTask.java:62) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.impl.protocol.task.AbstractMessageTask.initializeAndProcessMessage(AbstractMessageTask.java:123) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.client.impl.protocol.task.AbstractMessageTask.run(AbstractMessageTask.java:103) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:142) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:125) ~[hazelcast-3.8.9.jar:3.8.9]\r\n\tat com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:100) ~[hazelcast-3.8.9.jar:3.8.9]\r\n```\r\n\r\nSee http://docs.hazelcast.org/docs/latest-development/manual/html/Distributed_Computing/Entry_Processor/Performing_Fast_In-Memory_Map_Operations.html:\r\n\r\n> Usually you perform a loop of keys-- executing IMap.get(key), mutating the value, and finally putting the entry back in the map using IMap.put(key,value)\r\n> If you perform this process from a client or from a member where the keys do not exist, you effectively perform two network hops for each update: the first to retrieve the data and the second to update the mutated value.\r\n>\r\n> If you are doing the process described above, you should consider using entry processors. An entry processor executes a read and updates upon the member where the data resides. This eliminates the costly network hops described above.\r\n\r\nI'm not sure if the Hazelcast server should have a hard dependency of spring-session. It might not always be possible to put those jars into the Hazelcast cluster (updates might become harder as well). If this is the way going forward, then at least the documentation needs to be updated to reflect this requirement for Standalone Hazelcast Clusters."},"comment":{"url":"https://api.github.com/repos/spring-projects/spring-session/issues/comments/405713191","html_url":"https://github.com/spring-projects/spring-session/issues/1055#issuecomment-405713191","issue_url":"https://api.github.com/repos/spring-projects/spring-session/issues/1055","id":405713191,"node_id":"MDEyOklzc3VlQ29tbWVudDQwNTcxMzE5MQ==","user":{"login":"vpavic","id":1149230,"node_id":"MDQ6VXNlcjExNDkyMzA=","avatar_url":"https://avatars1.githubusercontent.com/u/1149230?v=4","gravatar_id":"","url":"https://api.github.com/users/vpavic","html_url":"https://github.com/vpavic","followers_url":"https://api.github.com/users/vpavic/followers","following_url":"https://api.github.com/users/vpavic/following{/other_user}","gists_url":"https://api.github.com/users/vpavic/gists{/gist_id}","starred_url":"https://api.github.com/users/vpavic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vpavic/subscriptions","organizations_url":"https://api.github.com/users/vpavic/orgs","repos_url":"https://api.github.com/users/vpavic/repos","events_url":"https://api.github.com/users/vpavic/events{/privacy}","received_events_url":"https://api.github.com/users/vpavic/received_events","type":"User","site_admin":false},"created_at":"2018-07-17T20:15:16Z","updated_at":"2018-07-17T20:15:16Z","author_association":"MEMBER","body":"@philnate The situation will be improved in `2.0.5.RELEASE` with #1012 resolved, see [this comment](https://github.com/spring-projects/spring-session/issues/1101#issuecomment-405708178) for details."}}
{"actor":{"display_login":"vpavic"}}