]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
First consistent version with JMS
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 11 Jan 2009 22:36:20 +0000 (22:36 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 11 Jan 2009 22:36:20 +0000 (22:36 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2075 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

22 files changed:
org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties
org.argeo.slc.webapp/src/main/webapp/test-amq/send.js
runtime/org.argeo.slc.launcher/pom.xml
runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/CleanAgentsController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/ListAgentsController.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/activemq.xml
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/transaction.xml
runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/dao/runtime/SlcAgentDescriptorDao.java
runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/SlcExecution.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/AgentListenerContainer.java [new file with mode: 0644]
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java
runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring-agent.xml [new file with mode: 0644]
runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring.xml [new file with mode: 0644]
runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/jms/spring.xml [deleted file]
runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml
runtime/org.argeo.slc.support.hibernate/build.xml [deleted file]
runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/runtime/SlcAgentDescriptorDaoHibernate.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/ObjectList.java [new file with mode: 0644]

index 925c2181b81ff1ba01fd68e07cbb26007646c470..34f682a8a0952174d029cb0c2d29f248c95ab54c 100644 (file)
@@ -20,7 +20,7 @@ log4j.logger.org.hibernate.transaction=WARN
 #log4j.logger.org.hibernate.type=TRACE\r
 \r
 # Active MQ\r
-log4j.logger.org.apache.activemq.web.MessageListenerServlet=DEBUG\r
+log4j.logger.org.apache.activemq.web.MessageListenerServlet=WARN\r
 \r
 # EhCache\r
 log4j.logger.net.sf.ehcache=WARN\r
index f40d3c49b5d079c2f802e985a041a413d0e1c9b9..8210c6aefa1e7cba03452dd1444ecc5b49247d4c 100644 (file)
@@ -1,3 +1,3 @@
-amq.sendMessage('TEST.QUEUE','<test>My Test</test>');
+amq.sendMessage('topic://agent.c6fb85cc-200e-41f1-9b63-fade5cad0f14.newExecution','<slc:slc-execution uuid="b0b68669-b598-4518-8ae3-c9c3190e87b4"><slc:status>STARTED</slc:status><slc:type>slcAnt</slc:type><slc:host>localhost</slc:host><slc:user>user</slc:user><slc:attributes><slc:attribute name="ant.file">/test</slc:attribute></slc:attributes></slc:slc-execution>');
 alert('Message sent!');
 document.write('Message sent');
\ No newline at end of file
index 1d59972e97ac5fa0cd0fdde98526ea76b166b4cb..97b5ab3ebda8ff3715231af343814491534b61b1 100644 (file)
@@ -1,4 +1,5 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
                <groupId>org.argeo.slc</groupId>
                                                <Export-Package>
                                                        org.argeo.slc.*
                                                </Export-Package>
+                                               <Main-Class>org.argeo.slc.cli.SlcMain</Main-Class>
                                        </instructions>
                                </configuration>
                        </plugin>
+                       <plugin>
+                               <groupId>org.codehaus.mojo</groupId>
+                               <artifactId>exec-maven-plugin</artifactId>
+                               <version>1.1-beta-1</version>
+                               <configuration>
+                                       <mainClass>org.argeo.slc.cli.SlcMain</mainClass>
+                               </configuration>
+                       </plugin>
                </plugins>
        </build>
        <dependencies>
                        <artifactId>org.argeo.slc.support.simple</artifactId>
                        <version>${project.version}</version>
                </dependency>
-               
+
                <dependency>
                        <groupId>org.argeo.dep.osgi</groupId>
                        <artifactId>org.argeo.dep.osgi.commons.cli</artifactId>
                </dependency>
-       
+
                <!-- TESTING -->
                <dependency>
                        <groupId>org.argeo.slc.runtime</groupId>
index 32c3ce90660f3c8ffc87a745e5b9eb153e1a7c0c..8db1330a6e1d0106bce79bd381cde8b4fd30f3e7 100644 (file)
@@ -1,6 +1,7 @@
 package org.argeo.slc.cli;
 
 import java.io.FileInputStream;
+import java.io.IOException;
 import java.util.Properties;
 
 import org.apache.commons.cli.CommandLine;
@@ -18,8 +19,8 @@ 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.ClassPathXmlApplicationContext;
 import org.springframework.context.support.FileSystemXmlApplicationContext;
 
 public class SlcMain {
@@ -30,6 +31,7 @@ public class SlcMain {
        private static Log log = null;
 
        private final static String BOOTSTRAP_LOG4J_CONFIG = "org/argeo/slc/cli/bootstrapLog4j.properties";
+       private final static String DEFAULT_AGENT_CONTEXT = "classpath:org/argeo/slc/activemq/spring-agent.xml";
 
        private final static Option modeOpt = OptionBuilder.withLongOpt("mode")
                        .withArgName("mode").hasArg().withDescription(
@@ -173,29 +175,17 @@ public class SlcMain {
                }
                // Agent
                else if (mode.equals(Mode.agent)) {
-                       if (runtimeStr == null)
-                               runtimeStr = "agent.xml";
-                       final ConfigurableApplicationContext applicationContext = new FileSystemXmlApplicationContext(
-                                       "agent.xml");
+                       final ConfigurableApplicationContext applicationContext;
+                       if (runtimeStr == null) {
+                               applicationContext = new ClassPathXmlApplicationContext(
+                                               DEFAULT_AGENT_CONTEXT);
+                       } else {
+                               applicationContext = new FileSystemXmlApplicationContext(
+                                               runtimeStr);
+                       }
+                       applicationContext.registerShutdownHook();
                        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
-                               }
-                       }
                }
        }
 
index a4a67c10e5529d9a96f5098d105cb978be58f8b2..f6566c82832788c8e7fbddefada0ee6dffe56c8c 100644 (file)
@@ -19,4 +19,9 @@ public class AgentServiceImpl {
                log.info("Registered agent #" + slcAgentDescriptor.getUuid());
        }
 
+       public void unregister(SlcAgentDescriptor slcAgentDescriptor) {
+               slcAgentDescriptorDao.delete(slcAgentDescriptor);
+               log.info("Unregistered agent #" + slcAgentDescriptor.getUuid());
+       }
+
 }
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/CleanAgentsController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/CleanAgentsController.java
new file mode 100644 (file)
index 0000000..355a811
--- /dev/null
@@ -0,0 +1,32 @@
+package org.argeo.slc.web.mvc.runtime;\r
+\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.argeo.slc.dao.runtime.SlcAgentDescriptorDao;\r
+import org.argeo.slc.runtime.SlcAgentDescriptor;\r
+import org.argeo.slc.web.mvc.AbstractServiceController;\r
+import org.springframework.web.servlet.ModelAndView;\r
+\r
+/** Lists results possibly filtering them. */\r
+public class CleanAgentsController extends AbstractServiceController {\r
+       private final SlcAgentDescriptorDao slcAgentDescriptorDao;\r
+\r
+       public CleanAgentsController(SlcAgentDescriptorDao slcAgentDescriptorDao) {\r
+               this.slcAgentDescriptorDao = slcAgentDescriptorDao;\r
+       }\r
+\r
+       @Override\r
+       protected void handleServiceRequest(HttpServletRequest request,\r
+                       HttpServletResponse response, ModelAndView modelAndView)\r
+                       throws Exception {\r
+               List<SlcAgentDescriptor> list = slcAgentDescriptorDao\r
+                               .listSlcAgentDescriptors();\r
+               for (SlcAgentDescriptor t : new Vector<SlcAgentDescriptor>(list)) {\r
+                       slcAgentDescriptorDao.delete(t);\r
+               }\r
+       }\r
+}\r
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/ListAgentsController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/ListAgentsController.java
new file mode 100644 (file)
index 0000000..03e2af1
--- /dev/null
@@ -0,0 +1,31 @@
+package org.argeo.slc.web.mvc.runtime;\r
+\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import org.argeo.slc.dao.runtime.SlcAgentDescriptorDao;\r
+import org.argeo.slc.msg.ObjectList;\r
+import org.argeo.slc.runtime.SlcAgentDescriptor;\r
+import org.argeo.slc.web.mvc.AbstractServiceController;\r
+import org.springframework.web.servlet.ModelAndView;\r
+\r
+/** Lists results possibly filtering them. */\r
+public class ListAgentsController extends AbstractServiceController {\r
+       private final SlcAgentDescriptorDao slcAgentDescriptorDao;\r
+\r
+       public ListAgentsController(SlcAgentDescriptorDao slcAgentDescriptorDao) {\r
+               this.slcAgentDescriptorDao = slcAgentDescriptorDao;\r
+       }\r
+\r
+       @Override\r
+       protected void handleServiceRequest(HttpServletRequest request,\r
+                       HttpServletResponse response, ModelAndView modelAndView)\r
+                       throws Exception {\r
+               List<SlcAgentDescriptor> list = slcAgentDescriptorDao\r
+                               .listSlcAgentDescriptors();\r
+               modelAndView.addObject("list", new ObjectList(list));\r
+       }\r
+}\r
index df37901e1eabf7f021c617db1f40d9f6dbe15839..0581aa9316ed9942bf6cc4b93235cceac7251337 100644 (file)
@@ -2,41 +2,20 @@
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-       http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd">
+       http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
 
-       <import resource="classpath:org/argeo/slc/jms/spring.xml" />
+       <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>
 
-       <amq:connectionFactory id="amqConnectionFactory"
-               brokerURL="vm://localhost" />
-
-       <bean id="jmsConnectionFactory"
-               class="org.springframework.jms.connection.SingleConnectionFactory">
-               <property name="targetConnectionFactory">
-                       <ref local="amqConnectionFactory" />
-               </property>
-       </bean>
-
-       <!-- Destinations -->
-       <amq:topic id="destination.agent.register" physicalName="agent.register" />
-
-       <!-- Templates -->
-       <bean id="template.listenerContainer"
-               class="org.springframework.jms.listener.DefaultMessageListenerContainer"
+       <bean id="template.jms.listenerContainer" parent="slcTemplate.jms.listenerContainer"
                abstract="true">
-               <property name="connectionFactory" ref="jmsConnectionFactory" />
                <property name="transactionManager" ref="transactionManager" />
        </bean>
 
-       <bean id="template.listenerAdapter"
-               class="org.springframework.jms.listener.adapter.MessageListenerAdapter"
-               abstract="true">
-               <property name="messageConverter" ref="slcDefault.jms.castorMessageConverter" />
-       </bean>
-
 </beans>
\ No newline at end of file
index ab64f945017011649fae65bf4e87c5699adfebc3..a39c6d1123c22daa3263e4d1d8cdb0a647744d74 100644 (file)
                <constructor-arg ref="slcAgentDescriptorDao" />
        </bean>
 
-       <bean id="agentService.jmsContainer.register" parent="template.listenerContainer">
-               <property name="destination" ref="destination.agent.register" />
+       <bean id="agentService.jmsContainer.register" parent="template.jms.listenerContainer">
+               <property name="destination" ref="slcJms.destination.agent.register" />
                <property name="messageListener">
-                       <bean parent="template.listenerAdapter">
+                       <bean parent="slcTemplate.jms.listenerAdapter">
                                <constructor-arg ref="agentService" />
                                <property name="defaultListenerMethod" value="register" />
                        </bean>
                </property>
        </bean>
 
+       <bean id="agentService.jmsContainer.unregister" parent="template.jms.listenerContainer">
+               <property name="destination" ref="slcJms.destination.agent.unregister" />
+               <property name="messageListener">
+                       <bean parent="slcTemplate.jms.listenerAdapter">
+                               <constructor-arg ref="agentService" />
+                               <property name="defaultListenerMethod" value="unregister" />
+                       </bean>
+               </property>
+       </bean>
+
 </beans>
\ No newline at end of file
index b6182c083a866bc2b55ec3c5cf86ddb5f50badaa..3e64f53315d2ec83dcbb149c04e42686ced2a695 100644 (file)
                <constructor-arg ref="testResultCollectionDao" />
        </bean>
 
-       <bean name="/listResults.service"
-               class="org.argeo.slc.web.mvc.result.ListResultsController">
+       <bean name="/listResults.service" class="org.argeo.slc.web.mvc.result.ListResultsController">
                <constructor-arg ref="testResultCollectionDao" />
        </bean>
 
+       <bean name="/listAgents.service" class="org.argeo.slc.web.mvc.runtime.ListAgentsController">
+               <constructor-arg ref="slcAgentDescriptorDao" />
+       </bean>
+
+       <bean name="/cleanAgents.service" class="org.argeo.slc.web.mvc.runtime.CleanAgentsController">
+               <constructor-arg ref="slcAgentDescriptorDao" />
+       </bean>
+
        <!--
                <bean name="/resultList.service"
                class="org.argeo.slc.web.mvc.result.ResultListController">
index 7f69fa4da820ff8fc4b07b06e2edcfc8cc1d260b..7e6d0ad5c17b2e00b1762d1ddb786430ad609449 100644 (file)
                <aop:advisor advice-ref="daoAdvice" pointcut-ref="daoProcessMethods" />
        </aop:config>
 
+       <aop:config>
+               <aop:pointcut id="daoRuntimeMethods"
+                       expression="execution(* org.argeo.slc.dao.runtime.*.*(..))" />
+               <aop:advisor advice-ref="daoAdvice" pointcut-ref="daoRuntimeMethods" />
+       </aop:config>
+
        <aop:config>
                <aop:pointcut id="daoTestMethods"
                        expression="execution(* org.argeo.slc.dao.test.*.*(..))" />
@@ -40,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.*.*.*(..))" />
@@ -54,5 +60,5 @@
                        <tx:method name="*" propagation="REQUIRED" />
                </tx:attributes>
        </tx:advice>
