From ffc18e06d7dc50a6d57fdd767479dcfc6906477d Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Fri, 10 Jan 2014 19:10:29 +0100 Subject: [PATCH] [Major] refactored how transactions are opened Now the ElementMapHandler is the central object and clients do not use access DAOs or the PersistenceHandler anymore. This is now transparent. --- .../persistence/api/AbstractTransaction.java | 57 +++++++++++++++++++ .../persistence/api/PersistenceHandler.java | 6 +- .../persistence/api/StrolchTransaction.java | 7 +++ .../inmemory/InMemoryPersistenceHandler.java | 9 +-- .../inmemory/InMemoryTransaction.java | 19 +++---- .../runtime/agent/api/ComponentContainer.java | 11 ++-- .../strolch/runtime/agent/api/ElementMap.java | 4 -- .../runtime/agent/api/ElementMapHandler.java | 10 ++-- .../runtime/agent/api/StrolchAgent.java | 2 +- .../agent/impl/AbstractElementMapHandler.java | 24 +------- .../agent/impl/CachedElementMapHandler.java | 9 +-- .../agent/impl/ComponentContainerImpl.java | 32 +++++------ .../agent/impl/InMemoryElementListener.java | 6 +- .../agent/impl/InMemoryElementMapHandler.java | 2 +- .../runtime/agent/impl/StrolchRealm.java | 10 +++- .../agent/impl/TransactionalElementMap.java | 10 ---- .../impl/TransactionalElementMapHandler.java | 10 ++-- .../impl/TransientElementMapHandler.java | 8 +-- .../strolch/service/api/AbstractService.java | 57 ++++++++++++++----- .../java/li/strolch/service/api/Command.java | 27 ++++----- .../service/api/DefaultServiceHandler.java | 18 ++---- .../component/ComponentContainerTest.java | 4 +- .../component/ControllerDependencyTest.java | 4 +- .../test/query/inmemory/QueryTest.java | 21 +++---- 24 files changed, 202 insertions(+), 165 deletions(-) create mode 100644 src/main/java/li/strolch/persistence/api/AbstractTransaction.java diff --git a/src/main/java/li/strolch/persistence/api/AbstractTransaction.java b/src/main/java/li/strolch/persistence/api/AbstractTransaction.java new file mode 100644 index 000000000..ab465ac86 --- /dev/null +++ b/src/main/java/li/strolch/persistence/api/AbstractTransaction.java @@ -0,0 +1,57 @@ +/* + * Copyright 2013 Robert von Burg + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package li.strolch.persistence.api; + +import li.strolch.persistence.inmemory.InMemoryTransaction; +import li.strolch.runtime.agent.api.OrderMap; +import li.strolch.runtime.agent.api.ResourceMap; +import li.strolch.runtime.agent.impl.StrolchRealm; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Robert von Burg + */ +public abstract class AbstractTransaction implements StrolchTransaction { + + protected static final Logger logger = LoggerFactory.getLogger(InMemoryTransaction.class); + private StrolchRealm realm; + + /** + * @param realm + */ + public AbstractTransaction(StrolchRealm realm) { + this.realm = realm; + } + + /** + * @return the realm + */ + protected StrolchRealm getRealm() { + return this.realm; + } + + @Override + public ResourceMap getResourceMap() { + return this.realm.getResourceMap(); + } + + @Override + public OrderMap getOrderMap() { + return this.realm.getOrderMap(); + } +} diff --git a/src/main/java/li/strolch/persistence/api/PersistenceHandler.java b/src/main/java/li/strolch/persistence/api/PersistenceHandler.java index 7656400d7..60b475401 100644 --- a/src/main/java/li/strolch/persistence/api/PersistenceHandler.java +++ b/src/main/java/li/strolch/persistence/api/PersistenceHandler.java @@ -15,12 +15,12 @@ */ package li.strolch.persistence.api; +import li.strolch.runtime.agent.impl.StrolchRealm; + /** * @author Robert von Burg */ public interface PersistenceHandler { - public StrolchTransaction openTx(); - - public StrolchTransaction openTx(String realm); + public StrolchTransaction openTx(StrolchRealm realm); } diff --git a/src/main/java/li/strolch/persistence/api/StrolchTransaction.java b/src/main/java/li/strolch/persistence/api/StrolchTransaction.java index b8b4ec873..3688bd9df 100644 --- a/src/main/java/li/strolch/persistence/api/StrolchTransaction.java +++ b/src/main/java/li/strolch/persistence/api/StrolchTransaction.java @@ -15,6 +15,9 @@ */ package li.strolch.persistence.api; +import li.strolch.runtime.agent.api.OrderMap; +import li.strolch.runtime.agent.api.ResourceMap; + public interface StrolchTransaction extends AutoCloseable { public void setCloseStrategy(TransactionCloseStrategy closeStrategy); @@ -28,6 +31,10 @@ public interface StrolchTransaction extends AutoCloseable { public boolean isOpen(); + public ResourceMap getResourceMap(); + + public OrderMap getOrderMap(); + public OrderDao getOrderDao(); public ResourceDao getResourceDao(); diff --git a/src/main/java/li/strolch/persistence/inmemory/InMemoryPersistenceHandler.java b/src/main/java/li/strolch/persistence/inmemory/InMemoryPersistenceHandler.java index 07ae207e5..9f3cda663 100644 --- a/src/main/java/li/strolch/persistence/inmemory/InMemoryPersistenceHandler.java +++ b/src/main/java/li/strolch/persistence/inmemory/InMemoryPersistenceHandler.java @@ -4,9 +4,9 @@ import li.strolch.persistence.api.OrderDao; import li.strolch.persistence.api.PersistenceHandler; import li.strolch.persistence.api.ResourceDao; import li.strolch.persistence.api.StrolchTransaction; -import li.strolch.runtime.StrolchConstants; import li.strolch.runtime.agent.api.StrolchComponent; import li.strolch.runtime.agent.impl.ComponentContainerImpl; +import li.strolch.runtime.agent.impl.StrolchRealm; public class InMemoryPersistenceHandler extends StrolchComponent implements PersistenceHandler { @@ -18,12 +18,7 @@ public class InMemoryPersistenceHandler extends StrolchComponent implements Pers } @Override - public StrolchTransaction openTx() { - return openTx(StrolchConstants.DEFAULT_REALM); - } - - @Override - public StrolchTransaction openTx(String realm) { + public StrolchTransaction openTx(StrolchRealm realm) { return new InMemoryTransaction(realm, this); } diff --git a/src/main/java/li/strolch/persistence/inmemory/InMemoryTransaction.java b/src/main/java/li/strolch/persistence/inmemory/InMemoryTransaction.java index 9336e122a..20ecdabb5 100644 --- a/src/main/java/li/strolch/persistence/inmemory/InMemoryTransaction.java +++ b/src/main/java/li/strolch/persistence/inmemory/InMemoryTransaction.java @@ -4,25 +4,20 @@ import java.util.Date; import java.util.Set; 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.ResourceDao; import li.strolch.persistence.api.StrolchPersistenceException; -import li.strolch.persistence.api.StrolchTransaction; import li.strolch.persistence.api.TransactionCloseStrategy; import li.strolch.persistence.api.TransactionResult; import li.strolch.persistence.api.TransactionState; +import li.strolch.runtime.agent.impl.StrolchRealm; import li.strolch.runtime.observer.ObserverHandler; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import ch.eitchnet.utils.helper.StringHelper; -public class InMemoryTransaction implements StrolchTransaction { +public class InMemoryTransaction extends AbstractTransaction { - private static final Logger logger = LoggerFactory.getLogger(InMemoryTransaction.class); - private String realm; private InMemoryPersistenceHandler persistenceHandler; private TransactionCloseStrategy closeStrategy; @@ -34,11 +29,11 @@ public class InMemoryTransaction implements StrolchTransaction { private TransactionResult txResult; private boolean open; - public InMemoryTransaction(String realm, InMemoryPersistenceHandler persistenceHandler) { + public InMemoryTransaction(StrolchRealm realm, InMemoryPersistenceHandler persistenceHandler) { + super(realm); this.persistenceHandler = persistenceHandler; this.startTime = System.nanoTime(); this.startTimeDate = new Date(); - this.realm = realm; this.suppressUpdates = false; this.closeStrategy = TransactionCloseStrategy.COMMIT; } @@ -109,7 +104,7 @@ public class InMemoryTransaction implements StrolchTransaction { this.txResult.setStartTime(this.startTimeDate); this.txResult.setTxDuration(txDuration); this.txResult.setCloseDuration(closeDuration); - this.txResult.setRealm(this.realm); + this.txResult.setRealm(getRealm().getRealm()); StringBuilder sb = new StringBuilder(); sb.append("TX was completed after "); //$NON-NLS-1$ @@ -144,7 +139,7 @@ public class InMemoryTransaction implements StrolchTransaction { this.txResult.setStartTime(this.startTimeDate); this.txResult.setTxDuration(txDuration); this.txResult.setCloseDuration(closeDuration); - this.txResult.setRealm(this.realm); + this.txResult.setRealm(getRealm().getRealm()); } @Override diff --git a/src/main/java/li/strolch/runtime/agent/api/ComponentContainer.java b/src/main/java/li/strolch/runtime/agent/api/ComponentContainer.java index 824fa2036..dfa3917a3 100644 --- a/src/main/java/li/strolch/runtime/agent/api/ComponentContainer.java +++ b/src/main/java/li/strolch/runtime/agent/api/ComponentContainer.java @@ -15,23 +15,22 @@ */ package li.strolch.runtime.agent.api; +import li.strolch.runtime.agent.impl.StrolchRealm; /** * @author Robert von Burg */ public interface ComponentContainer { + public abstract StrolchAgent getAgent(); + public abstract ComponentState getState(); public abstract boolean hasComponent(Class clazz); public abstract T getComponent(Class clazz); - public abstract OrderMap getOrderMap(); + public abstract StrolchRealm getDefaultRealm(); - public abstract OrderMap getOrderMap(String realm); - - public abstract ResourceMap getResourceMap(); - - public abstract ResourceMap getResourceMap(String realm); + public abstract StrolchRealm getRealm(String realm); } \ No newline at end of file diff --git a/src/main/java/li/strolch/runtime/agent/api/ElementMap.java b/src/main/java/li/strolch/runtime/agent/api/ElementMap.java index 3821a97c6..1a4c316ed 100644 --- a/src/main/java/li/strolch/runtime/agent/api/ElementMap.java +++ b/src/main/java/li/strolch/runtime/agent/api/ElementMap.java @@ -47,8 +47,4 @@ public interface ElementMap { public void update(StrolchTransaction tx, T element); public void remove(StrolchTransaction tx, T element); - - public StrolchTransaction openTx(); - - public StrolchTransaction openTx(String realm); } diff --git a/src/main/java/li/strolch/runtime/agent/api/ElementMapHandler.java b/src/main/java/li/strolch/runtime/agent/api/ElementMapHandler.java index e7c894103..0296bac30 100644 --- a/src/main/java/li/strolch/runtime/agent/api/ElementMapHandler.java +++ b/src/main/java/li/strolch/runtime/agent/api/ElementMapHandler.java @@ -15,17 +15,15 @@ */ package li.strolch.runtime.agent.api; +import li.strolch.runtime.agent.impl.StrolchRealm; /** * @author Robert von Burg */ public interface ElementMapHandler { - public ResourceMap getResourceMap(); - - public ResourceMap getResourceMap(String realm); + public StrolchRealm getDefaultRealm(); + + public StrolchRealm getRealm(String realm); - public OrderMap getOrderMap(); - - public OrderMap getOrderMap(String realm); } diff --git a/src/main/java/li/strolch/runtime/agent/api/StrolchAgent.java b/src/main/java/li/strolch/runtime/agent/api/StrolchAgent.java index 16b216a40..fe8cb23e7 100644 --- a/src/main/java/li/strolch/runtime/agent/api/StrolchAgent.java +++ b/src/main/java/li/strolch/runtime/agent/api/StrolchAgent.java @@ -100,7 +100,7 @@ public class StrolchAgent { this.strolchConfiguration.addConfiguration(configuration.getName(), configuration); } - ComponentContainerImpl container = new ComponentContainerImpl(); + ComponentContainerImpl container = new ComponentContainerImpl(this); this.container = container; logger.info(MessageFormat.format("Setup Agent {0}", runtimeConfiguration.getApplicationName())); //$NON-NLS-1$ diff --git a/src/main/java/li/strolch/runtime/agent/impl/AbstractElementMapHandler.java b/src/main/java/li/strolch/runtime/agent/impl/AbstractElementMapHandler.java index 89144451e..f44ba532d 100644 --- a/src/main/java/li/strolch/runtime/agent/impl/AbstractElementMapHandler.java +++ b/src/main/java/li/strolch/runtime/agent/impl/AbstractElementMapHandler.java @@ -21,8 +21,6 @@ import java.util.Map; import li.strolch.exception.StrolchException; import li.strolch.runtime.StrolchConstants; import li.strolch.runtime.agent.api.ElementMapHandler; -import li.strolch.runtime.agent.api.OrderMap; -import li.strolch.runtime.agent.api.ResourceMap; import li.strolch.runtime.agent.api.StrolchComponent; /** @@ -41,28 +39,12 @@ public abstract class AbstractElementMapHandler extends StrolchComponent impleme } @Override - public ResourceMap getResourceMap() { - return getResourceMap(StrolchConstants.DEFAULT_REALM); + public StrolchRealm getDefaultRealm() { + return getRealm(StrolchConstants.DEFAULT_REALM); } @Override - public ResourceMap getResourceMap(String realm) { - StrolchRealm strolchRealm = getRealm(realm); - return strolchRealm.getResourceMap(); - } - - @Override - public OrderMap getOrderMap() { - return getOrderMap(StrolchConstants.DEFAULT_REALM); - } - - @Override - public OrderMap getOrderMap(String realm) { - StrolchRealm strolchRealm = getRealm(realm); - return strolchRealm.getOrderMap(); - } - - private StrolchRealm getRealm(String realm) { + public StrolchRealm getRealm(String realm) { StrolchRealm strolchRealm = this.realms.get(realm); if (strolchRealm == null) { String msg = "No realm is configured with the name {0}"; //$NON-NLS-1$ diff --git a/src/main/java/li/strolch/runtime/agent/impl/CachedElementMapHandler.java b/src/main/java/li/strolch/runtime/agent/impl/CachedElementMapHandler.java index de4efbdb5..bc061544e 100644 --- a/src/main/java/li/strolch/runtime/agent/impl/CachedElementMapHandler.java +++ b/src/main/java/li/strolch/runtime/agent/impl/CachedElementMapHandler.java @@ -50,10 +50,11 @@ public class CachedElementMapHandler extends InMemoryElementMapHandler { int nrOfOrders = 0; int nrOfResources = 0; - OrderMap orderMap = getContainer().getOrderMap(realm); - ResourceMap resourceMap = getContainer().getResourceMap(realm); + StrolchRealm strolchRealm = this.realms.get(realm); + OrderMap orderMap = strolchRealm.getOrderMap(); + ResourceMap resourceMap = strolchRealm.getResourceMap(); - try (StrolchTransaction tx = resourceMap.openTx(realm)) { + try (StrolchTransaction tx = strolchRealm.openTx()) { ResourceDao resourceDao = tx.getResourceDao(); Set resourceTypes = resourceDao.queryTypes(); for (String type : resourceTypes) { @@ -65,7 +66,7 @@ public class CachedElementMapHandler extends InMemoryElementMapHandler { } } - try (StrolchTransaction tx = orderMap.openTx(realm)) { + try (StrolchTransaction tx = strolchRealm.openTx()) { OrderDao orderDao = tx.getOrderDao(); Set orderTypes = orderDao.queryTypes(); for (String type : orderTypes) { diff --git a/src/main/java/li/strolch/runtime/agent/impl/ComponentContainerImpl.java b/src/main/java/li/strolch/runtime/agent/impl/ComponentContainerImpl.java index 0479a75c7..70d880078 100644 --- a/src/main/java/li/strolch/runtime/agent/impl/ComponentContainerImpl.java +++ b/src/main/java/li/strolch/runtime/agent/impl/ComponentContainerImpl.java @@ -22,11 +22,11 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +import li.strolch.runtime.StrolchConstants; import li.strolch.runtime.agent.api.ComponentContainer; import li.strolch.runtime.agent.api.ComponentState; import li.strolch.runtime.agent.api.ElementMapHandler; -import li.strolch.runtime.agent.api.OrderMap; -import li.strolch.runtime.agent.api.ResourceMap; +import li.strolch.runtime.agent.api.StrolchAgent; import li.strolch.runtime.agent.api.StrolchComponent; import li.strolch.runtime.configuration.ComponentConfiguration; import li.strolch.runtime.configuration.StrolchConfiguration; @@ -45,10 +45,18 @@ public class ComponentContainerImpl implements ComponentContainer { private StrolchConfiguration strolchConfiguration; private ComponentState state; - public ComponentContainerImpl() { + private StrolchAgent agent; + + public ComponentContainerImpl(StrolchAgent agent) { + this.agent = agent; this.state = ComponentState.UNDEFINED; } + @Override + public StrolchAgent getAgent() { + return this.agent; + } + public ComponentState getState() { return this.state; } @@ -71,23 +79,13 @@ public class ComponentContainerImpl implements ComponentContainer { } @Override - public OrderMap getOrderMap() { - return getComponent(ElementMapHandler.class).getOrderMap(); + public StrolchRealm getDefaultRealm() { + return getRealm(StrolchConstants.DEFAULT_REALM); } @Override - public OrderMap getOrderMap(String realm) { - return getComponent(ElementMapHandler.class).getOrderMap(realm); - } - - @Override - public ResourceMap getResourceMap() { - return getComponent(ElementMapHandler.class).getResourceMap(); - } - - @Override - public ResourceMap getResourceMap(String realm) { - return getComponent(ElementMapHandler.class).getResourceMap(realm); + public StrolchRealm getRealm(String realm) { + return getComponent(ElementMapHandler.class).getRealm(realm); } private void initializeComponent(Map, StrolchComponent> componentMap, diff --git a/src/main/java/li/strolch/runtime/agent/impl/InMemoryElementListener.java b/src/main/java/li/strolch/runtime/agent/impl/InMemoryElementListener.java index b7525df4c..7226ada90 100644 --- a/src/main/java/li/strolch/runtime/agent/impl/InMemoryElementListener.java +++ b/src/main/java/li/strolch/runtime/agent/impl/InMemoryElementListener.java @@ -36,10 +36,10 @@ public class InMemoryElementListener implements StrolchElementListener { private ResourceMap resourceMap; private OrderMap orderMap; - public InMemoryElementListener(StrolchTransaction tx, ResourceMap resourceMap, OrderMap orderMap) { + public InMemoryElementListener(StrolchTransaction tx) { this.tx = tx; - this.resourceMap = resourceMap; - this.orderMap = orderMap; + this.resourceMap = tx.getResourceMap(); + this.orderMap = tx.getOrderMap(); this.addResources = true; this.addOrders = true; diff --git a/src/main/java/li/strolch/runtime/agent/impl/InMemoryElementMapHandler.java b/src/main/java/li/strolch/runtime/agent/impl/InMemoryElementMapHandler.java index 942a575b4..d63529f16 100644 --- a/src/main/java/li/strolch/runtime/agent/impl/InMemoryElementMapHandler.java +++ b/src/main/java/li/strolch/runtime/agent/impl/InMemoryElementMapHandler.java @@ -47,7 +47,7 @@ public class InMemoryElementMapHandler extends AbstractElementMapHandler { PersistenceHandler persistenceHandler = getContainer().getComponent(PersistenceHandler.class); TransactionalResourceMap resourceMap = new TransactionalResourceMap(realm, persistenceHandler); TransactionalOrderMap orderMap = new TransactionalOrderMap(realm, persistenceHandler); - StrolchRealm strolchRealm = new StrolchRealm(realm, resourceMap, orderMap); + StrolchRealm strolchRealm = new StrolchRealm(realm, persistenceHandler, resourceMap, orderMap); this.realms.put(realm, strolchRealm); } diff --git a/src/main/java/li/strolch/runtime/agent/impl/StrolchRealm.java b/src/main/java/li/strolch/runtime/agent/impl/StrolchRealm.java index 8a0fef906..01bdb5c79 100644 --- a/src/main/java/li/strolch/runtime/agent/impl/StrolchRealm.java +++ b/src/main/java/li/strolch/runtime/agent/impl/StrolchRealm.java @@ -15,6 +15,8 @@ */ package li.strolch.runtime.agent.impl; +import li.strolch.persistence.api.PersistenceHandler; +import li.strolch.persistence.api.StrolchTransaction; import li.strolch.runtime.agent.api.OrderMap; import li.strolch.runtime.agent.api.ResourceMap; @@ -26,9 +28,11 @@ public class StrolchRealm { private String realm; private ResourceMap resourceMap; private OrderMap orderMap; + private PersistenceHandler persistenceHandler; - public StrolchRealm(String realm, ResourceMap resourceMap, OrderMap orderMap) { + public StrolchRealm(String realm, PersistenceHandler persistenceHandler, ResourceMap resourceMap, OrderMap orderMap) { this.realm = realm; + this.persistenceHandler = persistenceHandler; this.resourceMap = resourceMap; this.orderMap = orderMap; } @@ -40,6 +44,10 @@ public class StrolchRealm { return this.realm; } + public StrolchTransaction openTx() { + return this.persistenceHandler.openTx(this); + } + /** * @return the resourceMap */ diff --git a/src/main/java/li/strolch/runtime/agent/impl/TransactionalElementMap.java b/src/main/java/li/strolch/runtime/agent/impl/TransactionalElementMap.java index 36a4b0dd9..ee5f23644 100644 --- a/src/main/java/li/strolch/runtime/agent/impl/TransactionalElementMap.java +++ b/src/main/java/li/strolch/runtime/agent/impl/TransactionalElementMap.java @@ -90,14 +90,4 @@ public abstract class TransactionalElementMap */ @@ -33,30 +37,53 @@ public abstract class AbstractService V getComponent(Class clazz) { - return this.serviceHandler.getComponent(clazz); + /** + * @param certificate + * the certificate to set + */ + public void setCertificate(Certificate certificate) { + this.certificate = certificate; } - public RuntimeConfiguration getRuntimeConfiguration() { - return this.serviceHandler.getRuntimeConfiguration(); + /** + * @return the certificate + */ + protected Certificate getCertificate() { + return this.certificate; } - public ResourceMap getResourceMap(String realm) { - return this.serviceHandler.getResourceMap(realm); + /** + * @return the container + */ + protected ComponentContainer getContainer() { + return this.container; } - public OrderMap getOrderMap(String realm) { - return this.serviceHandler.getOrderMap(realm); + protected V getComponent(Class clazz) { + return this.container.getComponent(clazz); + } + + protected RuntimeConfiguration getRuntimeConfiguration() { + return this.container.getAgent().getStrolchConfiguration().getRuntimeConfiguration(); + } + + protected StrolchRealm getRealm(String realm) { + return getComponent(ElementMapHandler.class).getRealm(realm); + } + + protected StrolchTransaction openTx(String realm) { + return getComponent(ElementMapHandler.class).getRealm(realm).openTx(); } @Override diff --git a/src/main/java/li/strolch/service/api/Command.java b/src/main/java/li/strolch/service/api/Command.java index 873f783ea..5b7e60ff0 100644 --- a/src/main/java/li/strolch/service/api/Command.java +++ b/src/main/java/li/strolch/service/api/Command.java @@ -16,9 +16,7 @@ package li.strolch.service.api; import li.strolch.persistence.api.StrolchTransaction; -import li.strolch.runtime.agent.api.OrderMap; -import li.strolch.runtime.agent.api.ResourceMap; -import li.strolch.runtime.configuration.RuntimeConfiguration; +import li.strolch.runtime.agent.api.ComponentContainer; import ch.eitchnet.privilege.model.Restrictable; /** @@ -26,28 +24,23 @@ import ch.eitchnet.privilege.model.Restrictable; */ public abstract class Command implements Restrictable { - private final DefaultServiceHandler serviceHandler; + private final ComponentContainer container; private final StrolchTransaction tx; - public Command(DefaultServiceHandler serviceHandler, StrolchTransaction tx) { - this.serviceHandler = serviceHandler; + public Command(ComponentContainer container, StrolchTransaction tx) { + this.container = container; this.tx = tx; } public V getComponent(Class clazz) { - return this.serviceHandler.getComponent(clazz); + return this.container.getComponent(clazz); } - public RuntimeConfiguration getRuntimeConfiguration() { - return this.serviceHandler.getRuntimeConfiguration(); - } - - public ResourceMap getResourceMap(String realm) { - return this.serviceHandler.getResourceMap(realm); - } - - public OrderMap getOrderMap(String realm) { - return this.serviceHandler.getOrderMap(realm); + /** + * @return the container + */ + protected ComponentContainer getContainer() { + return this.container; } /** diff --git a/src/main/java/li/strolch/service/api/DefaultServiceHandler.java b/src/main/java/li/strolch/service/api/DefaultServiceHandler.java index d7563a6f2..1810a51dc 100644 --- a/src/main/java/li/strolch/service/api/DefaultServiceHandler.java +++ b/src/main/java/li/strolch/service/api/DefaultServiceHandler.java @@ -18,8 +18,6 @@ package li.strolch.service.api; import java.text.MessageFormat; import li.strolch.exception.StrolchException; -import li.strolch.runtime.agent.api.OrderMap; -import li.strolch.runtime.agent.api.ResourceMap; import li.strolch.runtime.agent.api.StrolchComponent; import li.strolch.runtime.agent.impl.ComponentContainerImpl; import li.strolch.runtime.configuration.ComponentConfiguration; @@ -61,14 +59,6 @@ public class DefaultServiceHandler extends StrolchComponent implements ServiceHa return this.runtimeConfiguration; } - public ResourceMap getResourceMap(String realm) { - return this.getContainer().getResourceMap(realm); - } - - public OrderMap getOrderMap(String realm) { - return this.getContainer().getOrderMap(realm); - } - @Override public U doService(Certificate certificate, Service service) { return doService(certificate, service, null); @@ -94,8 +84,12 @@ public class DefaultServiceHandler extends StrolchComponent implements ServiceHa try { // then perform the service - if (service instanceof AbstractService) - ((AbstractService) service).setServiceHandler(this); + if (service instanceof AbstractService) { + AbstractService abstractService = (AbstractService) service; + abstractService.setContainer(getContainer()); + abstractService.setCertificate(certificate); + } + U serviceResult = service.doService(argument); if (serviceResult == null) { String msg = "Service {0} is not properly implemented as it returned a null result!"; //$NON-NLS-1$ diff --git a/src/test/java/li/strolch/runtime/test/component/ComponentContainerTest.java b/src/test/java/li/strolch/runtime/test/component/ComponentContainerTest.java index 78091bea8..004712ae4 100644 --- a/src/test/java/li/strolch/runtime/test/component/ComponentContainerTest.java +++ b/src/test/java/li/strolch/runtime/test/component/ComponentContainerTest.java @@ -23,7 +23,6 @@ import java.text.MessageFormat; import li.strolch.model.ModelGenerator; import li.strolch.model.Resource; -import li.strolch.persistence.api.PersistenceHandler; import li.strolch.persistence.api.ResourceDao; import li.strolch.persistence.api.StrolchTransaction; import li.strolch.runtime.agent.api.ComponentContainer; @@ -144,8 +143,7 @@ public class ComponentContainerTest { ServiceResultTest result = serviceHandler.doService(); assertEquals(1, result.getResult()); - PersistenceHandler persistenceHandler = container.getComponent(PersistenceHandler.class); - try (StrolchTransaction tx = persistenceHandler.openTx()) { + try (StrolchTransaction tx = container.getDefaultRealm().openTx()) { ResourceDao resourceDao = tx.getResourceDao(); resourceDao.save(ModelGenerator.createResource("@testRes", "Test Res", "Test")); Resource queriesRes = resourceDao.queryBy("Test", "@testRes"); diff --git a/src/test/java/li/strolch/runtime/test/component/ControllerDependencyTest.java b/src/test/java/li/strolch/runtime/test/component/ControllerDependencyTest.java index 589b42de6..43073d63c 100644 --- a/src/test/java/li/strolch/runtime/test/component/ControllerDependencyTest.java +++ b/src/test/java/li/strolch/runtime/test/component/ControllerDependencyTest.java @@ -110,7 +110,7 @@ public class ControllerDependencyTest { @Before public void setupModel() { - this.container = new ComponentContainerImpl(); + this.container = new ComponentContainerImpl(null); this.con2 = new ComponentController(new StrolchComponent(this.container, "2")); this.con5 = new ComponentController(new StrolchComponent(this.container, "5")); @@ -539,7 +539,7 @@ public class ControllerDependencyTest { @Test public void shouldAddDepedencies() { - ComponentContainerImpl container = new ComponentContainerImpl(); + ComponentContainerImpl container = new ComponentContainerImpl(null); StrolchComponent component = new StrolchComponent(container, "1"); //$NON-NLS-1$ ComponentController controller = new ComponentController(component); diff --git a/src/test/java/li/strolch/runtime/test/query/inmemory/QueryTest.java b/src/test/java/li/strolch/runtime/test/query/inmemory/QueryTest.java index 85effec19..cd88782de 100644 --- a/src/test/java/li/strolch/runtime/test/query/inmemory/QueryTest.java +++ b/src/test/java/li/strolch/runtime/test/query/inmemory/QueryTest.java @@ -34,8 +34,7 @@ import li.strolch.model.query.ResourceQuery; import li.strolch.model.query.Selection; import li.strolch.model.query.StrolchTypeNavigation; import li.strolch.persistence.api.StrolchTransaction; -import li.strolch.runtime.agent.api.OrderMap; -import li.strolch.runtime.agent.api.ResourceMap; +import li.strolch.runtime.agent.api.ComponentContainer; import li.strolch.runtime.agent.api.StrolchAgent; import li.strolch.runtime.query.inmemory.InMemoryOrderQueryVisitor; import li.strolch.runtime.query.inmemory.InMemoryQuery; @@ -58,12 +57,13 @@ public class QueryTest { StrolchAgent agent = ComponentContainerTest.startContainer(PATH_EMPTY_RUNTIME, ComponentContainerTest.PATH_EMPTY_CONTAINER); + ComponentContainer container = agent.getContainer(); + Resource res1 = createResource("@1", "Test Resource", "MyType"); IntegerParameter iP = new IntegerParameter("nbOfBooks", "Number of Books", 33); res1.addParameter(BAG_ID, iP); - ResourceMap resourceMap = agent.getContainer().getResourceMap(); - try (StrolchTransaction tx = resourceMap.openTx()) { - resourceMap.add(tx, res1); + try (StrolchTransaction tx = container.getDefaultRealm().openTx()) { + tx.getResourceMap().add(tx, res1); } List elementAndSelections = new ArrayList<>(); @@ -76,7 +76,7 @@ public class QueryTest { InMemoryResourceQueryVisitor resourceQuery = new InMemoryResourceQueryVisitor(); InMemoryQuery inMemoryQuery = resourceQuery.visit(query); List result; - try (StrolchTransaction tx = resourceMap.openTx()) { + try (StrolchTransaction tx = container.getDefaultRealm().openTx()) { result = inMemoryQuery.doQuery(tx.getResourceDao()); } assertEquals(1, result.size()); @@ -88,12 +88,13 @@ public class QueryTest { StrolchAgent agent = ComponentContainerTest.startContainer(PATH_EMPTY_RUNTIME, ComponentContainerTest.PATH_EMPTY_CONTAINER); + ComponentContainer container = agent.getContainer(); + Order o1 = createOrder("@1", "Test Order", "MyType"); IntegerParameter iP = new IntegerParameter("nbOfBooks", "Number of Books", 33); o1.addParameter(BAG_ID, iP); - OrderMap orderMap = agent.getContainer().getOrderMap(); - try (StrolchTransaction tx = orderMap.openTx()) { - orderMap.add(tx, o1); + try (StrolchTransaction tx = container.getDefaultRealm().openTx()) { + tx.getOrderMap().add(tx, o1); } List elementAndSelections = new ArrayList<>(); @@ -106,7 +107,7 @@ public class QueryTest { InMemoryOrderQueryVisitor orderQuery = new InMemoryOrderQueryVisitor(); InMemoryQuery inMemoryQuery = orderQuery.visit(query); List result; - try (StrolchTransaction tx = orderMap.openTx()) { + try (StrolchTransaction tx = container.getDefaultRealm().openTx()) { result = inMemoryQuery.doQuery(tx.getOrderDao()); } assertEquals(1, result.size());