From 36d49fce6bd0365affe3e0b57054846d531a2c28 Mon Sep 17 00:00:00 2001 From: Simon Spinner <simon.spinner@uni-wuerzburg.de> Date: Sun, 24 Apr 2016 17:52:27 +0200 Subject: [PATCH] Add message bus to agent controller. --- .../prisma/agent/generic/GenericAgent.java | 32 +++++++++++++++---- .../prisma/core/ModelSkeletonTest.java | 3 +- .../ComponentInternalBehaviorMergerTest.java | 2 +- .../prisma/core/agent/AgentController.java | 9 ++++-- .../prisma/core/impl/CDOModelRepository.java | 3 -- .../prisma/core/impl/RabbitMQMessageBus.java | 13 ++++---- 6 files changed, 41 insertions(+), 21 deletions(-) diff --git a/tools.descartes.prisma.agent.generic/src/tools/descartes/prisma/agent/generic/GenericAgent.java b/tools.descartes.prisma.agent.generic/src/tools/descartes/prisma/agent/generic/GenericAgent.java index 429e77f..97ccbae 100644 --- a/tools.descartes.prisma.agent.generic/src/tools/descartes/prisma/agent/generic/GenericAgent.java +++ b/tools.descartes.prisma.agent.generic/src/tools/descartes/prisma/agent/generic/GenericAgent.java @@ -32,12 +32,14 @@ import edu.kit.ipd.descartes.mm.resourcetype.ResourceTypeRepository; import edu.kit.ipd.descartes.mm.resourcetype.ResourcetypePackage; import tools.descartes.prisma.agent.generic.genericagent.GenericAgentConfiguration; import tools.descartes.prisma.agent.generic.genericagent.RequiredObject; +import tools.descartes.prisma.core.MessageBus; import tools.descartes.prisma.core.ModelRepository; import tools.descartes.prisma.core.adapter.ModelSkeletonAdapter; import tools.descartes.prisma.core.adapter.ObjectMatcher; import tools.descartes.prisma.core.agent.AgentController; import tools.descartes.prisma.core.agent.DelegationProvider; import tools.descartes.prisma.core.impl.CDOModelRepository; +import tools.descartes.prisma.core.impl.RabbitMQMessageBus; import tools.descartes.prisma.model.scope.DelegatedObject; import tools.descartes.prisma.model.skeleton.ModelSkeleton; @@ -47,8 +49,9 @@ public class GenericAgent implements IApplication { private final Set<EObject> delegatedObjects = new HashSet<>(); - public GenericAgentController(ModelRepository repository, GenericAgentConfiguration configuration) { - super(repository, configuration.getScope().getPath(), configuration.getId()); + public GenericAgentController(ModelRepository repository, MessageBus messageBus, + GenericAgentConfiguration configuration) { + super(repository, messageBus, configuration.getScope().getPath(), configuration.getId()); } @Override @@ -107,17 +110,30 @@ public class GenericAgent implements IApplication { Options options = new Options(); options.addOption("r", "repository", true, "Host of the model repository"); - options.addOption("p", "port", true, "Port of the model repository"); + options.addOption("u", "user", true, "User of the model repository"); + options.addOption("p", "password", true, "Password of the model repository"); options.addOption("c", "config", true, "Agent configuration"); CommandLineParser cliParser = new GnuParser(); CommandLine cli = cliParser.parse(options, args); - String repositoryURL = null; + String repositoryHost = null; + String repositoryUser = null; + String repositoryPassword = null; String configurationPath = null; boolean help = false; if (cli.hasOption("r")) { - repositoryURL = cli.getOptionValue("r"); + repositoryHost = cli.getOptionValue("r"); + } else { + help = true; + } + if (cli.hasOption("u")) { + repositoryUser = cli.getOptionValue("u"); + } else { + help = true; + } + if (cli.hasOption("p")) { + repositoryPassword = cli.getOptionValue("p"); } else { help = true; } @@ -134,8 +150,10 @@ public class GenericAgent implements IApplication { } GenericAgentConfiguration configuration = loadConfiguration(configurationPath); - ModelRepository repository = new CDOModelRepository(repositoryURL); - GenericAgentController agent = new GenericAgentController(repository, configuration); + MessageBus messageBus = new RabbitMQMessageBus(repositoryHost, repositoryUser, repositoryPassword); + ModelRepository repository = new CDOModelRepository(repositoryHost, repositoryUser, repositoryPassword, + messageBus); + GenericAgentController agent = new GenericAgentController(repository, messageBus, configuration); agent.setDelegationProvider(new GenericDelegationProvider(configuration)); diff --git a/tools.descartes.prisma.core.tests/src/tools/descartes/prisma/core/ModelSkeletonTest.java b/tools.descartes.prisma.core.tests/src/tools/descartes/prisma/core/ModelSkeletonTest.java index 0b621bd..dc440ba 100644 --- a/tools.descartes.prisma.core.tests/src/tools/descartes/prisma/core/ModelSkeletonTest.java +++ b/tools.descartes.prisma.core.tests/src/tools/descartes/prisma/core/ModelSkeletonTest.java @@ -33,7 +33,8 @@ public class ModelSkeletonTest { messageBus = new TestMessageBus(); repository = new TestModelRepository(messageBus); repository.getSystemScope().create(); - this.controller = new AgentController(repository, ApplicationScope.APPLICATION_SCOPE_TYPE + "/" + name, + this.controller = new AgentController(repository, messageBus, + ApplicationScope.APPLICATION_SCOPE_TYPE + "/" + name, InetAddress.getLocalHost().toString()); this.controller.start().get(); this.scope = (ApplicationScope) this.controller.getContainerScope(); diff --git a/tools.descartes.prisma.core.tests/src/tools/descartes/prisma/core/adapter/ComponentInternalBehaviorMergerTest.java b/tools.descartes.prisma.core.tests/src/tools/descartes/prisma/core/adapter/ComponentInternalBehaviorMergerTest.java index 36bd2ef..2ff0ecf 100644 --- a/tools.descartes.prisma.core.tests/src/tools/descartes/prisma/core/adapter/ComponentInternalBehaviorMergerTest.java +++ b/tools.descartes.prisma.core.tests/src/tools/descartes/prisma/core/adapter/ComponentInternalBehaviorMergerTest.java @@ -35,7 +35,7 @@ public class ComponentInternalBehaviorMergerTest { public void setUp() throws Exception { messageBus = new TestMessageBus(); repository = new TestModelRepository(messageBus); - controller = new AgentController(repository, ApplicationScope.APPLICATION_SCOPE_TYPE + "/test", + controller = new AgentController(repository, messageBus, ApplicationScope.APPLICATION_SCOPE_TYPE + "/test", UUID.randomUUID().toString()); controller.start().get(); transaction = repository.createTransaction(); diff --git a/tools.descartes.prisma.core/src/tools/descartes/prisma/core/agent/AgentController.java b/tools.descartes.prisma.core/src/tools/descartes/prisma/core/agent/AgentController.java index ec9582c..3bab0d5 100644 --- a/tools.descartes.prisma.core/src/tools/descartes/prisma/core/agent/AgentController.java +++ b/tools.descartes.prisma.core/src/tools/descartes/prisma/core/agent/AgentController.java @@ -15,6 +15,7 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.ecore.EObject; +import tools.descartes.prisma.core.MessageBus; import tools.descartes.prisma.core.ModelRepository; import tools.descartes.prisma.core.Transaction; import tools.descartes.prisma.core.adapter.ModelSkeletonAdapter; @@ -85,7 +86,8 @@ public class AgentController { private static final int MAX_RETRIES = 3; private Agent agent; - private ModelRepository repository; + private final MessageBus messageBus; + private final ModelRepository repository; private final ScheduledExecutorService workerThread = Executors.newScheduledThreadPool(1); private final String scopePath; private final String id; @@ -108,7 +110,8 @@ public class AgentController { private volatile boolean running = false; - public AgentController(ModelRepository repository, String scopePath, String id) { + public AgentController(ModelRepository repository, MessageBus messageBus, String scopePath, String id) { + this.messageBus = messageBus; this.repository = repository; this.scopePath = scopePath; this.id = id; @@ -218,6 +221,7 @@ public class AgentController { } protected void startAsync() { + messageBus.connect(); repository.connect(); SystemGlobalScope systemScope = getModelRepository().getSystemScope(); systemScope.create(); @@ -244,6 +248,7 @@ public class AgentController { scope.removeAgent(this, removeFilter); } finally { repository.disconnect(); + messageBus.disconnect(); } } diff --git a/tools.descartes.prisma.core/src/tools/descartes/prisma/core/impl/CDOModelRepository.java b/tools.descartes.prisma.core/src/tools/descartes/prisma/core/impl/CDOModelRepository.java index dc2bfb7..0d345c7 100644 --- a/tools.descartes.prisma.core/src/tools/descartes/prisma/core/impl/CDOModelRepository.java +++ b/tools.descartes.prisma.core/src/tools/descartes/prisma/core/impl/CDOModelRepository.java @@ -33,9 +33,6 @@ import tools.descartes.prisma.core.scopes.SystemGlobalScope; public class CDOModelRepository implements ModelRepository { - private static final int RABBITMQ_PORT = 5672; - private static final String RABBITMQ_VHOST = "prisma"; - private final RepositoryConnection connection; private CDOView readOnlyView; private final Map<String, Scope> scopes = new HashMap<>(); diff --git a/tools.descartes.prisma.core/src/tools/descartes/prisma/core/impl/RabbitMQMessageBus.java b/tools.descartes.prisma.core/src/tools/descartes/prisma/core/impl/RabbitMQMessageBus.java index dc191a4..43d2d39 100644 --- a/tools.descartes.prisma.core/src/tools/descartes/prisma/core/impl/RabbitMQMessageBus.java +++ b/tools.descartes.prisma.core/src/tools/descartes/prisma/core/impl/RabbitMQMessageBus.java @@ -20,24 +20,23 @@ import tools.descartes.prisma.core.exceptions.MessagingException; public class RabbitMQMessageBus implements MessageBus { + private static final int RABBITMQ_PORT = 5672; + private static final String RABBITMQ_VHOST = "prisma"; + private final Log log = LogFactory.getLog(RabbitMQMessageBus.class); private final String userName; private final String password; - private final String virtualHost; private final String host; - private final int port; private Connection connection; private Channel channel; - public RabbitMQMessageBus(String userName, String password, String virtualHost, String host, int port) { + public RabbitMQMessageBus(String host, String userName, String password) { super(); this.userName = userName; this.password = password; - this.virtualHost = virtualHost; this.host = host; - this.port = port; } @Override @@ -45,9 +44,9 @@ public class RabbitMQMessageBus implements MessageBus { ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setUsername(userName); connectionFactory.setPassword(password); - connectionFactory.setVirtualHost(virtualHost); + connectionFactory.setVirtualHost(RABBITMQ_VHOST); connectionFactory.setHost(host); - connectionFactory.setPort(port); + connectionFactory.setPort(RABBITMQ_PORT); try { connection = connectionFactory.newConnection(); channel = connection.createChannel(); -- GitLab