]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Introduce JMS based notifications
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 15 Mar 2009 11:50:22 +0000 (11:50 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 15 Mar 2009 11:50:22 +0000 (11:50 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2272 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

22 files changed:
demo/site/org.argeo.slc.demo.agent/META-INF/MANIFEST.MF
demo/site/org.argeo.slc.demo.agent/META-INF/spring/jms.xml
demo/site/org.argeo.slc.demo.agent/META-INF/spring/osgi.xml
demo/site/org.argeo.slc.demo.basic/conf/basic.xml
demo/site/org.argeo.slc.demo.basic/conf/common.xml
demo/site/org.argeo.slc.demo.basic/conf/osgi.xml
demo/site/org.argeo.slc.demo.deploy/pom.xml
demo/site/org.argeo.slc.demo.manager/META-INF/MANIFEST.MF
demo/site/org.argeo.slc.demo.manager/conf/manager-osgi.xml
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/test/TestManagerServiceImpl.java
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/test/TestManagerService.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTreeTestResultListener.java [new file with mode: 0644]
runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml
runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/test/SimpleTestRun.java
server/org.argeo.slc.siteserver/bundles/logging/log4j.properties
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/MANIFEST.MF
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms-osgi.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/META-INF/MANIFEST.MF
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.services/META-INF/spring/services-osgi.xml
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.services/META-INF/spring/services.xml

index b166dcc16732436b6c4a9bba2c44a0b71a3cdc80..0a964fd25d87d56b0cd0b6a33ec6935daf69356d 100644 (file)
@@ -5,7 +5,8 @@ Import-Package:
  javax.jms,
  org.apache.activemq.command,
  org.springframework.jms.listener,
- org.springframework.oxm.castor
+ org.springframework.oxm.castor,
+ org.springframework.jms.core
 Require-Bundle: 
  org.argeo.slc.support.activemq,
  org.argeo.slc.specs,
index 448ac8ebbb190b4a50956952a81a189782941a52..f0214ef48df4e01923f4ccb079ee22eec841bcd4 100644 (file)
                <property name="modulesManager" ref="modulesManager" />
        </bean>
 
+       <!-- TreeTestResult Listener -->
+       <bean id="resultListener" class="org.argeo.slc.jms.JmsTreeTestResultListener">
+               <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="jmsTemplate">
+                       <bean class="org.springframework.jms.core.JmsTemplate">
+                               <property name="messageConverter" ref="slcDefault.jms.castorMessageConverter" />
+                               <property name="connectionFactory" ref="jmsConnectionFactory" />
+                       </bean>
+               </property>
+       </bean>
 </beans>
\ No newline at end of file
index 450b60f4aafc5c4df05c580d5038edce1c3937ff..b6b025c2dfa89ac5f3890a61dc1e2fa0438dad76 100644 (file)
@@ -6,9 +6,10 @@
        http://www.springframework.org/schema/beans   \r
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
 \r
+       <service ref="resultListener" interface="org.argeo.slc.test.TestResultListener" />\r
+\r
        <reference id="modulesManager"\r
                interface="org.argeo.slc.execution.ExecutionModulesManager" />\r
-\r
        <reference id="jmsConnectionFactory" interface="javax.jms.ConnectionFactory" />\r
 \r
 </beans:beans>
\ No newline at end of file
index 2ef16863489b132cf816e3981e1fc8d7837ecfcd..975b93f0bf48e87503940b4368867642e69c3f66 100644 (file)
@@ -39,6 +39,7 @@
                                        <aop:scoped-proxy />\r
                                </bean>\r
                                <bean parent="testRun">\r
+                                       <property name="path" value="/test/basic" />\r
                                        <property name="testDefinition" ref="testDef" />\r
                                        <property name="testData">\r
                                                <bean parent="basic.ref">\r
index 75f40055ca2e751ceed08c05521487674c84e567..f2d252b3c236db1b4ca76ab38f86f2c08f3e73cd 100644 (file)
@@ -7,7 +7,9 @@
        <bean id="testDef" class="org.argeo.slc.core.test.BasicTestDefinition"
                scope="prototype" />
 
-       <bean id="testResult" parent="slcDefault.test.basicSimpleTestResult" />
+       <bean id="testResult" parent="slcDefault.test.basicTreeTestResult">
+               <property name="listeners" ref="resultListeners" />
+       </bean>
 
        <bean id="testRun" class="org.argeo.slc.core.test.SimpleTestRun"
                abstract="true">
index ebc3364ba1754a81c537ca317f1a615856ca96bb..050e4c771dd6939083a81f9aa903ea6c60118306 100644 (file)
@@ -8,4 +8,6 @@
 \r
        <service interface="org.argeo.slc.execution.ExecutionModule"\r
                ref="executionModule" />\r
+\r
+       <list id="resultListeners" interface="org.argeo.slc.test.TestResultListener" />\r
 </beans:beans>
\ No newline at end of file
index e6a30ccf0d69c014c74a9cb719398a44b67460fc..9e73311eb225f61071342a0a5bbc30e2fe58099e 100644 (file)
@@ -14,7 +14,9 @@
        <properties>
                <bundlesToStart>
                        org.springframework.osgi.extender,
-                       org.argeo.slc.demo.basic
+                       org.argeo.slc.demo.basic,
+                       org.argeo.slc.demo.manager,
+                       org.argeo.slc.support.equinox
                </bundlesToStart>
        </properties>
        <build>
index 3ee9f68e9c067ef092a4ba3c822abc9bc1cee818..b972bfb26ec99ff36b6be9510b418538fba60b9e 100644 (file)
@@ -1,14 +1,7 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
 Bundle-Name: Manager Plug-in
 Bundle-SymbolicName: org.argeo.slc.demo.manager
 Bundle-Version: 1.0.0
 Spring-Context: conf/*
-Created-By: 1.6.0_0 (Sun Microsystems Inc.)
-Import-Package: org.apache.commons.logging;version="1.1",
- org.argeo.slc.core.execution;version="0.11.3.SNAPSHOT",
- org.argeo.slc.execution;version="0.11.3.SNAPSHOT",
- org.springframework.beans.factory.config;version="2.5.6.A"
-Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
-Bundle-DocURL: http://www.argeo.org
-Tool: Bnd-0.0.255
+Require-Bundle: 
+ org.argeo.slc.specs,
+ org.argeo.slc.support.simple
index 36419b408e02643906bdacec1bc883359925670e..16d57c1274bbfb1d2da9a20dae9bf40809075617 100644 (file)
@@ -10,4 +10,9 @@
                cardinality="0..N" />\r
 \r
        <service ref="modulesManager" interface="org.argeo.slc.execution.ExecutionModulesManager" />\r
+\r
+       <service interface="org.argeo.slc.test.TestResultListener">\r
+               <beans:bean class="org.argeo.slc.core.test.tree.TreeTestResultLogger" />\r
+       </service>\r
+\r
 </beans:beans>
\ No newline at end of file
index 0b2b5655d8eca1948a89713b790b336d2534b1ef..2489dd468fe44e61c845f192d0be1eca2d21af4e 100644 (file)
@@ -2,11 +2,15 @@ package org.argeo.slc.services.impl.test;
 \r
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.core.test.tree.TreeTestResult;\r
 import org.argeo.slc.core.test.tree.TreeTestResultCollection;\r
 import org.argeo.slc.dao.process.SlcExecutionDao;\r
 import org.argeo.slc.dao.test.TestRunDescriptorDao;\r
 import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;\r
 import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
+import org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest;\r
+import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;\r
+import org.argeo.slc.msg.test.tree.ResultPartRequest;\r
 import org.argeo.slc.process.SlcExecution;\r
 import org.argeo.slc.services.test.TestManagerService;\r
 import org.argeo.slc.test.TestRunDescriptor;\r
@@ -32,6 +36,9 @@ public class TestManagerServiceImpl implements TestManagerService {
 \r
        public void registerTestRunDescriptor(TestRunDescriptor testRunDescriptor) {\r
                if (testRunDescriptor != null) {\r
+                       if (log.isTraceEnabled())\r
+                               log.trace("Registering test run descriptor #"\r
+                                               + testRunDescriptor.getTestRunUuid());\r
                        testRunDescriptorDao.saveOrUpdate(testRunDescriptor);\r
 \r
                        // Update tree test result collection\r
@@ -48,6 +55,12 @@ public class TestManagerServiceImpl implements TestManagerService {
                                        addResultToCollection(collectionId, testRunDescriptor\r
                                                        .getTestResultUuid());\r
                                }\r
+                       } else {\r
+//                             log\r
+//                                             .trace("ResultUUID="\r
+//                                                             + testRunDescriptor.getTestResultUuid());\r
+//                             addResultToCollection("default", testRunDescriptor\r
+//                                             .getTestResultUuid());\r
                        }\r
                }\r
        }\r
@@ -78,4 +91,35 @@ public class TestManagerServiceImpl implements TestManagerService {
                }\r
        }\r
 \r
+       public void createTreeTestResult(CreateTreeTestResultRequest msg) {\r
+               TreeTestResult treeTestResult = msg.getTreeTestResult();\r
+\r
+               if (log.isTraceEnabled())\r
+                       log.trace("Creating result #" + treeTestResult.getUuid());\r
+               treeTestResultDao.create(treeTestResult);\r
+\r
+               registerTestRunDescriptor(msg.getTestRunDescriptor());\r
+       }\r
+\r
+       public void addResultPart(ResultPartRequest msg) {\r
+               registerTestRunDescriptor(msg.getTestRunDescriptor());\r
+\r
+               if (log.isTraceEnabled())\r
+                       log.trace("Adding result part to test result #"\r
+                                       + msg.getResultUuid());\r
+\r
+               treeTestResultDao.addResultPart(msg.getResultUuid(), msg.getPath(), msg\r
+                               .getResultPart(), msg.getRelatedElements());\r
+               // treeTestResultDao.updateAttributes(msg.getResultUuid(), msg\r
+               // .getAttributes());\r
+       }\r
+\r
+       public void closeTreeTestResult(CloseTreeTestResultRequest msg) {\r
+               if (log.isTraceEnabled())\r
+                       log.trace("Closing result #" + msg.getResultUuid() + " at date "\r
+                                       + msg.getCloseDate());\r
+\r
+               treeTestResultDao.close(msg.getResultUuid(), msg.getCloseDate());\r
+       }\r
+\r
 }\r
index 19cde15cfd598f3d4988b465af841797aa309617..1a54884e287b5cf05277d877d93ba56cac777865 100644 (file)
@@ -1,5 +1,8 @@
 package org.argeo.slc.services.test;\r
 \r
+import org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest;\r
+import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;\r
+import org.argeo.slc.msg.test.tree.ResultPartRequest;\r
 import org.argeo.slc.test.TestRunDescriptor;\r
 \r
 /** Performs complex business operations. */\r
@@ -13,4 +16,10 @@ public interface TestManagerService {
        /** Removes a result from a collection based on their ids. */\r
        public void removeResultFromCollection(String collectionId,\r
                        String resultUuid);\r
+\r
+       public void createTreeTestResult(CreateTreeTestResultRequest msg);\r
+\r
+       public void addResultPart(ResultPartRequest msg);\r
+\r
+       public void closeTreeTestResult(CloseTreeTestResultRequest msg);\r
 }\r
diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTreeTestResultListener.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTreeTestResultListener.java
new file mode 100644 (file)
index 0000000..b315c01
--- /dev/null
@@ -0,0 +1,105 @@
+package org.argeo.slc.jms;
+
+import javax.jms.Destination;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.SlcException;
+import org.argeo.slc.core.test.tree.TreeTestResult;
+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.test.TestResultListener;
+import org.argeo.slc.test.TestResultPart;
+import org.springframework.jms.core.JmsTemplate;
+
+public class JmsTreeTestResultListener implements
+               TestResultListener<TreeTestResult> {
+       private final Log log = LogFactory.getLog(getClass());
+
+       private Boolean onlyOnClose = false;
+       private JmsTemplate jmsTemplate;
+
+       private Destination createDestination;
+       private Destination addResultPartDestination;
+       private Destination closeDestination;
+
+       public void resultPartAdded(TreeTestResult testResult,
+                       TestResultPart testResultPart) {
+               if (onlyOnClose)
+                       return;
+
+               try {
+                       if (testResult.getResultParts().size() == 1
+                                       && testResult.getResultParts().values().iterator().next()
+                                                       .getParts().size() == 1) {
+                               CreateTreeTestResultRequest req = new CreateTreeTestResultRequest(
+                                               testResult);
+
+                               if (log.isDebugEnabled())
+                                       log.debug("Send create result request for result "
+                                                       + testResult.getUuid());
+
+                               jmsTemplate.convertAndSend(createDestination, req);
+                       } else {
+                               ResultPartRequest req = new ResultPartRequest(testResult);
+
+                               if (log.isDebugEnabled())
+                                       log.debug("Send result parts for result "
+                                                       + testResult.getUuid());
+
+                               jmsTemplate.convertAndSend(addResultPartDestination, req);
+                       }
+               } catch (Exception e) {
+                       throw new SlcException("Could not notify to JMS", e);
+               }
+       }
+
+       public void close(TreeTestResult testResult) {
+               try {
+                       if (onlyOnClose) {
+                               CreateTreeTestResultRequest req = new CreateTreeTestResultRequest(
+                                               testResult);
+
+                               if (log.isDebugEnabled())
+                                       log.debug("Send create result request for result "
+                                                       + testResult.getUuid());
+
+                               jmsTemplate.convertAndSend(createDestination, req);
+                       } else {
+                               CloseTreeTestResultRequest req = new CloseTreeTestResultRequest(
+                                               testResult);
+
+                               if (log.isDebugEnabled())
+                                       log.debug("Send close result request for result "
+                                                       + testResult.getUuid());
+
+                               jmsTemplate.convertAndSend(closeDestination, req);
+
+                       }
+               } catch (Exception e) {
+                       throw new SlcException("Could not notify to JMS", e);
+               }
+       }
+
+       public void setOnlyOnClose(Boolean onlyOnClose) {
+               this.onlyOnClose = onlyOnClose;
+       }
+
+       public void setJmsTemplate(JmsTemplate jmsTemplate) {
+               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;
+       }
+
+}
index 764711cb627d489477ce6d959968c4db406461de..8b27dfbd62c4a72098ed02b425e884d6d4de46a3 100644 (file)
        <bean id="slcJms.destination.agent.newExecution" p:physicalName="agent.newExecution"
                parent="slcJms.amTopic" />
 
+       <bean id="slcJms.destination.test.create" p:physicalName="test.create"
+               parent="slcJms.amTopic" />
+       <bean id="slcJms.destination.test.addResultPart" p:physicalName="test.addResultPart"
+               parent="slcJms.amTopic" />
+       <bean id="slcJms.destination.test.close" p:physicalName="test.close"
+               parent="slcJms.amTopic" />
+
        <!-- Templates -->
        <bean id="slcJms.amQueue" class="org.apache.activemq.command.ActiveMQQueue"
                abstract="true" />
index c0290965f6a17c338aee30ada7c96b0e01596ad9..fefa76de899375d47baa77ff72a6bbad175a10f2 100644 (file)
@@ -88,7 +88,8 @@ public class TreeTestResultDaoHibernate extends HibernateDaoSupport implements
                                        treeTestResult.getResultParts().put(path, lst);\r
                                }\r
                                lst.getParts().add(resultPart);\r
-                               treeTestResult.getElements().putAll(relatedElements);\r
+                               if (relatedElements != null)\r
+                                       treeTestResult.getElements().putAll(relatedElements);\r
 \r
                                session.update(treeTestResult);\r
                                return treeTestResult;\r
index a81c109d3a7559d55424ddd02aa9cc17a4d17aa1..bab085990ba9a22560a1f70c417cbc67e2436203 100644 (file)
@@ -2,10 +2,14 @@ package org.argeo.slc.core.test;
 \r
 import java.util.UUID;\r
 \r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.structure.tree.TreeSRegistry;\r
 import org.argeo.slc.deploy.DeployedSystem;\r
 import org.argeo.slc.process.SlcExecution;\r
 import org.argeo.slc.process.SlcExecutionRelated;\r
 import org.argeo.slc.process.SlcExecutionStep;\r
+import org.argeo.slc.structure.StructureAware;\r
+import org.argeo.slc.structure.StructureRegistry;\r
 import org.argeo.slc.test.ExecutableTestRun;\r
 import org.argeo.slc.test.TestData;\r
 import org.argeo.slc.test.TestDefinition;\r
@@ -16,12 +20,15 @@ import org.argeo.slc.test.WritableTestRun;
  * A basic bean implementation of a <code>WritableTestRun</code>, holding\r
  * references to the various parts of a test run.\r
  */\r
-public class SimpleTestRun implements WritableTestRun, ExecutableTestRun, SlcExecutionRelated {\r
+public class SimpleTestRun implements WritableTestRun, ExecutableTestRun,\r
+               SlcExecutionRelated {\r
        private String uuid;\r
 \r
        private String slcExecutionUuid;\r
        private String slcExecutionStepUuid;\r
 \r
+       private String path;\r
+\r
        private DeployedSystem deployedSystem;\r
        private TestData testData;\r
        private TestDefinition testDefinition;\r
@@ -29,9 +36,28 @@ public class SimpleTestRun implements WritableTestRun, ExecutableTestRun, SlcExe
 \r
        /** Executes the underlying test definition. */\r
        public void execute() {\r
+               TreeSPath basePath = null;\r
+               StructureRegistry<TreeSPath> registry = null;\r
+               if (path != null) {\r
+                       // TODO: generalize\r
+                       basePath = new TreeSPath(path);\r
+                       registry = new TreeSRegistry();\r
+               }\r
+\r
                uuid = UUID.randomUUID().toString();\r
                if (testResult != null)\r
                        testResult.notifyTestRun(this);\r
+\r
+               // Structure\r
+               if (testResult != null && basePath != null\r
+                               && testResult instanceof StructureAware)\r
+                       ((StructureAware<TreeSPath>) testResult).notifyCurrentPath(\r
+                                       registry, basePath);\r
+\r
+               if (basePath != null && testDefinition instanceof StructureAware)\r
+                       ((StructureAware<TreeSPath>) testDefinition).notifyCurrentPath(\r
+                                       registry, basePath);\r
+\r
                testDefinition.execute(this);\r
        }\r
 \r
@@ -101,4 +127,8 @@ public class SimpleTestRun implements WritableTestRun, ExecutableTestRun, SlcExe
                }\r
        }\r
 \r
+       public void setPath(String path) {\r
+               this.path = path;\r
+       }\r
+\r
 }\r
