Author: solomax
Date: Thu Mar 31 13:27:59 2016
New Revision: 1737236
URL: http://svn.apache.org/viewvc?rev=1737236&view=rev
Log:
[OPENMEETINGS-1350] cluster is partially fixed
Modified:
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
openmeetings/application/branches/3.1.x/openmeetings-server/src/main/assembly/components/all.xml
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
openmeetings/application/trunk/openmeetings-server/src/main/assembly/components/all.xml
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
Modified:
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
Thu Mar 31 13:27:59 2016
@@ -140,6 +140,7 @@ public class ScopeApplicationAdapter ext
InitializationContainer.initComplete = true;
Version.logOMStarted();
recordingDao.resetProcessingStatus(); //we are starting
so all processing recordings are now errors
+ sessionManager.clearCache(); // 'sticky' clients should
be cleaned up from DB
} catch (Exception err) {
log.error("[appStart]", err);
}
Modified:
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
Thu Mar 31 13:27:59 2016
@@ -18,6 +18,8 @@
*/
package org.apache.openmeetings.core.session;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
@@ -34,7 +36,6 @@ import org.apache.openmeetings.db.dto.ba
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 static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import org.apache.openmeetings.util.crypt.ManageCryptStyle;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
@@ -69,349 +70,258 @@ public class SessionManager implements I
this.cache = cache;
}
- private ISessionManager sessionManager = new ISessionManager() {
-
- public synchronized Client addClientListItem(String streamId,
- String scopeName, Integer remotePort, String
remoteAddress,
- String swfUrl, Server server) {
- 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);
- long random = System.currentTimeMillis() + new
BigInteger(256, new Random()).longValue();
-
-
rcm.setPublicSID(ManageCryptStyle.getInstanceOfCrypt()
-
.createPassPhrase(String.valueOf(random).toString()));
-
- rcm.setServer(server);
- rcm.setUserport(remotePort);
- rcm.setUserip(remoteAddress);
- rcm.setSwfurl(swfUrl);
- rcm.setIsMod(false);
- rcm.setCanDraw(new Boolean(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 synchronized Collection<Client> getClients() {
- return cache.getClients();
- }
-
- public synchronized Collection<Client> getClientsWithServer() {
- return cache.getClientsWithServer();
- }
-
- public synchronized Client getClientByStreamId(String streamId,
Server server) {
- 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 Client getClientByPublicSID(String publicSID, Server
server) {
- 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 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 synchronized 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 synchronized boolean updateAVClientByStreamId(String
streamId, Client rcm, Server server) {
- 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 synchronized boolean updateClientByStreamId(String
streamId,
- Client rcm, boolean updateRoomCount, Server
server) {
- 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 synchronized boolean removeClient(String streamId,
Server server) {
- 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;
+ @Override
+ public void clearCache() {
+ cache.clear();
+ }
+
+ public Client addClientListItem(String streamId, String scopeName,
+ Integer remotePort, String remoteAddress, String
swfUrl, Server server) {
+ if (server == null) {
+ server = serverUtil.getCurrentServer();
}
+ try {
- public synchronized ArrayList<Client> getClientListByRoom(Long
roomId) {
- ArrayList<Client> roomClientList = new
ArrayList<Client>();
- try {
-
- for (Client rcl :
cache.getClientsByRoomId(roomId)) {
-
- if (rcl.isScreenClient()) {
- continue;
- }
-
- // 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;
- }
-
- public synchronized Collection<Client>
getClientListByRoomAll(Long roomId) {
- try {
- return cache.getClientsByRoomId(roomId);
- } catch (Exception err) {
- log.error("[getClientListByRoomAll]", err);
- }
- return null;
- }
-
- public synchronized List<Client> getCurrentModeratorByRoom(Long
room_id) {
- List<Client> rclList = new LinkedList<Client>();
- List<Client> currentClients =
this.getClientListByRoom(room_id);
- for (Client rcl : currentClients) {
- if (rcl.getIsMod()) {
- rclList.add(rcl);
- }
- }
+ // 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);
+ long random = System.currentTimeMillis() + new
BigInteger(256, new Random()).longValue();
+
+ rcm.setPublicSID(ManageCryptStyle.getInstanceOfCrypt()
+
.createPassPhrase(String.valueOf(random).toString()));
- return rclList;
- }
+ rcm.setServer(server);
+ rcm.setUserport(remotePort);
+ rcm.setUserip(remoteAddress);
+ rcm.setSwfurl(swfUrl);
+ rcm.setIsMod(false);
+ rcm.setCanDraw(new Boolean(false));
- // FIXME not sorted
- public synchronized SearchResult<Client> getListByStartAndMax(
- int start, int max, String orderby, boolean
asc) {
- SearchResult<Client> sResult = new
SearchResult<Client>();
- sResult.setObjectName(Client.class.getName());
- sResult.setRecords(Long.valueOf(cache.size()));
- sResult.setResult(cache.getClientsWithServer());
- return sResult;
- }
-
- public long getRecordingCount(long roomId) {
- List<Client> currentClients =
this.getClientListByRoom(roomId);
- int numberOfRecordingUsers = 0;
- for (Client rcl : currentClients) {
- if (rcl.isStartRecording()) {
- numberOfRecordingUsers++;
- }
+ if (cache.containsKey(null, streamId)) {
+ log.error("Tried to add an existing Client " +
streamId);
+ return null;
}
- return numberOfRecordingUsers;
- }
- public long getPublishingCount(long roomId) {
- List<Client> currentClients =
this.getClientListByRoom(roomId);
- int numberOfPublishingUsers = 0;
- for (Client rcl : currentClients) {
- if (rcl.isStreamPublishStarted()) {
- numberOfPublishingUsers++;
- }
- }
- return numberOfPublishingUsers;
- }
-
- public List<Long> getActiveRoomIdsByServer(Server server) {
- return cache.getRoomsIdsByServer(server);
- }
-
-
- public String getSessionStatistics() {
- return
cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
- }
+ cache.put(rcm.getStreamid(), rcm);
- public void sessionStart() {
- // TODO Auto-generated method stub
-
- }
-
- };
-
- public Client addClientListItem(String streamId, String scopeName,
- Integer remotePort, String remoteAddress, String
swfUrl, Server server) {
- if (server == null) {
- server = serverUtil.getCurrentServer();
+ return rcm;
+ } catch (Exception err) {
+ log.error("[addClientListItem]", err);
}
- return sessionManager.addClientListItem(streamId, scopeName,
remotePort, remoteAddress, swfUrl, server);
+ return null;
}
public Collection<Client> getClients() {
- return sessionManager.getClients();
+ return cache.getClients();
}
public Collection<Client> getClientsWithServer() {
- return sessionManager.getClientsWithServer();
+ return cache.getClientsWithServer();
}
public Client getClientByStreamId(String streamId, Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.getClientByStreamId(streamId, server);
+ 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 Client getClientByPublicSID(String publicSID, Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.getClientByPublicSID(publicSID, server);
+ 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 ClientSessionInfo getClientByPublicSIDAnyServer(String
publicSID) {
- return sessionManager.getClientByPublicSIDAnyServer(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 Client getClientByUserId(Long userId) {
- return sessionManager.getClientByUserId(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 boolean updateAVClientByStreamId(String streamId, Client rcm,
Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.updateAVClientByStreamId(streamId, rcm,
server);
+ 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 boolean updateClientByStreamId(String streamId, Client rcm,
- boolean updateRoomCount, Server server) {
+ public boolean updateClientByStreamId(String streamId, Client rcm,
boolean updateRoomCount, Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.updateClientByStreamId(streamId, rcm,
- updateRoomCount, server);
+ 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 boolean removeClient(String streamId, Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.removeClient(streamId, server);
+ 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 List<Client> getClientListByRoom(Long room_id) {
- return sessionManager.getClientListByRoom(room_id);
+ public List<Client> getClientListByRoom(Long roomId) {
+ List<Client> roomClientList = new ArrayList<>();
+ try {
+ for (Client rcl : cache.getClientsByRoomId(roomId)) {
+ if (rcl.isScreenClient()) {
+ continue;
+ }
+
+ // 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;
}
- public Collection<Client> getClientListByRoomAll(Long room_id) {
- return sessionManager.getClientListByRoomAll(room_id);
+ public Collection<Client> getClientListByRoomAll(Long roomId) {
+ try {
+ return cache.getClientsByRoomId(roomId);
+ } catch (Exception err) {
+ log.error("[getClientListByRoomAll]", err);
+ }
+ return null;
}
- public List<Client> getCurrentModeratorByRoom(Long room_id) {
- return sessionManager.getCurrentModeratorByRoom(room_id);
+ 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;
}
- public SearchResult<Client> getListByStartAndMax(int start, int max,
- String orderby, boolean asc) {
- return sessionManager.getListByStartAndMax(start, max, orderby,
asc);
+ 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;
}
public long getRecordingCount(long roomId) {
- return sessionManager.getRecordingCount(roomId);
+ List<Client> currentClients = this.getClientListByRoom(roomId);
+ int numberOfRecordingUsers = 0;
+ for (Client rcl : currentClients) {
+ if (rcl.isStartRecording()) {
+ numberOfRecordingUsers++;
+ }
+ }
+ return numberOfRecordingUsers;
}
public long getPublishingCount(long roomId) {
- return sessionManager.getPublishingCount(roomId);
+ List<Client> currentClients = this.getClientListByRoom(roomId);
+ int numberOfPublishingUsers = 0;
+ for (Client rcl : currentClients) {
+ if (rcl.isStreamPublishStarted()) {
+ numberOfPublishingUsers++;
+ }
+ }
+ return numberOfPublishingUsers;
}
public List<Long> getActiveRoomIdsByServer(Server server) {
- return sessionManager.getActiveRoomIdsByServer(server == null ?
serverUtil.getCurrentServer() : server);
+ return cache.getRoomsIdsByServer(server == null ?
serverUtil.getCurrentServer() : server);
}
public String getSessionStatistics() {
- return sessionManager.getSessionStatistics();
+ return
cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
}
public void sessionStart() {
- sessionManager.sessionStart();
+ // TODO Auto-generated method stub
}
-
}
Modified:
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
Thu Mar 31 13:27:59 2016
@@ -34,11 +34,8 @@ public class DatabaseStore implements IC
@Autowired
private ClientDao clientDao;
- public void clearCache() {
-
- //List<Server> serverList = serverDao.getActiveServers();
-
- //clientDao.cleanUpClientsWithoutReference();
+ public void clear() {
+ clientDao.cleanAllClients();
}
public void put(String streamId, Client rcl) {
Modified:
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
Thu Mar 31 13:27:59 2016
@@ -18,17 +18,19 @@
*/
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.LinkedHashMap;
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.apache.openmeetings.util.OpenmeetingsVariables;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
@@ -48,14 +50,12 @@ import org.slf4j.Logger;
*
*/
public class HashMapStore implements IClientPersistenceStore {
- protected static final Logger log = Red5LoggerFactory.getLogger(
- HashMapStore.class,
OpenmeetingsVariables.webAppRootKey);
-
+ protected static final Logger log =
Red5LoggerFactory.getLogger(HashMapStore.class, webAppRootKey);
- private LinkedHashMap<String, Client> clientsByStreamId = new
LinkedHashMap<String, Client>();
+ private Map<String, Client> clientsByStreamId = new
ConcurrentHashMap<>();
- public void clearCache() {
- clientsByStreamId = new LinkedHashMap<String, Client>();
+ public void clear() {
+ clientsByStreamId = new ConcurrentHashMap<>();
}
public void put(String streamId, Client rcl) {
@@ -71,8 +71,9 @@ public class HashMapStore implements ICl
}
public List<Client> getClientsByPublicSID(Server server, String
publicSID) {
- List<Client> clientList = new ArrayList<Client>();
- for (Client cl : clientsByStreamId.values()) {
+ 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);
}
@@ -81,9 +82,10 @@ public class HashMapStore implements ICl
}
public Map<Long,List<Client>> getClientsByPublicSID(String publicSID) {
- Map<Long,List<Client>> clientMapList = new
HashMap<Long,List<Client>>();
- List<Client> clientList = new ArrayList<Client>();
- for (Client cl : clientsByStreamId.values()) {
+ 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);
}
@@ -107,8 +109,9 @@ public class HashMapStore implements ICl
}
public List<Client> getClientsByUserId(Server server, Long userId) {
- List<Client> clientList = new ArrayList<Client>();
- for (Client cl : clientsByStreamId.values()) {
+ 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);
}
@@ -117,8 +120,9 @@ public class HashMapStore implements ICl
}
public List<Client> getClientsByRoomId(Long roomId) {
- List<Client> clientList = new ArrayList<Client>();
- for (Client cl : clientsByStreamId.values()) {
+ 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);
}
@@ -146,7 +150,6 @@ public class HashMapStore implements ICl
return clientsByStreamId.size();
}
-
/**
* Print some session statistics to the debug out
*
@@ -159,12 +162,10 @@ public class HashMapStore implements ICl
}
public String getDebugInformation(List<DEBUG_DETAILS> detailLevel) {
-
StringBuilder statistics = new StringBuilder();
if (detailLevel.contains(DEBUG_DETAILS.SIZE)) {
- addNewLine(statistics, "Number of sessions Total "
- + getTotalNumberOfSessions());
+ addNewLine(statistics, "Number of sessions Total " +
getTotalNumberOfSessions());
}
return statistics.toString();
@@ -175,8 +176,9 @@ public class HashMapStore implements ICl
}
public List<Long> getRoomsIdsByServer(Server server) {
- HashSet<Long> rooms = new HashSet<Long>();
- for (Client cl : clientsByStreamId.values()) {
+ 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 > 0 &&
!rooms.contains(roomId)) {
rooms.add(roomId);
Modified:
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
Thu Mar 31 13:27:59 2016
@@ -34,14 +34,14 @@ public interface IClientPersistenceStore
/**
* called upon start of the session cache
*/
- public abstract void clearCache();
+ void clear();
/**
*
* @param streamId
* @param rcl
*/
- public abstract void put(String streamId, Client rcl);
+ void put(String streamId, Client rcl);
/**
*
@@ -49,7 +49,7 @@ public interface IClientPersistenceStore
* @param streamId
* @return
*/
- public boolean containsKey(Server server, String streamId);
+ boolean containsKey(Server server, String streamId);
/**
* by server and publicSID
@@ -58,7 +58,7 @@ public interface IClientPersistenceStore
* @param streamId
* @return will return null if the client does not exist in the list
*/
- public abstract Client get(Server server, String streamId);
+ Client get(Server server, String streamId);
/**
*
@@ -66,8 +66,7 @@ public interface IClientPersistenceStore
* @param publicSID
* @return will return an empty list if nothing available
*/
- public abstract List<Client> getClientsByPublicSID(Server server,
- String publicSID);
+ List<Client> getClientsByPublicSID(Server server, String publicSID);
/**
* Searches for the publicSID across all servers
@@ -75,10 +74,9 @@ public interface IClientPersistenceStore
* @param publicSID
* @return will return a map with the serverId as key and the
RoomClients as list in the value
*/
- public abstract Map<Long, List<Client>> getClientsByPublicSID(
- String publicSID);
+ Map<Long, List<Client>> getClientsByPublicSID(String publicSID);
- public abstract Collection<Client> getClients();
+ Collection<Client> getClients();
/**
* get all clients by a specific {@link Server}
@@ -86,7 +84,7 @@ public interface IClientPersistenceStore
* @param server
* @return will return an empty map if nothing available
*/
- public abstract Collection<Client> getClientsByServer(Server server);
+ Collection<Client> getClientsByServer(Server server);
/**
*
@@ -94,7 +92,7 @@ public interface IClientPersistenceStore
* @param userId
* @return will return an empty list if nothing available
*/
- public abstract Collection<Client> getClientsByUserId(Server server,
Long userId);
+ Collection<Client> getClientsByUserId(Server server, Long userId);
/**
*
@@ -103,15 +101,15 @@ public interface IClientPersistenceStore
* @param roomId
* @return will return an empty map if nothing available
*/
- public abstract List<Client> getClientsByRoomId(Long roomId);
+ List<Client> getClientsByRoomId(Long roomId);
- public abstract void remove(Server server, String streamId);
+ void remove(Server server, String streamId);
- public abstract int size();
+ int size();
- public abstract int sizeByServer(Server server);
+ int sizeByServer(Server server);
- public abstract Collection<Client> values();
+ Collection<Client> values();
/**
* Get some session statistics
@@ -119,7 +117,7 @@ public interface IClientPersistenceStore
* @param detailLevel
* @return
*/
- public abstract String getDebugInformation(List<DEBUG_DETAILS>
detailLevel);
+ String getDebugInformation(List<DEBUG_DETAILS> detailLevel);
/**
* returns a list of roomIds (unique) that are currently active on the
given server
@@ -129,7 +127,7 @@ public interface IClientPersistenceStore
* @param server
* @return
*/
- public abstract List<Long> getRoomsIdsByServer(Server server);
+ List<Long> getRoomsIdsByServer(Server server);
/**
* if database cache + cluster is enabled, the server object will be
loaded
@@ -137,6 +135,5 @@ public interface IClientPersistenceStore
*
* @return
*/
- public abstract Collection<Client> getClientsWithServer();
-
-}
\ No newline at end of file
+ Collection<Client> getClientsWithServer();
+}
Modified:
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
Thu Mar 31 13:27:59 2016
@@ -34,12 +34,13 @@ import org.apache.openmeetings.db.entity
*
*/
public interface ISessionManager {
+ void clearCache();
/**
* Notified on server start, when the session manager should be started
and
* eventually caches cleared/setup
*/
- public abstract void sessionStart();
+ void sessionStart();
/**
* add a new client item
@@ -52,18 +53,16 @@ public interface ISessionManager {
* @param server
* @return
*/
- public abstract Client addClientListItem(String streamId,
- String scopeName, Integer remotePort, String
remoteAddress,
- String swfUrl, Server server);
+ Client addClientListItem(String streamId, String scopeName, Integer
remotePort, String remoteAddress, String swfUrl, Server server);
- public abstract Collection<Client> getClients();
+ Collection<Client> getClients();
/**
* loads the server into the client (only if database cache is used)
*
* @return
*/
- public abstract Collection<Client> getClientsWithServer();
+ Collection<Client> getClientsWithServer();
/**
* Get a client by its streamId
@@ -72,8 +71,7 @@ public interface ISessionManager {
* @param server
* @return
*/
- public abstract Client getClientByStreamId(String streamId,
- Server server);
+ Client getClientByStreamId(String streamId, Server server);
/**
* get a client by its publicSID and the server,
@@ -82,7 +80,7 @@ public interface ISessionManager {
* @param server
* @return
*/
- public abstract Client getClientByPublicSID(String publicSID, Server
server);
+ Client getClientByPublicSID(String publicSID, Server server);
/**
* same as {@link #getClientByPublicSID(String, boolean, Server)} but
it ignores
@@ -95,7 +93,7 @@ public interface ISessionManager {
* @param publicSID
* @return
*/
- public ClientSessionInfo getClientByPublicSIDAnyServer(String
publicSID);
+ ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID);
/**
*
@@ -105,7 +103,7 @@ public interface ISessionManager {
* @deprecated There could be multiple users logged in with the same
userid,
* then this call would return a list not a single user
*/
- public abstract Client getClientByUserId(Long userId);
+ Client getClientByUserId(Long userId);
/**
* Update the session object of the audio/video-connection and
additionally
@@ -116,7 +114,7 @@ public interface ISessionManager {
* @param rcm
* @return
*/
- public abstract boolean updateAVClientByStreamId(String streamId,
Client rcm, Server server);
+ boolean updateAVClientByStreamId(String streamId, Client rcm, Server
server);
/**
* Update the session object
@@ -131,8 +129,7 @@ public interface ISessionManager {
* true means the count for the room has to be updated
* @return
*/
- public abstract boolean updateClientByStreamId(String streamId,
- Client rcm, boolean updateRoomCount, Server server);
+ boolean updateClientByStreamId(String streamId, Client rcm, boolean
updateRoomCount, Server server);
/**
* Remove a client from the session store
@@ -140,7 +137,7 @@ public interface ISessionManager {
* @param streamId
* @return
*/
- public abstract boolean removeClient(String streamId, Server server);
+ boolean removeClient(String streamId, Server server);
/**
* Get all ClientList Objects of that room and domain This Function is
@@ -150,9 +147,9 @@ public interface ISessionManager {
* @param roomId
* @return
*/
- public abstract List<Client> getClientListByRoom(Long roomId);
+ List<Client> getClientListByRoom(Long roomId);
- public abstract Collection<Client> getClientListByRoomAll(Long roomId);
+ Collection<Client> getClientListByRoomAll(Long roomId);
/**
* get the current Moderator in this room
@@ -160,7 +157,7 @@ public interface ISessionManager {
* @param roomname
* @return
*/
- public abstract List<Client> getCurrentModeratorByRoom(Long roomId);
+ List<Client> getCurrentModeratorByRoom(Long roomId);
/**
* Get list of current client sessions
@@ -171,8 +168,7 @@ public interface ISessionManager {
* @param asc
* @return
*/
- public abstract SearchResult<Client> getListByStartAndMax(int start,
- int max, String orderby, boolean asc);
+ SearchResult<Client> getListByStartAndMax(int start, int max, String
orderby, boolean asc);
/**
* returns number of current users recording
@@ -180,7 +176,7 @@ public interface ISessionManager {
* @param roomId
* @return
*/
- public abstract long getRecordingCount(long roomId);
+ long getRecordingCount(long roomId);
/**
* returns a number of current users publishing screensharing
@@ -188,7 +184,7 @@ public interface ISessionManager {
* @param roomId
* @return
*/
- public abstract long getPublishingCount(long roomId);
+ long getPublishingCount(long roomId);
/**
* Get a list of all servers of all rooms on that server, serverId =
null
@@ -197,13 +193,12 @@ public interface ISessionManager {
* @param server
* @return a set, a roomId can be only one time in this list
*/
- public abstract List<Long> getActiveRoomIdsByServer(Server server);
+ List<Long> getActiveRoomIdsByServer(Server server);
/**
* Get some statistics about the current sessions
*
* @return
*/
- public abstract String getSessionStatistics();
-
-}
\ No newline at end of file
+ String getSessionStatistics();
+}
Modified:
openmeetings/application/branches/3.1.x/openmeetings-server/src/main/assembly/components/all.xml
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-server/src/main/assembly/components/all.xml?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-server/src/main/assembly/components/all.xml
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-server/src/main/assembly/components/all.xml
Thu Mar 31 13:27:59 2016
@@ -99,7 +99,6 @@
<exclude>WEB-INF/lib/commons-codec*</exclude>
<exclude>WEB-INF/lib/commons-collections-*</exclude>
<exclude>WEB-INF/lib/commons-lang3*</exclude>
- <exclude>WEB-INF/lib/commons-pool-*</exclude>
</excludes>
</fileSet>
<fileSet>
Modified:
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
Thu Mar 31 13:27:59 2016
@@ -152,7 +152,7 @@ public class ConnectionsPanel extends Ad
@Override
protected void populateItem(final
Item<org.apache.openmeetings.web.app.Client> item) {
org.apache.openmeetings.web.app.Client c =
item.getModelObject();
- item.add(new Label("id", c.getUserId()));
+ item.add(new Label("id", ""));
User u =
getBean(UserService.class).getUserById(getSid(), c.getUserId());
item.add(new Label("login", u == null ? null :
u.getLogin()));
item.add(new Label("since",
c.getConnectedSince()));
Modified:
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
Thu Mar 31 13:27:59 2016
@@ -66,23 +66,22 @@
</bean>
<bean id="openmeetings.EmoticonsManager"
class="org.apache.openmeetings.core.data.whiteboard.EmoticonsManager" />
- <!-- Singletons for memory based cache -->
+ <!-- Singleton for memory based cache -->
<bean id="openmeetings.HashMapStore" scope="singleton"
class="org.apache.openmeetings.core.session.store.HashMapStore" />
+ <!-- Database cache -->
+ <bean id="openmeetings.DatabaseStore"
class="org.apache.openmeetings.core.session.store.DatabaseStore" />
+
<bean id="whiteBoardObjectListManagerById" scope="singleton"
class="org.apache.openmeetings.core.data.whiteboard.WhiteBoardObjectListManagerById"
/>
<!-- WhiteBoardObjectSyncManager can stay in the memory, even on
cluster! -->
<bean id="whiteBoardObjectSyncManager" scope="singleton"
class="org.apache.openmeetings.core.data.whiteboard.WhiteBoardObjectSyncManager"
/>
- <!-- Database cache -->
- <bean id="openmeetings.DatabaseStore"
class="org.apache.openmeetings.core.session.store.DatabaseStore" />
-
+ <!-- Cluster related config start -->
<bean id="openmeetings.ServerUtil" scope="singleton"
class="org.apache.openmeetings.core.session.ServerUtil">
<!-- Need to be uncommented and set to the real ID if in
cluster mode
<property name="serverId" value="1" />
-->
</bean>
- <!-- Cluster related config start -->
-
<!-- Start of Services -->
<bean id="xmlcrm.service"
class="org.apache.openmeetings.core.remote.MainService" />
<bean id="printservice.service"
class="org.apache.openmeetings.core.remote.PrintService" />
Modified:
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
(original)
+++
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
Thu Mar 31 13:27:59 2016
@@ -48,7 +48,7 @@ public class TestHashMapSession extends
public void testHashMapSession() {
//make sure the cache is empty before starting the test
- cache.clearCache();
+ cache.clear();
for (int i=0;i<20;i++) {
Modified:
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
(original)
+++
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
Thu Mar 31 13:27:59 2016
@@ -131,6 +131,7 @@ public class ScopeApplicationAdapter ext
InitializationContainer.initComplete = true;
Version.logOMStarted();
recordingDao.resetProcessingStatus(); //we are starting
so all processing recordings are now errors
+ sessionManager.clearCache(); // 'sticky' clients should
be cleaned up from DB
} catch (Exception err) {
log.error("[appStart]", err);
}
Modified:
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
(original)
+++
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
Thu Mar 31 13:27:59 2016
@@ -18,6 +18,8 @@
*/
package org.apache.openmeetings.core.session;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
@@ -34,7 +36,6 @@ import org.apache.openmeetings.db.dto.ba
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 static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import org.apache.openmeetings.util.crypt.ManageCryptStyle;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
@@ -69,349 +70,258 @@ public class SessionManager implements I
this.cache = cache;
}
- private ISessionManager sessionManager = new ISessionManager() {
-
- public synchronized Client addClientListItem(String streamId,
- String scopeName, Integer remotePort, String
remoteAddress,
- String swfUrl, Server server) {
- 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);
- long random = System.currentTimeMillis() + new
BigInteger(256, new Random()).longValue();
-
-
rcm.setPublicSID(ManageCryptStyle.getInstanceOfCrypt()
-
.createPassPhrase(String.valueOf(random).toString()));
-
- rcm.setServer(server);
- rcm.setUserport(remotePort);
- rcm.setUserip(remoteAddress);
- rcm.setSwfurl(swfUrl);
- rcm.setIsMod(false);
- rcm.setCanDraw(new Boolean(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 synchronized Collection<Client> getClients() {
- return cache.getClients();
- }
-
- public synchronized Collection<Client> getClientsWithServer() {
- return cache.getClientsWithServer();
- }
-
- public synchronized Client getClientByStreamId(String streamId,
Server server) {
- 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 Client getClientByPublicSID(String publicSID, Server
server) {
- 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 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 synchronized 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 synchronized boolean updateAVClientByStreamId(String
streamId, Client rcm, Server server) {
- 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 synchronized boolean updateClientByStreamId(String
streamId,
- Client rcm, boolean updateRoomCount, Server
server) {
- 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 synchronized boolean removeClient(String streamId,
Server server) {
- 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 synchronized ArrayList<Client> getClientListByRoom(Long
roomId) {
- ArrayList<Client> roomClientList = new
ArrayList<Client>();
- try {
-
- for (Client rcl :
cache.getClientsByRoomId(roomId)) {
-
- if (rcl.isScreenClient()) {
- continue;
- }
-
- // 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 void clearCache() {
+ cache.clear();
+ }
- public synchronized Collection<Client>
getClientListByRoomAll(Long roomId) {
- try {
- return cache.getClientsByRoomId(roomId);
- } catch (Exception err) {
- log.error("[getClientListByRoomAll]", err);
- }
- return null;
+ public Client addClientListItem(String streamId, String scopeName,
+ Integer remotePort, String remoteAddress, String
swfUrl, Server server) {
+ if (server == null) {
+ server = serverUtil.getCurrentServer();
}
+ try {
- public synchronized List<Client> getCurrentModeratorByRoom(Long
room_id) {
- List<Client> rclList = new LinkedList<Client>();
- List<Client> currentClients =
this.getClientListByRoom(room_id);
- for (Client rcl : currentClients) {
- if (rcl.getIsMod()) {
- rclList.add(rcl);
- }
- }
+ // 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);
+ long random = System.currentTimeMillis() + new
BigInteger(256, new Random()).longValue();
+
+ rcm.setPublicSID(ManageCryptStyle.getInstanceOfCrypt()
+
.createPassPhrase(String.valueOf(random).toString()));
- return rclList;
- }
+ rcm.setServer(server);
+ rcm.setUserport(remotePort);
+ rcm.setUserip(remoteAddress);
+ rcm.setSwfurl(swfUrl);
+ rcm.setIsMod(false);
+ rcm.setCanDraw(new Boolean(false));
- // FIXME not sorted
- public synchronized SearchResult<Client> getListByStartAndMax(
- int start, int max, String orderby, boolean
asc) {
- SearchResult<Client> sResult = new
SearchResult<Client>();
- sResult.setObjectName(Client.class.getName());
- sResult.setRecords(Long.valueOf(cache.size()));
- sResult.setResult(cache.getClientsWithServer());
- return sResult;
- }
-
- public long getRecordingCount(long roomId) {
- List<Client> currentClients =
this.getClientListByRoom(roomId);
- int numberOfRecordingUsers = 0;
- for (Client rcl : currentClients) {
- if (rcl.isStartRecording()) {
- numberOfRecordingUsers++;
- }
+ if (cache.containsKey(null, streamId)) {
+ log.error("Tried to add an existing Client " +
streamId);
+ return null;
}
- return numberOfRecordingUsers;
- }
- public long getPublishingCount(long roomId) {
- List<Client> currentClients =
this.getClientListByRoom(roomId);
- int numberOfPublishingUsers = 0;
- for (Client rcl : currentClients) {
- if (rcl.isStreamPublishStarted()) {
- numberOfPublishingUsers++;
- }
- }
- return numberOfPublishingUsers;
- }
-
- public List<Long> getActiveRoomIdsByServer(Server server) {
- return cache.getRoomsIdsByServer(server);
- }
-
-
- public String getSessionStatistics() {
- return
cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
- }
+ cache.put(rcm.getStreamid(), rcm);
- public void sessionStart() {
- // TODO Auto-generated method stub
-
- }
-
- };
-
- public Client addClientListItem(String streamId, String scopeName,
- Integer remotePort, String remoteAddress, String
swfUrl, Server server) {
- if (server == null) {
- server = serverUtil.getCurrentServer();
+ return rcm;
+ } catch (Exception err) {
+ log.error("[addClientListItem]", err);
}
- return sessionManager.addClientListItem(streamId, scopeName,
remotePort, remoteAddress, swfUrl, server);
+ return null;
}
public Collection<Client> getClients() {
- return sessionManager.getClients();
+ return cache.getClients();
}
public Collection<Client> getClientsWithServer() {
- return sessionManager.getClientsWithServer();
+ return cache.getClientsWithServer();
}
public Client getClientByStreamId(String streamId, Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.getClientByStreamId(streamId, server);
+ 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 Client getClientByPublicSID(String publicSID, Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.getClientByPublicSID(publicSID, server);
+ 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 ClientSessionInfo getClientByPublicSIDAnyServer(String
publicSID) {
- return sessionManager.getClientByPublicSIDAnyServer(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 Client getClientByUserId(Long userId) {
- return sessionManager.getClientByUserId(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 boolean updateAVClientByStreamId(String streamId, Client rcm,
Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.updateAVClientByStreamId(streamId, rcm,
server);
+ 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 boolean updateClientByStreamId(String streamId, Client rcm,
- boolean updateRoomCount, Server server) {
+ public boolean updateClientByStreamId(String streamId, Client rcm,
boolean updateRoomCount, Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.updateClientByStreamId(streamId, rcm,
- updateRoomCount, server);
+ 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 boolean removeClient(String streamId, Server server) {
if (server == null) {
server = serverUtil.getCurrentServer();
}
- return sessionManager.removeClient(streamId, server);
+ 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 List<Client> getClientListByRoom(Long room_id) {
- return sessionManager.getClientListByRoom(room_id);
+ public List<Client> getClientListByRoom(Long roomId) {
+ List<Client> roomClientList = new ArrayList<>();
+ try {
+ for (Client rcl : cache.getClientsByRoomId(roomId)) {
+ if (rcl.isScreenClient()) {
+ continue;
+ }
+
+ // 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;
}
- public Collection<Client> getClientListByRoomAll(Long room_id) {
- return sessionManager.getClientListByRoomAll(room_id);
+ public Collection<Client> getClientListByRoomAll(Long roomId) {
+ try {
+ return cache.getClientsByRoomId(roomId);
+ } catch (Exception err) {
+ log.error("[getClientListByRoomAll]", err);
+ }
+ return null;
}
- public List<Client> getCurrentModeratorByRoom(Long room_id) {
- return sessionManager.getCurrentModeratorByRoom(room_id);
+ 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;
}
- public SearchResult<Client> getListByStartAndMax(int start, int max,
- String orderby, boolean asc) {
- return sessionManager.getListByStartAndMax(start, max, orderby,
asc);
+ 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;
}
public long getRecordingCount(long roomId) {
- return sessionManager.getRecordingCount(roomId);
+ List<Client> currentClients = this.getClientListByRoom(roomId);
+ int numberOfRecordingUsers = 0;
+ for (Client rcl : currentClients) {
+ if (rcl.isStartRecording()) {
+ numberOfRecordingUsers++;
+ }
+ }
+ return numberOfRecordingUsers;
}
public long getPublishingCount(long roomId) {
- return sessionManager.getPublishingCount(roomId);
+ List<Client> currentClients = this.getClientListByRoom(roomId);
+ int numberOfPublishingUsers = 0;
+ for (Client rcl : currentClients) {
+ if (rcl.isStreamPublishStarted()) {
+ numberOfPublishingUsers++;
+ }
+ }
+ return numberOfPublishingUsers;
}
public List<Long> getActiveRoomIdsByServer(Server server) {
- return sessionManager.getActiveRoomIdsByServer(server == null ?
serverUtil.getCurrentServer() : server);
+ return cache.getRoomsIdsByServer(server == null ?
serverUtil.getCurrentServer() : server);
}
public String getSessionStatistics() {
- return sessionManager.getSessionStatistics();
+ return
cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
}
public void sessionStart() {
- sessionManager.sessionStart();
+ // TODO Auto-generated method stub
}
-
}
Modified:
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
(original)
+++
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/DatabaseStore.java
Thu Mar 31 13:27:59 2016
@@ -34,11 +34,8 @@ public class DatabaseStore implements IC
@Autowired
private ClientDao clientDao;
- public void clearCache() {
-
- //List<Server> serverList = serverDao.getActiveServers();
-
- //clientDao.cleanUpClientsWithoutReference();
+ public void clear() {
+ clientDao.cleanAllClients();
}
public void put(String streamId, Client rcl) {
Modified:
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
(original)
+++
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
Thu Mar 31 13:27:59 2016
@@ -18,17 +18,19 @@
*/
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.LinkedHashMap;
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.apache.openmeetings.util.OpenmeetingsVariables;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
@@ -48,14 +50,12 @@ import org.slf4j.Logger;
*
*/
public class HashMapStore implements IClientPersistenceStore {
- protected static final Logger log = Red5LoggerFactory.getLogger(
- HashMapStore.class,
OpenmeetingsVariables.webAppRootKey);
+ protected static final Logger log =
Red5LoggerFactory.getLogger(HashMapStore.class, webAppRootKey);
+ private Map<String, Client> clientsByStreamId = new
ConcurrentHashMap<>();
- private LinkedHashMap<String, Client> clientsByStreamId = new
LinkedHashMap<String, Client>();
-
- public void clearCache() {
- clientsByStreamId = new LinkedHashMap<String, Client>();
+ public void clear() {
+ clientsByStreamId = new ConcurrentHashMap<>();
}
public void put(String streamId, Client rcl) {
@@ -71,8 +71,9 @@ public class HashMapStore implements ICl
}
public List<Client> getClientsByPublicSID(Server server, String
publicSID) {
- List<Client> clientList = new ArrayList<Client>();
- for (Client cl : clientsByStreamId.values()) {
+ 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);
}
@@ -81,9 +82,10 @@ public class HashMapStore implements ICl
}
public Map<Long,List<Client>> getClientsByPublicSID(String publicSID) {
- Map<Long,List<Client>> clientMapList = new
HashMap<Long,List<Client>>();
- List<Client> clientList = new ArrayList<Client>();
- for (Client cl : clientsByStreamId.values()) {
+ 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);
}
@@ -107,8 +109,9 @@ public class HashMapStore implements ICl
}
public List<Client> getClientsByUserId(Server server, Long userId) {
- List<Client> clientList = new ArrayList<Client>();
- for (Client cl : clientsByStreamId.values()) {
+ 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);
}
@@ -117,8 +120,9 @@ public class HashMapStore implements ICl
}
public List<Client> getClientsByRoomId(Long roomId) {
- List<Client> clientList = new ArrayList<Client>();
- for (Client cl : clientsByStreamId.values()) {
+ 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);
}
@@ -146,7 +150,6 @@ public class HashMapStore implements ICl
return clientsByStreamId.size();
}
-
/**
* Print some session statistics to the debug out
*
@@ -159,12 +162,10 @@ public class HashMapStore implements ICl
}
public String getDebugInformation(List<DEBUG_DETAILS> detailLevel) {
-
StringBuilder statistics = new StringBuilder();
if (detailLevel.contains(DEBUG_DETAILS.SIZE)) {
- addNewLine(statistics, "Number of sessions Total "
- + getTotalNumberOfSessions());
+ addNewLine(statistics, "Number of sessions Total " +
getTotalNumberOfSessions());
}
return statistics.toString();
@@ -175,8 +176,9 @@ public class HashMapStore implements ICl
}
public List<Long> getRoomsIdsByServer(Server server) {
- HashSet<Long> rooms = new HashSet<Long>();
- for (Client cl : clientsByStreamId.values()) {
+ 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 > 0 &&
!rooms.contains(roomId)) {
rooms.add(roomId);
Modified:
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
(original)
+++
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/IClientPersistenceStore.java
Thu Mar 31 13:27:59 2016
@@ -34,14 +34,14 @@ public interface IClientPersistenceStore
/**
* called upon start of the session cache
*/
- public abstract void clearCache();
+ void clear();
/**
*
* @param streamId
* @param rcl
*/
- public abstract void put(String streamId, Client rcl);
+ void put(String streamId, Client rcl);
/**
*
@@ -49,7 +49,7 @@ public interface IClientPersistenceStore
* @param streamId
* @return
*/
- public boolean containsKey(Server server, String streamId);
+ boolean containsKey(Server server, String streamId);
/**
* by server and publicSID
@@ -58,7 +58,7 @@ public interface IClientPersistenceStore
* @param streamId
* @return will return null if the client does not exist in the list
*/
- public abstract Client get(Server server, String streamId);
+ Client get(Server server, String streamId);
/**
*
@@ -66,8 +66,7 @@ public interface IClientPersistenceStore
* @param publicSID
* @return will return an empty list if nothing available
*/
- public abstract List<Client> getClientsByPublicSID(Server server,
- String publicSID);
+ List<Client> getClientsByPublicSID(Server server, String publicSID);
/**
* Searches for the publicSID across all servers
@@ -75,10 +74,9 @@ public interface IClientPersistenceStore
* @param publicSID
* @return will return a map with the serverId as key and the
RoomClients as list in the value
*/
- public abstract Map<Long, List<Client>> getClientsByPublicSID(
- String publicSID);
+ Map<Long, List<Client>> getClientsByPublicSID(String publicSID);
- public abstract Collection<Client> getClients();
+ Collection<Client> getClients();
/**
* get all clients by a specific {@link Server}
@@ -86,7 +84,7 @@ public interface IClientPersistenceStore
* @param server
* @return will return an empty map if nothing available
*/
- public abstract Collection<Client> getClientsByServer(Server server);
+ Collection<Client> getClientsByServer(Server server);
/**
*
@@ -94,7 +92,7 @@ public interface IClientPersistenceStore
* @param userId
* @return will return an empty list if nothing available
*/
- public abstract Collection<Client> getClientsByUserId(Server server,
Long userId);
+ Collection<Client> getClientsByUserId(Server server, Long userId);
/**
*
@@ -103,15 +101,15 @@ public interface IClientPersistenceStore
* @param roomId
* @return will return an empty map if nothing available
*/
- public abstract List<Client> getClientsByRoomId(Long roomId);
+ List<Client> getClientsByRoomId(Long roomId);
- public abstract void remove(Server server, String streamId);
+ void remove(Server server, String streamId);
- public abstract int size();
+ int size();
- public abstract int sizeByServer(Server server);
+ int sizeByServer(Server server);
- public abstract Collection<Client> values();
+ Collection<Client> values();
/**
* Get some session statistics
@@ -119,7 +117,7 @@ public interface IClientPersistenceStore
* @param detailLevel
* @return
*/
- public abstract String getDebugInformation(List<DEBUG_DETAILS>
detailLevel);
+ String getDebugInformation(List<DEBUG_DETAILS> detailLevel);
/**
* returns a list of roomIds (unique) that are currently active on the
given server
@@ -129,7 +127,7 @@ public interface IClientPersistenceStore
* @param server
* @return
*/
- public abstract List<Long> getRoomsIdsByServer(Server server);
+ List<Long> getRoomsIdsByServer(Server server);
/**
* if database cache + cluster is enabled, the server object will be
loaded
@@ -137,6 +135,5 @@ public interface IClientPersistenceStore
*
* @return
*/
- public abstract Collection<Client> getClientsWithServer();
-
-}
\ No newline at end of file
+ Collection<Client> getClientsWithServer();
+}
Modified:
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
(original)
+++
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
Thu Mar 31 13:27:59 2016
@@ -34,12 +34,13 @@ import org.apache.openmeetings.db.entity
*
*/
public interface ISessionManager {
+ void clearCache();
/**
* Notified on server start, when the session manager should be started
and
* eventually caches cleared/setup
*/
- public abstract void sessionStart();
+ void sessionStart();
/**
* add a new client item
@@ -52,18 +53,16 @@ public interface ISessionManager {
* @param server
* @return
*/
- public abstract Client addClientListItem(String streamId,
- String scopeName, Integer remotePort, String
remoteAddress,
- String swfUrl, Server server);
+ Client addClientListItem(String streamId, String scopeName, Integer
remotePort, String remoteAddress, String swfUrl, Server server);
- public abstract Collection<Client> getClients();
+ Collection<Client> getClients();
/**
* loads the server into the client (only if database cache is used)
*
* @return
*/
- public abstract Collection<Client> getClientsWithServer();
+ Collection<Client> getClientsWithServer();
/**
* Get a client by its streamId
@@ -72,8 +71,7 @@ public interface ISessionManager {
* @param server
* @return
*/
- public abstract Client getClientByStreamId(String streamId,
- Server server);
+ Client getClientByStreamId(String streamId, Server server);
/**
* get a client by its publicSID and the server,
@@ -82,7 +80,7 @@ public interface ISessionManager {
* @param server
* @return
*/
- public abstract Client getClientByPublicSID(String publicSID, Server
server);
+ Client getClientByPublicSID(String publicSID, Server server);
/**
* same as {@link #getClientByPublicSID(String, boolean, Server)} but
it ignores
@@ -95,7 +93,7 @@ public interface ISessionManager {
* @param publicSID
* @return
*/
- public ClientSessionInfo getClientByPublicSIDAnyServer(String
publicSID);
+ ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID);
/**
*
@@ -105,7 +103,7 @@ public interface ISessionManager {
* @deprecated There could be multiple users logged in with the same
userid,
* then this call would return a list not a single user
*/
- public abstract Client getClientByUserId(Long userId);
+ Client getClientByUserId(Long userId);
/**
* Update the session object of the audio/video-connection and
additionally
@@ -116,7 +114,7 @@ public interface ISessionManager {
* @param rcm
* @return
*/
- public abstract boolean updateAVClientByStreamId(String streamId,
Client rcm, Server server);
+ boolean updateAVClientByStreamId(String streamId, Client rcm, Server
server);
/**
* Update the session object
@@ -131,8 +129,7 @@ public interface ISessionManager {
* true means the count for the room has to be updated
* @return
*/
- public abstract boolean updateClientByStreamId(String streamId,
- Client rcm, boolean updateRoomCount, Server server);
+ boolean updateClientByStreamId(String streamId, Client rcm, boolean
updateRoomCount, Server server);
/**
* Remove a client from the session store
@@ -140,7 +137,7 @@ public interface ISessionManager {
* @param streamId
* @return
*/
- public abstract boolean removeClient(String streamId, Server server);
+ boolean removeClient(String streamId, Server server);
/**
* Get all ClientList Objects of that room and domain This Function is
@@ -150,9 +147,9 @@ public interface ISessionManager {
* @param roomId
* @return
*/
- public abstract List<Client> getClientListByRoom(Long roomId);
+ List<Client> getClientListByRoom(Long roomId);
- public abstract Collection<Client> getClientListByRoomAll(Long roomId);
+ Collection<Client> getClientListByRoomAll(Long roomId);
/**
* get the current Moderator in this room
@@ -160,7 +157,7 @@ public interface ISessionManager {
* @param roomname
* @return
*/
- public abstract List<Client> getCurrentModeratorByRoom(Long roomId);
+ List<Client> getCurrentModeratorByRoom(Long roomId);
/**
* Get list of current client sessions
@@ -171,8 +168,7 @@ public interface ISessionManager {
* @param asc
* @return
*/
- public abstract SearchResult<Client> getListByStartAndMax(int start,
- int max, String orderby, boolean asc);
+ SearchResult<Client> getListByStartAndMax(int start, int max, String
orderby, boolean asc);
/**
* returns number of current users recording
@@ -180,7 +176,7 @@ public interface ISessionManager {
* @param roomId
* @return
*/
- public abstract long getRecordingCount(long roomId);
+ long getRecordingCount(long roomId);
/**
* returns a number of current users publishing screensharing
@@ -188,7 +184,7 @@ public interface ISessionManager {
* @param roomId
* @return
*/
- public abstract long getPublishingCount(long roomId);
+ long getPublishingCount(long roomId);
/**
* Get a list of all servers of all rooms on that server, serverId =
null
@@ -197,13 +193,12 @@ public interface ISessionManager {
* @param server
* @return a set, a roomId can be only one time in this list
*/
- public abstract List<Long> getActiveRoomIdsByServer(Server server);
+ List<Long> getActiveRoomIdsByServer(Server server);
/**
* Get some statistics about the current sessions
*
* @return
*/
- public abstract String getSessionStatistics();
-
-}
\ No newline at end of file
+ String getSessionStatistics();
+}
Modified:
openmeetings/application/trunk/openmeetings-server/src/main/assembly/components/all.xml
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-server/src/main/assembly/components/all.xml?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-server/src/main/assembly/components/all.xml
(original)
+++
openmeetings/application/trunk/openmeetings-server/src/main/assembly/components/all.xml
Thu Mar 31 13:27:59 2016
@@ -99,7 +99,6 @@
<exclude>WEB-INF/lib/commons-codec*</exclude>
<exclude>WEB-INF/lib/commons-collections-*</exclude>
<exclude>WEB-INF/lib/commons-lang3*</exclude>
- <exclude>WEB-INF/lib/commons-pool-*</exclude>
</excludes>
</fileSet>
<fileSet>
Modified:
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
(original)
+++
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
Thu Mar 31 13:27:59 2016
@@ -152,7 +152,7 @@ public class ConnectionsPanel extends Ad
@Override
protected void populateItem(final
Item<org.apache.openmeetings.web.app.Client> item) {
org.apache.openmeetings.web.app.Client c =
item.getModelObject();
- item.add(new Label("id", c.getUserId()));
+ item.add(new Label("id", ""));
User u =
getBean(UserService.class).getUserById(getSid(), c.getUserId());
item.add(new Label("login", u == null ? null :
u.getLogin()));
item.add(new Label("since",
c.getConnectedSince()));
Modified:
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
(original)
+++
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
Thu Mar 31 13:27:59 2016
@@ -65,23 +65,22 @@
</property>
</bean>
- <!-- Singletons for memory based cache -->
+ <!-- Singleton for memory based cache -->
<bean id="openmeetings.HashMapStore" scope="singleton"
class="org.apache.openmeetings.core.session.store.HashMapStore" />
+ <!-- Database cache -->
+ <bean id="openmeetings.DatabaseStore"
class="org.apache.openmeetings.core.session.store.DatabaseStore" />
+
<bean id="whiteBoardObjectListManagerById" scope="singleton"
class="org.apache.openmeetings.core.data.whiteboard.WhiteBoardObjectListManagerById"
/>
<!-- WhiteBoardObjectSyncManager can stay in the memory, even on
cluster! -->
<bean id="whiteBoardObjectSyncManager" scope="singleton"
class="org.apache.openmeetings.core.data.whiteboard.WhiteBoardObjectSyncManager"
/>
- <!-- Database cache -->
- <bean id="openmeetings.DatabaseStore"
class="org.apache.openmeetings.core.session.store.DatabaseStore" />
-
+ <!-- Cluster related config start -->
<bean id="openmeetings.ServerUtil" scope="singleton"
class="org.apache.openmeetings.core.session.ServerUtil">
<!-- Need to be uncommented and set to the real ID if in
cluster mode
<property name="serverId" value="1" />
-->
</bean>
- <!-- Cluster related config start -->
-
<!-- Start of Services -->
<bean id="xmlcrm.service"
class="org.apache.openmeetings.core.remote.MainService" />
<bean id="printservice.service"
class="org.apache.openmeetings.core.remote.PrintService" />
Modified:
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java?rev=1737236&r1=1737235&r2=1737236&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
(original)
+++
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
Thu Mar 31 13:27:59 2016
@@ -48,7 +48,7 @@ public class TestHashMapSession extends
public void testHashMapSession() {
//make sure the cache is empty before starting the test
- cache.clearCache();
+ cache.clear();
for (int i=0;i<20;i++) {