Author: sebawagner Date: Sun Jan 27 02:57:39 2013 New Revision: 1439014 URL: http://svn.apache.org/viewvc?rev=1439014&view=rev Log: OPENMEETINGS-460 Refactor memory session cache: Make a spring injected singleton instead a static instance
Modified: incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Client.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/SessionManager.java incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/store/DatabaseStore.java Modified: incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml?rev=1439014&r1=1439013&r2=1439014&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml (original) +++ incubator/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml Sun Jan 27 02:57:39 2013 @@ -51,17 +51,29 @@ <!-- New Class for the Streaming Handlers --> <bean id="web.handler" class="org.apache.openmeetings.remote.red5.ScopeApplicationAdapter" /> - - <!-- In memory / session stores --> + + <!-- Session configuration start --> <bean id="openmeetings.SessionManager" - class="org.apache.openmeetings.session.SessionManager" /> + class="org.apache.openmeetings.session.SessionManager"> + <property name="cache"> + <ref bean="openmeetings.HashMapStore"/> <!-- Memory based session cache by default --> + </property> + </bean> <bean id="openmeetings.EmoticonsManager" class="org.apache.openmeetings.remote.red5.EmoticonsManager" /> <bean id="openmeetings.WhiteBoardObjectListManager" class="org.apache.openmeetings.remote.red5.WhiteBoardObjectListManager" /> <bean id="openmeetings.WhiteBoardObjectListManagerById" class="org.apache.openmeetings.remote.red5.WhiteBoardObjectListManagerById" /> + + <bean id="openmeetings.DatabaseStore" + class="org.apache.openmeetings.session.store.DatabaseStore" /> + + <bean id="openmeetings.HashMapStore" scope="singleton" + class="org.apache.openmeetings.session.store.HashMapStore" /> + + <!-- Cluster related config start --> <!-- Start of Services --> <bean id="xmlcrm.service" class="org.apache.openmeetings.remote.MainService" /> @@ -239,6 +251,8 @@ <bean id="usersDao" class="org.apache.openmeetings.data.user.dao.UsersDao" /> <bean id="serverDao" class="org.apache.openmeetings.data.basic.dao.ServerDao" /> <bean id="chatDao" class="org.apache.openmeetings.data.chat.ChatDao" /> + <bean id="clientDao" class="org.apache.openmeetings.data.conference.dao.ClientDao" /> + <!-- No Interface --> <bean id="manageCryptStyle" class="org.apache.openmeetings.utils.crypt.ManageCryptStyle" /> Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Client.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Client.java?rev=1439014&r1=1439013&r2=1439014&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Client.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/rooms/Client.java Sun Jan 27 02:57:39 2013 @@ -23,11 +23,15 @@ import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.Table; +import org.apache.openmeetings.persistence.beans.basic.Server; import org.apache.openmeetings.utils.math.CalendarPatterns; /** @@ -367,6 +371,10 @@ public class Client implements Serializa */ @Column(name = "sip_transport") private boolean sipTransport = false; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "id") + private Server server; public Client() { @@ -833,6 +841,14 @@ public class Client implements Serializa this.sipTransport = sipTransport; } + public Server getServer() { + return server; + } + + public void setServer(Server server) { + this.server = server; + } + @Override public String toString() { return super.toString() // Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/SessionManager.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/SessionManager.java?rev=1439014&r1=1439013&r2=1439014&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/SessionManager.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/SessionManager.java Sun Jan 27 02:57:39 2013 @@ -36,7 +36,6 @@ import org.apache.openmeetings.Openmeeti import org.apache.openmeetings.data.beans.basic.SearchResult; import org.apache.openmeetings.persistence.beans.basic.Server; import org.apache.openmeetings.persistence.beans.rooms.Client; -import org.apache.openmeetings.session.store.HashMapStore; import org.apache.openmeetings.session.store.IClientPersistenceStore; import org.apache.openmeetings.utils.crypt.ManageCryptStyle; import org.red5.logging.Red5LoggerFactory; @@ -54,8 +53,21 @@ public class SessionManager implements I protected static final Logger log = Red5LoggerFactory.getLogger( SessionManager.class, OpenmeetingsVariables.webAppRootKey); - protected static IClientPersistenceStore cache = new HashMapStore(); + /** + * Injected via Spring + */ + private IClientPersistenceStore cache; + //Needs getters and setters as here it is no "Autowired" bean, as you can configure different caches + public IClientPersistenceStore getCache() { + return cache; + } + + public void setCache(IClientPersistenceStore cache) { + this.cache = cache; + } + + private static Set<Long> EMPTY_HASH_SET = new HashSet<Long>(); @Autowired Modified: incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/store/DatabaseStore.java URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/store/DatabaseStore.java?rev=1439014&r1=1439013&r2=1439014&view=diff ============================================================================== --- incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/store/DatabaseStore.java (original) +++ incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/session/store/DatabaseStore.java Sun Jan 27 02:57:39 2013 @@ -22,10 +22,15 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.apache.openmeetings.data.conference.dao.ClientDao; import org.apache.openmeetings.persistence.beans.basic.Server; import org.apache.openmeetings.persistence.beans.rooms.Client; +import org.springframework.beans.factory.annotation.Autowired; public class DatabaseStore implements IClientPersistenceStore { + + @Autowired + private ClientDao clientDao; public void put(Server server, String streamId, Client rcl) { // TODO Auto-generated method stub