index 3ee850471906d81b54a90924e9605110fe5456c0..0d4757ef414bc4a056cac39f732b43c459bead03 100644 (file)
@@ -5,6 +5,7 @@ log4j.logger.org.argeo=DEBUG
 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.impl=DEBUG
 
 log4j.logger.org.springframework=WARN
 
index ef83725110cfd7f045e62b7c8d55bcb990693de1..c58913c14ae116dd9f2da95872969be265b72bfa 100644 (file)
@@ -3,7 +3,8 @@ Bundle-Version: 0.1.0
 Import-Package: javax.jms,
  javax.management.j2ee.statistics,
  org.apache.commons.logging
-Require-Bundle: org.argeo.slc.server,
+Require-Bundle: 
+ org.argeo.slc.server,
  org.argeo.slc.support.activemq,
  org.springframework.core,
  org.springframework.context,
index f3a61d1d563ca94746e4f38f0a1824e31a50de6b..70390b6c41e4bf05c17c77c2a251e92fe2e58f3c 100644 (file)
@@ -7,6 +7,8 @@
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
        <reference id="agentService" interface="org.argeo.slc.services.runtime.AgentService" />
+       <reference id="testManagerService"
+               interface="org.argeo.slc.services.test.TestManagerService" />
 
        <reference id="jmsConnectionFactory" interface="javax.jms.ConnectionFactory" />
 
