diff --git a/spring-session-docs/src/test/java/docs/http/HazelcastHttpSessionConfig.java b/spring-session-docs/src/test/java/docs/http/HazelcastHttpSessionConfig.java index c3c7fd75..3aad0314 100644 --- a/spring-session-docs/src/test/java/docs/http/HazelcastHttpSessionConfig.java +++ b/spring-session-docs/src/test/java/docs/http/HazelcastHttpSessionConfig.java @@ -35,16 +35,13 @@ public class HazelcastHttpSessionConfig { @Bean public HazelcastInstance hazelcastInstance() { + Config config = new Config(); MapAttributeConfig attributeConfig = new MapAttributeConfig() .setName(HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE) .setExtractor(PrincipalNameExtractor.class.getName()); - - Config config = new Config(); - config.getMapConfig(HazelcastIndexedSessionRepository.DEFAULT_SESSION_MAP_NAME) // <2> .addMapAttributeConfig(attributeConfig).addMapIndexConfig( new MapIndexConfig(HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE, false)); - return Hazelcast.newHazelcastInstance(config); // <3> } diff --git a/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/HazelcastITestUtils.java b/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/HazelcastITestUtils.java index 8a86ac67..00eec67b 100644 --- a/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/HazelcastITestUtils.java +++ b/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/HazelcastITestUtils.java @@ -23,49 +23,32 @@ import com.hazelcast.config.NetworkConfig; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; -import org.springframework.util.SocketUtils; - /** * Utility class for Hazelcast integration tests. * * @author Vedran Pavic */ -public final class HazelcastITestUtils { +final class HazelcastITestUtils { private HazelcastITestUtils() { } /** * Creates {@link HazelcastInstance} for use in integration tests. - * @param port the port for Hazelcast to bind to * @return the Hazelcast instance */ - public static HazelcastInstance embeddedHazelcastServer(int port) { + static HazelcastInstance embeddedHazelcastServer() { + Config config = new Config(); + NetworkConfig networkConfig = config.getNetworkConfig(); + networkConfig.setPort(0); + networkConfig.getJoin().getMulticastConfig().setEnabled(false); MapAttributeConfig attributeConfig = new MapAttributeConfig() .setName(HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE) .setExtractor(PrincipalNameExtractor.class.getName()); - - Config config = new Config(); - - NetworkConfig networkConfig = config.getNetworkConfig(); - - networkConfig.setPort(port); - - networkConfig.getJoin().getMulticastConfig().setEnabled(false); - config.getMapConfig(HazelcastIndexedSessionRepository.DEFAULT_SESSION_MAP_NAME) .addMapAttributeConfig(attributeConfig).addMapIndexConfig( new MapIndexConfig(HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE, false)); - return Hazelcast.newHazelcastInstance(config); } - /** - * Creates {@link HazelcastInstance} for use in integration tests. - * @return the Hazelcast instance - */ - public static HazelcastInstance embeddedHazelcastServer() { - return embeddedHazelcastServer(SocketUtils.findAvailableTcpPort()); - } - } diff --git a/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/config/annotation/web/http/EnableHazelcastHttpSessionEventsTests.java b/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/SessionEventHazelcastIndexedSessionRepositoryTests.java similarity index 96% rename from spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/config/annotation/web/http/EnableHazelcastHttpSessionEventsTests.java rename to spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/SessionEventHazelcastIndexedSessionRepositoryTests.java index d8ddc8bf..c0309f02 100644 --- a/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/config/annotation/web/http/EnableHazelcastHttpSessionEventsTests.java +++ b/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/SessionEventHazelcastIndexedSessionRepositoryTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.session.hazelcast.config.annotation.web.http; +package org.springframework.session.hazelcast; import java.time.Duration; import java.time.Instant; @@ -38,8 +38,7 @@ import org.springframework.session.SessionRepository; import org.springframework.session.events.SessionCreatedEvent; import org.springframework.session.events.SessionDeletedEvent; import org.springframework.session.events.SessionExpiredEvent; -import org.springframework.session.hazelcast.HazelcastITestUtils; -import org.springframework.session.hazelcast.SessionEventRegistry; +import org.springframework.session.hazelcast.config.annotation.web.http.EnableHazelcastHttpSession; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.web.WebAppConfiguration; @@ -57,7 +56,7 @@ import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(SpringExtension.class) @ContextConfiguration @WebAppConfiguration -class EnableHazelcastHttpSessionEventsTests { +class SessionEventHazelcastIndexedSessionRepositoryTests { private static final int MAX_INACTIVE_INTERVAL_IN_SECONDS = 1; diff --git a/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/SessionEventRegistry.java b/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/SessionEventRegistry.java index d649b049..dcc174ec 100644 --- a/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/SessionEventRegistry.java +++ b/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/SessionEventRegistry.java @@ -24,7 +24,7 @@ import java.util.concurrent.ConcurrentMap; import org.springframework.context.ApplicationListener; import org.springframework.session.events.AbstractSessionEvent; -public class SessionEventRegistry implements ApplicationListener { +class SessionEventRegistry implements ApplicationListener { private Map events = new HashMap<>(); @@ -40,17 +40,17 @@ public class SessionEventRegistry implements ApplicationListener E getEvent(String sessionId) throws InterruptedException { + E getEvent(String sessionId) throws InterruptedException { return (E) waitForEvent(sessionId); } diff --git a/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/config/annotation/web/http/HazelcastHttpSessionConfigurationXmlTests.java b/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/config/annotation/web/http/HazelcastHttpSessionConfigurationXmlTests.java deleted file mode 100644 index ef363f8a..00000000 --- a/spring-session-hazelcast/src/integration-test/java/org/springframework/session/hazelcast/config/annotation/web/http/HazelcastHttpSessionConfigurationXmlTests.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2014-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.session.hazelcast.config.annotation.web.http; - -import java.time.Duration; - -import com.hazelcast.config.ClasspathXmlConfig; -import com.hazelcast.config.Config; -import com.hazelcast.config.NetworkConfig; -import com.hazelcast.core.Hazelcast; -import com.hazelcast.core.HazelcastInstance; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.session.Session; -import org.springframework.session.SessionRepository; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.util.SocketUtils; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test the different configuration options for the {@link EnableHazelcastHttpSession} - * annotation. - * - * @author Tommy Ludwig - */ -public class HazelcastHttpSessionConfigurationXmlTests { - - @ExtendWith(SpringExtension.class) - @ContextConfiguration - @WebAppConfiguration - static class CustomXmlMapNameTest { - - @Autowired - private SessionRepository repository; - - @Test - void saveSessionTest() { - - S sessionToSave = this.repository.createSession(); - - this.repository.save(sessionToSave); - - S session = this.repository.findById(sessionToSave.getId()); - - assertThat(session.getId()).isEqualTo(sessionToSave.getId()); - assertThat(session.getMaxInactiveInterval()).isEqualTo(Duration.ofMinutes(30)); - } - - @Configuration - @EnableHazelcastHttpSession(sessionMapName = "my-sessions") - static class HazelcastSessionXmlConfigCustomMapName { - - @Bean - HazelcastInstance embeddedHazelcast() { - Config hazelcastConfig = new ClasspathXmlConfig( - "org/springframework/session/hazelcast/config/annotation/web/http/hazelcast-custom-map-name.xml"); - NetworkConfig netConfig = new NetworkConfig(); - netConfig.setPort(SocketUtils.findAvailableTcpPort()); - hazelcastConfig.setNetworkConfig(netConfig); - return Hazelcast.newHazelcastInstance(hazelcastConfig); - } - - } - - } - - @ExtendWith(SpringExtension.class) - @ContextConfiguration - @WebAppConfiguration - static class CustomXmlMapNameAndIdleTest { - - @Autowired - private SessionRepository repository; - - @Test - void saveSessionTest() { - - S sessionToSave = this.repository.createSession(); - - this.repository.save(sessionToSave); - - S session = this.repository.findById(sessionToSave.getId()); - - assertThat(session.getId()).isEqualTo(sessionToSave.getId()); - assertThat(session.getMaxInactiveInterval()).isEqualTo(Duration.ofMinutes(20)); - } - - @Configuration - @EnableHazelcastHttpSession(sessionMapName = "test-sessions", maxInactiveIntervalInSeconds = 1200) - static class HazelcastSessionXmlConfigCustomMapNameAndIdle { - - @Bean - HazelcastInstance embeddedHazelcast() { - Config hazelcastConfig = new ClasspathXmlConfig( - "org/springframework/session/hazelcast/config/annotation/web/http/hazelcast-custom-idle-time-map-name.xml"); - NetworkConfig netConfig = new NetworkConfig(); - netConfig.setPort(SocketUtils.findAvailableTcpPort()); - hazelcastConfig.setNetworkConfig(netConfig); - return Hazelcast.newHazelcastInstance(hazelcastConfig); - } - - } - - } - -} diff --git a/spring-session-hazelcast/src/integration-test/resources/hazelcast-server.xml b/spring-session-hazelcast/src/integration-test/resources/hazelcast-server.xml index 086baf1f..a21dd578 100644 --- a/spring-session-hazelcast/src/integration-test/resources/hazelcast-server.xml +++ b/spring-session-hazelcast/src/integration-test/resources/hazelcast-server.xml @@ -3,6 +3,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hazelcast.com/schema/config https://www.hazelcast.com/schema/config/hazelcast-config-3.12.xsd"> + + + + + + ETERNAL LOCAL_AND_CACHED_CLASSES diff --git a/spring-session-hazelcast/src/integration-test/resources/org/springframework/session/hazelcast/config/annotation/web/http/hazelcast-custom-idle-time-map-name.xml b/spring-session-hazelcast/src/integration-test/resources/org/springframework/session/hazelcast/config/annotation/web/http/hazelcast-custom-idle-time-map-name.xml deleted file mode 100644 index 44b35085..00000000 --- a/spring-session-hazelcast/src/integration-test/resources/org/springframework/session/hazelcast/config/annotation/web/http/hazelcast-custom-idle-time-map-name.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - spring-session-it-test-idle-time-map-name - test-pass - - - - 5701 - - 0 - - - - - - - - BINARY - 1 - 0 - 0 - 300 - com.hazelcast.map.merge.PutIfAbsentMapMergePolicy - - principalName - - - principalName - - - - diff --git a/spring-session-hazelcast/src/integration-test/resources/org/springframework/session/hazelcast/config/annotation/web/http/hazelcast-custom-map-name.xml b/spring-session-hazelcast/src/integration-test/resources/org/springframework/session/hazelcast/config/annotation/web/http/hazelcast-custom-map-name.xml deleted file mode 100644 index 4cf922fe..00000000 --- a/spring-session-hazelcast/src/integration-test/resources/org/springframework/session/hazelcast/config/annotation/web/http/hazelcast-custom-map-name.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - spring-session-it-test-map-name - test-pass - - - - 5701 - - 0 - - - - - - - - BINARY - 1 - 0 - 0 - 0 - com.hazelcast.map.merge.PutIfAbsentMapMergePolicy - - principalName - - - principalName - - - - diff --git a/spring-session-samples/spring-session-sample-javaconfig-hazelcast/src/main/java/sample/ObjectStreamSerializer.java b/spring-session-samples/spring-session-sample-javaconfig-hazelcast/src/main/java/sample/ObjectStreamSerializer.java deleted file mode 100644 index b275313e..00000000 --- a/spring-session-samples/spring-session-sample-javaconfig-hazelcast/src/main/java/sample/ObjectStreamSerializer.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2014-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package sample; - -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.OutputStream; - -import com.hazelcast.nio.ObjectDataInput; -import com.hazelcast.nio.ObjectDataOutput; -import com.hazelcast.nio.serialization.StreamSerializer; - -/** - * A {@link StreamSerializer} that uses Java serialization to persist the session. This is - * certainly not the most efficient way to persist sessions, but the example is intended - * to demonstrate using minimal dependencies. For better serialization methods try using - * Kryo. - * - * @author Rob Winch - * - */ -public class ObjectStreamSerializer implements StreamSerializer { - - @Override - public int getTypeId() { - return 2; - } - - @Override - public void write(ObjectDataOutput objectDataOutput, Object object) throws IOException { - ObjectOutputStream out = new ObjectOutputStream((OutputStream) objectDataOutput); - out.writeObject(object); - out.flush(); - } - - @Override - public Object read(ObjectDataInput objectDataInput) throws IOException { - ObjectInputStream in = new ObjectInputStream((InputStream) objectDataInput); - try { - return in.readObject(); - } - catch (ClassNotFoundException ex) { - throw new IOException(ex); - } - } - - @Override - public void destroy() { - } - -} diff --git a/spring-session-samples/spring-session-sample-javaconfig-hazelcast/src/main/java/sample/SessionConfig.java b/spring-session-samples/spring-session-sample-javaconfig-hazelcast/src/main/java/sample/SessionConfig.java index 62452dce..df46dc49 100644 --- a/spring-session-samples/spring-session-sample-javaconfig-hazelcast/src/main/java/sample/SessionConfig.java +++ b/spring-session-samples/spring-session-sample-javaconfig-hazelcast/src/main/java/sample/SessionConfig.java @@ -19,7 +19,7 @@ package sample; import com.hazelcast.config.Config; import com.hazelcast.config.MapAttributeConfig; import com.hazelcast.config.MapIndexConfig; -import com.hazelcast.config.SerializerConfig; +import com.hazelcast.config.NetworkConfig; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; @@ -28,7 +28,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.session.hazelcast.HazelcastIndexedSessionRepository; import org.springframework.session.hazelcast.PrincipalNameExtractor; import org.springframework.session.hazelcast.config.annotation.web.http.EnableHazelcastHttpSession; -import org.springframework.util.SocketUtils; // tag::class[] @EnableHazelcastHttpSession(maxInactiveIntervalInSeconds = 300) @@ -38,26 +37,15 @@ public class SessionConfig { @Bean(destroyMethod = "shutdown") public HazelcastInstance hazelcastInstance() { Config config = new Config(); - - int port = SocketUtils.findAvailableTcpPort(); - - config.getNetworkConfig().setPort(port).getJoin().getMulticastConfig().setEnabled(false); - - System.out.println("Hazelcast port #: " + port); - - SerializerConfig serializer = new SerializerConfig().setImplementation(new ObjectStreamSerializer()) - .setTypeClass(Object.class); - - config.getSerializationConfig().addSerializerConfig(serializer); - + NetworkConfig networkConfig = config.getNetworkConfig(); + networkConfig.setPort(0); + networkConfig.getJoin().getMulticastConfig().setEnabled(false); MapAttributeConfig attributeConfig = new MapAttributeConfig() .setName(HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE) .setExtractor(PrincipalNameExtractor.class.getName()); - config.getMapConfig(HazelcastIndexedSessionRepository.DEFAULT_SESSION_MAP_NAME) .addMapAttributeConfig(attributeConfig).addMapIndexConfig( new MapIndexConfig(HazelcastIndexedSessionRepository.PRINCIPAL_NAME_ATTRIBUTE, false)); - return Hazelcast.newHazelcastInstance(config); } diff --git a/spring-session-samples/spring-session-sample-misc-hazelcast/src/main/java/sample/Initializer.java b/spring-session-samples/spring-session-sample-misc-hazelcast/src/main/java/sample/Initializer.java index 1f72e75e..5b24160a 100644 --- a/spring-session-samples/spring-session-sample-misc-hazelcast/src/main/java/sample/Initializer.java +++ b/spring-session-samples/spring-session-sample-misc-hazelcast/src/main/java/sample/Initializer.java @@ -16,8 +16,6 @@ package sample; -import java.io.IOException; -import java.net.ServerSocket; import java.util.EnumSet; import java.util.Map; @@ -28,6 +26,7 @@ import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import com.hazelcast.config.Config; +import com.hazelcast.config.NetworkConfig; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; @@ -62,21 +61,11 @@ public class Initializer implements ServletContextListener { private HazelcastInstance createHazelcastInstance() { Config config = new Config(); - - config.getNetworkConfig().setPort(getAvailablePort()).getJoin().getMulticastConfig().setEnabled(false); - + NetworkConfig networkConfig = config.getNetworkConfig(); + networkConfig.setPort(0); + networkConfig.getJoin().getMulticastConfig().setEnabled(false); config.getMapConfig(SESSION_MAP_NAME).setTimeToLiveSeconds(MapSession.DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS); - return Hazelcast.newHazelcastInstance(config); } - private static int getAvailablePort() { - try (ServerSocket socket = new ServerSocket(0)) { - return socket.getLocalPort(); - } - catch (IOException ex) { - throw new RuntimeException(ex); - } - } - }