diff --git a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java index 6b0abc1d..0d0b9fc6 100755 --- a/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemorySessionStore.java @@ -368,10 +368,21 @@ public class MemorySessionStore implements ISessionsStore { } Session session = sessions.get(clientID); - ClientSession clientSession = new ClientSession(clientID, this); - return clientSession; + + return session.getClientSession(); } - + + @Override + public void loadUserSession(String username, String clientID) { + if (sessions.containsKey(clientID)) { + return; + } + Session session = databaseStore.getSession(username, clientID, new ClientSession(clientID, this)); + if (session != null) { + sessions.put(clientID, session); + } + } + @Override public Collection sessionForUser(String username) { ConcurrentSkipListSet sessionSet = userSessions.get(username); diff --git a/broker/src/main/java/io/moquette/spi/ISessionsStore.java b/broker/src/main/java/io/moquette/spi/ISessionsStore.java index d163a0f4..46fd9d9c 100755 --- a/broker/src/main/java/io/moquette/spi/ISessionsStore.java +++ b/broker/src/main/java/io/moquette/spi/ISessionsStore.java @@ -57,6 +57,8 @@ public interface ISessionsStore { Session sessionForClientAndUser(String username, String clientID); ClientSession sessionForClient(String clientID); + + void loadUserSession(String username, String clientID); Collection sessionForUser(String username); diff --git a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java index a2940cb6..f6f6e7d2 100755 --- a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java +++ b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java @@ -343,7 +343,7 @@ public class ProtocolProcessor { return null; } - + m_sessionsStore.loadUserSession(username, clientId); ClientSession clientSession = m_sessionsStore.sessionForClient(clientId); boolean isSessionAlreadyStored = clientSession != null; if (isSessionAlreadyStored) {