index 9d9af2262404f2af2d4583bab39af68375ee7417..607bd0c081627f214b638de8e8d669b35f387aad 100644 (file)
@@ -15,7 +15,6 @@
                                <property name="defaultListenerMethod" value="register" />
                        </bean>
                </property>
-               <property name="connectionFactory" ref="jmsConnectionFactory" />
        </bean>
 
        <bean id="agentService.jmsContainer.unregister" parent="listenerContainer">
                </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>
+
+
        <!-- Templates -->
        <bean id="listenerContainer"
                class="org.springframework.jms.listener.DefaultMessageListenerContainer"
index 7039015d5253dcbf2694e79317c29b1be409ef0d..1e5e51a59e5e660a6d2cd1c30efc866c15a2141f 100644 (file)
@@ -1,7 +1,11 @@
 Bundle-Name: SLC Server Services
 Bundle-SymbolicName: org.argeo.slc.server.services
 Bundle-Version: 1.0.0
-Import-Package: org.hibernate.jdbc
+Import-Package: org.hibernate.jdbc,
+ org.springframework.transaction,
+ org.springframework.aop,
+ org.springframework.aop.framework,
+ org.aopalliance.aop
 Require-Bundle: org.argeo.slc.server,
  org.argeo.slc.specs,
  org.argeo.slc.support.simple