-
+ -->
 </beans>
\ No newline at end of file
index 3ad307014eda6aaa3360d96ea087feed589abfc6..3709968c39a4df95835fd6e64ce04557e0cf6e33 100644 (file)
@@ -7,6 +7,8 @@ import org.argeo.slc.runtime.SlcAgentDescriptor;
 public interface SlcAgentDescriptorDao {
        public void create(SlcAgentDescriptor slcAgentDescriptor);
 
+       public void delete(SlcAgentDescriptor slcAgentDescriptor);
+
        public List<SlcAgentDescriptor> listSlcAgentDescriptors();
 
 }
index e1ae1ecf33e0a243b037b35d1cb51caca83956f7..c066d2f1d6bf6f7fee79d4e6cf64316b381c18dc 100644 (file)
@@ -98,4 +98,12 @@ public class SlcExecution {
        public void setAttributes(Map<String, String> attributes) {\r
                this.attributes = attributes;\r
        }\r
+\r
+       public String toString() {\r
+               StringBuffer buf = new StringBuffer(getClass().getSimpleName());\r
+               buf.append('#').append(uuid);\r
+               buf.append(" status=").append(status);\r
+               buf.append(" attributes=").append(attributes);\r
+               return buf.toString();\r
+       }\r
 }\r
diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/AgentListenerContainer.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/AgentListenerContainer.java
new file mode 100644 (file)
index 0000000..659b4f5
--- /dev/null
@@ -0,0 +1,43 @@
+package org.argeo.slc.jms;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.jms.listener.DefaultMessageListenerContainer;
+import org.springframework.jms.listener.adapter.MessageListenerAdapter;
+import org.springframework.jms.support.converter.MessageConverter;
+
+public class AgentListenerContainer extends DefaultMessageListenerContainer
+               implements InitializingBean {
+       private final static Log log = LogFactory.getLog(AgentListenerContainer.class);
+       
+       private JmsAgent jmsAgent;
+       private String action;
+       private MessageConverter messageConverter;
+
+       @Override
+       public void afterPropertiesSet() {
+               MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(
+                               jmsAgent);
+               messageListenerAdapter.setDefaultListenerMethod(action);
+               messageListenerAdapter.setMessageConverter(messageConverter);
+               setMessageListener(messageListenerAdapter);
+               setDestinationName(jmsAgent.actionDestinationName(action));
+               super.afterPropertiesSet();
+               
+               log.info("Listening to "+getDestinationName());
+       }
+
+       public void setJmsAgent(JmsAgent jmsAgent) {
+               this.jmsAgent = jmsAgent;
+       }
+
+       public void setAction(String action) {
+               this.action = action;
+       }
+
+       public void setMessageConverter(MessageConverter messageConverter) {
+               this.messageConverter = messageConverter;
+       }
+
+}
index 7aff0ab20ab3315f21569251d667a82d85a1d042..66c0718fc946c29f6a8199990123496357f3633d 100644 (file)
@@ -12,18 +12,24 @@ 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.process.SlcExecution;
 import org.argeo.slc.runtime.SlcAgent;
 import org.argeo.slc.runtime.SlcAgentDescriptor;
