[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
This commit is contained in:
Robert von Burg 2014-01-11 17:55:56 +01:00
parent 6bb341964e
commit 21c5eaf78f
3 changed files with 26 additions and 13 deletions

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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());