From 21c5eaf78f2a612ba208248977aa8902fe725aa0 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Sat, 11 Jan 2014 17:55:56 +0100 Subject: [PATCH] [Major] Implemented CACHED mode This lead to refactoring of other code: - removed get*Dao() from StrolchTransaction - added StrolchTransaction.getPersistenceHandler() - removed unused variables in TransactionalElementMap - this lead to removal of constructors in subclasses - added ComponentContainer.getDataStoreMode() - added ElementMap.addAll(), removeAll() and updateAll() methods - implemented in all ElementMap implementations --- .../PostgreSqlPersistenceHandler.java | 12 ++++++++++ .../PostgreSqlStrolchTransaction.java | 23 ++++++++++--------- .../dao/test/ObserverUpdateTest.java | 4 ++-- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlPersistenceHandler.java b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlPersistenceHandler.java index 82ef9ff2d..081127842 100644 --- a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlPersistenceHandler.java +++ b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlPersistenceHandler.java @@ -27,7 +27,9 @@ import li.strolch.agent.api.StrolchComponent; import li.strolch.agent.impl.ComponentContainerImpl; import li.strolch.agent.impl.StrolchRealm; import li.strolch.persistence.api.DbConnectionInfo; +import li.strolch.persistence.api.OrderDao; import li.strolch.persistence.api.PersistenceHandler; +import li.strolch.persistence.api.ResourceDao; import li.strolch.persistence.api.StrolchPersistenceException; import li.strolch.persistence.api.StrolchTransaction; import li.strolch.runtime.StrolchConstants; @@ -127,4 +129,14 @@ public class PostgreSqlPersistenceHandler extends StrolchComponent implements Pe throw new StrolchPersistenceException(msg, e); } } + + @Override + public OrderDao getOrderDao(StrolchTransaction tx) { + return ((PostgreSqlStrolchTransaction) tx).getOrderDao(); + } + + @Override + public ResourceDao getResourceDao(StrolchTransaction tx) { + return ((PostgreSqlStrolchTransaction) tx).getResourceDao(); + } } diff --git a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlStrolchTransaction.java b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlStrolchTransaction.java index 2ad5f7104..63397562d 100644 --- a/src/main/java/li/strolch/persistence/postgresql/PostgreSqlStrolchTransaction.java +++ b/src/main/java/li/strolch/persistence/postgresql/PostgreSqlStrolchTransaction.java @@ -25,6 +25,7 @@ import li.strolch.model.StrolchElement; import li.strolch.persistence.api.AbstractTransaction; import li.strolch.persistence.api.ModificationResult; import li.strolch.persistence.api.OrderDao; +import li.strolch.persistence.api.PersistenceHandler; import li.strolch.persistence.api.ResourceDao; import li.strolch.persistence.api.StrolchPersistenceException; import li.strolch.persistence.api.TransactionCloseStrategy; @@ -102,15 +103,12 @@ public class PostgreSqlStrolchTransaction extends AbstractTransaction { this.txResult = new TransactionResult(); try { - if (this.orderDao != null) { + if (this.orderDao != null) this.orderDao.commit(this.txResult); - } - - if (this.resourceDao != null) { + if (this.resourceDao != null) this.resourceDao.commit(this.txResult); - } - - this.connection.commit(); + if (this.connection != null) + this.connection.commit(); this.txResult.setState(TransactionState.COMMITTED); @@ -214,15 +212,13 @@ public class PostgreSqlStrolchTransaction extends AbstractTransaction { return this.open; } - @Override - public OrderDao getOrderDao() { + OrderDao getOrderDao() { if (this.orderDao == null) this.orderDao = new PostgreSqlOrderDao(this); return (OrderDao) this.orderDao; } - @Override - public ResourceDao getResourceDao() { + ResourceDao getResourceDao() { if (this.resourceDao == null) this.resourceDao = new PostgreSqlResourceDao(this); return (ResourceDao) this.resourceDao; @@ -237,4 +233,9 @@ public class PostgreSqlStrolchTransaction extends AbstractTransaction { } return this.connection; } + + @Override + public PersistenceHandler getPersistenceHandler() { + return this.persistenceHandler; + } } diff --git a/src/test/java/li/strolch/persistence/postgresql/dao/test/ObserverUpdateTest.java b/src/test/java/li/strolch/persistence/postgresql/dao/test/ObserverUpdateTest.java index 6b8c6b665..a60191878 100644 --- a/src/test/java/li/strolch/persistence/postgresql/dao/test/ObserverUpdateTest.java +++ b/src/test/java/li/strolch/persistence/postgresql/dao/test/ObserverUpdateTest.java @@ -114,13 +114,13 @@ public class ObserverUpdateTest { // create order Order newOrder = createOrder("MyTestOrder", "Test Name", "TestType", new Date(), State.CREATED); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ try (StrolchTransaction tx = runtimeMock.getDefaultRealm().openTx();) { - tx.getOrderDao().save(newOrder); + tx.getOrderMap().add(tx, newOrder); } // create resource Resource newResource = createResource("MyTestResource", "Test Name", "TestType"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ try (StrolchTransaction tx = runtimeMock.getDefaultRealm().openTx();) { - tx.getResourceDao().save(newResource); + tx.getResourceMap().add(tx, newResource); } assertEquals(2, observer.results.size());