]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Finalize agents
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 11 Mar 2009 19:45:44 +0000 (19:45 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 11 Mar 2009 19:45:44 +0000 (19:45 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2256 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

12 files changed:
demo/site/org.argeo.slc.demo.agent/META-INF/spring/jms.xml
demo/site/org.argeo.slc.demo.basic/conf/basic.xml
demo/site/org.argeo.slc.demo.basic/conf/main.xml
demo/site/org.argeo.slc.demo.basic/conf/testCases/basic-001.xml
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/MarshallerMessageConverter.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/DefaultModulesManager.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/runtime/AbstractAgent.java
server/org.argeo.slc.siteserver/bundles/logging/log4j.properties
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.webapp.war/WEB-INF/web.xml
server/org.argeo.slc.siteserver/pom.xml

index b5f7d67192b652746efd6789513730e0a1763b13..c4163c20a1d6a739b4e84d1b7b21a187abd75715 100644 (file)
        <bean id="slcDefault.jms.listener.newExecution" parent="slcTemplate.jms.listenerContainer">
                <property name="connectionFactory" ref="slcDefault.jms.connectionFactory" />
                <property name="destination" ref="slcJms.destination.agent.newExecution" />
-               <property name="messageListener">
-                       <bean parent="slcTemplate.jms.listenerAdapterCastor">
-                               <constructor-arg ref="modulesManager" />
-                               <property name="defaultListenerMethod" value="process" />
-                       </bean>
+               <property name="messageListener" ref="slcDefault.jms.agent">
+<!--                   <bean parent="slcTemplate.jms.listenerAdapterCastor">
+                               <constructor-arg ref="slcDefault.jms.agent" />
+                               <property name="defaultListenerMethod" value="newExecution" />
+                       </bean> -->
                </property>
+               <!-- 
                <property name="messageSelector">
                        <bean factory-bean="slcDefault.jms.agent" factory-method="getMessageSelector"/>
                </property>
+                -->
        </bean>
 
        <bean id="slcDefault.jms.agent" class="org.argeo.slc.jms.JmsAgent">
                <property name="jmsTemplate" ref="slcDefault.jms.jmsTemplateCastor" />
                <property name="agentRegister" ref="slcJms.destination.agent.register" />
                <property name="agentUnregister" ref="slcJms.destination.agent.unregister" />
+               <property name="messageConverter" ref="slcDefault.jms.castorMessageConverter" />
+               <property name="modulesManager" ref="modulesManager" />
        </bean>
 
        
index a513e3f4fb77b4b579bc6fd37a8027e7c5309c06..2ef16863489b132cf816e3981e1fc8d7837ecfcd 100644 (file)
                <property name="executionSpec" ref="basic.spec" />\r
                <property name="executables">\r
                        <list>\r
-                               <ref bean="echo1" />\r
+                               <bean parent="task.echo" scope="execution">\r
+                                       <property name="message" value="From basic @{testedComponentId}" />\r
+                                       <aop:scoped-proxy />\r
+                               </bean>\r
                                <bean parent="testRun">\r
                                        <property name="testDefinition" ref="testDef" />\r
                                        <property name="testData">\r
index 5d849311ebfef33a407dcbcdf10e631828abf6c0..046b36990a267161c64cc139bcba52c12e35e831 100644 (file)
@@ -35,7 +35,7 @@
 \r
        <bean id="echo1" parent="task.echo" scope="execution">\r
                <property name="message"\r
-                       value="From main! @{testKey}, slc.flows=@{slc.flows}" />\r
+                       value="From main! @{testKey}" />\r
                <aop:scoped-proxy />\r
        </bean>\r
 </beans>
\ No newline at end of file
index 7571fc9572781b3c98b0b5d00dc44db6988b4a5c..c68414a9be4fd48bbe872aadb4a385e9895b20da 100644 (file)
@@ -15,7 +15,7 @@
                                        <bean class="org.argeo.slc.core.test.BasicTestData" scope="execution">\r
                                                <aop:scoped-proxy />\r
                                                <property name="expected" value="tata101" />\r
-                                               <property name="reached" value="tata@{testKey}" />\r
+                                               <property name="reached" value="tata@{testedComponentId}" />\r
                                        </bean>\r
                                </entry>\r
                        </map>\r
index 7623e79f0651767c8295dd03b9edc14f9c60800c..6d79a662cd0d0685d0bf369e4d96103868f1a569 100644 (file)
@@ -5,6 +5,9 @@ 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;
@@ -16,10 +19,11 @@ import org.argeo.slc.runtime.SlcAgentDescriptor;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.jms.core.JmsTemplate;
+import org.springframework.jms.support.converter.MessageConverter;
 
 /** JMS based implementation of SLC Agent. */
 public class JmsAgent extends AbstractAgent implements SlcAgent,
-               InitializingBean, DisposableBean {
+               InitializingBean, DisposableBean, MessageListener {
        private final static Log log = LogFactory.getLog(JmsAgent.class);
 
        private final SlcAgentDescriptor agentDescriptor;
@@ -27,6 +31,8 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
        private Destination agentRegister;
        private Destination agentUnregister;
 
+       private MessageConverter messageConverter;
+
        public JmsAgent() {
                try {
                        agentDescriptor = new SlcAgentDescriptor();
@@ -49,11 +55,6 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
                                + agentUnregister);
        }
 
-       public void newExecution(SlcExecution slcExecution) {
-               log.info("Execute SlcExecution :" + slcExecution);
-               runSlcExecution(slcExecution);
-       }
-
        public void setJmsTemplate(JmsTemplate jmsTemplate) {
                this.jmsTemplate = jmsTemplate;
        }
@@ -66,7 +67,33 @@ public class JmsAgent extends AbstractAgent implements SlcAgent,
                this.agentUnregister = agentUnregister;
        }
 
+       public void onMessage(Message message) {
+               // FIXME: we filter the messages on the client side, 
+               // because of a weird problem with selector since moving to OSGi
+               try {
+                       if (message.getStringProperty("slc-agentId").equals(
+                                       agentDescriptor.getUuid())) {
+                               runSlcExecution((SlcExecution) messageConverter
+                                               .fromMessage(message));
+                       }
+               } catch (JMSException e) {
+                       throw new SlcException("Cannot convert message " + message, e);
+               }
+
+       }
+
        public String getMessageSelector() {
-               return "slc-agentId=" + agentDescriptor.getUuid();
+               String messageSelector = "slc-agentId=" + agentDescriptor.getUuid()
+                               + "";
+               // String messageSelector = "slc-agentId LIKE '%'";
+               if (log.isDebugEnabled())
+                       log.debug("Message selector: '" + messageSelector + "'");
+               return messageSelector;
+       }
+
+       public void setMessageConverter(MessageConverter messageConverter) {
+               this.messageConverter = messageConverter;
        }
+       
+       
 }
index dfab1e4bf3ffa79cd8d8b1c017d91d8c8fda20ec..88d40a42645f0425de8c4c2fcc1315416afe0ae2 100644 (file)
@@ -1,10 +1,14 @@
 package org.argeo.slc.jms;
 
+import java.util.Enumeration;
+
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.Session;
 import javax.jms.TextMessage;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.SlcException;
 import org.springframework.jms.support.converter.MessageConversionException;
 import org.springframework.jms.support.converter.MessageConverter;
@@ -14,12 +18,25 @@ import org.springframework.xml.transform.StringResult;
 import org.springframework.xml.transform.StringSource;
 
 public class MarshallerMessageConverter implements MessageConverter {
+       private final static Log log = LogFactory
+                       .getLog(MarshallerMessageConverter.class);
+
        private Marshaller marshaller;
        private Unmarshaller unmarshaller;
 
        public Object fromMessage(Message message) throws JMSException,
                        MessageConversionException {
+               if (log.isTraceEnabled()) {
+                       Enumeration<String> names = message.getPropertyNames();
+                       while (names.hasMoreElements()) {
+                               String name = names.nextElement();
+                               log.trace("JMS Property: " + name + "="
+                                               + message.getObjectProperty(name));
+                       }
+               }
+
                if (message instanceof TextMessage) {
+
                        String text = ((TextMessage) message).getText();
                        try {
                                return unmarshaller.unmarshal(new StringSource(text));
index 75d94db02fd46f83ae6805d6abc192685bcb4173..ec53ca9af8d7edc4be06e0c443b26f7051ffbfbd 100644 (file)
@@ -48,7 +48,7 @@ public class DefaultModulesManager implements ExecutionModulesManager {
        }
 
        public void process(SlcExecution slcExecution) {
-               log.info("SlcExecution " + slcExecution);
+               log.info("##\n## Process SLC Execution " + slcExecution+"\n##");
 
                for(RealizedFlow flow : slcExecution.getRealizedFlows()) {
                        ExecutionModule module = getExecutionModule(flow.getModuleName(),
index fc34d1f178b13f003cc2b74b3ba49d6c4e38173e..d3647b7187b44343f20c0570fb3896a351bd0378 100644 (file)
@@ -5,6 +5,7 @@ import java.util.Properties;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.execution.ExecutionModulesManager;
 import org.argeo.slc.process.SlcExecution;
 import org.argeo.slc.runtime.SlcApplication;
 import org.argeo.slc.runtime.SlcExecutionContext;
@@ -12,30 +13,37 @@ import org.argeo.slc.runtime.SlcExecutionContext;
 public abstract class AbstractAgent {
        private final static Log log = LogFactory.getLog(AbstractAgent.class);
 
-       private SlcApplication<SlcExecutionContext> slcApplication;
+//     private SlcApplication<SlcExecutionContext> slcApplication;
+       
+       private ExecutionModulesManager modulesManager;
 
        protected void runSlcExecution(final SlcExecution slcExecution) {
-               // TODO: in a separate process
-               Thread thread = new Thread("SlcExecution " + slcExecution.getUuid()) {
-                       public void run() {
-                               Properties props = new Properties();
-                               Map<String, String> attributes = slcExecution.getAttributes();
-                               for (String key : attributes.keySet()) {
-                                       props.setProperty(key, attributes.get(key));
-                                       if (log.isTraceEnabled())
-                                               log.trace(key + "=" + props.getProperty(key));
-                               }
-                               slcApplication.execute(slcExecution, props, null, null);
-                               log.debug("Thread for SLC execution #" + slcExecution.getUuid()
-                                               + " finished.");
-                       }
-               };
-               thread.start();
+               modulesManager.process(slcExecution);
+//             Thread thread = new Thread("SlcExecution " + slcExecution.getUuid()) {
+//                     public void run() {
+//                             Properties props = new Properties();
+//                             Map<String, String> attributes = slcExecution.getAttributes();
+//                             for (String key : attributes.keySet()) {
+//                                     props.setProperty(key, attributes.get(key));
+//                                     if (log.isTraceEnabled())
+//                                             log.trace(key + "=" + props.getProperty(key));
+//                             }
+//                             slcApplication.execute(slcExecution, props, null, null);
+//                             log.debug("Thread for SLC execution #" + slcExecution.getUuid()
+//                                             + " finished.");
+//                     }
+//             };
+//             thread.start();
        }
 
-       public void setSlcApplication(
-                       SlcApplication<SlcExecutionContext> application) {
-               this.slcApplication = application;
+       public void setModulesManager(ExecutionModulesManager modulesManager) {
+               this.modulesManager = modulesManager;
        }
 
+       
+//     public void setSlcApplication(
+//                     SlcApplication<SlcExecutionContext> application) {
+//             this.slcApplication = application;
+//     }
+
 }
index bc13692900480cc5b4ee156819a77e2d986c8944..3ee850471906d81b54a90924e9605110fe5456c0 100644 (file)
@@ -6,7 +6,11 @@ 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.springframework.osgi.web=WARN
+log4j.logger.org.springframework=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.catalina=INFO
 log4j.logger.org.apache.coyote=INFO
index c8c8846ed31a219ff3c314a5316eb20cf6b1bdd2..6ea6b61c2434511253d040384fd453f44acd4186 100644 (file)
@@ -7,17 +7,19 @@
        <import resource="classpath:org/argeo/slc/activemq/spring.xml" />
 
        <!--
-               Create embedded broker <amq:broker useJmx="false" persistent="false">
-               <amq:transportConnectors> <amq:transportConnector
-               uri="tcp://localhost:61616" /> </amq:transportConnectors>
-               </amq:broker>
-       -->
+               Create embedded broker-->
+       <amq:broker useJmx="false" persistent="false">
+               <amq:transportConnectors>
+                       <amq:transportConnector uri="tcp://localhost:61616" />
+               </amq:transportConnectors>
+       </amq:broker>
 
+<!-- 
        <bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">
                <property name="config" value="classpath:activemq-conf.xml" />
                <property name="start" value="true" />
        </bean>
-
+ -->
 
        <bean id="template.jms.listenerContainer" parent="slcTemplate.jms.listenerContainer"
                abstract="true">
index ef74dca192b90a1dacd67bd3f79d99090f48c519..62d26b5a61f81bf1797b4db35685a6a15479a976 100644 (file)
        <!-- Active MQ -->
        <context-param>
                <param-name>org.apache.activemq.brokerURL</param-name>
-               <param-value>vm://localhost</param-value>
+               <param-value>tcp://localhost:61616</param-value>
        </context-param>
 
        <context-param>
index 9c63fe7eb20c0288accf0117bec662985492af28..a977a52e0d6011936912e9fe8e9fef8882ce67b8 100644 (file)
@@ -98,8 +98,7 @@
                                                <property name="slc.osgi.start"
                                                        value="org.argeo.dep.osgi.catalina.start,org.springframework.osgi.extender,org.springframework.osgi.web.extender,org.springframework.osgi.samples.simplewebapp,org.argeo.slc.server.activemq,org.argeo.slc.server.hibernate,org.argeo.slc.webapp,org.argeo.slc.demo.basic,org.argeo.slc.demo.manager" />
 
-                                               <property name="javaCommand"
-                                                       location="${java.home}${file.separator}bin${file.separator}java -Xmx256m" />
+                                               <property name="javaCommand" value="java -Xmx256m" />
                                                <ant antfile="${equinoxDir}/org.argeo.slc.osgiboot-osgiboot.xml" />
 
                                        </tasks>
                </dependency>
 
        </dependencies>
-<!-- 
-       <repositories>
-               <repository>
-                       <id>spring-osgified-artifacts</id>
-                       <snapshots>
-                               <enabled>true</enabled>
-                       </snapshots>
-                       <name>Springframework Maven OSGified Artifacts Repository</name>
-                       <url>http://maven.springframework.org/osgi</url>
-               </repository>
-       </repositories>
-        -->
+       <!--
+               <repositories> <repository> <id>spring-osgified-artifacts</id>
+               <snapshots> <enabled>true</enabled> </snapshots> <name>Springframework
+               Maven OSGified Artifacts Repository</name>
+               <url>http://maven.springframework.org/osgi</url> </repository>
+               </repositories>
+       -->
 </project>
\ No newline at end of file