http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/ServerUtil.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/ServerUtil.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/ServerUtil.java
deleted file mode 100644
index 4c909e6..0000000
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/ServerUtil.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.core.session;
-
-import org.apache.openmeetings.db.dao.server.ServerDao;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * Configures the current reference to the {@link Server} for this 
Tomcat/Web-Container.
- * 
- * It is a Spring Bean and configured as Singleton. There is only one instance 
of this 
- * bean in the entire Web-Application.  
- * 
- * @author sebawagner
- *
- */
-public class ServerUtil {
-       protected static final Logger log = Red5LoggerFactory.getLogger(
-                       ServerUtil.class, OpenmeetingsVariables.webAppRootKey);
-
-       @Autowired
-       private ServerDao serverDao;
-       
-       /**
-        * Injected via Spring configuration
-        * 
-        * for cluster configuration, if only using one server (no cluster), 
serverId is null,
-        * this is the current serverId of this Tomcat instance (null means no 
cluster is configured)
-        */
-       private String serverId = null;
-       
-       /**
-        * a reference of the current server in that Tomcat instance
-        */
-       private Server currentServer;
-       
-       public String getServerId() {
-               return serverId;
-       }
-       
-       public void setServerId(String serverId) {
-               this.serverId = serverId;
-       }
-       
-       /**
-        * 
-        * @return the current server
-        */
-       public Server getCurrentServer() {
-               if (serverId == null) {
-                       return null;
-               }
-               if (currentServer != null && 
serverId.equals(currentServer.getId().toString())) {
-                       return currentServer;
-               }
-               currentServer = serverDao.get(Long.parseLong(serverId));
-               if (currentServer == null) {
-                       log.warn("You have configured a serverId that does not 
exist in your list of servers, serverId: "+serverId);
-               }
-               return currentServer;
-       }
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
index 6a51b5b..990b73e 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
@@ -19,29 +19,28 @@
 package org.apache.openmeetings.core.session;
 
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.wicketApplicationName;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Date;
-import java.util.LinkedList;
+import java.util.HashSet;
 import java.util.List;
-import java.util.Map.Entry;
+import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
-import org.apache.openmeetings.core.session.store.IClientPersistenceStore;
+import org.apache.openmeetings.IApplication;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
-import org.apache.openmeetings.db.dto.basic.SearchResult;
-import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.room.StreamClient;
+import org.apache.wicket.Application;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.Server;
 import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
 
 /**
- * Handle {@link Client} objects.
+ * Handle {@link StreamClient} objects.
  *
  * Use a kind of decorator pattern to inject the {@link Server} into every 
call.
  *
@@ -51,315 +50,99 @@ import 
org.springframework.beans.factory.annotation.Autowired;
 public class SessionManager implements ISessionManager {
        protected static final Logger log = 
Red5LoggerFactory.getLogger(SessionManager.class, webAppRootKey);
 
-       @Autowired
-       private ServerUtil serverUtil;
-
-       /**
-        * Injected via Spring, needs a getter/setter because it can be 
configured
-        * Autowired will not suit here as there are multiple implementations 
of the
-        * {@link IClientPersistenceStore}
-        */
-       private IClientPersistenceStore cache;
-
-       public IClientPersistenceStore getCache() {
-               return cache;
-       }
-
-       public void setCache(IClientPersistenceStore cache) {
-               this.cache = cache;
-       }
-
-       @Override
-       public void clearCache() {
-               cache.clear();
+       private static Map<String, StreamClient> getClients() {
+               IApplication iapp = 
(IApplication)Application.get(wicketApplicationName);
+               return iapp.getStreamClients();
        }
 
        @Override
-       public Client add(Client c, Server server) {
+       public StreamClient add(StreamClient c) {
                if (c == null) {
                        return null;
                }
-               if (server == null) {
-                       server = serverUtil.getCurrentServer();
-               }
+               IApplication iapp = 
(IApplication)Application.get(wicketApplicationName);
+               c.setServerId(iapp.getServerId());
                c.setConnectedSince(new Date());
                c.setRoomEnter(new Date());
                if (Strings.isEmpty(c.getPublicSID())) {
                        c.setPublicSID(UUID.randomUUID().toString());
                }
-               c.setServer(server);
-
-               if (cache.containsKey(null, c.getStreamid())) {
-                       log.error("Tried to add an existing Client " + 
c.getStreamid());
-                       return null;
-               }
-
-               cache.put(c.getStreamid(), c);
-               return c;
+               return iapp.update(c);
        }
 
        @Override
-       public Client addClientListItem(String streamId, String scopeName,
-                       int remotePort, String remoteAddress, String swfUrl, 
Server server) {
-               if (server == null) {
-                       server = serverUtil.getCurrentServer();
-               }
-               try {
-
-                       // Store the Connection into a bean and add it to the 
HashMap
-                       Client rcm = new Client();
-                       rcm.setConnectedSince(new Date());
-                       rcm.setStreamid(streamId);
-                       rcm.setScope(scopeName);
-                       rcm.setPublicSID(UUID.randomUUID().toString());
-                       rcm.setServer(server);
-                       rcm.setUserport(remotePort);
-                       rcm.setUserip(remoteAddress);
-                       rcm.setSwfurl(swfUrl);
-                       rcm.setIsMod(false);
-                       rcm.setCanDraw(false);
-
-                       if (cache.containsKey(null, streamId)) {
-                               log.error("Tried to add an existing Client " + 
streamId);
-                               return null;
-                       }
-
-                       cache.put(rcm.getStreamid(), rcm);
-
-                       return rcm;
-               } catch (Exception err) {
-                       log.error("[addClientListItem]", err);
-               }
-               return null;
+       public Collection<StreamClient> list() {
+               return getClients().values();
        }
 
        @Override
-       public Collection<Client> getClients() {
-               return cache.getClients();
+       public StreamClient get(String uid) {
+               return getClients().get(uid);
        }
 
        @Override
-       public Collection<Client> getClientsWithServer() {
-               return cache.getClientsWithServer();
+       public StreamClient update(StreamClient rcm) {
+               IApplication iapp = 
(IApplication)Application.get(wicketApplicationName);
+               return iapp.update(rcm);
        }
 
        @Override
-       public Client getClientByStreamId(String streamId, Server server) {
-               if (server == null) {
-                       server = serverUtil.getCurrentServer();
-               }
-               try {
-                       if (!cache.containsKey(server, streamId)) {
-                               log.debug("Tried to get a non existing Client " 
+ streamId + " server " + server);
-                               return null;
-                       }
-                       return cache.get(server, streamId);
-               } catch (Exception err) {
-                       log.error("[getClientByStreamId]", err);
-               }
-               return null;
+       public boolean remove(String uid) {
+               StreamClient c = getClients().remove(uid);
+               return c != null;
        }
 
        @Override
-       public Client getClientByPublicSID(String publicSID, Server server) {
-               if (server == null) {
-                       server = serverUtil.getCurrentServer();
-               }
-               try {
-                       List<Client> list = cache.getClientsByPublicSID(server, 
publicSID);
-                       return list == null || list.isEmpty() ? null : 
list.get(0);
-               } catch (Exception err) {
-                       log.error("[getClientByPublicSID]", err);
-               }
-               return null;
+       public List<StreamClient> listByRoom(Long roomId) {
+               return list().stream()
+                               .filter(c -> roomId.equals(c.getRoomId()) && 
!c.isScreenClient())
+                               .collect(Collectors.toList());
        }
 
        @Override
-       public ClientSessionInfo getClientByPublicSIDAnyServer(String 
publicSID) {
-               try {
-                       for (Entry<Long,List<Client>> entry : 
cache.getClientsByPublicSID(publicSID).entrySet()) {
-                               for (Client rcl : entry.getValue()) {
-                                       return new ClientSessionInfo(rcl, 
entry.getKey());
-                               }
-                       }
-               } catch (Exception err) {
-                       log.error("[getClientByPublicSIDAnyServer]", err);
-               }
-               return null;
+       public Collection<StreamClient> listByRoomAll(Long roomId) {
+               return list().stream()
+                               .filter(c -> roomId.equals(c.getRoomId()))
+                               .collect(Collectors.toList());
        }
 
        @Override
-       public Client getClientByUserId(Long userId) {
-               try {
-                       for (Client rcl : cache.getClientsByUserId(null, 
userId)) {
-                               if (rcl.isScreenClient()) {
-                                       continue;
-                               }
-
-                               return rcl;
-                       }
-               } catch (Exception err) {
-                       log.error("[getClientByUserId]", err);
-               }
-               return null;
+       public List<StreamClient> listModeratorByRoom(Long roomId) {
+               return list().stream()
+                               .filter(c -> roomId.equals(c.getRoomId()) && 
c.getIsMod())
+                               .collect(Collectors.toList());
        }
 
        @Override
-       public boolean updateAVClientByStreamId(String streamId, Client rcm, 
Server server) {
-               if (server == null) {
-                       server = serverUtil.getCurrentServer();
-               }
-               try {
-                       // get the corresponding user session object and update 
the settings
-                       Client rclUsual = 
getClientByPublicSID(rcm.getPublicSID(), server);
-                       if (rclUsual != null) {
-                               rclUsual.setBroadCastID(rcm.getBroadCastID());
-                               rclUsual.setAvsettings(rcm.getAvsettings());
-                               rclUsual.setVHeight(rcm.getVHeight());
-                               rclUsual.setVWidth(rcm.getVWidth());
-                               rclUsual.setVX(rcm.getVX());
-                               rclUsual.setVY(rcm.getVY());
-                               Client rclSaved = cache.get(server, 
rclUsual.getStreamid());
-                               if (rclSaved != null) {
-                                       cache.put(rclUsual.getStreamid(), 
rclUsual);
-                               } else {
-                                       log.debug("Tried to update a non 
existing Client " + rclUsual.getStreamid());
-                               }
-                       }
-
-                       updateClientByStreamId(streamId, rcm, false, server);
-                       return true;
-               } catch (Exception err) {
-                       log.error("[updateAVClientByStreamId]", err);
-               }
-               return false;
+       public long getRecordingCount(Long roomId) {
+               return list().stream()
+                               .filter(c -> roomId.equals(c.getRoomId()) && 
c.isStartRecording())
+                               .collect(Collectors.toList()).size();
        }
 
        @Override
-       public boolean updateClientByStreamId(String streamId, Client rcm, 
boolean updateRoomCount, Server server) {
-               if (server == null) {
-                       server = serverUtil.getCurrentServer();
-               }
-               try {
-                       Client rclSaved = cache.get(server, streamId);
-
-                       if (rclSaved != null) {
-                               cache.put(streamId, rcm);
-                               return true;
-                       } else {
-                               log.debug("Tried to update a non existing 
Client " + streamId);
-                       }
-               } catch (Exception err) {
-                       log.error("[updateClientByStreamId]", err);
-               }
-               return false;
+       public long getPublishingCount(Long roomId) {
+               return list().stream()
+                               .filter(c -> roomId.equals(c.getRoomId()) && 
c.isStreamPublishStarted())
+                               .collect(Collectors.toList()).size();
        }
 
        @Override
-       public boolean removeClient(String streamId, Server server) {
-               if (server == null) {
-                       server = serverUtil.getCurrentServer();
-               }
-               try {
-                       if (cache.containsKey(server,streamId)) {
-                               cache.remove(server,streamId);
-                               return true;
-                       } else {
-                               log.debug("Tried to remove a non existing 
Client " + streamId);
-                       }
-               } catch (Exception err) {
-                       log.error("[removeClient]", err);
-               }
-               return false;
+       public Set<Long> getActiveRoomIds() {
+               IApplication iapp = 
(IApplication)Application.get(wicketApplicationName);
+               return iapp.getActiveRoomIds();
        }
 
        @Override
-       public List<Client> getClientListByRoom(Long roomId) {
-               List<Client> roomClientList = new ArrayList<>();
-               try {
-                       for (Client rcl : cache.getClientsByRoomId(roomId)) {
-                               if (rcl.isScreenClient()) {
-                                       continue;
+       public Set<Long> getActiveRoomIds(String serverId) {
+               Set<Long> ids = new HashSet<>();
+               if (serverId != null) {
+                       for (Map.Entry<String, StreamClient> e : 
getClients().entrySet()) {
+                               if 
(serverId.equals(e.getValue().getServerId())) {
+                                       ids.add(e.getValue().getRoomId());
                                }
-
-                               // Only parse really those users out that are 
really a full session object
-                               // and no pseudo session object like the 
audio/video or screen
-                               // sharing connection
-                               roomClientList.add(rcl);
                        }
-               } catch (Exception err) {
-                       log.error("[getClientListByRoom]", err);
-               }
-               return roomClientList;
-       }
-
-       @Override
-       public Collection<Client> getClientListByRoomAll(Long roomId) {
-               try {
-                       return cache.getClientsByRoomId(roomId);
-               } catch (Exception err) {
-                       log.error("[getClientListByRoomAll]", err);
                }
-               return null;
-       }
-
-       @Override
-       public List<Client> getCurrentModeratorByRoom(Long roomId) {
-               List<Client> rclList = new LinkedList<>();
-               List<Client> currentClients = this.getClientListByRoom(roomId);
-               for (Client rcl : currentClients) {
-                       if (rcl.getIsMod()) {
-                               rclList.add(rcl);
-                       }
-               }
-               return rclList;
-       }
-
-       @Override
-       public SearchResult<Client> getListByStartAndMax(int start, int max, 
String orderby, boolean asc) {
-               SearchResult<Client> sResult = new SearchResult<>();
-               sResult.setObjectName(Client.class.getName());
-               sResult.setRecords(Long.valueOf(cache.size()));
-               sResult.setResult(cache.getClientsWithServer());
-               return sResult;
-       }
-
-       @Override
-       public long getRecordingCount(long roomId) {
-               List<Client> currentClients = this.getClientListByRoom(roomId);
-               int numberOfRecordingUsers = 0;
-               for (Client rcl : currentClients) {
-                       if (rcl.isStartRecording()) {
-                               numberOfRecordingUsers++;
-                       }
-               }
-               return numberOfRecordingUsers;
-       }
-
-       @Override
-       public long getPublishingCount(long roomId) {
-               List<Client> currentClients = this.getClientListByRoom(roomId);
-               int numberOfPublishingUsers = 0;
-               for (Client rcl : currentClients) {
-                       if (rcl.isStreamPublishStarted()) {
-                               numberOfPublishingUsers++;
-                       }
-               }
-               return numberOfPublishingUsers;
-       }
-
-       @Override
-       public List<Long> getActiveRoomIdsByServer(Server server) {
-               return cache.getRoomsIdsByServer(server == null ? 
serverUtil.getCurrentServer() : server);
-       }
-
-       @Override
-       public String getSessionStatistics() {
-               return 
cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
-       }
-
-       @Override
-       public void sessionStart() {
-               // TODO Auto-generated method stub
+               return ids;
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
deleted file mode 100644
index 5e79da3..0000000
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.core.session.store;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.openmeetings.db.dao.room.ClientDao;
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.springframework.beans.factory.annotation.Autowired;
-
-public class DatabaseStore implements IClientPersistenceStore {
-
-       @Autowired
-       private ClientDao clientDao;
-
-       @Override
-       public void clear() {
-               clientDao.cleanAllClients();
-       }
-
-       @Override
-       public void put(String streamId, Client rcl) {
-               if (rcl.getId() != null) {
-                       clientDao.update(rcl);
-               } else {
-                       clientDao.add(rcl);
-               }
-       }
-
-       @Override
-       public boolean containsKey(Server server, String streamId) {
-               return clientDao.countClientsByServerAndStreamId(server, 
streamId) > 0;
-       }
-
-       @Override
-       public Client get(Server server, String streamId) {
-               return clientDao.getClientByServerAndStreamId(server, streamId);
-       }
-
-       @Override
-       public List<Client> getClientsByPublicSID(Server server, String 
publicSID) {
-               return clientDao.getClientsByPublicSIDAndServer(server, 
publicSID);
-       }
-
-       @Override
-       public Map<Long, List<Client>> getClientsByPublicSID(String publicSID) {
-               Map<Long, List<Client>> returnMap = new HashMap<>();
-               List<Client> clientList = 
clientDao.getClientsByPublicSID(publicSID);
-               for (Client cl : clientList) {
-                       if (cl.getServer() == null) {
-                               List<Client> clList = returnMap.get(null);
-                               if (clList == null) {
-                                       clList = new ArrayList<>();
-                               }
-                               clList.add(cl);
-                               returnMap.put(null, clList);
-                       } else {
-                               List<Client> clList = 
returnMap.get(cl.getServer().getId());
-                               if (clList == null) {
-                                       clList = new ArrayList<>();
-                               }
-                               clList.add(cl);
-                               returnMap.put(cl.getServer().getId(), clList);
-                       }
-               }
-               return returnMap;
-       }
-
-       @Override
-       public Collection<Client> getClients() {
-               return clientDao.getClients();
-       }
-
-       @Override
-       public Collection<Client> getClientsWithServer() {
-               return clientDao.getClientsWithServer();
-       }
-
-       @Override
-       public Collection<Client> getClientsByServer(Server server) {
-               return clientDao.getClientsByServer(server);
-       }
-
-       @Override
-       public List<Client> getClientsByUserId(Server server, Long userId) {
-               return clientDao.getClientsByUserId(server, userId);
-       }
-
-       @Override
-       public List<Client> getClientsByRoomId(Long roomId) {
-               return clientDao.getClientsByRoomId(roomId);
-       }
-
-       @Override
-       public void remove(Server server, String streamId) {
-               clientDao.removeClientByServerAndStreamId(server, streamId);
-       }
-
-       @Override
-       public int size() {
-               return clientDao.countClients();
-       }
-
-       @Override
-       public int sizeByServer(Server server) {
-               return clientDao.countClientsByServer(server);
-       }
-
-       @Override
-       public Collection<Client> values() {
-               return clientDao.getClients();
-       }
-
-       @Override
-       public String getDebugInformation(List<DEBUG_DETAILS> detailLevel) {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       @Override
-       public List<Long> getRoomsIdsByServer(Server server) {
-               return clientDao.getRoomsIdsByServer(server);
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
deleted file mode 100644
index c896b34..0000000
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.core.session.store;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-/**
- * Stores the session in the memory.
- * Is NOT designed to be clustered across multiple servers.
- *
- * <ul>
- * <li>client by streamid</li>
- * <li>client by publicSID</li>
- * <li>client by userId</li>
- * <li>clients by roomId</li>
- * <li>roomIds by server</li>
- * </ul>
- *
- * @author sebawagner
- *
- */
-public class HashMapStore implements IClientPersistenceStore {
-       protected static final Logger log = 
Red5LoggerFactory.getLogger(HashMapStore.class, webAppRootKey);
-
-       private Map<String, Client> clientsByStreamId = new 
ConcurrentHashMap<>();
-
-       @Override
-       public void clear() {
-               clientsByStreamId = new ConcurrentHashMap<>();
-       }
-
-       @Override
-       public void put(String streamId, Client rcl) {
-               clientsByStreamId.put(rcl.getStreamid(), rcl);
-       }
-
-       @Override
-       public boolean containsKey(Server server, String streamId) {
-               return clientsByStreamId.containsKey(streamId);
-       }
-
-       @Override
-       public Client get(Server server, String streamId) {
-               return clientsByStreamId.get(streamId);
-       }
-
-       @Override
-       public List<Client> getClientsByPublicSID(Server server, String 
publicSID) {
-               List<Client> clientList = new ArrayList<>();
-               for (Map.Entry<String, Client> e: clientsByStreamId.entrySet()) 
{
-                       Client cl = e.getValue();
-                       if (cl.getPublicSID().equals(publicSID)) {
-                               clientList.add(cl);
-                       }
-               }
-               return clientList;
-       }
-
-       @Override
-       public Map<Long,List<Client>> getClientsByPublicSID(String publicSID) {
-               Map<Long,List<Client>> clientMapList = new HashMap<>();
-               List<Client> clientList = new ArrayList<>();
-               for (Map.Entry<String, Client> e: clientsByStreamId.entrySet()) 
{
-                       Client cl = e.getValue();
-                       if (cl.getPublicSID().equals(publicSID)) {
-                               clientList.add(cl);
-                       }
-               }
-               clientMapList.put(null, clientList);
-               return clientMapList;
-       }
-
-       @Override
-       public Collection<Client> getClients() {
-               return clientsByStreamId.values();
-       }
-
-       @Override
-       public Collection<Client> getClientsWithServer() {
-               //there is no server object to be loaded, memory cache means
-               //there is no cluster enabled
-               return getClients();
-       }
-
-       @Override
-       public Collection<Client> getClientsByServer(Server server) {
-               return clientsByStreamId.values();
-       }
-
-       @Override
-       public List<Client> getClientsByUserId(Server server, Long userId) {
-               List<Client> clientList = new ArrayList<>();
-               for (Map.Entry<String, Client> e: clientsByStreamId.entrySet()) 
{
-                       Client cl = e.getValue();
-                       if (cl.getUserId().equals(userId)) {
-                               clientList.add(cl);
-                       }
-               }
-               return clientList;
-       }
-
-       @Override
-       public  List<Client> getClientsByRoomId(Long roomId) {
-               List<Client> clientList = new ArrayList<>();
-               for (Map.Entry<String, Client> e: clientsByStreamId.entrySet()) 
{
-                       Client cl = e.getValue();
-                       if (cl.getRoomId() != null && 
cl.getRoomId().equals(roomId)) {
-                               clientList.add(cl);
-                       }
-               }
-               return clientList;
-       }
-
-       @Override
-       public void remove(Server server, String streamId) {
-               clientsByStreamId.remove(streamId);
-       }
-
-       @Override
-       public int size() {
-               return clientsByStreamId.size();
-       }
-
-       @Override
-       public int sizeByServer(Server server) {
-               return clientsByStreamId.size();
-       }
-
-       @Override
-       public Collection<Client> values() {
-               return clientsByStreamId.values();
-       }
-
-       public int getTotalNumberOfSessions() {
-               return clientsByStreamId.size();
-       }
-
-       /**
-        * Print some session statistics to the debug out
-        *
-        * @param detailLevel
-        */
-       public void printDebugInformation(List<DEBUG_DETAILS> detailLevel) {
-               log.debug("Session Statistics Start ################## ");
-               log.debug(getDebugInformation(detailLevel));
-               log.debug("Session Statistics End ################## ");
-       }
-
-       @Override
-       public String getDebugInformation(List<DEBUG_DETAILS> detailLevel) {
-               StringBuilder statistics = new StringBuilder();
-
-               if (detailLevel.contains(DEBUG_DETAILS.SIZE)) {
-                       addNewLine(statistics, "Number of sessions Total " + 
getTotalNumberOfSessions());
-               }
-
-               return statistics.toString();
-       }
-
-       private static void addNewLine(StringBuilder strBuilder, String 
message) {
-               strBuilder.append(message + "\n\r");
-       }
-
-       @Override
-       public List<Long> getRoomsIdsByServer(Server server) {
-               Set<Long> rooms = new HashSet<>();
-               for (Map.Entry<String, Client> e: clientsByStreamId.entrySet()) 
{
-                       Client cl = e.getValue();
-                       Long roomId = cl.getRoomId();
-                       if (roomId != null && roomId.longValue() > 0 && 
!rooms.contains(roomId)) {
-                               rooms.add(roomId);
-                       }
-               }
-               return new ArrayList<>(rooms);
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
deleted file mode 100644
index a511680..0000000
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.core.session.store;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.server.Server;
-
-public interface IClientPersistenceStore {
-
-       public enum DEBUG_DETAILS {
-               SIZE
-       }
-       
-       /**
-        * called upon start of the session cache
-        */
-       void clear();
-
-       /**
-        * 
-        * @param streamId
-        * @param rcl
-        */
-       void put(String streamId, Client rcl);
-       
-       /**
-        * 
-        * @param server
-        * @param streamId
-        * @return
-        */
-       boolean containsKey(Server server, String streamId);
-
-       /**
-        * by server and publicSID
-        * 
-        * @param server
-        * @param streamId
-        * @return will return null if the client does not exist in the list
-        */
-       Client get(Server server, String streamId);
-
-       /**
-        * 
-        * @param server
-        * @param publicSID
-        * @return will return an empty list if nothing available
-        */
-       List<Client> getClientsByPublicSID(Server server, String publicSID);
-
-       /**
-        * Searches for the publicSID across all servers
-        * 
-        * @param publicSID
-        * @return will return a map with the serverId as key and the 
RoomClients as list in the value
-        */
-       Map<Long, List<Client>> getClientsByPublicSID(String publicSID);
-
-       Collection<Client> getClients();
-       
-       /**
-        * get all clients by a specific {@link Server}
-        * 
-        * @param server
-        * @return will return an empty map if nothing available
-        */
-       Collection<Client> getClientsByServer(Server server);
-
-       /**
-        * 
-        * @param server
-        * @param userId
-        * @return will return an empty list if nothing available
-        */
-       Collection<Client> getClientsByUserId(Server server, Long userId);
-
-       /**
-        * 
-        * We ignore the server here, cause ONE room can only be on ONE server 
and often we don't know where.
-        * 
-        * @param roomId
-        * @return will return an empty map if nothing available
-        */
-       List<Client> getClientsByRoomId(Long roomId);
-
-       void remove(Server server, String streamId);
-
-       int size();
-
-       int sizeByServer(Server server);
-
-       Collection<Client> values();
-       
-       /**
-        * Get some session statistics
-        * 
-        * @param detailLevel
-        * @return
-        */
-       String getDebugInformation(List<DEBUG_DETAILS> detailLevel);
-
-       /**
-        * returns a list of roomIds (unique) that are currently active on the 
given server
-        * In case the session is stored in the memory (no-cluster setup) it 
will always 
-        * return simply all active roomIds
-        * 
-        * @param server
-        * @return
-        */
-       List<Long> getRoomsIdsByServer(Server server);
-
-       /**
-        * if database cache + cluster is enabled, the server object will be 
loaded 
-        * into the client
-        * 
-        * @return
-        */
-       Collection<Client> getClientsWithServer();
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/IClientUtil.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/IClientUtil.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/IClientUtil.java
index 4df1f49..a025eb8 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/IClientUtil.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/IClientUtil.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.core.util;
 
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.red5.server.api.IClient;
 
 public class IClientUtil {
@@ -26,8 +27,8 @@ public class IClientUtil {
                , sharing
        }
 
-       public static void init(IClient client, Long id, boolean sharing) {
-               client.setAttribute(ConAttrs.omId.name(), id);
+       public static void init(IClient client, String uid, boolean sharing) {
+               client.setAttribute(ConAttrs.omId.name(), uid);
                client.setAttribute(ConAttrs.sharing.name(), sharing);
        }
 
@@ -37,9 +38,9 @@ public class IClientUtil {
         * @param conn
         * @return - Id of {@link StreamClient} for this IConnection, or 
<code>null</code>
         */
-       public static Long getId(IClient client) {
+       public static String getId(IClient client) {
                Object o = client.getAttribute(ConAttrs.omId.name());
-               return o instanceof Long ? (Long)o : null;
+               return o instanceof String ? (String)o : null;
        }
 
        public static boolean isSharing(IClient client) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java 
b/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
index a3d65a4..b8f5bc0 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
@@ -20,12 +20,15 @@ package org.apache.openmeetings;
 
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
 import java.util.function.Supplier;
 
 import javax.servlet.ServletContext;
 
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.wicket.request.IExceptionMapper;
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -40,10 +43,9 @@ public interface IApplication {
        String getOmString(long id, long languageId);
        String getOmString(String key, long languageId);
        String getOmString(String key, final Locale loc, String... params);
-       Client updateClient(Client rcl, boolean forceSize);
-       org.apache.openmeetings.db.entity.basic.Client getOmOnlineClient(String 
uid);
-       List<org.apache.openmeetings.db.entity.basic.Client> 
getOmRoomClients(Long roomId);
-       List<org.apache.openmeetings.db.entity.basic.Client> getOmClients(Long 
userId);
+       Client getOmOnlineClient(String uid);
+       List<Client> getOmRoomClients(Long roomId);
+       List<Client> getOmClients(Long userId);
        String getOmContactsLink();
        String getOmInvitationLink(Invitation i);
        String urlForActivatePage(PageParameters pp);
@@ -51,4 +53,11 @@ public interface IApplication {
        void exit(String uid);
        void setXFrameOptions(String xFrameOptions);
        void setContentSecurityPolicy(String contentSecurityPolicy);
+
+       // stream client
+       StreamClient updateClient(StreamClient rcl, boolean forceSize);
+       String getServerId();
+       Map<String, StreamClient> getStreamClients();
+       StreamClient update(StreamClient c);
+       Set<Long> getActiveRoomIds();
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/ClientDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/ClientDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/ClientDao.java
deleted file mode 100644
index 66996af..0000000
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/ClientDao.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.db.dao.room;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * Persistence of client objects to database is only available if so 
configured!
- *
- * @author sebawagner
- *
- */
-@Transactional
-public class ClientDao {
-
-       @PersistenceContext
-       private EntityManager em;
-
-       private static List<Long> EMPTY_LIST = new ArrayList<>(0);
-
-       public void cleanAllClients() {
-               em.createNamedQuery("deleteAll").executeUpdate();
-       }
-
-       public void cleanClientsByServer(Server server) {
-               em.createNamedQuery("deleteClientsByServer").
-                       setParameter("server", server).
-                       executeUpdate();
-       }
-
-       public Client add(Client entity) {
-               em.persist(entity);
-               return entity;
-       }
-
-       public Client update(Client entity) {
-               em.merge(entity);
-               return entity;
-       }
-
-       public void delete(Client entity) {
-               Query q = em.createNamedQuery("deletedById");
-               q.setParameter("id", entity.getId());
-               q.executeUpdate();
-       }
-
-       public void removeClientByServerAndStreamId(Server server, String 
streamId) {
-               Query q = em.createNamedQuery("deletedByServerAndStreamId");
-               q.setParameter("server", server);
-               q.setParameter("streamid", streamId);
-               q.executeUpdate();
-       }
-
-       public int countClients() {
-               return em.createNamedQuery("countClients", 
Long.class).getSingleResult().intValue();
-       }
-
-       public int countClientsByServer(Server server) {
-               TypedQuery<Long> q = 
em.createNamedQuery("countClientsByServer", Long.class);
-               q.setParameter("server", server);
-               return q.getSingleResult().intValue();
-       }
-
-       public long countClientsByServerAndStreamId(Server server, String 
streamId) {
-               TypedQuery<Long> q = 
em.createNamedQuery("countClientsByServerAndStreamId", Long.class);
-               q.setParameter("streamid", streamId);
-               q.setParameter("server", server);
-               return q.getSingleResult();
-       }
-
-       /**
-        * Query.getSingleResult would throw an error if result is null,
-        * see: 
http://stackoverflow.com/questions/2002993/jpa-getsingleresult-or-null
-        *
-        * @param server
-        * @param streamId
-        * @return
-        */
-       public Client getClientByServerAndStreamId(Server server, String 
streamId) {
-               TypedQuery<Client> q = 
em.createNamedQuery("getClientByServerAndStreamId", Client.class);
-               q.setParameter("streamid", streamId);
-               q.setParameter("server", server);
-               List<Client> ll = q.getResultList();
-               if (ll.size() == 1) {
-                       return ll.get(0);
-               } else if (ll.size() == 0) {
-                       return null;
-               }
-               throw new RuntimeException("more then one client was found 
streamId "+ streamId + " server "+server);
-       }
-
-       public List<Client> getClientsByPublicSIDAndServer(Server server, 
String publicSID) {
-               TypedQuery<Client> q = 
em.createNamedQuery("getClientsByPublicSIDAndServer", Client.class);
-               q.setParameter("server", server);
-               q.setParameter("publicSID", publicSID);
-               return q.getResultList();
-       }
-
-       public List<Client> getClientsByPublicSID(String publicSID) {
-               TypedQuery<Client> q = 
em.createNamedQuery("getClientsByPublicSID", Client.class);
-               q.setParameter("publicSID", publicSID);
-               return q.getResultList();
-       }
-
-       public List<Client> getClientsByServer(Server server) {
-               TypedQuery<Client> q = 
em.createNamedQuery("getClientsByServer", Client.class);
-               q.setParameter("server", server);
-               return q.getResultList();
-       }
-
-       public List<Client> getClients() {
-               return em.createNamedQuery("getClients", 
Client.class).getResultList();
-       }
-
-       public List<Client> getClientsWithServer() {
-               return em.createNamedQuery("getClientsWithServer", 
Client.class).getResultList();
-       }
-
-       public List<Client> getClientsByUserId(Server server, Long userId) {
-               TypedQuery<Client> q = 
em.createNamedQuery("getClientsByUserId", Client.class);
-               q.setParameter("server", server);
-               q.setParameter("userId", userId);
-               return q.getResultList();
-       }
-
-       public List<Client> getClientsByRoomId(Long roomId) {
-               TypedQuery<Client> q = 
em.createNamedQuery("getClientsByRoomId", Client.class);
-               q.setParameter("roomId", roomId);
-               return q.getResultList();
-       }
-
-       /**
-        * returns a list of servers or an empty list in case no roomIds are 
found
-        *
-        * @param server
-        * @return
-        */
-       public List<Long> getRoomsIdsByServer(Server server) {
-               Query q = em.createNamedQuery("getRoomsIdsByServer");
-               q.setParameter("server", server);
-               @SuppressWarnings("unchecked")
-               List<Long> resultList = q.getResultList();
-               //if the result list contains only a value null, it means it
-               //was empty and no roomid's have been found
-               if (resultList.size() == 1 && resultList.get(0) == null) {
-                       return EMPTY_LIST;
-               }
-               return resultList;
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
index b82925d..0ea7a43 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/RoomDao.java
@@ -23,6 +23,7 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -202,7 +203,7 @@ public class RoomDao implements 
IGroupAdminDataProviderDao<Room> {
                                .getResultList();
        }
 
-       public long getRoomsCapacityByIds(List<Long> ids) {
+       public long getRoomsCapacityByIds(Collection<Long> ids) {
                return ids == null || ids.isEmpty() ? 0L
                        : em.createNamedQuery("getRoomsCapacityByIds", 
Long.class).setParameter("ids", ids).getSingleResult();
        }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
index 920647a..7b9b361 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
@@ -20,126 +20,50 @@ package org.apache.openmeetings.db.dao.server;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 
-import org.apache.openmeetings.db.dto.basic.SearchResult;
-import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
-import org.apache.openmeetings.db.entity.room.Client;
-import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 
 /**
- * Methods to add/get/remove {@link Client}s to the session
+ * Methods to add/get/remove {@link StreamClient}s to the session
  *
  *
  * @author sebawagner
  *
  */
 public interface ISessionManager {
-       void clearCache();
-
-       /**
-        * Notified on server start, when the session manager should be started 
and
-        * eventually caches cleared/setup
-        */
-       void sessionStart();
-
-       Client add(Client c, Server server);
-       /**
-        * add a new client item
-        *
-        * @param streamId
-        * @param scopeName
-        * @param remotePort
-        * @param remoteAddress
-        * @param swfUrl
-        * @param server
-        * @return
-        */
-       Client addClientListItem(String streamId, String scopeName, int 
remotePort, String remoteAddress, String swfUrl, Server server);
-
-       Collection<Client> getClients();
+       StreamClient add(StreamClient c);
 
        /**
         * loads the server into the client (only if database cache is used)
         *
         * @return
         */
-       Collection<Client> getClientsWithServer();
-
-       /**
-        * Get a client by its streamId
-        *
-        * @param streamId
-        * @param server
-        * @return
-        */
-       Client getClientByStreamId(String streamId, Server server);
-
-       /**
-        * get a client by its publicSID and the server,
-        *
-        * @param publicSID
-        * @param server
-        * @return
-        */
-       Client getClientByPublicSID(String publicSID, Server server);
+       Collection<StreamClient> list();
 
        /**
-        * same as {@link #getClientByPublicSID(String, boolean, Server)} but 
it ignores
-        * if the server part, so it will deliver any client just by its 
publicSID.<br/>
-        * <br/>
-        * <b>Note:</b>
-        * This method requires more time to find the user, so under normal 
circumstances
-        * you should use {@link #getClientByPublicSID(String, boolean, 
Server)}!
+        * Get a client by its UID
         *
-        * @param publicSID
+        * @param uid
         * @return
         */
-       ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID);
+       StreamClient get(String uid);
 
        /**
+        * Updates {@link StreamClient} in the cache
         *
-        * @param userId
-        * @return
-        *
-        * @deprecated There could be multiple users logged in with the same 
userid,
-        *             then this call would return a list not a single user
-        */
-       @Deprecated
-       Client getClientByUserId(Long userId);
-
-       /**
-        * Update the session object of the audio/video-connection and 
additionally
-        * swap the values to the session object of the user that holds the full
-        * session object
-        *
-        * @param streamId
-        * @param rcm
-        * @return
-        */
-       boolean updateAVClientByStreamId(String streamId, Client rcm, Server 
server);
-
-       /**
-        * Update the session object
-        *
-        * updateRoomCount is only <i>one</i> time true, in
-        * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, String)
-        * .
-        *
-        * @param streamId
         * @param rcm
-        * @param updateRoomCount
-        *            true means the count for the room has to be updated
-        * @return
+        * @return updated client
         */
-       boolean updateClientByStreamId(String streamId, Client rcm, boolean 
updateRoomCount, Server server);
+       StreamClient update(StreamClient rcm);
 
        /**
         * Remove a client from the session store
         *
-        * @param streamId
-        * @return
+        * @param uid
+        * @return true if client was removed
         */
-       boolean removeClient(String streamId, Server server);
+       boolean remove(String uid);
 
        /**
         * Get all ClientList Objects of that room and domain This Function is
@@ -149,28 +73,17 @@ public interface ISessionManager {
         * @param roomId
         * @return
         */
-       List<Client> getClientListByRoom(Long roomId);
+       List<StreamClient> listByRoom(Long roomId);
 
-       Collection<Client> getClientListByRoomAll(Long roomId);
+       Collection<StreamClient> listByRoomAll(Long roomId);
 
        /**
         * get the current Moderator in this room
         *
-        * @param roomname
-        * @return
-        */
-       List<Client> getCurrentModeratorByRoom(Long roomId);
-
-       /**
-        * Get list of current client sessions
-        *
-        * @param start
-        * @param max
-        * @param orderby
-        * @param asc
+        * @param roomId
         * @return
         */
-       SearchResult<Client> getListByStartAndMax(int start, int max, String 
orderby, boolean asc);
+       List<StreamClient> listModeratorByRoom(Long roomId);
 
        /**
         * returns number of current users recording
@@ -178,7 +91,7 @@ public interface ISessionManager {
         * @param roomId
         * @return
         */
-       long getRecordingCount(long roomId);
+       long getRecordingCount(Long roomId);
 
        /**
         * returns a number of current users publishing screensharing
@@ -186,21 +99,20 @@ public interface ISessionManager {
         * @param roomId
         * @return
         */
-       long getPublishingCount(long roomId);
+       long getPublishingCount(Long roomId);
 
        /**
-        * Get a list of all servers of all rooms on that server, serverId = 
null
-        * means it is a local session on the master.
+        * Get a list of all rooms with users in the system.
         *
-        * @param server
         * @return a set, a roomId can be only one time in this list
         */
-       List<Long> getActiveRoomIdsByServer(Server server);
+       Set<Long> getActiveRoomIds();
 
        /**
-        * Get some statistics about the current sessions
+        * Get a list of rooms with users on particular cluster node.
         *
-        * @return
+        * @param server
+        * @return a set, a roomId can be only one time in this list
         */
-       String getSessionStatistics();
+       Set<Long> getActiveRoomIds(String serverId);
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
deleted file mode 100644
index dad22cf..0000000
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.db.dao.server;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.dao.IDataProviderDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.util.DaoHelper;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 
- * CRUD for {@link Server}
- * 
- * @author solomax, sebawagner
- * 
- */
-@Transactional
-public class ServerDao implements IDataProviderDao<Server> {
-       private static final Logger log = 
Red5LoggerFactory.getLogger(ServerDao.class, webAppRootKey);
-       public final static String[] searchFields = { "name", "address", 
"comment" };
-
-       @PersistenceContext
-       private EntityManager em;
-
-       @Autowired
-       private UserDao userDao;
-       
-       /**
-        * Get a list of all available servers
-        * 
-        * @return
-        */
-       public List<Server> getServerList() {
-               log.debug("getServerList enter");
-               TypedQuery<Server> q = em.createNamedQuery("getAllServers",
-                               Server.class);
-               return q.getResultList();
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.apache.openmeetings.data.OmDAO#get(int, int)
-        */
-       @Override
-       public List<Server> get(int start, int max) {
-               TypedQuery<Server> q = em.createNamedQuery("getAllServers", 
Server.class);
-               q.setFirstResult(start);
-               q.setMaxResults(max);
-               return q.getResultList();
-       }
-
-       @Override
-       public List<Server> get(String search, int start, int count, String 
order) {
-               TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery(
-                               "Server", "s", search, true, false, order, 
searchFields),
-                               Server.class);
-               q.setFirstResult(start);
-               q.setMaxResults(count);
-               return q.getResultList();
-       }
-
-       /**
-        * get the list of all servers in the cluster that are ready to receive 
a
-        * ping (active = true)
-        * 
-        * @return
-        */
-       public List<Server> getActiveServers() {
-               return em.createNamedQuery("getActiveServers", Server.class)
-                               .getResultList();
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.apache.openmeetings.data.OmDAO#count()
-        */
-       @Override
-       public long count() {
-               log.debug("getServerCount enter");
-               TypedQuery<Long> q = em.createNamedQuery("getServerCount", 
Long.class);
-
-               return q.getSingleResult();
-       }
-
-       @Override
-       public long count(String search) {
-               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery("Server",
-                               "s", search, true, true, null, searchFields), 
Long.class);
-               return q.getSingleResult();
-       }
-
-       @Override
-       public Server get(long id) {
-               return get(Long.valueOf(id));
-       }
-       
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.apache.openmeetings.data.OmDAO#get(long)
-        */
-       @Override
-       public Server get(Long id) {
-               Server result = null;
-               log.debug("getServer enter, id = " + id);
-               TypedQuery<Server> q = em.createNamedQuery("getServerById",
-                               Server.class);
-               q.setParameter("id", id);
-               try {
-                       result = q.getSingleResult();
-               } catch (NoResultException e) {
-                       // noop
-               }
-               return result;
-       }
-
-       /**
-        * Get server by its address
-        * 
-        * @param address
-        * @return
-        */
-       public Server getServerByAddress(String address) {
-               log.debug("getServer enter, address = " + address);
-               TypedQuery<Server> q = em.createNamedQuery("getServerByAddress",
-                               Server.class);
-               q.setParameter("address", address);
-               List<Server> list = q.getResultList();
-               return list.size() > 0 ? list.get(0) : null;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.openmeetings.data.OmDAO#update(org.apache.openmeetings.persistence
-        * .beans.OmEntity, long)
-        */
-       @Override
-       public Server update(Server entity, Long userId) {
-               entity.setDeleted(false);
-               if (entity.getId() == null) {
-                       entity.setInserted(new Date());
-                       if (userId != null) {
-                               entity.setInsertedby(userDao.get(userId));
-                       }
-                       em.persist(entity);
-               } else {
-                       entity.setUpdated(new Date());
-                       if (userId != null) {
-                               entity.setUpdatedby(userDao.get(userId));
-                       }
-                       em.merge(entity);
-               }
-               return entity;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.openmeetings.data.OmDAO#delete(org.apache.openmeetings.persistence
-        * .beans.OmEntity, long)
-        */
-       @Override
-       public void delete(Server entity, Long userId) {
-               if (entity.getId() != null) {
-                       entity.setUpdated(new Date());
-                       if (userId != null) {
-                               entity.setUpdatedby(userDao.get(userId));
-                       }
-                       entity.setDeleted(true);
-                       em.merge(entity);
-               }
-       }
-
-       /**
-        * get {@link Server} by name
-        * 
-        * @param name
-        * @return
-        */
-       public List<Server> getServersByName(String name) {
-               TypedQuery<Server> q = em.createNamedQuery("getServerByName",
-                               Server.class);
-               q.setParameter("name", name);
-               return q.getResultList();
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
index 22facee..96f3cad 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
@@ -28,7 +28,7 @@ import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 import javax.persistence.TypedQuery;
 
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -205,7 +205,7 @@ public class SessiondataDao {
         */
        public void clearSessionByRoomId(Long roomId) {
                try {
-                       for (Client rcl : 
sessionManager.getClientListByRoom(roomId)) {
+                       for (StreamClient rcl : 
sessionManager.listByRoom(roomId)) {
                                String aux = rcl.getSwfurl();
 
                                //FIXME TODO this need to be refactored !

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
index 9a6e641..3ffda70 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserManager.java
@@ -52,10 +52,8 @@ public interface IUserManager {
        Long getLanguage(Locale loc);
        User loginOAuth(Map<String, String> params, long serverId) throws 
IOException, NoSuchAlgorithmException;
 
-       /** TODO FIXME seems to be unused **/
-       boolean kickUserByStreamId(String SID, Long roomId);
-
-       boolean kickUserByPublicSID(String SID, String publicSID);
+       boolean kickClient(String sid, String uid);
+       boolean kickUsersByRoomId(String sid, Long room_id);
 
        List<Userdata> getUserdataDashBoard(Long userId);
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java
deleted file mode 100644
index 677a56d..0000000
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.db.dao.user;
-
-//FIXME HACK to bypass cross project compilation
-public interface IUserService {
-       boolean kickUserByStreamId(String sid, String streamid, long serverId);
-
-       boolean kickUserBySessionId(String sid, long userId, String sessionId);
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
index 98831a2..1c5bc51 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
@@ -20,18 +20,18 @@ package org.apache.openmeetings.db.dto.room;
 
 import java.util.List;
 
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 
 public class RoomStatus {
-       List<Client> clientList;
+       List<StreamClient> clientList;
        BrowserStatus browserStatus;
        
        public RoomStatus() {}
        
-       public List<Client> getClientList() {
+       public List<StreamClient> getClientList() {
                return clientList;
        }
-       public void setClientList(List<Client> clientList) {
+       public void setClientList(List<StreamClient> clientList) {
                this.clientList = clientList;
        }
        public BrowserStatus getBrowserStatus() {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java
deleted file mode 100644
index cd437e7..0000000
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.db.dto.server;
-
-import org.apache.openmeetings.db.entity.room.Client;
-
-
-public class ClientSessionInfo {
-       
-       private Client rcl;
-       public Long serverId;
-       
-       public ClientSessionInfo() {}
-       
-       public ClientSessionInfo(Client rcl, Long serverId) {
-               super();
-               this.rcl = rcl;
-               this.serverId = serverId;
-       }
-       
-       public Client getRcl() {
-               return rcl;
-       }
-       public void setRcl(Client rcl) {
-               this.rcl = rcl;
-       }
-       public Long getServerId() {
-               return serverId;
-       }
-       public void setServerId(Long serverId) {
-               this.serverId = serverId;
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/server/ServerDTO.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/server/ServerDTO.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/server/ServerDTO.java
deleted file mode 100644
index cc8e933..0000000
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/server/ServerDTO.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
- *
- *   http://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.apache.openmeetings.db.dto.server;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.openmeetings.db.entity.server.Server;
-
-/**
- * 
- * Bean send to the client about the server he is going to use for the 
conference 
- * session
- * 
- * @author sebawagner
- *
- */
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class ServerDTO implements Serializable {
-       private static final long serialVersionUID = 1L;
-       private Long id;
-       private String name;
-       private String address;
-       private int port;
-       private String user;
-       private String password;
-       private String webapp;
-       private String protocol;
-       private boolean active;
-       private String comment;
-
-       public ServerDTO() {}
-       
-       public ServerDTO(Server s) {
-               if (s == null) {
-                       return;
-               }
-               id = s.getId();
-               name = s.getName();
-               address = s.getAddress();
-               port = s.getPort();
-               user = s.getUser();
-               password = s.getPass();
-               webapp = s.getWebapp();
-               protocol = s.getProtocol();
-               active = s.isActive();
-               comment = s.getComment();
-       }
-
-       public Server get() {
-               Server s = new Server();
-               s.setId(id);
-               s.setName(name);
-               s.setAddress(address);
-               s.setPort(port);
-               s.setUser(user);
-               s.setPass(password);
-               s.setWebapp(webapp);
-               s.setProtocol(protocol);
-               s.setActive(active);
-               s.setComment(comment);
-               return s;
-       }
-       
-       public Long getId() {
-               return id;
-       }
-
-       public void setId(Long id) {
-               this.id = id;
-       }
-
-       public String getAddress() {
-               return address;
-       }
-
-       public void setAddress(String address) {
-               this.address = address;
-       }
-
-       public int getPort() {
-               return port;
-       }
-
-       public void setPort(int port) {
-               this.port = port;
-       }
-
-       public String getProtocol() {
-               return protocol;
-       }
-
-       public void setProtocol(String protocol) {
-               this.protocol = protocol;
-       }
-
-       public String getWebapp() {
-               return webapp;
-       }
-
-       public void setWebapp(String webapp) {
-               this.webapp = webapp;
-       }
-
-       public String getName() {
-               return name;
-       }
-
-       public void setName(String name) {
-               this.name = name;
-       }
-
-       public String getUser() {
-               return user;
-       }
-
-       public void setUser(String user) {
-               this.user = user;
-       }
-
-       public String getPassword() {
-               return password;
-       }
-
-       public void setPassword(String password) {
-               this.password = password;
-       }
-
-       public boolean isActive() {
-               return active;
-       }
-
-       public void setActive(boolean active) {
-               this.active = active;
-       }
-
-       public String getComment() {
-               return comment;
-       }
-
-       public void setComment(String comment) {
-               this.comment = comment;
-       }
-       
-       @Override
-       public String toString() {
-               return "id "+id+" address "+address+" port "+port+" protocol 
"+protocol;
-       }
-
-       public static List<ServerDTO> list(List<Server> l) {
-               List<ServerDTO> list = new ArrayList<>();
-               if (l != null) {
-                       for (Server s : l) {
-                               list.add(new ServerDTO(s));
-                       }
-               }
-               return list;
-       }
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
index efd7c15..3f2398f 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
@@ -26,11 +26,12 @@ import java.util.UUID;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Room.Right;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.protocol.ws.api.registry.IKey;
 
 /**
- * Temporary class, later will be merged with {@link 
org.apache.openmeetings.db.entity.room.Client}
+ * Temporary class, later will be merged with {@link 
org.apache.openmeetings.db.entity.room.StreamClient}
  * @author solomax
  *
  */
@@ -65,6 +66,7 @@ public class Client implements IClient {
        private int mic = -1;
        private int width = 0;
        private int height = 0;
+       private String serverId = null;
 
        public Client(String sessionId, int pageId, Long userId, UserDao dao) {
                this.sessionId = sessionId;
@@ -75,7 +77,7 @@ public class Client implements IClient {
                sid = UUID.randomUUID().toString();
        }
 
-       public Client(org.apache.openmeetings.db.entity.room.Client rcl, User 
user) {
+       public Client(StreamClient rcl, User user) {
                this.sessionId = UUID.randomUUID().toString();
                this.pageId = 0;
                this.user = user;
@@ -107,14 +109,16 @@ public class Client implements IClient {
                return user;
        }
 
-       public void updateUser(UserDao dao) {
+       public Client updateUser(UserDao dao) {
                user = dao.get(user.getId());
+               return this;
        }
 
        public Long getUserId() {
                return user.getId();
        }
 
+       @Override
        public String getUid() {
                return uid;
        }
@@ -153,8 +157,8 @@ public class Client implements IClient {
                }
        }
 
-       public Set<Activity> getActivities() {
-               return activities;
+       public void clearActivities() {
+               activities.clear();
        }
 
        public boolean hasActivity(Activity a) {
@@ -169,7 +173,7 @@ public class Client implements IClient {
                }
        }
 
-       public void set(Activity a) {
+       public Client set(Activity a) {
                activities.add(a);
                switch (a) {
                        case broadcastV:
@@ -184,9 +188,10 @@ public class Client implements IClient {
                                break;
                        default:
                }
+               return this;
        }
 
-       public void remove(Activity a) {
+       public Client remove(Activity a) {
                activities.remove(a);
                switch (a) {
                        case broadcastV:
@@ -199,6 +204,7 @@ public class Client implements IClient {
                                break;
                        default:
                }
+               return this;
        }
 
        public Date getConnectedSince() {
@@ -284,6 +290,15 @@ public class Client implements IClient {
        }
 
        @Override
+       public String getServerId() {
+               return serverId;
+       }
+
+       public void setServerId(String serverId) {
+               this.serverId = serverId;
+       }
+
+       @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/IClient.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/IClient.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/IClient.java
index 3e72c0e..9d1cdc1 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/IClient.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/IClient.java
@@ -22,10 +22,12 @@ import 
org.apache.openmeetings.db.entity.IDataProviderEntity;
 
 /**
  * Temporary interface, will be removed after 2 types of cliens will be merged
- * {@link org.apache.openmeetings.db.entity.room.Client}
+ * {@link org.apache.openmeetings.db.entity.room.StreamClient}
  * {@link org.apache.openmeetings.db.entity.basic.Client}
  * @author solomax
  *
  */
 public interface IClient extends IDataProviderEntity {
+       String getUid();
+       String getServerId();
 }

Reply via email to