From b6e5410d713cdbe33f26336ed4242beb793720cc Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 5 Dec 2010 18:02:35 +0100 Subject: [PATCH] improve performance --- .../repository/xml/XmlRepositoryManager.java | 47 +++++++++++++++++-- .../sonia/scm/user/xml/XmlUserManager.java | 43 +++++++++++++++-- 2 files changed, 82 insertions(+), 8 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java index 269964e7cf..fd450c7cc6 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/xml/XmlRepositoryManager.java @@ -46,6 +46,7 @@ import sonia.scm.ConfigurationException; import sonia.scm.HandlerEvent; import sonia.scm.SCMContext; import sonia.scm.SCMContextProvider; +import sonia.scm.StoreException; import sonia.scm.Type; import sonia.scm.repository.AbstractRepositoryManager; import sonia.scm.repository.PermissionType; @@ -73,7 +74,10 @@ import java.util.Map; import java.util.Set; import java.util.UUID; -import javax.xml.bind.JAXB; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; /** * @@ -114,6 +118,19 @@ public class XmlRepositoryManager extends AbstractRepositoryManager { addHandler(handler); } + + try + { + JAXBContext context = + JAXBContext.newInstance(XmlRepositoryDatabase.class); + + marshaller = context.createMarshaller(); + unmarshaller = context.createUnmarshaller(); + } + catch (JAXBException ex) + { + throw new StoreException(ex); + } } //~--- methods -------------------------------------------------------------- @@ -497,8 +514,15 @@ public class XmlRepositoryManager extends AbstractRepositoryManager */ private void loadDB() { - repositoryDB = JAXB.unmarshal(repositoryDBFile, - XmlRepositoryDatabase.class); + try + { + repositoryDB = + (XmlRepositoryDatabase) unmarshaller.unmarshal(repositoryDBFile); + } + catch (JAXBException ex) + { + throw new StoreException(ex); + } } /** @@ -507,8 +531,15 @@ public class XmlRepositoryManager extends AbstractRepositoryManager */ private void storeDB() { - repositoryDB.setLastModified(System.currentTimeMillis()); - JAXB.marshal(repositoryDB, repositoryDBFile); + try + { + repositoryDB.setLastModified(System.currentTimeMillis()); + marshaller.marshal(repositoryDB, repositoryDBFile); + } + catch (JAXBException ex) + { + throw new StoreException(ex); + } } //~--- get methods ---------------------------------------------------------- @@ -581,6 +612,9 @@ public class XmlRepositoryManager extends AbstractRepositoryManager /** Field description */ private Map handlerMap; + /** Field description */ + private Marshaller marshaller; + /** Field description */ private XmlRepositoryDatabase repositoryDB; @@ -592,4 +626,7 @@ public class XmlRepositoryManager extends AbstractRepositoryManager /** Field description */ private Set types; + + /** Field description */ + private Unmarshaller unmarshaller; } diff --git a/scm-webapp/src/main/java/sonia/scm/user/xml/XmlUserManager.java b/scm-webapp/src/main/java/sonia/scm/user/xml/XmlUserManager.java index 9539d377ab..bdc488471b 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/xml/XmlUserManager.java +++ b/scm-webapp/src/main/java/sonia/scm/user/xml/XmlUserManager.java @@ -43,6 +43,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; +import sonia.scm.StoreException; import sonia.scm.security.ScmSecurityException; import sonia.scm.security.SecurityContext; import sonia.scm.user.AbstractUserManager; @@ -63,6 +64,10 @@ import java.util.Collection; import java.util.LinkedList; import javax.xml.bind.JAXB; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; /** * @@ -98,6 +103,18 @@ public class XmlUserManager extends AbstractUserManager public XmlUserManager(Provider scurityContextProvider) { this.scurityContextProvider = scurityContextProvider; + + try + { + JAXBContext context = JAXBContext.newInstance(XmlUserDatabase.class); + + marshaller = context.createMarshaller(); + unmarshaller = context.createUnmarshaller(); + } + catch (JAXBException ex) + { + throw new StoreException(ex); + } } //~--- methods -------------------------------------------------------------- @@ -384,7 +401,14 @@ public class XmlUserManager extends AbstractUserManager */ private void loadDB() { - userDB = JAXB.unmarshal(userDBFile, XmlUserDatabase.class); + try + { + userDB = (XmlUserDatabase) unmarshaller.unmarshal(userDBFile); + } + catch (JAXBException ex) + { + throw new StoreException(ex); + } } /** @@ -393,15 +417,28 @@ public class XmlUserManager extends AbstractUserManager */ private void storeDB() { - userDB.setLastModified(System.currentTimeMillis()); - JAXB.marshal(userDB, userDBFile); + try + { + userDB.setLastModified(System.currentTimeMillis()); + marshaller.marshal(userDB, userDBFile); + } + catch (JAXBException ex) + { + throw new StoreException(ex); + } } //~--- fields --------------------------------------------------------------- + /** Field description */ + private Marshaller marshaller; + /** Field description */ private Provider scurityContextProvider; + /** Field description */ + private Unmarshaller unmarshaller; + /** Field description */ private XmlUserDatabase userDB;