Fix issue with the ordering of event on the server side.
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 28 Apr 2009 16:58:55 +0000 (16:58 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 28 Apr 2009 16:58:55 +0000 (16:58 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2391 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

23 files changed:
demo/.classpath [new file with mode: 0644]
demo/.project
demo/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
demo/.settings/org.maven.ide.eclipse.prefs [new file with mode: 0644]
demo/pom.xml
demo/site/org.argeo.slc.demo.log4j/log4j.properties
runtime/org.argeo.slc.osgiboot/src/main/java/org/argeo/slc/osgiboot/Activator.java
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/ServiceMsgHandler.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsExecutionHandler.java [new file with mode: 0644]
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsSlcExecutionNotifier.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTreeTestResultListener.java
runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/MsgHandler.java [new file with mode: 0644]
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.agent/META-INF/spring/jms.xml
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.agent/META-INF/spring/transport.xml
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.activemq/META-INF/spring/activemq.xml
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.hibernate/META-INF/spring/transaction.xml
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.services/services.properties

diff --git a/demo/.classpath b/demo/.classpath
new file mode 100644 (file)
index 0000000..d0bec0f
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+       <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+       <classpathentry kind="output" path="target/classes"/>
+</classpath>
index 46d39a88e4fc5ec45b06ec2f271c7a7bdf39af42..ba427f6cbf62b1fdbb68f5bc9640728e1dd9b55f 100644 (file)
@@ -5,7 +5,19 @@
        <projects>
        </projects>
        <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.maven.ide.eclipse.maven2Builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
        </buildSpec>
        <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.maven.ide.eclipse.maven2Nature</nature>
        </natures>
 </projectDescription>
diff --git a/demo/.settings/org.eclipse.jdt.core.prefs b/demo/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..05f7316
--- /dev/null
@@ -0,0 +1,5 @@
+#Tue Apr 28 16:14:04 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/demo/.settings/org.maven.ide.eclipse.prefs b/demo/.settings/org.maven.ide.eclipse.prefs
new file mode 100644 (file)
index 0000000..74021b5
--- /dev/null
@@ -0,0 +1,9 @@
+#Tue Apr 28 16:13:53 CEST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
index 7f39cced41671ba34ee6b0f3357f4d9bc24bf0b1..f2d0b19e9950939c0c6c13f411627fc8707fbaac 100644 (file)
                                                        <execDir>target/exec/server</execDir>
                                                        <jvmArgs>
                                                                <jvmArg>-Xmx256m</jvmArg>
-                                                               <!--
-                                                                       <jvmArg>-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000</jvmArg>
-                                                               -->
                                                        </jvmArgs>
+                                                       <debug>0</debug>
                                                        <systemProperties>
                                                                <slc.osgi.start>
                                                                        org.argeo.dep.osgi.catalina.start,
@@ -76,8 +74,7 @@
                                                                        org.argeo.slc.webapp,
                                                                        org.argeo.slc.ria
                                                                </slc.osgi.start>
-                                                               <slc.server.services.pingCycle>0</slc.server.services.pingCycle>
-                                                               <slc.osgiboot.debug>true</slc.osgiboot.debug>
+                                                               <!--  <slc.osgiboot.debug>true</slc.osgiboot.debug>-->
                                                        </systemProperties>
                                                </configuration>
                                        </plugin>
                                                                        org.springframework.osgi.extender,
                                                                        org.argeo.slc.support.equinox,
                                                                        org.argeo.slc.agent,
-                                                                       org.argeo.slc.demo.basic,
-                                                                       org.argeo.slc.demo.manager
+                                                                       org.argeo.slc.demo.basic
                                                                </slc.osgi.start>
                                                        </systemProperties>
                                                </configuration>
index 3ee850471906d81b54a90924e9605110fe5456c0..65e3e963cc101ae83a71323ec5f526bcec939fc3 100644 (file)
@@ -6,11 +6,15 @@ log4j.logger.org.argeo.slc.execution.ExecutionParameterPostProcessor=TRACE
 log4j.logger.org.argeo.slc.execution.ExecutionContext=DEBUG
 log4j.logger.org.argeo.slc.execution.SimpleExecutionSpec=DEBUG
 
+log4j.logger.org.argeo.slc.services=DEBUG
+
 log4j.logger.org.springframework=WARN
+log4j.logger.org.springframework.jms=WARN
 
 log4j.logger.org.apache.activemq=WARN
 log4j.logger.org.apache.activemq.transport=WARN
-log4j.logger.org.apache.activemq.selector=WARN
+log4j.logger.org.apache.activemq.ActiveMQMessageConsumer=INFO
+log4j.logger.org.apache.activemq.ActiveMQMessageProducer=INFO
 
 log4j.logger.org.apache.catalina=INFO
 log4j.logger.org.apache.coyote=INFO
index 6d5a6ed02ee3d4317384a98d9f7c772477f57b92..4457a4c51a9d119650289a0c16bc57fbed50a1c6 100644 (file)
@@ -36,10 +36,10 @@ public class Activator implements BundleActivator {
                        info("SLC OSGi bootstrap starting...");
                        // installUrls(bundleContext, getDevLocationsUrls());
 
-                       installUrls(bundleContext, getLocationsUrls());
-
                        installUrls(bundleContext, getBundlesUrls());
 
+                       installUrls(bundleContext, getLocationsUrls());
+
                        installUrls(bundleContext, getMavenUrls());
 
                        startBundles(bundleContext);
@@ -62,8 +62,9 @@ public class Activator implements BundleActivator {
                                if (installedBundles.containsKey(url)) {
                                        Bundle bundle = installedBundles.get(url);
                                        // bundle.update();
-                                       info("Bundle " + bundle.getSymbolicName()
-                                                       + " already installed from " + url);
+                                       if (debug)
+                                               debug("Bundle " + bundle.getSymbolicName()
+                                                               + " already installed from " + url);
                                } else {
                                        Bundle bundle = bundleContext.installBundle(url);
                                        if (debug)
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/ServiceMsgHandler.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/ServiceMsgHandler.java
new file mode 100644 (file)
index 0000000..87579ea
--- /dev/null
@@ -0,0 +1,43 @@
+package org.argeo.slc.services;
+
+import org.argeo.slc.SlcException;
+import org.argeo.slc.msg.MsgHandler;
+import org.argeo.slc.msg.process.SlcExecutionStatusRequest;
+import org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest;
+import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;
+import org.argeo.slc.msg.test.tree.ResultPartRequest;
+import org.argeo.slc.process.SlcExecution;
+import org.argeo.slc.services.process.SlcExecutionService;
+import org.argeo.slc.services.test.TestManagerService;
+
+public class ServiceMsgHandler implements MsgHandler {
+       private TestManagerService testManagerService;
+       private SlcExecutionService slcExecutionService;
+
+       public Object handleMsg(Object msg) {
+               if (msg instanceof SlcExecution)
+                       slcExecutionService.newExecution((SlcExecution) msg);
+               else if (msg instanceof SlcExecutionStatusRequest)
+                       slcExecutionService.updateStatus((SlcExecutionStatusRequest) msg);
+               else if (msg instanceof CreateTreeTestResultRequest)
+                       testManagerService
+                                       .createTreeTestResult((CreateTreeTestResultRequest) msg);
+               else if (msg instanceof ResultPartRequest)
+                       testManagerService.addResultPart((ResultPartRequest) msg);
+               else if (msg instanceof CloseTreeTestResultRequest)
+                       testManagerService
+                                       .closeTreeTestResult((CloseTreeTestResultRequest) msg);
+               else
+                       throw new SlcException("Unrecognized message type " + msg);
+               return null;
+       }
+
+       public void setTestManagerService(TestManagerService testManagerService) {
+               this.testManagerService = testManagerService;
+       }
+
+       public void setSlcExecutionService(SlcExecutionService slcExecutionService) {
+               this.slcExecutionService = slcExecutionService;
+       }
+
+}
index fd3b42045f8abe8104e132bd6d16c9a0355ea274..525719aa4936acca48690a36d521a9b5705efed5 100644 (file)
@@ -63,7 +63,7 @@ public class AgentServiceImpl implements AgentService, InitializingBean,
                                for (SlcAgentDescriptor ad : lst)
                                        agentIds.add(ad.getUuid());
 
-                               if (log.isDebugEnabled())
+                               if (log.isTraceEnabled())
                                        log.debug("Ping " + agentIds.size() + " agent.");
                                for (String agentId : agentIds) {
                                        SlcAgent agent = agentFactory.getAgent(agentId);
index 90818a572d0524c87a2bd7241560313af0204aa4..d7ca51117467e6fe840a81901aa275397d60229a 100644 (file)
@@ -134,29 +134,21 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
                        destinationSend = responseDestination;
                }
 
-               new Thread() {
-                       public void run() {
-                               // Send response
-                               jmsTemplate.convertAndSend(destinationSend, response,
-                                               new MessagePostProcessor() {
-                                                       public Message postProcessMessage(
-                                                                       Message messageToSend) throws JMSException {
-                                                               messageToSend.setStringProperty(PROPERTY_QUERY,
-                                                                               query);
-                                                               messageToSend.setStringProperty(
-                                                                               PROPERTY_SLC_AGENT_ID, agentDescriptor
-                                                                                               .getUuid());
-                                                               messageToSend
-                                                                               .setJMSCorrelationID(correlationId);
-                                                               return messageToSend;
-                                                       }
-                                               });
-                               if (log.isDebugEnabled())
-                                       log.debug("Sent response to query '" + query
-                                                       + "' with correlationId " + correlationId);
-                       }
-               }.start();
-
+               // Send response
+               jmsTemplate.convertAndSend(destinationSend, response,
+                               new MessagePostProcessor() {
+                                       public Message postProcessMessage(Message messageToSend)
+                                                       throws JMSException {
+                                               messageToSend.setStringProperty(PROPERTY_QUERY, query);
+                                               messageToSend.setStringProperty(PROPERTY_SLC_AGENT_ID,
+                                                               agentDescriptor.getUuid());
+                                               messageToSend.setJMSCorrelationID(correlationId);
+                                               return messageToSend;
+                                       }
+                               });
+               if (log.isTraceEnabled())
+                       log.debug("Sent response to query '" + query
+                                       + "' with correlationId " + correlationId);
        }
 
        /** @return response */
@@ -174,8 +166,12 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
                                agentDescriptorToSend.setModuleDescriptors(lst);
                                return agentDescriptorToSend;
                        } else if ("runSlcExecution".equals(query)) {
-                               SlcExecution slcExecution = (SlcExecution) convertFrom(message);
-                               runSlcExecution(slcExecution);
+                               final SlcExecution slcExecution = (SlcExecution) convertFrom(message);
+                               new Thread() {
+                                       public void run() {
+                                               runSlcExecution(slcExecution);
+                                       }
+                               }.start();
                                return ExecutionAnswer.ok("Execution started on agent "
                                                + agentDescriptor.getUuid());
                        } else if ("ping".equals(query)) {
index e70af24a849263f550944b4822ef5b4c849de4eb..b743f12e1fb25cefd2726227e7dc8eafeddcc1b4 100644 (file)
@@ -98,7 +98,7 @@ public class JmsAgentProxy implements SlcAgent {
 
        protected void send(AgentMC messageCreator) {
                jmsTemplate.send(requestDestination, messageCreator);
-               if (log.isDebugEnabled())
+               if (log.isTraceEnabled())
                        log.debug("Sent query '" + messageCreator.getQuery()
                                        + "' with correlationId "
                                        + messageCreator.getCorrelationId() + " to agent "
@@ -127,7 +127,7 @@ public class JmsAgentProxy implements SlcAgent {
                        else
                                return null;
                }
-               if (log.isDebugEnabled())
+               if (log.isTraceEnabled())
                        log.debug("Received response for query '" + query
                                        + "' with correlationId " + correlationId + " from agent "
                                        + agentUuid);
diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsExecutionHandler.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsExecutionHandler.java
new file mode 100644 (file)
index 0000000..10bdba6
--- /dev/null
@@ -0,0 +1,32 @@
+package org.argeo.slc.jms;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+
+import org.argeo.slc.SlcException;
+import org.argeo.slc.msg.MsgHandler;
+import org.springframework.jms.support.converter.MessageConverter;
+
+public class JmsExecutionHandler implements MessageListener {
+
+       private MessageConverter messageConverter;
+       private MsgHandler serviceMsgHandler;
+
+       public void onMessage(Message message) {
+               try {
+                       serviceMsgHandler.handleMsg(messageConverter.fromMessage(message));
+               } catch (JMSException e) {
+                       throw new SlcException("Could not interpret message " + message, e);
+               }
+       }
+
+       public void setMessageConverter(MessageConverter messageConverter) {
+               this.messageConverter = messageConverter;
+       }
+
+       public void setServiceMsgHandler(MsgHandler serviceMsgHandler) {
+               this.serviceMsgHandler = serviceMsgHandler;
+       }
+
+}
index 5bdefc823fca1fcca954c2a7d448d533aa10ee65..801c6fae32a730fc9204dde886ec931f8e8b9cf5 100644 (file)
@@ -16,13 +16,14 @@ public class JmsSlcExecutionNotifier implements SlcExecutionNotifier {
 
        private JmsTemplate jmsTemplate;
 
-       private Destination updateStatusDestination;
+       private Destination executionEventDestination;
+       //private Destination updateStatusDestination;
 
        public void updateStatus(SlcExecution slcExecution, String oldStatus,
                        String newStatus) {
                SlcExecutionStatusRequest req = new SlcExecutionStatusRequest(
                                slcExecution.getUuid(), newStatus);
-               jmsTemplate.convertAndSend(updateStatusDestination, req);
+               jmsTemplate.convertAndSend(executionEventDestination, req);
        }
 
        public void addSteps(SlcExecution slcExecution,
@@ -42,8 +43,14 @@ public class JmsSlcExecutionNotifier implements SlcExecutionNotifier {
                this.jmsTemplate = jmsTemplate;
        }
 
-       public void setUpdateStatusDestination(Destination updateStatusDestination) {
-               this.updateStatusDestination = updateStatusDestination;
+       public void setExecutionEventDestination(Destination executionEventDestination) {
+               this.executionEventDestination = executionEventDestination;
        }
 
+       
+       
+//     public void setUpdateStatusDestination(Destination updateStatusDestination) {
+//             this.updateStatusDestination = updateStatusDestination;
+//     }
+
 }
index 28913aea87e46807b39f60c5f3a07ee64bfcccbc..74f1eb2318c26cc64c3ac4835fed94d6a697aa5f 100644 (file)
@@ -4,6 +4,7 @@ import javax.jms.Message;
 import javax.jms.MessageListener;
 
 import org.argeo.slc.SlcException;
+import org.argeo.slc.msg.MsgHandler;
 import org.argeo.slc.process.SlcExecution;
 import org.argeo.slc.runtime.SlcAgent;
 import org.argeo.slc.runtime.SlcAgentFactory;
@@ -13,6 +14,7 @@ import org.springframework.jms.support.converter.MessageConverter;
 public class JmsTransferNewExecution implements MessageListener {
        private MessageConverter messageConverter;
        private SlcAgentFactory agentFactory;
+       private MsgHandler serviceMsgHandler;
 
        public void onMessage(final Message message) {
                try {
@@ -26,6 +28,7 @@ public class JmsTransferNewExecution implements MessageListener {
                                        agent.runSlcExecution(slcExecution);
                                }
                        }.start();
+                       serviceMsgHandler.handleMsg(slcExecution);
                } catch (Exception e) {
                        throw new SlcException("Could not transfer new execution "
                                        + message, e);
@@ -40,4 +43,8 @@ public class JmsTransferNewExecution implements MessageListener {
                this.agentFactory = agentFactory;
        }
 
+       public void setServiceMsgHandler(MsgHandler serviceMsgHandler) {
+               this.serviceMsgHandler = serviceMsgHandler;
+       }
+
 }
index b315c0143ba4dad07d3ce299c12614d6e0705ce9..20137826f3538bc8feffe6a6a20cc76ae89497f8 100644 (file)
@@ -20,9 +20,10 @@ public class JmsTreeTestResultListener implements
        private Boolean onlyOnClose = false;
        private JmsTemplate jmsTemplate;
 
-       private Destination createDestination;
-       private Destination addResultPartDestination;
-       private Destination closeDestination;
+       private Destination executionEventDestination;
+//     private Destination createDestination;
+//     private Destination addResultPartDestination;
+//     private Destination closeDestination;
 
        public void resultPartAdded(TreeTestResult testResult,
                        TestResultPart testResultPart) {
@@ -40,7 +41,7 @@ public class JmsTreeTestResultListener implements
                                        log.debug("Send create result request for result "
                                                        + testResult.getUuid());
 
-                               jmsTemplate.convertAndSend(createDestination, req);
+                               jmsTemplate.convertAndSend(executionEventDestination, req);
                        } else {
                                ResultPartRequest req = new ResultPartRequest(testResult);
 
@@ -48,7 +49,7 @@ public class JmsTreeTestResultListener implements
                                        log.debug("Send result parts for result "
                                                        + testResult.getUuid());
 
-                               jmsTemplate.convertAndSend(addResultPartDestination, req);
+                               jmsTemplate.convertAndSend(executionEventDestination, req);
                        }
                } catch (Exception e) {
                        throw new SlcException("Could not notify to JMS", e);
@@ -65,7 +66,7 @@ public class JmsTreeTestResultListener implements
                                        log.debug("Send create result request for result "
                                                        + testResult.getUuid());
 
-                               jmsTemplate.convertAndSend(createDestination, req);
+                               jmsTemplate.convertAndSend(executionEventDestination, req);
                        } else {
                                CloseTreeTestResultRequest req = new CloseTreeTestResultRequest(
                                                testResult);
@@ -74,7 +75,7 @@ public class JmsTreeTestResultListener implements
                                        log.debug("Send close result request for result "
                                                        + testResult.getUuid());
 
-                               jmsTemplate.convertAndSend(closeDestination, req);
+                               jmsTemplate.convertAndSend(executionEventDestination, req);
 
                        }
                } catch (Exception e) {
@@ -90,16 +91,22 @@ public class JmsTreeTestResultListener implements
                this.jmsTemplate = jmsTemplate;
        }
 
-       public void setCreateDestination(Destination createDestination) {
-               this.createDestination = createDestination;
-       }
-
-       public void setAddResultPartDestination(Destination addResultPartDestination) {
-               this.addResultPartDestination = addResultPartDestination;
-       }
-
-       public void setCloseDestination(Destination closeDestination) {
-               this.closeDestination = closeDestination;
+       public void setExecutionEventDestination(Destination executionEventDestination) {
+               this.executionEventDestination = executionEventDestination;
        }
+       
+       
+
+//     public void setCreateDestination(Destination createDestination) {
+//             this.createDestination = createDestination;
+//     }
+//
+//     public void setAddResultPartDestination(Destination addResultPartDestination) {
+//             this.addResultPartDestination = addResultPartDestination;
+//     }
+//
+//     public void setCloseDestination(Destination closeDestination) {
+//             this.closeDestination = closeDestination;
+//     }
 
 }
index 453b1ade4a7ad1c2c908cfc52d92e2d6725b80c6..eb84e02b007b1e4b58137693457387518676146a 100644 (file)
        <bean id="slcJms.destination.agent.newExecution" p:physicalName="agent.newExecution"
                parent="slcJms.amTopic" />
        <bean id="slcJms.destination.agent.request" p:physicalName="agent.request"
-               parent="slcJms.amTopic" />
+               parent="slcJms.amQueue" />
        <bean id="slcJms.destination.agent.response" p:physicalName="agent.response"
-               parent="slcJms.amTopic" />
+               parent="slcJms.amQueue" />
        <bean id="slcJms.destination.agent.pingAll" p:physicalName="agent.pingAll"
                parent="slcJms.amTopic" />
 
-       <!-- Test result service -->
+       <bean id="slcJms.destination.execution.event" p:physicalName="execution.event"
+               parent="slcJms.amQueue" />
+
+       <!-- Test result service
        <bean id="slcJms.destination.test.create" p:physicalName="test.create"
-               parent="slcJms.amTopic" />
+               parent="slcJms.amQueue" />
        <bean id="slcJms.destination.test.addResultPart" p:physicalName="test.addResultPart"
-               parent="slcJms.amTopic" />
+               parent="slcJms.amQueue" />
        <bean id="slcJms.destination.test.close" p:physicalName="test.close"
-               parent="slcJms.amTopic" />
-
-       <!-- TSLC Execution service -->
+               parent="slcJms.amQueue" />
+ -->
+       <!-- TSLC Execution service
        <bean id="slcJms.destination.slcExecution.updateStatus"
-               p:physicalName="slcExecution.updateStatus" parent="slcJms.amTopic" />
-
+               p:physicalName="slcExecution.updateStatus" parent="slcJms.amQueue" />
+ -->
        <!-- Templates -->
        <bean id="slcJms.amQueue" class="org.apache.activemq.command.ActiveMQQueue"
                abstract="true" />
diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/MsgHandler.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/MsgHandler.java
new file mode 100644 (file)
index 0000000..2ab8f1d
--- /dev/null
@@ -0,0 +1,5 @@
+package org.argeo.slc.msg;
+
+public interface MsgHandler {
+       public Object handleMsg(Object msg);
+}
index 7c95e7d2fbc3b4ccef73207c8362082e5db5ae18..e69584456341a84ff7d3f547cf56c79556d98140 100644 (file)
@@ -6,24 +6,16 @@
 
        <import resource="classpath:org/argeo/slc/activemq/spring.xml" />
 
-
-       <bean id="jmsAgent.listener.request"
-               class="org.springframework.jms.listener.DefaultMessageListenerContainer">
-               <property name="connectionFactory" ref="jmsConnectionFactory" />
+       <bean id="jmsAgent.listener.request" parent="jmsAgent.listener.template">
                <property name="destination" ref="slcJms.destination.agent.request" />
-               <property name="messageListener" ref="jmsAgent" />
                <property name="messageSelector">
                        <bean factory-bean="jmsAgent" factory-method="getMessageSelector" />
                </property>
-               <property name="transactionManager" ref="jmsTransactionManager" />
        </bean>
 
-       <bean id="jmsAgent.listener.pingAll"
-               class="org.springframework.jms.listener.DefaultMessageListenerContainer">
-               <property name="connectionFactory" ref="jmsConnectionFactory" />
+       <bean id="jmsAgent.listener.pingAll" parent="jmsAgent.listener.template">
                <property name="destination" ref="slcJms.destination.agent.pingAll" />
                <property name="messageListener" ref="jmsAgent" />
-               <property name="transactionManager" ref="jmsTransactionManager" />
        </bean>
 
        <bean id="jmsAgent" class="org.argeo.slc.jms.JmsAgent">
 
        <!-- TreeTestResult Listener -->
        <bean id="resultListener" class="org.argeo.slc.jms.JmsTreeTestResultListener">
-               <property name="createDestination" ref="slcJms.destination.test.create" />
+               <!-- <property name="createDestination" ref="slcJms.destination.test.create" />
                <property name="addResultPartDestination" ref="slcJms.destination.test.addResultPart" />
-               <property name="closeDestination" ref="slcJms.destination.test.close" />
+               <property name="closeDestination" ref="slcJms.destination.test.close" /> -->
+               <property name="executionEventDestination" ref="slcJms.destination.execution.event" />
                <property name="jmsTemplate" ref="jmsTemplate" />
        </bean>
 
        <!-- SLC Execution Listener -->
        <bean id="slcExecutionListener" class="org.argeo.slc.jms.JmsSlcExecutionNotifier">
-               <property name="updateStatusDestination" ref="slcJms.destination.slcExecution.updateStatus" />
+               <!-- <property name="updateStatusDestination" ref="slcJms.destination.slcExecution.updateStatus" /> -->
                <property name="jmsTemplate" ref="jmsTemplate" />
+               <property name="executionEventDestination" ref="slcJms.destination.execution.event" />
        </bean>
 
        <!-- Common -->
                class="org.springframework.jms.connection.JmsTransactionManager">
                <property name="connectionFactory" ref="jmsConnectionFactory" />
        </bean>
+
+       <bean id="jmsAgent.listener.template"
+               class="org.springframework.jms.listener.DefaultMessageListenerContainer"
+               abstract="true">
+               <property name="connectionFactory" ref="jmsConnectionFactory" />
+               <property name="messageListener" ref="jmsAgent" />
+               <property name="transactionManager" ref="jmsTransactionManager" />
+       </bean>
+
+
 </beans>
\ No newline at end of file
index f6adfcf85d0916b9a2f35a37905e95e53404421e..8e2c63248bfaa8fc0419625aa11e66447a7b96e0 100644 (file)
@@ -4,18 +4,30 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
        default-lazy-init="false">
 
+       <bean id="jmsConnectionFactory"
+               class="org.springframework.jms.connection.CachingConnectionFactory">
+               <property name="targetConnectionFactory">
+                       <bean class="org.apache.activemq.ActiveMQConnectionFactory">
+                               <property name="brokerURL">
+                                       <value>${slc.server.jms.url}</value>
+                               </property>
+                       </bean>
+               </property>
+       </bean>
+
 <!-- 
        <bean id="jmsConnectionFactory"
                class="org.springframework.jms.connection.SingleConnectionFactory">
                <property name="targetConnectionFactory">
                        <bean id="slcDefault.jms.amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
                                <property name="brokerURL">
-                                       <value>${slc.server.jmsurl}</value>
+                                       <value>${slc.server.jms.url}</value>
                                </property>
                        </bean>
                </property>
        </bean>
  -->
+ <!-- 
        <bean id="jmsConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
                destroy-method="stop">
                <property name="connectionFactory">
@@ -26,5 +38,5 @@
                        </bean>
                </property>
        </bean>
-
+ -->
 </beans>
\ No newline at end of file
index 55165d84b1483ab081bdd8c18a5057c500b9aa28..bb8384bf458342e7ebc7e24df1cf4e69fc4ac784 100644 (file)
        </amq:broker>
 
        <!-- Connection Factory -->
-       <bean id="jmsConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
-               destroy-method="stop" depends-on="broker">
-               <property name="connectionFactory">
+       <!--  -->
+       <bean id="jmsConnectionFactory"
+               class="org.springframework.jms.connection.CachingConnectionFactory">
+               <property name="targetConnectionFactory">
                        <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                                <property name="brokerURL">
                                        <value>vm://localhost</value>
                </property>
        </bean>
 
+       <!--
+               <bean id="jmsConnectionFactory"
+               class="org.apache.activemq.pool.PooledConnectionFactory"
+               destroy-method="stop" depends-on="broker"> <property
+               name="connectionFactory"> <bean
+               class="org.apache.activemq.ActiveMQConnectionFactory"> <property
+               name="brokerURL"> <value>vm://localhost</value> </property> </bean>
+               </property> </bean>
+       -->
+
        <bean id="jmsTransactionManager"
                class="org.springframework.jms.connection.JmsTransactionManager">
                <property name="connectionFactory" ref="jmsConnectionFactory" />
index 6051065e9bbd71abd93b5344eba1bbda91db9508..7d03b64e1bb9e32c3200034a733546116797957f 100644 (file)
@@ -46,7 +46,7 @@
                        <tx:method name="*" propagation="REQUIRED" />
                </tx:attributes>
        </tx:advice>
-<!-- 
+
        <aop:config>
                <aop:pointcut id="pointcut.services.allMethods"
                        expression="execution(* org.argeo.slc.services.*.*.*(..))" />
        </aop:config>
 
        <tx:advice id="advice.allMethodsRequired"
-               transaction-manager="transactionManager">
+               transaction-manager="hibernateTransactionManager">
                <tx:attributes>
                        <tx:method name="*" propagation="REQUIRED" />
                </tx:attributes>
        </tx:advice>
- -->
+
 </beans>
\ No newline at end of file
index cb7cd2da287a8887acf7070701e0554854eb4544..d747ec676669483a0b8cdecfd1fa43c5dba9ff54 100644 (file)
                        <bean class="org.argeo.slc.jms.JmsTransferNewExecution">
                                <property name="messageConverter" ref="slcDefault.jms.castorMessageConverter" />
                                <property name="agentFactory" ref="agentFactory" />
+                               <property name="serviceMsgHandler">
+                                       <bean class="org.argeo.slc.services.ServiceMsgHandler">
+                                               <property name="slcExecutionService" ref="slcExecutionService" />
+                                       </bean>
+                               </property>
                        </bean>
                </property>
        </bean>
 
-       <!-- Test Manager Service -->
        <bean parent="listenerContainer">
-               <property name="destination" ref="slcJms.destination.test.create" />
+               <property name="destination" ref="slcJms.destination.execution.event" />
                <property name="messageListener">
-                       <bean parent="listenerAdapterCastor">
-                               <constructor-arg ref="testManagerService" />
-                               <property name="defaultListenerMethod" value="createTreeTestResult" />
-                       </bean>
-               </property>
-       </bean>
-
-       <bean parent="listenerContainer">
-               <property name="destination" ref="slcJms.destination.test.addResultPart" />
-               <property name="messageListener">
-                       <bean parent="listenerAdapterCastor">
-                               <constructor-arg ref="testManagerService" />
-                               <property name="defaultListenerMethod" value="addResultPart" />
-                       </bean>
-               </property>
-       </bean>
-
-       <bean parent="listenerContainer">
-               <property name="destination" ref="slcJms.destination.test.close" />
-               <property name="messageListener">
-                       <bean parent="listenerAdapterCastor">
-                               <constructor-arg ref="testManagerService" />
-                               <property name="defaultListenerMethod" value="closeTreeTestResult" />
-                       </bean>
-               </property>
-       </bean>
-
-       <!-- SLC Execution Service -->
-       <bean parent="listenerContainer">
-               <property name="destination" ref="slcJms.destination.agent.newExecution" />
-               <property name="messageListener">
-                       <bean parent="listenerAdapterCastor">
-                               <constructor-arg ref="slcExecutionService" />
-                               <property name="defaultListenerMethod" value="newExecution" />
+                       <bean class="org.argeo.slc.jms.JmsExecutionHandler">
+                               <property name="messageConverter" ref="slcDefault.jms.castorMessageConverter" />
+                               <property name="serviceMsgHandler">
+                                       <bean class="org.argeo.slc.services.ServiceMsgHandler">
+                                               <property name="slcExecutionService" ref="slcExecutionService" />
+                                               <property name="testManagerService" ref="testManagerService" />
+                                       </bean>
+                               </property>
                        </bean>
                </property>
        </bean>
 
-       <bean parent="listenerContainer">
-               <property name="destination" ref="slcJms.destination.slcExecution.updateStatus" />
-               <property name="messageListener">
-                       <bean parent="listenerAdapterCastor">
-                               <constructor-arg ref="slcExecutionService" />
-                               <property name="defaultListenerMethod" value="updateStatus" />
-                       </bean>
-               </property>
-       </bean>
 
+       <!--
+               Test Manager Service <bean parent="listenerContainer"> <property
+               name="destination" ref="slcJms.destination.test.create" /> <property
+               name="messageListener"> <bean parent="listenerAdapterCastor">
+               <constructor-arg ref="testManagerService" /> <property
+               name="defaultListenerMethod" value="createTreeTestResult" /> </bean>
+               </property> </bean> <bean parent="listenerContainer"> <property
+               name="destination" ref="slcJms.destination.test.addResultPart" />
+               <property name="messageListener"> <bean
+               parent="listenerAdapterCastor"> <constructor-arg
+               ref="testManagerService" /> <property name="defaultListenerMethod"
+               value="addResultPart" /> </bean> </property> </bean> <bean
+               parent="listenerContainer"> <property name="destination"
+               ref="slcJms.destination.test.close" /> <property
+               name="messageListener"> <bean parent="listenerAdapterCastor">
+               <constructor-arg ref="testManagerService" /> <property
+               name="defaultListenerMethod" value="closeTreeTestResult" /> </bean>
+               </property> </bean>
+       -->
+       <!--
+               SLC Execution Service <bean parent="listenerContainer"> <property
+               name="destination" ref="slcJms.destination.agent.newExecution" />
+               <property name="messageListener"> <bean
+               parent="listenerAdapterCastor"> <constructor-arg
+               ref="slcExecutionService" /> <property name="defaultListenerMethod"
+               value="newExecution" /> </bean> </property> </bean> <bean
+               parent="listenerContainer"> <property name="destination"
+               ref="slcJms.destination.slcExecution.updateStatus" /> <property
+               name="messageListener"> <bean parent="listenerAdapterCastor">
+               <constructor-arg ref="slcExecutionService" /> <property
+               name="defaultListenerMethod" value="updateStatus" /> </bean>
+               </property> </bean>
+       -->
 
        <!-- Templates -->
        <bean id="listenerContainer"
                class="org.springframework.jms.listener.DefaultMessageListenerContainer"
                abstract="true">
                <property name="connectionFactory" ref="jmsConnectionFactory" />
-               <property name="transactionManager" ref="jmsTransactionManager" />
+               <!--
+                       <property name="transactionManager" ref="jmsTransactionManager" />
+               -->
        </bean>
 
        <bean id="listenerAdapterCastor"
index a0167a887a8383f650f2a936800d1a3a23a477ad..2814c6d17037317a196c3ad4a2691fa5ecca3d6f 100644 (file)
@@ -1 +1 @@
-slc.server.services.pingCycle=0
\ No newline at end of file
+slc.server.services.pingCycle=60000
\ No newline at end of file