From a8d5e677de8b8baf81c6be26e9f1a522b07e5598 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 19 May 2012 11:02:50 +0200 Subject: [PATCH] do not read stored objects on every get method call --- .../scm/store/AbstractListenableStore.java | 58 ++++++++++++++++++- .../scm/store/orientdb/OrientDBStore.java | 9 +-- .../main/java/sonia/scm/store/JAXBStore.java | 31 +++++----- 3 files changed, 75 insertions(+), 23 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/store/AbstractListenableStore.java b/scm-core/src/main/java/sonia/scm/store/AbstractListenableStore.java index 0c30f52322..c31ec49e08 100644 --- a/scm-core/src/main/java/sonia/scm/store/AbstractListenableStore.java +++ b/scm-core/src/main/java/sonia/scm/store/AbstractListenableStore.java @@ -52,6 +52,22 @@ import java.util.Set; public abstract class AbstractListenableStore implements ListenableStore { + /** + * Method description + * + * + * @return + */ + protected abstract T readObject(); + + /** + * Method description + * + * + * @param object + */ + protected abstract void writeObject(T object); + /** * Method description * @@ -88,6 +104,43 @@ public abstract class AbstractListenableStore implements ListenableStore listeners.remove(listener); } + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public T get() + { + if (storeObject == null) + { + storeObject = readObject(); + } + + return storeObject; + } + + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param obejct + */ + @Override + public void set(T obejct) + { + writeObject(obejct); + this.storeObject = obejct; + fireEvent(obejct); + } + + //~--- methods -------------------------------------------------------------- + /** * Method description * @@ -105,5 +158,8 @@ public abstract class AbstractListenableStore implements ListenableStore //~--- fields --------------------------------------------------------------- /** Field description */ - private Set> listeners = Sets.newHashSet(); + protected Set> listeners = Sets.newHashSet(); + + /** Field description */ + protected T storeObject; } diff --git a/scm-dao-orientdb/src/main/java/sonia/scm/store/orientdb/OrientDBStore.java b/scm-dao-orientdb/src/main/java/sonia/scm/store/orientdb/OrientDBStore.java index 0f81bad809..ff2d791114 100644 --- a/scm-dao-orientdb/src/main/java/sonia/scm/store/orientdb/OrientDBStore.java +++ b/scm-dao-orientdb/src/main/java/sonia/scm/store/orientdb/OrientDBStore.java @@ -45,7 +45,6 @@ import org.slf4j.LoggerFactory; import sonia.scm.orientdb.OrientDBUtil; import sonia.scm.store.AbstractListenableStore; -import sonia.scm.store.Store; import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -110,7 +109,7 @@ public class OrientDBStore extends AbstractListenableStore this.name = name; } - //~--- get methods ---------------------------------------------------------- + //~--- methods -------------------------------------------------------------- /** * Method description @@ -119,7 +118,7 @@ public class OrientDBStore extends AbstractListenableStore * @return */ @Override - public T get() + protected T readObject() { T result = null; ODatabaseDocumentTx connection = connectionProvider.get(); @@ -152,8 +151,6 @@ public class OrientDBStore extends AbstractListenableStore return result; } - //~--- set methods ---------------------------------------------------------- - /** * Method description * @@ -161,7 +158,7 @@ public class OrientDBStore extends AbstractListenableStore * @param t */ @Override - public void set(T t) + protected void writeObject(T t) { ODatabaseDocumentTx connection = connectionProvider.get(); diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBStore.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBStore.java index 81982e05fc..d314ea03b6 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBStore.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBStore.java @@ -84,6 +84,19 @@ public class JAXBStore extends AbstractListenableStore //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @return + */ + public Class getType() + { + return type; + } + + //~--- methods -------------------------------------------------------------- + /** * Method description * @@ -91,7 +104,7 @@ public class JAXBStore extends AbstractListenableStore * @return */ @Override - public T get() + protected T readObject() { if (logger.isDebugEnabled()) { @@ -115,19 +128,6 @@ public class JAXBStore extends AbstractListenableStore return result; } - /** - * Method description - * - * - * @return - */ - public Class getType() - { - return type; - } - - //~--- set methods ---------------------------------------------------------- - /** * Method description * @@ -135,7 +135,7 @@ public class JAXBStore extends AbstractListenableStore * @param object */ @Override - public void set(T object) + protected void writeObject(T object) { if (logger.isDebugEnabled()) { @@ -149,7 +149,6 @@ public class JAXBStore extends AbstractListenableStore marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal(object, configFile); - fireEvent(object); } catch (JAXBException ex)