From e11625998acb4c8ec1949961fcef39d4517a07d9 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Mon, 24 Feb 2014 21:49:02 +0100 Subject: [PATCH] [New] Implemented locking for Strolch elements Also cleaned up hierarchy of StrolchTransaction by moving up everything into AbstractTransaction as made sense and added special delegation methods for the actual commit() and rollback() ind the concrete implementations. --- .../xml/XmlPersistenceHandler.java | 2 +- .../xml/XmlStrolchTransaction.java | 79 +++---------------- .../impl/dao/test/ObserverUpdateTest.java | 10 +-- 3 files changed, 17 insertions(+), 74 deletions(-) diff --git a/src/main/java/li/strolch/persistence/xml/XmlPersistenceHandler.java b/src/main/java/li/strolch/persistence/xml/XmlPersistenceHandler.java index 74c577a7d..3b5ad0461 100644 --- a/src/main/java/li/strolch/persistence/xml/XmlPersistenceHandler.java +++ b/src/main/java/li/strolch/persistence/xml/XmlPersistenceHandler.java @@ -20,7 +20,7 @@ import java.util.Properties; import li.strolch.agent.api.ComponentContainer; import li.strolch.agent.api.StrolchComponent; -import li.strolch.agent.impl.StrolchRealm; +import li.strolch.agent.api.StrolchRealm; import li.strolch.model.Order; import li.strolch.model.Resource; import li.strolch.model.Tags; diff --git a/src/main/java/li/strolch/persistence/xml/XmlStrolchTransaction.java b/src/main/java/li/strolch/persistence/xml/XmlStrolchTransaction.java index 5c54fca03..4a8428052 100644 --- a/src/main/java/li/strolch/persistence/xml/XmlStrolchTransaction.java +++ b/src/main/java/li/strolch/persistence/xml/XmlStrolchTransaction.java @@ -17,13 +17,9 @@ package li.strolch.persistence.xml; import java.util.Set; -import li.strolch.agent.impl.StrolchRealm; -import li.strolch.model.StrolchElement; +import li.strolch.agent.api.StrolchRealm; import li.strolch.persistence.api.AbstractTransaction; import li.strolch.persistence.api.PersistenceHandler; -import li.strolch.persistence.api.StrolchPersistenceException; -import li.strolch.persistence.api.TransactionCloseStrategy; -import li.strolch.runtime.observer.ObserverHandler; import ch.eitchnet.xmlpers.api.ModificationResult; import ch.eitchnet.xmlpers.api.PersistenceTransaction; import ch.eitchnet.xmlpers.api.TransactionResult; @@ -31,40 +27,12 @@ import ch.eitchnet.xmlpers.api.TransactionResult; public class XmlStrolchTransaction extends AbstractTransaction { private XmlPersistenceHandler persistenceHandler; - private ObserverHandler observerHandler; - private boolean suppressUpdates; private PersistenceTransaction tx; - private TransactionCloseStrategy closeStrategy; public XmlStrolchTransaction(StrolchRealm realm, PersistenceTransaction tx, XmlPersistenceHandler persistenceHandler) { super(realm); this.persistenceHandler = persistenceHandler; - this.suppressUpdates = false; this.tx = tx; - this.closeStrategy = TransactionCloseStrategy.COMMIT; - } - - /** - * @param observerHandler - * the observerHandler to set - */ - public void setObserverHandler(ObserverHandler observerHandler) { - this.observerHandler = observerHandler; - } - - /** - * @param suppressUpdates - * the suppressUpdates to set - */ - public void setSuppressUpdates(boolean suppressUpdates) { - this.suppressUpdates = suppressUpdates; - } - - /** - * @return the suppressUpdates - */ - public boolean isSuppressUpdates() { - return this.suppressUpdates; } PersistenceTransaction getTx() { @@ -72,49 +40,24 @@ public class XmlStrolchTransaction extends AbstractTransaction { } @Override - public void setCloseStrategy(TransactionCloseStrategy closeStrategy) { - this.closeStrategy = closeStrategy; - } - - @Override - public void autoCloseableCommit() { - - TransactionResult txResult = new TransactionResult(); - if (!this.suppressUpdates && this.observerHandler != null) { - this.tx.setTransactionResult(txResult); - } - + protected void commit(li.strolch.persistence.api.TransactionResult txResult) throws Exception { + TransactionResult result = new TransactionResult(); + this.tx.setTransactionResult(result); this.tx.autoCloseableCommit(); - logger.info(txResult.getLogMessage()); - - if (!this.suppressUpdates && this.observerHandler != null) { - - Set keys = txResult.getKeys(); - for (String key : keys) { - ModificationResult modificationResult = txResult.getModificationResult(key); - - this.observerHandler.add(key, modificationResult. getCreated()); - this.observerHandler.update(key, modificationResult. getUpdated()); - this.observerHandler.remove(key, modificationResult. getDeleted()); - } + Set keys = result.getKeys(); + for (String key : keys) { + ModificationResult modificationResult = result.getModificationResult(key); + li.strolch.persistence.api.ModificationResult mr = new li.strolch.persistence.api.ModificationResult(key, + modificationResult.getCreated(), modificationResult.getUpdated(), modificationResult.getDeleted()); + txResult.addModificationResult(mr); } } @Override - public void autoCloseableRollback() { + protected void rollback(li.strolch.persistence.api.TransactionResult txResult) throws Exception { this.tx.autoCloseableRollback(); } - @Override - public void close() throws StrolchPersistenceException { - this.closeStrategy.close(this); - } - - @Override - public boolean isOpen() { - return this.tx.isOpen(); - } - @Override public PersistenceHandler getPersistenceHandler() { return this.persistenceHandler; diff --git a/src/test/java/li/strolch/persistence/impl/dao/test/ObserverUpdateTest.java b/src/test/java/li/strolch/persistence/impl/dao/test/ObserverUpdateTest.java index 57513955d..1a155ec55 100644 --- a/src/test/java/li/strolch/persistence/impl/dao/test/ObserverUpdateTest.java +++ b/src/test/java/li/strolch/persistence/impl/dao/test/ObserverUpdateTest.java @@ -29,6 +29,7 @@ import li.strolch.model.Order; import li.strolch.model.Resource; import li.strolch.model.State; import li.strolch.model.StrolchElement; +import li.strolch.model.Tags; import li.strolch.persistence.api.StrolchTransaction; import li.strolch.runtime.StrolchConstants; import li.strolch.runtime.observer.Observer; @@ -106,8 +107,8 @@ public class ObserverUpdateTest { // register an observer for orders and resources ElementAddedObserver observer = new ElementAddedObserver(); - runtimeMock.getContainer().getComponent(ObserverHandler.class).registerObserver("Order", observer); //$NON-NLS-1$ - runtimeMock.getContainer().getComponent(ObserverHandler.class).registerObserver("Resource", observer); //$NON-NLS-1$ + runtimeMock.getContainer().getComponent(ObserverHandler.class).registerObserver(Tags.ORDER, observer); //$NON-NLS-1$ + runtimeMock.getContainer().getComponent(ObserverHandler.class).registerObserver(Tags.RESOURCE, observer); //$NON-NLS-1$ // create order Order newOrder = createOrder("MyTestOrder", "Test Name", "TestType", new Date(), State.CREATED); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ @@ -122,8 +123,7 @@ public class ObserverUpdateTest { } assertEquals(2, observer.results.size()); - assertEquals(1, observer.results.get("Order").getCreated().size()); //$NON-NLS-1$ - assertEquals(1, observer.results.get("Resource").getCreated().size()); //$NON-NLS-1$ - + assertEquals(1, observer.results.get(Tags.ORDER).getCreated().size()); //$NON-NLS-1$ + assertEquals(1, observer.results.get(Tags.RESOURCE).getCreated().size()); //$NON-NLS-1$ } }