index 5b2b6a5bb573427a3e69be6b12365d4f1dcc9b0e..f2490012d70fe092f7cb8e2da3b3de46b3d4a1c9 100644 (file)
@@ -20,4 +20,7 @@
        <reference interface="org.argeo.slc.dao.runtime.SlcAgentDescriptorDao"\r
                id="slcAgentDescriptorDao" />\r
 \r
+       <reference id="transactionManager"\r
+               interface="org.springframework.transaction.PlatformTransactionManager" />\r
+\r
 </beans:beans>
\ No newline at end of file
index e96f1e0dfb37d5012d6ada8d74cc8b51ddfee3be..fe2aa9173b842b551538d15e80558f6ead828ede 100644 (file)
@@ -6,7 +6,7 @@
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
-       
+
        <!-- Services -->
        <bean id="testManagerService" class="org.argeo.slc.services.impl.test.TestManagerServiceImpl">
                <constructor-arg ref="testResultDao" />
        <bean id="agentService" class="org.argeo.slc.services.impl.runtime.AgentServiceImpl">
                <constructor-arg ref="slcAgentDescriptorDao" />
        </bean>
+
+       <!-- Services transactions -->
+       <aop:config>
+               <aop:pointcut id="serviceMethods"
+                       expression="execution(* org.argeo.slc.services.test.TestManagerService.*(..))" />
+               <aop:advisor advice-ref="serviceAdvice" pointcut-ref="serviceMethods" />
+       </aop:config>
+
+       <tx:advice id="serviceAdvice" transaction-manager="transactionManager">
+               <tx:attributes>
+                       <tx:method name="*" propagation="REQUIRED" />
+               </tx:attributes>
+       </tx:advice>
+
 </beans>
\ No newline at end of file