From: Mathieu Baudier Date: Sun, 11 Jan 2009 19:10:40 +0000 (+0000) Subject: Integrate ActiveMQ X-Git-Tag: argeo-slc-2.1.7~2217 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;ds=inline;h=11a9d0e8d3e9f610d0546463cfaf07ae884cb249;p=gpl%2Fargeo-slc.git Integrate ActiveMQ git-svn-id: https://svn.argeo.org/slc/trunk@2074 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc.webapp/src/main/webapp/WEB-INF/activemq.xml b/org.argeo.slc.webapp/src/main/webapp/WEB-INF/activemq.xml deleted file mode 100644 index 71744743e..000000000 --- a/org.argeo.slc.webapp/src/main/webapp/WEB-INF/activemq.xml +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/org.argeo.slc.webapp/src/main/webapp/WEB-INF/applicationContext.xml b/org.argeo.slc.webapp/src/main/webapp/WEB-INF/applicationContext.xml index 131fb21b0..97ca54365 100644 --- a/org.argeo.slc.webapp/src/main/webapp/WEB-INF/applicationContext.xml +++ b/org.argeo.slc.webapp/src/main/webapp/WEB-INF/applicationContext.xml @@ -12,9 +12,10 @@ --> + \ No newline at end of file diff --git a/org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties b/org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties index e80a39052..925c2181b 100644 --- a/org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties +++ b/org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties @@ -3,7 +3,7 @@ log4j.rootLogger=WARN, console ## Levels # Slc -log4j.logger.org.argeo.slc=WARN +log4j.logger.org.argeo.slc=DEBUG # Spring log4j.logger.org.springframework=INFO diff --git a/org.argeo.slc/pom.xml b/org.argeo.slc/pom.xml index 0ef2bd723..901aa28ff 100644 --- a/org.argeo.slc/pom.xml +++ b/org.argeo.slc/pom.xml @@ -353,6 +353,11 @@ limitations under the License. org.springframework.jdbc ${version.spring} + + org.springframework + org.springframework.transaction + ${version.spring} + org.springframework org.springframework.web @@ -368,6 +373,11 @@ limitations under the License. org.springframework.aop ${version.spring} + + org.springframework + org.springframework.jms + ${version.spring} + org.springframework.ws @@ -604,6 +614,13 @@ limitations under the License. com.springsource.javax.jms 1.1.0 + + org.apache.geronimo.specs + com.springsource.javax.management.j2ee + 1.0.1 + + + org.apache.activemq com.springsource.org.apache.activemq @@ -614,16 +631,23 @@ limitations under the License. com.springsource.org.apache.activemq.web ${version.activemq} + org.apache.xbean com.springsource.org.apache.xbean.spring 3.3.0 - - org.apache.geronimo.specs - com.springsource.javax.management.j2ee - 1.0.1 - diff --git a/runtime/org.argeo.slc.launcher/pom.xml b/runtime/org.argeo.slc.launcher/pom.xml index 5057746a6..1d59972e9 100644 --- a/runtime/org.argeo.slc.launcher/pom.xml +++ b/runtime/org.argeo.slc.launcher/pom.xml @@ -66,11 +66,25 @@ org.argeo.slc.support.simple ${project.version} - + org.argeo.dep.osgi org.argeo.dep.osgi.commons.cli + + + + org.argeo.slc.runtime + org.argeo.slc.support.activemq + ${project.version} + testing + + + org.argeo.slc.runtime + org.argeo.slc.support.castor + ${project.version} + testing + \ No newline at end of file diff --git a/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java b/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java index c4193369a..32c3ce906 100644 --- a/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java +++ b/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java @@ -18,6 +18,9 @@ import org.argeo.slc.SlcException; import org.argeo.slc.logging.Log4jUtils; import org.argeo.slc.runtime.SlcExecutionContext; import org.argeo.slc.runtime.SlcRuntime; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.FileSystemXmlApplicationContext; public class SlcMain { public enum Mode { @@ -168,6 +171,32 @@ public class SlcMain { System.exit(1); } } + // Agent + else if (mode.equals(Mode.agent)) { + if (runtimeStr == null) + runtimeStr = "agent.xml"; + final ConfigurableApplicationContext applicationContext = new FileSystemXmlApplicationContext( + "agent.xml"); + applicationContext.start(); + log.info("SLC Agent context started."); + + Thread shutdownHook = new Thread("SLC agent shutdown hook") { + public void run() { + applicationContext.stop(); + applicationContext.close(); + log.info("Closed agent application context."); + } + }; + Runtime.getRuntime().addShutdownHook(shutdownHook); + + while (applicationContext.isActive()) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // silent + } + } + } } public static void printUsage() { diff --git a/runtime/org.argeo.slc.server/.project b/runtime/org.argeo.slc.server/.project index 26efbecd6..663896211 100644 --- a/runtime/org.argeo.slc.server/.project +++ b/runtime/org.argeo.slc.server/.project @@ -1,23 +1,29 @@ - - - org.argeo.slc.server - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.maven.ide.eclipse.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.maven.ide.eclipse.maven2Nature - - + + + org.argeo.slc.server + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + org.maven.ide.eclipse.maven2Nature + + diff --git a/runtime/org.argeo.slc.server/.springBeans b/runtime/org.argeo.slc.server/.springBeans new file mode 100644 index 000000000..76d11cb51 --- /dev/null +++ b/runtime/org.argeo.slc.server/.springBeans @@ -0,0 +1,14 @@ + + + 1 + + + + + + + src/main/resources/org/argeo/slc/server/spring/servletContext.xml + + + + diff --git a/runtime/org.argeo.slc.server/pom.xml b/runtime/org.argeo.slc.server/pom.xml index 223116e07..a74058c2f 100644 --- a/runtime/org.argeo.slc.server/pom.xml +++ b/runtime/org.argeo.slc.server/pom.xml @@ -60,6 +60,7 @@ + org.argeo.slc.runtime org.argeo.slc.support.hibernate @@ -70,24 +71,13 @@ org.argeo.slc.support.castor ${project.version} - - - javax.servlet - - com.springsource.javax.servlet.jsp.jstl - - - - org.apache.taglibs - - com.springsource.org.apache.taglibs.standard - - - javax.servlet - com.springsource.javax.servlet - provided + org.argeo.slc.runtime + org.argeo.slc.support.activemq + ${project.version} + + org.springframework.ws org.springframework.ws @@ -100,43 +90,48 @@ org.springframework org.springframework.aop + + - org.aspectj - com.springsource.org.aspectj.weaver + javax.servlet + + com.springsource.javax.servlet.jsp.jstl + - net.sourceforge.jexcelapi - com.springsource.jxl + org.apache.taglibs + + com.springsource.org.apache.taglibs.standard + - com.lowagie.text - com.springsource.com.lowagie.text + javax.servlet + com.springsource.javax.servlet + provided javax.wsdl com.springsource.javax.wsdl - - - javax.jms - com.springsource.javax.jms - + org.apache.activemq - com.springsource.org.apache.activemq + com.springsource.org.apache.activemq.web + + - org.apache.xbean - com.springsource.org.apache.xbean.spring + org.aspectj + com.springsource.org.aspectj.weaver - org.apache.activemq - com.springsource.org.apache.activemq.web + net.sourceforge.jexcelapi + com.springsource.jxl - org.apache.geronimo.specs - com.springsource.javax.management.j2ee + com.lowagie.text + com.springsource.com.lowagie.text diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java new file mode 100644 index 000000000..a4a67c10e --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java @@ -0,0 +1,22 @@ +package org.argeo.slc.services.impl.runtime; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.dao.runtime.SlcAgentDescriptorDao; +import org.argeo.slc.runtime.SlcAgentDescriptor; + +public class AgentServiceImpl { + private final static Log log = LogFactory.getLog(AgentServiceImpl.class); + + private final SlcAgentDescriptorDao slcAgentDescriptorDao; + + public AgentServiceImpl(SlcAgentDescriptorDao slcAgentDescriptorDao) { + this.slcAgentDescriptorDao = slcAgentDescriptorDao; + } + + public void register(SlcAgentDescriptor slcAgentDescriptor) { + slcAgentDescriptorDao.create(slcAgentDescriptor); + log.info("Registered agent #" + slcAgentDescriptor.getUuid()); + } + +} diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/test/TestManagerServiceImpl.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/test/TestManagerServiceImpl.java new file mode 100644 index 000000000..0b2b5655d --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/test/TestManagerServiceImpl.java @@ -0,0 +1,81 @@ +package org.argeo.slc.services.impl.test; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.core.test.tree.TreeTestResultCollection; +import org.argeo.slc.dao.process.SlcExecutionDao; +import org.argeo.slc.dao.test.TestRunDescriptorDao; +import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao; +import org.argeo.slc.dao.test.tree.TreeTestResultDao; +import org.argeo.slc.process.SlcExecution; +import org.argeo.slc.services.test.TestManagerService; +import org.argeo.slc.test.TestRunDescriptor; + +/** Implementation of complex operations impacting the underlying data. */ +public class TestManagerServiceImpl implements TestManagerService { + private Log log = LogFactory.getLog(getClass()); + + private final TreeTestResultDao treeTestResultDao; + private final TestRunDescriptorDao testRunDescriptorDao; + private final SlcExecutionDao slcExecutionDao; + private final TreeTestResultCollectionDao treeTestResultCollectionDao; + + public TestManagerServiceImpl(TreeTestResultDao treeTestResultDao, + TestRunDescriptorDao testRunDescriptorDao, + SlcExecutionDao slcExecutionDao, + TreeTestResultCollectionDao treeTestResultCollectionDao) { + this.treeTestResultDao = treeTestResultDao; + this.testRunDescriptorDao = testRunDescriptorDao; + this.slcExecutionDao = slcExecutionDao; + this.treeTestResultCollectionDao = treeTestResultCollectionDao; + } + + public void registerTestRunDescriptor(TestRunDescriptor testRunDescriptor) { + if (testRunDescriptor != null) { + testRunDescriptorDao.saveOrUpdate(testRunDescriptor); + + // Update tree test result collection + // TODO: optimize + + if (testRunDescriptor.getSlcExecutionUuid() != null) { + SlcExecution slcExecution = slcExecutionDao + .getSlcExecution(testRunDescriptor + .getSlcExecutionUuid()); + if (slcExecution != null) { + String collectionId = slcExecution.getUser() != null ? slcExecution + .getUser() + : "default"; + addResultToCollection(collectionId, testRunDescriptor + .getTestResultUuid()); + } + } + } + } + + public void addResultToCollection(String collectionId, String resultUuid) { + TreeTestResultCollection ttrc = treeTestResultCollectionDao + .getTestResultCollection(collectionId); + if (ttrc == null) { + ttrc = new TreeTestResultCollection(collectionId); + treeTestResultCollectionDao.create(ttrc); + } + treeTestResultCollectionDao.addResultToCollection(ttrc, resultUuid); + } + + public void removeResultFromCollection(String collectionId, + String resultUuid) { + TreeTestResultCollection ttrc = treeTestResultCollectionDao + .getTestResultCollection(collectionId); + if (ttrc != null) { + treeTestResultCollectionDao.removeResultFromCollection(ttrc, + resultUuid); + } + + // Delete collection if empty + // see https://www.argeo.org/bugzilla/show_bug.cgi?id=74 + if (ttrc.getResults().size() == 0) { + treeTestResultCollectionDao.delete(ttrc); + } + } + +} diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/runtime/AgentService.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/runtime/AgentService.java new file mode 100644 index 000000000..c4bf2c05d --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/runtime/AgentService.java @@ -0,0 +1,7 @@ +package org.argeo.slc.services.runtime; + +import org.argeo.slc.runtime.SlcAgentDescriptor; + +public interface AgentService { + public void register(SlcAgentDescriptor slcAgentDescriptor); +} diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/impl/TestManagerServiceImpl.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/impl/TestManagerServiceImpl.java deleted file mode 100644 index 1cb9112b7..000000000 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/impl/TestManagerServiceImpl.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.argeo.slc.services.test.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.slc.core.test.tree.TreeTestResultCollection; -import org.argeo.slc.dao.process.SlcExecutionDao; -import org.argeo.slc.dao.test.TestRunDescriptorDao; -import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao; -import org.argeo.slc.dao.test.tree.TreeTestResultDao; -import org.argeo.slc.process.SlcExecution; -import org.argeo.slc.services.test.TestManagerService; -import org.argeo.slc.test.TestRunDescriptor; - -/** Implementation of complex operations impacting the underlying data. */ -public class TestManagerServiceImpl implements TestManagerService { - private Log log = LogFactory.getLog(getClass()); - - private final TreeTestResultDao treeTestResultDao; - private final TestRunDescriptorDao testRunDescriptorDao; - private final SlcExecutionDao slcExecutionDao; - private final TreeTestResultCollectionDao treeTestResultCollectionDao; - - public TestManagerServiceImpl(TreeTestResultDao treeTestResultDao, - TestRunDescriptorDao testRunDescriptorDao, - SlcExecutionDao slcExecutionDao, - TreeTestResultCollectionDao treeTestResultCollectionDao) { - this.treeTestResultDao = treeTestResultDao; - this.testRunDescriptorDao = testRunDescriptorDao; - this.slcExecutionDao = slcExecutionDao; - this.treeTestResultCollectionDao = treeTestResultCollectionDao; - } - - public void registerTestRunDescriptor(TestRunDescriptor testRunDescriptor) { - if (testRunDescriptor != null) { - testRunDescriptorDao.saveOrUpdate(testRunDescriptor); - - // Update tree test result collection - // TODO: optimize - - if (testRunDescriptor.getSlcExecutionUuid() != null) { - SlcExecution slcExecution = slcExecutionDao - .getSlcExecution(testRunDescriptor - .getSlcExecutionUuid()); - if (slcExecution != null) { - String collectionId = slcExecution.getUser() != null ? slcExecution - .getUser() - : "default"; - addResultToCollection(collectionId, testRunDescriptor - .getTestResultUuid()); - } - } - } - } - - public void addResultToCollection(String collectionId, String resultUuid) { - TreeTestResultCollection ttrc = treeTestResultCollectionDao - .getTestResultCollection(collectionId); - if (ttrc == null) { - ttrc = new TreeTestResultCollection(collectionId); - treeTestResultCollectionDao.create(ttrc); - } - treeTestResultCollectionDao.addResultToCollection(ttrc, resultUuid); - } - - public void removeResultFromCollection(String collectionId, - String resultUuid) { - TreeTestResultCollection ttrc = treeTestResultCollectionDao - .getTestResultCollection(collectionId); - if (ttrc != null) { - treeTestResultCollectionDao.removeResultFromCollection(ttrc, - resultUuid); - } - - // Delete collection if empty - // see https://www.argeo.org/bugzilla/show_bug.cgi?id=74 - if (ttrc.getResults().size() == 0) { - treeTestResultCollectionDao.delete(ttrc); - } - } - -} diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/activemq.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/activemq.xml new file mode 100644 index 000000000..df37901e1 --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/activemq.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/db.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/db.xml new file mode 100644 index 000000000..f18ed8292 --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/db.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml index 8b5b2e488..ab64f9450 100644 --- a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml @@ -1,154 +1,52 @@ - - - - - - - - - - - slcServerDefault.sessionFactory.HSQL + default-lazy-init="false"> + + + + + + + + slcServerDefault.sessionFactory.HSQL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/transaction.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/transaction.xml index 43cabb8ea..7f69fa4da 100644 --- a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/transaction.xml +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/transaction.xml @@ -1,7 +1,6 @@ - + - + - + - + + + + + + + + + + + + + - - diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/dao/runtime/SlcAgentDescriptorDao.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/dao/runtime/SlcAgentDescriptorDao.java new file mode 100644 index 000000000..3ad307014 --- /dev/null +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/dao/runtime/SlcAgentDescriptorDao.java @@ -0,0 +1,12 @@ +package org.argeo.slc.dao.runtime; + +import java.util.List; + +import org.argeo.slc.runtime.SlcAgentDescriptor; + +public interface SlcAgentDescriptorDao { + public void create(SlcAgentDescriptor slcAgentDescriptor); + + public List listSlcAgentDescriptors(); + +} diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgent.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgent.java new file mode 100644 index 000000000..fc3c2d52d --- /dev/null +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgent.java @@ -0,0 +1,5 @@ +package org.argeo.slc.runtime; + +/** A local agent, able to run SLC Execution locally. */ +public interface SlcAgent { +} diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java new file mode 100644 index 000000000..39eadf69e --- /dev/null +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java @@ -0,0 +1,23 @@ +package org.argeo.slc.runtime; + +public class SlcAgentDescriptor { + private String uuid; + private String host; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + +} diff --git a/runtime/org.argeo.slc.support.activemq/pom.xml b/runtime/org.argeo.slc.support.activemq/pom.xml index 25253467d..5e33d9f29 100644 --- a/runtime/org.argeo.slc.support.activemq/pom.xml +++ b/runtime/org.argeo.slc.support.activemq/pom.xml @@ -44,13 +44,55 @@ + + + org.argeo.slc.runtime + org.argeo.slc.support.simple + ${project.version} + + + + + org.springframework + org.springframework.jms + + + org.springframework.ws + org.springframework.oxm + + + org.springframework + org.springframework.transaction + + + javax.jms com.springsource.javax.jms + + org.apache.geronimo.specs + com.springsource.javax.management.j2ee + + + org.apache.activemq com.springsource.org.apache.activemq + + org.apache.xbean + com.springsource.org.apache.xbean.spring + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java new file mode 100644 index 000000000..7aff0ab20 --- /dev/null +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java @@ -0,0 +1,61 @@ +package org.argeo.slc.jms; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.UUID; + +import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.SlcException; +import org.argeo.slc.runtime.SlcAgent; +import org.argeo.slc.runtime.SlcAgentDescriptor; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.jms.core.JmsTemplate; + +/** JMS based implementation of SLC Agent. */ +public class JmsAgent implements SlcAgent, MessageListener, InitializingBean { + private final static Log log = LogFactory.getLog(JmsAgent.class); + + private final SlcAgentDescriptor agentDescriptor; + private JmsTemplate jmsTemplate; + private Destination agentRegister; + + public JmsAgent() { + try { + agentDescriptor = new SlcAgentDescriptor(); + agentDescriptor.setUuid(UUID.randomUUID().toString()); + agentDescriptor.setHost(InetAddress.getLocalHost().getHostName()); + } catch (UnknownHostException e) { + throw new SlcException("Unable to create agent descriptor.", e); + } + } + + public void afterPropertiesSet() throws Exception { + jmsTemplate.convertAndSend(agentRegister, agentDescriptor); + log.info("Agent #" + agentDescriptor.getUuid() + " registered to " + + agentRegister); + } + + public void onMessage(Message message) { + try { + log.info("Received message " + message.getJMSMessageID()); + } catch (JMSException e) { + e.printStackTrace(); + } + + } + + public void setJmsTemplate(JmsTemplate jmsTemplate) { + this.jmsTemplate = jmsTemplate; + } + + public void setAgentRegister(Destination agentRegister) { + this.agentRegister = agentRegister; + } + +} diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/MarshallerMessageConverter.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/MarshallerMessageConverter.java new file mode 100644 index 000000000..dfab1e4bf --- /dev/null +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/MarshallerMessageConverter.java @@ -0,0 +1,55 @@ +package org.argeo.slc.jms; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.Session; +import javax.jms.TextMessage; + +import org.argeo.slc.SlcException; +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; +import org.springframework.oxm.Marshaller; +import org.springframework.oxm.Unmarshaller; +import org.springframework.xml.transform.StringResult; +import org.springframework.xml.transform.StringSource; + +public class MarshallerMessageConverter implements MessageConverter { + private Marshaller marshaller; + private Unmarshaller unmarshaller; + + public Object fromMessage(Message message) throws JMSException, + MessageConversionException { + if (message instanceof TextMessage) { + String text = ((TextMessage) message).getText(); + try { + return unmarshaller.unmarshal(new StringSource(text)); + } catch (Exception e) { + throw new SlcException("Could not unmarshall " + text, e); + } + } else { + throw new SlcException("Only JMS TextMessage are supported."); + } + } + + public Message toMessage(Object object, Session session) + throws JMSException, MessageConversionException { + StringResult result = new StringResult(); + try { + marshaller.marshal(object, result); + } catch (Exception e) { + throw new SlcException("Could not marshall " + object, e); + } + TextMessage msg = session.createTextMessage(); + msg.setText(result.toString()); + return msg; + } + + public void setMarshaller(Marshaller marshaller) { + this.marshaller = marshaller; + } + + public void setUnmarshaller(Unmarshaller unmarshaller) { + this.unmarshaller = unmarshaller; + } + +} diff --git a/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/jms/spring.xml b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/jms/spring.xml new file mode 100644 index 000000000..c8536ca50 --- /dev/null +++ b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/jms/spring.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/runtime.xml b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/runtime.xml new file mode 100644 index 000000000..839603dc3 --- /dev/null +++ b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/runtime.xml @@ -0,0 +1,16 @@ + + + + + + Runtime objects XML mapping + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/spring.xml b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/spring.xml new file mode 100644 index 000000000..46f0ad212 --- /dev/null +++ b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/spring.xml @@ -0,0 +1,46 @@ + + + + + + + classpath:org/argeo/slc/castor/msg.xml + + + classpath:org/argeo/slc/castor/process.xml + + + classpath:org/argeo/slc/castor/runtime.xml + + + classpath:org/argeo/slc/castor/structure.xml + + + classpath:org/argeo/slc/castor/test.xml + + + + + + + + + + + + + + + + + + + diff --git a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/spring/applicationContext.xml b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/spring/applicationContext.xml index 21c0ce595..4e12b5567 100644 --- a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/spring/applicationContext.xml +++ b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/spring/applicationContext.xml @@ -3,6 +3,10 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" default-lazy-init="true"> + + + + diff --git a/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/runtime/SlcAgentDescriptorDaoHibernate.java b/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/runtime/SlcAgentDescriptorDaoHibernate.java new file mode 100644 index 000000000..c6b6ac90b --- /dev/null +++ b/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/runtime/SlcAgentDescriptorDaoHibernate.java @@ -0,0 +1,21 @@ +package org.argeo.slc.hibernate.runtime; + +import java.util.List; + +import org.argeo.slc.dao.runtime.SlcAgentDescriptorDao; +import org.argeo.slc.runtime.SlcAgentDescriptor; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +public class SlcAgentDescriptorDaoHibernate extends HibernateDaoSupport + implements SlcAgentDescriptorDao { + + public void create(SlcAgentDescriptor slcAgentDescriptor) { + getHibernateTemplate().save(slcAgentDescriptor); + } + + public List listSlcAgentDescriptors() { + return (List) getHibernateTemplate().loadAll( + SlcAgentDescriptor.class); + } + +} diff --git a/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/cache/ehcache.xml b/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/cache/ehcache.xml index 968e97373..7cb97e189 100644 --- a/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/cache/ehcache.xml +++ b/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/cache/ehcache.xml @@ -15,8 +15,7 @@ maxElementsInMemory="10000" /> - @@ -27,8 +26,7 @@ - - + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/runtime/SlcAgentDescriptor.hbm.xml b/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/runtime/SlcAgentDescriptor.hbm.xml new file mode 100644 index 000000000..dbc764900 --- /dev/null +++ b/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/runtime/SlcAgentDescriptor.hbm.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/spring/applicationContext.xml b/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/spring/applicationContext.xml index 1d59de1a6..ed5252933 100644 --- a/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/spring/applicationContext.xml +++ b/runtime/org.argeo.slc.support.hibernate/src/main/resources/org/argeo/slc/hibernate/spring/applicationContext.xml @@ -14,8 +14,7 @@ - @@ -43,14 +42,15 @@ org/argeo/slc/hibernate/process/SlcExecutionStep.hbm.xml + + org/argeo/slc/hibernate/runtime/SlcAgentDescriptor.hbm.xml + - + - @@ -61,10 +61,8 @@ value="classpath:/org/argeo/slc/hibernate/cache/ehcache.xml" /> - - + + - + + + \ No newline at end of file