From ab459c7e28f29c0695d159f7971337e3b5884c6e Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 11 Jan 2009 22:36:20 +0000 Subject: [PATCH] First consistent version with JMS git-svn-id: https://svn.argeo.org/slc/trunk@2075 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../webapp/WEB-INF/classes/log4j.properties | 2 +- .../src/main/webapp/test-amq/send.js | 2 +- runtime/org.argeo.slc.launcher/pom.xml | 16 ++++-- .../main/java/org/argeo/slc/cli/SlcMain.java | 34 +++++-------- .../impl/runtime/AgentServiceImpl.java | 5 ++ .../mvc/runtime/CleanAgentsController.java | 32 ++++++++++++ .../web/mvc/runtime/ListAgentsController.java | 31 ++++++++++++ .../org/argeo/slc/server/spring/activemq.xml | 29 ++--------- .../slc/server/spring/servletContext.xml | 16 ++++-- .../slc/server/spring/slc-service-servlet.xml | 11 ++++- .../argeo/slc/server/spring/transaction.xml | 10 +++- .../dao/runtime/SlcAgentDescriptorDao.java | 2 + .../org/argeo/slc/process/SlcExecution.java | 8 +++ .../argeo/slc/jms/AgentListenerContainer.java | 43 ++++++++++++++++ .../main/java/org/argeo/slc/jms/JmsAgent.java | 35 ++++++++++--- .../org/argeo/slc/activemq/spring-agent.xml | 45 +++++++++++++++++ .../org/argeo/slc/activemq/spring.xml | 49 +++++++++++++++++++ .../resources/org/argeo/slc/jms/spring.xml | 14 ------ .../resources/org/argeo/slc/castor/msg.xml | 8 +++ .../org.argeo.slc.support.hibernate/build.xml | 35 ------------- .../SlcAgentDescriptorDaoHibernate.java | 4 ++ .../java/org/argeo/slc/msg/ObjectList.java | 24 +++++++++ 22 files changed, 340 insertions(+), 115 deletions(-) create mode 100644 runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/CleanAgentsController.java create mode 100644 runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/ListAgentsController.java create mode 100644 runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/AgentListenerContainer.java create mode 100644 runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring-agent.xml create mode 100644 runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring.xml delete mode 100644 runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/jms/spring.xml delete mode 100644 runtime/org.argeo.slc.support.hibernate/build.xml create mode 100644 runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/ObjectList.java diff --git a/org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties b/org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties index 925c2181b..34f682a8a 100644 --- a/org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties +++ b/org.argeo.slc.webapp/src/main/webapp/WEB-INF/classes/log4j.properties @@ -20,7 +20,7 @@ log4j.logger.org.hibernate.transaction=WARN #log4j.logger.org.hibernate.type=TRACE # Active MQ -log4j.logger.org.apache.activemq.web.MessageListenerServlet=DEBUG +log4j.logger.org.apache.activemq.web.MessageListenerServlet=WARN # EhCache log4j.logger.net.sf.ehcache=WARN diff --git a/org.argeo.slc.webapp/src/main/webapp/test-amq/send.js b/org.argeo.slc.webapp/src/main/webapp/test-amq/send.js index f40d3c49b..8210c6aef 100644 --- a/org.argeo.slc.webapp/src/main/webapp/test-amq/send.js +++ b/org.argeo.slc.webapp/src/main/webapp/test-amq/send.js @@ -1,3 +1,3 @@ -amq.sendMessage('TEST.QUEUE','My Test'); +amq.sendMessage('topic://agent.c6fb85cc-200e-41f1-9b63-fade5cad0f14.newExecution','STARTEDslcAntlocalhostuser/test'); alert('Message sent!'); document.write('Message sent'); \ No newline at end of file diff --git a/runtime/org.argeo.slc.launcher/pom.xml b/runtime/org.argeo.slc.launcher/pom.xml index 1d59972e9..97b5ab3eb 100644 --- a/runtime/org.argeo.slc.launcher/pom.xml +++ b/runtime/org.argeo.slc.launcher/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 org.argeo.slc @@ -55,9 +56,18 @@ org.argeo.slc.* + org.argeo.slc.cli.SlcMain + + org.codehaus.mojo + exec-maven-plugin + 1.1-beta-1 + + org.argeo.slc.cli.SlcMain + + @@ -66,12 +76,12 @@ org.argeo.slc.support.simple ${project.version} - + org.argeo.dep.osgi org.argeo.dep.osgi.commons.cli - + org.argeo.slc.runtime diff --git a/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java b/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java index 32c3ce906..8db1330a6 100644 --- a/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java +++ b/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java @@ -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 - } - } } } diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java index a4a67c10e..f6566c828 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/services/impl/runtime/AgentServiceImpl.java @@ -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 index 000000000..355a81102 --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/CleanAgentsController.java @@ -0,0 +1,32 @@ +package org.argeo.slc.web.mvc.runtime; + +import java.util.List; +import java.util.Vector; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.argeo.slc.dao.runtime.SlcAgentDescriptorDao; +import org.argeo.slc.runtime.SlcAgentDescriptor; +import org.argeo.slc.web.mvc.AbstractServiceController; +import org.springframework.web.servlet.ModelAndView; + +/** Lists results possibly filtering them. */ +public class CleanAgentsController extends AbstractServiceController { + private final SlcAgentDescriptorDao slcAgentDescriptorDao; + + public CleanAgentsController(SlcAgentDescriptorDao slcAgentDescriptorDao) { + this.slcAgentDescriptorDao = slcAgentDescriptorDao; + } + + @Override + protected void handleServiceRequest(HttpServletRequest request, + HttpServletResponse response, ModelAndView modelAndView) + throws Exception { + List list = slcAgentDescriptorDao + .listSlcAgentDescriptors(); + for (SlcAgentDescriptor t : new Vector(list)) { + slcAgentDescriptorDao.delete(t); + } + } +} 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 index 000000000..03e2af153 --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/runtime/ListAgentsController.java @@ -0,0 +1,31 @@ +package org.argeo.slc.web.mvc.runtime; + +import java.util.List; +import java.util.Vector; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.argeo.slc.dao.runtime.SlcAgentDescriptorDao; +import org.argeo.slc.msg.ObjectList; +import org.argeo.slc.runtime.SlcAgentDescriptor; +import org.argeo.slc.web.mvc.AbstractServiceController; +import org.springframework.web.servlet.ModelAndView; + +/** Lists results possibly filtering them. */ +public class ListAgentsController extends AbstractServiceController { + private final SlcAgentDescriptorDao slcAgentDescriptorDao; + + public ListAgentsController(SlcAgentDescriptorDao slcAgentDescriptorDao) { + this.slcAgentDescriptorDao = slcAgentDescriptorDao; + } + + @Override + protected void handleServiceRequest(HttpServletRequest request, + HttpServletResponse response, ModelAndView modelAndView) + throws Exception { + List list = slcAgentDescriptorDao + .listSlcAgentDescriptors(); + modelAndView.addObject("list", new ObjectList(list)); + } +} diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/activemq.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/activemq.xml index df37901e1..0581aa931 100644 --- a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/activemq.xml +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/activemq.xml @@ -2,41 +2,20 @@ + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> - + + - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml index ab64f9450..a39c6d112 100644 --- a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/servletContext.xml @@ -39,14 +39,24 @@ - - + + - + + + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml index b6182c083..3e64f5331 100644 --- a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml +++ b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/slc-service-servlet.xml @@ -29,11 +29,18 @@ - + + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/dao/runtime/SlcAgentDescriptorDao.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/dao/runtime/SlcAgentDescriptorDao.java index 3ad307014..3709968c3 100644 --- a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/dao/runtime/SlcAgentDescriptorDao.java +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/dao/runtime/SlcAgentDescriptorDao.java @@ -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 listSlcAgentDescriptors(); } diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/SlcExecution.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/SlcExecution.java index e1ae1ecf3..c066d2f1d 100644 --- a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/SlcExecution.java +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/process/SlcExecution.java @@ -98,4 +98,12 @@ public class SlcExecution { public void setAttributes(Map attributes) { this.attributes = attributes; } + + public String toString() { + StringBuffer buf = new StringBuffer(getClass().getSimpleName()); + buf.append('#').append(uuid); + buf.append(" status=").append(status); + buf.append(" attributes=").append(attributes); + return buf.toString(); + } } 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 index 000000000..659b4f5b7 --- /dev/null +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/AgentListenerContainer.java @@ -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; + } + +} diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java index 7aff0ab20..66c0718fc 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java @@ -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 index 000000000..32aa12fe0 --- /dev/null +++ b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring-agent.xml @@ -0,0 +1,45 @@ + + + + + + + + tcp://localhost:61616 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index 000000000..05d439db7 --- /dev/null +++ b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/spring.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index c8536ca50..000000000 --- a/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/jms/spring.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml index c6dae8f8f..1a5638d64 100644 --- a/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml +++ b/runtime/org.argeo.slc.support.castor/src/main/resources/org/argeo/slc/castor/msg.xml @@ -21,6 +21,14 @@ + + + + + + + diff --git a/runtime/org.argeo.slc.support.hibernate/build.xml b/runtime/org.argeo.slc.support.hibernate/build.xml deleted file mode 100644 index 4213f1de9..000000000 --- a/runtime/org.argeo.slc.support.hibernate/build.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/runtime/SlcAgentDescriptorDaoHibernate.java b/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/runtime/SlcAgentDescriptorDaoHibernate.java index c6b6ac90b..6fead8d8d 100644 --- a/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/runtime/SlcAgentDescriptorDaoHibernate.java +++ b/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/runtime/SlcAgentDescriptorDaoHibernate.java @@ -13,6 +13,10 @@ public class SlcAgentDescriptorDaoHibernate extends HibernateDaoSupport getHibernateTemplate().save(slcAgentDescriptor); } + public void delete(SlcAgentDescriptor slcAgentDescriptor) { + getHibernateTemplate().delete(slcAgentDescriptor); + } + public List listSlcAgentDescriptors() { return (List) getHibernateTemplate().loadAll( SlcAgentDescriptor.class); 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 index 000000000..9f057cc1f --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/ObjectList.java @@ -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(); + + public ObjectList() { + } + + public ObjectList(List objects) { + this.objects = objects; + } + + public List getObjects() { + return objects; + } + + public void setObjects(List objects) { + this.objects = objects; + } + +} -- 2.39.2