+import org.springframework.beans.factory.DisposableBean;
 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 {
+public class JmsAgent implements SlcAgent, InitializingBean, DisposableBean {
        private final static Log log = LogFactory.getLog(JmsAgent.class);
 
        private final SlcAgentDescriptor agentDescriptor;
        private JmsTemplate jmsTemplate;
        private Destination agentRegister;
+       private Destination agentUnregister;
+
+       private String agentDestinationPrefix = "agent.";
+       private String agentDestinationBase;
 
        public JmsAgent() {
                try {
@@ -36,18 +42,25 @@ public class JmsAgent implements SlcAgent, MessageListener, InitializingBean {
        }
 
        public void afterPropertiesSet() throws Exception {
+               agentDestinationBase = agentDestinationPrefix
+                               + agentDescriptor.getUuid() + ".";
                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 destroy() throws Exception {
+               jmsTemplate.convertAndSend(agentUnregister, agentDescriptor);
+               log.info("Agent #" + agentDescriptor.getUuid() + " unregistered to "
+                               + agentRegister);
+       }
 
+       public String actionDestinationName(String action) {
+               return agentDestinationBase + action;
+       }
+
+       public void newExecution(SlcExecution slcExecution) {
+               log.info("Would execute SlcExecution :" + slcExecution);
        }
 
        public void setJmsTemplate(JmsTemplate jmsTemplate) {
@@ -58,4 +71,12 @@ public class JmsAgent implements SlcAgent, MessageListener, InitializingBean {
                this.agentRegister = agentRegister;
        }
 
+       public void setAgentUnregister(Destination agentUnregister) {
+               this.agentUnregister = agentUnregister;
+       }
+
+       public void setAgentDestinationPrefix(String agentDestinationPrefix) {
+               this.agentDestinationPrefix = agentDestinationPrefix;
+       }
+
 }
diff --git a/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring-agent.xml b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring-agent.xml
new file mode 100644 (file)
index 0000000..32aa12f
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+       http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"
+       default-lazy-init="false">
+
+       <bean
+               class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
+               lazy-init="false">
+               <property name="properties">
+                       <props>
+                               <prop key="org.apache.activemq.brokerURL">
+                                       tcp://localhost:61616
+                </prop>
+                       </props>
+               </property>
+               <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
+               <property name="ignoreUnresolvablePlaceholders" value="true" />
+       </bean>
+
+       <import resource="classpath:org/argeo/slc/activemq/spring.xml" />
+
+       <bean id="slcDefault.jms.agent" class="org.argeo.slc.jms.JmsAgent">
+               <property name="jmsTemplate" ref="slcDefault.jms.jmsTemplate" />
+               <property name="agentRegister" ref="slcJms.destination.agent.register" />
+               <property name="agentUnregister" ref="slcJms.destination.agent.unregister" />
+       </bean>
+
+       <bean id="slcTemplate.jms.agentListenerContainer.newExecution"
+               parent="slcTemplate.jms.agentListenerContainer">
+               <property name="action" value="newExecution" />
+       </bean>
+
+       <!-- Templates -->
+       <bean id="slcTemplate.jms.agentListenerContainer" class="org.argeo.slc.jms.AgentListenerContainer"
+               abstract="true">
+               <property name="jmsAgent" ref="slcDefault.jms.agent" />
+               <property name="connectionFactory" ref="slcDefault.jms.connectionFactory" />
+               <property name="messageConverter" ref="slcDefault.jms.castorMessageConverter" />
+               <property name="pubSubDomain" value="true" />
+       </bean>
+
+
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring.xml b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring.xml
new file mode 100644 (file)
index 0000000..05d439d
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+       http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"
+       default-lazy-init="false">
+
+       <import resource="classpath:org/argeo/slc/castor/spring.xml" />
+
+       <bean id="slcDefault.jms.castorMessageConverter" class="org.argeo.slc.jms.MarshallerMessageConverter">
+               <property name="marshaller" ref="slcDefault.castor.marshaller" />
+               <property name="unmarshaller" ref="slcDefault.castor.marshaller" />
+       </bean>
+
+       <amq:connectionFactory id="slcDefault.jms.amqConnectionFactory"
+               brokerURL="${org.apache.activemq.brokerURL}" />
+
+       <bean id="slcDefault.jms.connectionFactory"
+               class="org.springframework.jms.connection.SingleConnectionFactory">
+               <property name="targetConnectionFactory">
+                       <ref local="slcDefault.jms.amqConnectionFactory" />
+               </property>
+       </bean>
+
+       <bean id="slcDefault.jms.jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
+               <property name="connectionFactory" ref="slcDefault.jms.connectionFactory" />
+               <property name="messageConverter" ref="slcDefault.jms.castorMessageConverter" />
+       </bean>
+
+
+       <!-- Destinations -->
+       <amq:topic id="slcJms.destination.agent.register"
+               physicalName="agent.register" />
+       <amq:topic id="slcJms.destination.agent.unregister"
+               physicalName="agent.unregister" />
+
+       <!-- Templates -->
+       <bean id="slcTemplate.jms.listenerContainer"
+               class="org.springframework.jms.listener.DefaultMessageListenerContainer"
+               abstract="true">
+               <property name="connectionFactory" ref="slcDefault.jms.connectionFactory" />
+       </bean>
+
+       <bean id="slcTemplate.jms.listenerAdapter"
+               class="org.springframework.jms.listener.adapter.MessageListenerAdapter"
+               abstract="true">
+               <property name="messageConverter" ref="slcDefault.jms.castorMessageConverter" />
+       </bean>
+</beans>
\ No newline at end of file
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
deleted file mode 100644 (file)
index c8536ca..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
-       default-lazy-init="true">
-
-       <import resource="classpath:org/argeo/slc/castor/spring.xml" />
-
-       <bean id="slcDefault.jms.castorMessageConverter" class="org.argeo.slc.jms.MarshallerMessageConverter">
-               <property name="marshaller" ref="slcDefault.castor.marshaller" />
-               <property name="unmarshaller" ref="slcDefault.castor.marshaller" />
-       </bean>
-
-</beans>
\ No newline at end of file
index c6dae8f8fd2ecd50ddf7fc422dfa477ff6955332..1a5638d6499746d2f24b42f441db43d4b7ea8262 100644 (file)
                </field>
        </class>
 
+       <class name="org.argeo.slc.msg.ObjectList">
+               <map-to ns-uri="http://argeo.org/projects/slc/schemas"
+                       ns-prefix="slc" />
+               <field name="objects" collection="arraylist">
+                       <bind-xml auto-naming="deriveByClass" />
+               </field>
+       </class>
+
        <class name="org.argeo.slc.core.test.tree.TreeTestResultList">
                <map-to ns-uri="http://argeo.org/projects/slc/schemas"
                        ns-prefix="slc" />
diff --git a/runtime/org.argeo.slc.support.hibernate/build.xml b/runtime/org.argeo.slc.support.hibernate/build.xml
deleted file mode 100644 (file)
index 4213f1d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<project xmlns:artifact="urn:maven-artifact-ant" default="deploy">\r
-\r
-       <path id="maven-ant-tasks.classpath"\r
-             path="D:\dev\tools\maven-2.0.7\lib\maven-ant-tasks-2.0.7.jar" />\r
-       <typedef resource="org/apache/maven/artifact/ant/antlib.xml"\r
-                uri="urn:maven-artifact-ant"\r
-                classpathref="maven-ant-tasks.classpath" />\r
-\r
-       <property name="local" location="D:/dev/mavenLocal/" />\r
-       <property name="local.argeo" location="${local}/org/argeo/slc/" />\r
-       <property name="repo.argeo"\r
-                 value="file:///D:/dev/test/mavenArgeoLocalRep/" />\r
-\r
-       <target name="deploy">\r
-               <deploy artifact="argeo-slc-core" version="0.6.0" />\r
-       </target>\r
-\r
-       <!-- Macrodefs -->\r
-       <macrodef name="deploy">\r
-               <attribute name="artifact" />\r
-               <attribute name="version" />\r
-               <sequential>\r
-                       <artifact:install-provider artifactId="wagon-file"\r
-                                                  version="1.0-beta-2" />\r
-                       <artifact:deploy file="${local.argeo}/@{artifact}/@{version}/@{artifact}-@{version}.jar">\r
-                               <artifact:pom file="pom.xml" />\r
-                               <remoterepository url="${repo.argeo}" />\r
-                               <attach classifier="sources"\r
-                                       file="${local.argeo}/@{artifact}/@{version}/@{artifact}-@{version}-sources.jar" />\r
-                               <attach classifier="javadoc"\r
-                                       file="${local.argeo}/@{artifact}/@{version}/@{artifact}-@{version}-javadoc.jar" />\r
-                       </artifact:deploy>\r
-               </sequential>\r
-       </macrodef>\r
-</project>
\ No newline at end of file
index c6b6ac90b7800555c4da196e6080bdf9bee0317b..6fead8d8d6512c2f190b90843759133d8d538800 100644 (file)
@@ -13,6 +13,10 @@ public class SlcAgentDescriptorDaoHibernate extends HibernateDaoSupport
                getHibernateTemplate().save(slcAgentDescriptor);\r
        }\r
 \r
+       public void delete(SlcAgentDescriptor slcAgentDescriptor) {\r
+               getHibernateTemplate().delete(slcAgentDescriptor);\r
+       }\r
+\r
        public List<SlcAgentDescriptor> listSlcAgentDescriptors() {\r
                return (List<SlcAgentDescriptor>) getHibernateTemplate().loadAll(\r
                                SlcAgentDescriptor.class);\r
diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/ObjectList.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/ObjectList.java
new file mode 100644 (file)
index 0000000..9f057cc
--- /dev/null
@@ -0,0 +1,24 @@
+package org.argeo.slc.msg;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ObjectList {
+       private List<?> objects = new ArrayList<Object>();
+
+       public ObjectList() {
+       }
+
+       public ObjectList(List<?> objects) {
+               this.objects = objects;
+       }
+
+       public List<?> getObjects() {
+               return objects;
+       }
+
+       public void setObjects(List<?> objects) {
+               this.objects = objects;
+       }
+
+}