From 96f732785d5236ab435f6be5da3d53ba66c9b86d Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 7 May 2009 21:01:13 +0000 Subject: [PATCH] Stabilize attachments and events git-svn-id: https://svn.argeo.org/slc/trunk@2429 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../org.argeo.slc.demo.log4j/log4j.properties | 2 + .../web/mvc/WebSlcEventListenerRegister.java | 74 ++++---- .../mvc/attachment/GetAttachmentHandler.java | 40 +++- .../web/mvc/event/PollEventController.java | 3 +- .../argeo/slc/jms/JmsAttachmentListener.java | 12 +- .../argeo/slc/jms/JmsSlcEventListener.java | 179 ++++++++++-------- .../test/tree/TreeTestResultDaoHibernate.java | 12 ++ .../argeo/slc/core/attachment/Attachment.java | 2 + .../attachment/FileAttachmentsStorage.java | 5 +- .../execution/tasks/UploadAttachments.java | 8 + .../argeo/slc/msg/event/SlcEventListener.java | 4 +- .../msg/event/SlcEventListenerRegister.java | 7 +- .../META-INF/MANIFEST.MF | 1 + .../WEB-INF/applicationContext.xml | 13 ++ .../WEB-INF/slc-service-servlet.xml | 2 +- 15 files changed, 223 insertions(+), 141 deletions(-) diff --git a/demo/site/org.argeo.slc.demo.log4j/log4j.properties b/demo/site/org.argeo.slc.demo.log4j/log4j.properties index 65e3e963c..a1a6509b6 100644 --- a/demo/site/org.argeo.slc.demo.log4j/log4j.properties +++ b/demo/site/org.argeo.slc.demo.log4j/log4j.properties @@ -8,6 +8,8 @@ log4j.logger.org.argeo.slc.execution.SimpleExecutionSpec=DEBUG log4j.logger.org.argeo.slc.services=DEBUG +log4j.logger.org.hibernate=WARN + log4j.logger.org.springframework=WARN log4j.logger.org.springframework.jms=WARN diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/WebSlcEventListenerRegister.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/WebSlcEventListenerRegister.java index 7cc6e8b9d..a3da141dd 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/WebSlcEventListenerRegister.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/WebSlcEventListenerRegister.java @@ -1,14 +1,12 @@ package org.argeo.slc.web.mvc; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import java.util.Vector; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.slc.SlcException; -import org.argeo.slc.msg.event.SlcEvent; -import org.argeo.slc.msg.event.SlcEventListener; import org.argeo.slc.msg.event.SlcEventListenerDescriptor; import org.argeo.slc.msg.event.SlcEventListenerRegister; import org.springframework.web.context.request.RequestContextHolder; @@ -21,9 +19,7 @@ public class WebSlcEventListenerRegister implements SlcEventListenerRegister, static final long serialVersionUID = 1l; - transient private SlcEventListener eventListener = null; - - private String clientId = null; + //private String clientId = UUID.randomUUID().toString(); /** Synchronized */ private List descriptors = new Vector(); @@ -40,47 +36,41 @@ public class WebSlcEventListenerRegister implements SlcEventListenerRegister, descriptors.remove(eventListenerDescriptor); } - // public synchronized List getDescriptorsCopy() - // { - // return new ArrayList(descriptors); - // } - - public SlcEvent listen(SlcEventListener eventListener, Long timeout) { - checkClientId(); - this.eventListener = eventListener; - return this.eventListener.listen(clientId, descriptors, timeout); - } - - public void init() { - clientId = getSessionId(); - checkClientId(); - - if (log.isDebugEnabled()) - log.debug("Initialized web event listener " + clientId); + public synchronized List getDescriptorsCopy() { + return new ArrayList(descriptors); } - public void close() { - checkClientId(); - if (eventListener != null) - eventListener.close(clientId); - - if (log.isDebugEnabled()) - log.debug("Closed web event listener " + clientId); - } + // public SlcEvent listen(SlcEventListener eventListener, Long timeout) { + // return eventListener.listen(clientId, getDescriptorsCopy(), timeout); + // } - protected void checkClientId() { - String sessionId = getSessionId(); - if (clientId == null || !clientId.equals(sessionId)) - throw new SlcException("Client id " + clientId - + " not consistent with web session id " + sessionId); - } + // public void init() { + // clientId = getSessionId(); + // checkClientId(); + // + // if (log.isDebugEnabled()) + // log.debug("Initialized web event listener " + clientId); + // } + // + // public void close() { + // checkClientId(); + // if (log.isDebugEnabled()) + // log.debug("Closed web event listener " + clientId); + // } - protected String getSessionId() { + // protected void checkClientId() { + // String sessionId = getSessionId(); + // if (clientId == null || !clientId.equals(sessionId)) + // throw new SlcException("Client id " + clientId + // + " not consistent with web session id " + sessionId); + // } + // + // protected String getSessionId() { + // return RequestContextHolder.currentRequestAttributes().getSessionId(); + // } + // + public String getId() { return RequestContextHolder.currentRequestAttributes().getSessionId(); } - public String getClientId() { - return clientId; - } - } diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java index b5ac9b5e6..7591a7b52 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java @@ -7,6 +7,8 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; import org.argeo.slc.core.attachment.AttachmentsStorage; import org.argeo.slc.core.attachment.SimpleAttachment; import org.springframework.web.HttpRequestHandler; @@ -23,20 +25,38 @@ public class GetAttachmentHandler implements HttpRequestHandler { String contentType = request.getParameter("contentType"); String name = request.getParameter("name"); if (contentType == null || "".equals(contentType.trim())) { - contentType = FORCE_DOWNLOAD; - } - - if (contentType.trim().equals(FORCE_DOWNLOAD)) { if (name != null) { - contentType = contentType + ";name=\"" + name + "\""; - response.setHeader("Content-Disposition", - "attachment; filename=\"" + name + "\""); + contentType = FORCE_DOWNLOAD; + String ext = FilenameUtils.getExtension(name); + // cf. http://en.wikipedia.org/wiki/Internet_media_type + if ("csv".equals(ext)) + contentType = "text/csv"; + else if ("pdf".equals(ext)) + contentType = "application/pdf"; + else if ("zip".equals(ext)) + contentType = "application/zip"; + else if ("html".equals(ext)) + contentType = "application/html"; + else if ("txt".equals(ext)) + contentType = "text/plain"; + else if ("doc".equals(ext) || "docx".equals(ext)) + contentType = "application/msword"; + else if ("xls".equals(ext) || "xlsx".equals(ext)) + contentType = "application/vnd.ms-excel"; + else if ("xml".equals(ext)) + contentType = "text/xml"; } - response.setHeader("Expires", "0"); - response.setHeader("Cache-Control", "no-cache, must-revalidate"); - response.setHeader("Pragma", "no-cache"); } + if (name != null) { + contentType = contentType + ";name=\"" + name + "\""; + response.setHeader("Content-Disposition", "attachment; filename=\"" + + name + "\""); + } + response.setHeader("Expires", "0"); + response.setHeader("Cache-Control", "no-cache, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + SimpleAttachment resourceDescriptor = new SimpleAttachment(); resourceDescriptor.setUuid(uuid); resourceDescriptor.setContentType(contentType); diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/event/PollEventController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/event/PollEventController.java index daa38314a..856af5ce4 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/event/PollEventController.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/event/PollEventController.java @@ -31,7 +31,8 @@ public class PollEventController extends AbstractServiceController { else timeout = defaultTimeout; - SlcEvent event = eventListenerRegister.listen(eventListener, timeout); + SlcEvent event = eventListener.listen(eventListenerRegister.getId(), + eventListenerRegister.getDescriptorsCopy(), timeout); if (event != null) { modelAndView.addObject("event", event); diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentListener.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentListener.java index 46e828060..8b91e7697 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentListener.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentListener.java @@ -30,15 +30,23 @@ public class JmsAttachmentListener implements MessageListener { .setContentType(msg .getStringProperty(JmsAttachmentUploader.ATTACHMENT_CONTENT_TYPE)); - byte[] buffer = new byte[(int) message.getBodyLength()]; + // Check body length + Long bodyLength = message.getBodyLength(); + if (bodyLength > Integer.MAX_VALUE) + throw new SlcException("Attachment cannot be bigger than " + + Integer.MAX_VALUE + + " bytes with this transport. Use another transport."); + + byte[] buffer = new byte[bodyLength.intValue()]; message.readBytes(buffer); in = new ByteArrayInputStream(buffer); attachmentsStorage.storeAttachment(attachment, in); } catch (JMSException e) { throw new SlcException("Could not process attachment message " + msg, e); + } finally { + IOUtils.closeQuietly(in); } - IOUtils.closeQuietly(in); } public void setAttachmentsStorage(AttachmentsStorage attachmentsStorage) { diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsSlcEventListener.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsSlcEventListener.java index 5cea81d58..eb0fa7b60 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsSlcEventListener.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsSlcEventListener.java @@ -1,9 +1,7 @@ package org.argeo.slc.jms; -import java.util.Collections; -import java.util.HashMap; +import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.UUID; import javax.jms.Connection; @@ -35,10 +33,14 @@ public class JmsSlcEventListener implements SlcEventListener { private String connectionClientId = getClass() + "#" + UUID.randomUUID().toString(); - private Map clients = Collections - .synchronizedMap(new HashMap()); + private List subscriberIds = new ArrayList(); - public SlcEvent listen(String clientId, + private Boolean isClosed = false; + + // private Map clients = Collections + // .synchronizedMap(new HashMap()); + + public SlcEvent listen(String subscriberId, List descriptors, Long timeout) { if (descriptors.size() == 0) { // No listeners, just waiting @@ -50,25 +52,44 @@ public class JmsSlcEventListener implements SlcEventListener { return null; } else { String selector = createSelector(descriptors); - if (log.isTraceEnabled()) log.debug("Selector: " + selector); Object obj = null; - Session session = null; - TopicSubscriber topicSubscriber = null; - try { - session = getClient(clientId).getSession(); - topicSubscriber = session.createDurableSubscriber( - eventsDestination, clientId, - createSelector(descriptors), true); - Message message = topicSubscriber.receive(timeout); - obj = messageConverter.fromMessage(message); - } catch (JMSException e) { - throw new SlcException("Cannot poll events for client " - + clientId, e); - } finally { - JmsUtils.closeMessageConsumer(topicSubscriber); + synchronized (subscriberIds) { + while (subscriberIds.contains(subscriberId)) { + try { + subscriberIds.wait(500); + if (isClosed) + return null; + } catch (InterruptedException e) { + // silent + } + } + + subscriberIds.add(subscriberId); + Session session = null; + TopicSubscriber topicSubscriber = null; + try { + // ListeningClient client = (ListeningClient) + // getClient(clientId); + session = connection.createSession(false, + Session.AUTO_ACKNOWLEDGE); + topicSubscriber = session.createDurableSubscriber( + eventsDestination, subscriberId, + createSelector(descriptors), true); + Message message = topicSubscriber.receive(timeout); + obj = messageConverter.fromMessage(message); + } catch (JMSException e) { + throw new SlcException("Cannot poll events for subscriber " + + subscriberId, e); + } finally { + JmsUtils.closeMessageConsumer(topicSubscriber); + JmsUtils.closeSession(session); + subscriberIds.remove(subscriberId); + subscriberIds.notifyAll(); + } + } if (obj == null) @@ -128,67 +149,67 @@ public class JmsSlcEventListener implements SlcEventListener { public void close() { ConnectionFactoryUtils.releaseConnection(connection, jmsConnectionFactory, true); - } - - public void close(String clientId) { - Session session = null; - ListeningClient client = getClient(clientId); - // Connection connection = client.getConnection(); - try { - session = client.getSession(); - session.unsubscribe(clientId); - } catch (JMSException e) { - log.warn("Could not unsubscribe client " + clientId, e); - } finally { - JmsUtils.closeSession(session); + isClosed = true; + synchronized (subscriberIds) { + subscriberIds.notifyAll(); } - - // JmsUtils.closeSession(client.getSession()); - clients.remove(clientId); - - // try { - // connection.stop(); - // connection.close(); - // } catch (JMSException e) { - // throw new SlcException("Could not close JMS connection for client " - // + clientId, e); - // } finally { - // clients.remove(clientId); - // } } - protected ListeningClient getClient(String clientId) { - ListeningClient client = clients.get(clientId); - if (client == null) { - // Lazy init - client = new ListeningClient(connection); - clients.put(clientId, client); - } - return client; + public boolean isClosed() { + return isClosed; } - protected class ListeningClient { - private final Connection connection; - private final Session session; - - public ListeningClient(Connection connection) { - super(); - this.connection = connection; - try { - session = connection.createSession(false, - Session.AUTO_ACKNOWLEDGE); - } catch (JMSException e) { - throw new SlcException("Cannot create session"); - } - } - - public Connection getConnection() { - return connection; - } - - public Session getSession() { - return session; - } - - } + // public void close(String clientId) { + // // Session session = null; + // // // ListeningClient client = getClient(clientId); + // // // Connection connection = client.getConnection(); + // // try { + // // session = client.getSession(); + // // session.unsubscribe(clientId); + // // } catch (JMSException e) { + // // log.warn("Could not unsubscribe client " + clientId, e); + // // } finally { + // // JmsUtils.closeSession(session); + // // } + // // + // // // synchronized (client) { + // // // clients.remove(clientId); + // // // client.notify(); + // // // } + // } + + // protected ListeningClient getClient(String clientId) { + // ListeningClient client = clients.get(clientId); + // if (client == null) { + // // Lazy init + // client = new ListeningClient(connection); + // clients.put(clientId, client); + // } + // return client; + // } + + // protected class ListeningClient { + // private final Connection connection; + // private final Session session; + // + // public ListeningClient(Connection connection) { + // super(); + // this.connection = connection; + // try { + // session = connection.createSession(false, + // Session.AUTO_ACKNOWLEDGE); + // } catch (JMSException e) { + // throw new SlcException("Cannot create session"); + // } + // } + // + // public Connection getConnection() { + // return connection; + // } + // + // public Session getSession() { + // return session; + // } + // + // } } diff --git a/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java b/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java index a217638e2..def44a8a1 100644 --- a/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java +++ b/runtime/org.argeo.slc.support.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java @@ -19,6 +19,7 @@ import org.hibernate.HibernateException; import org.hibernate.Session; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; +import org.springframework.util.Assert; /** * The Hibernate implementation for tree-based result of the test result dao. @@ -107,6 +108,17 @@ public class TreeTestResultDaoHibernate extends HibernateDaoSupport implements throws HibernateException, SQLException { TreeTestResult treeTestResult = getTreeTestResult(session, testResultId); + + // Check is there is already such an attachment + Assert.notNull(attachment, "attachment is null"); + Assert.notNull(session, "session is null"); + SimpleAttachment att = (SimpleAttachment) session.get( + attachment.getClass(), attachment.getUuid()); + if (att != null) + throw new SlcException( + "There is already an attachement with id " + + attachment.getUuid()); + treeTestResult.getAttachments().add(attachment); session.update(treeTestResult); return treeTestResult; diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/Attachment.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/Attachment.java index e55260ed7..cb387c094 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/Attachment.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/Attachment.java @@ -3,6 +3,8 @@ package org.argeo.slc.core.attachment; public interface Attachment { public String getUuid(); + public void setUuid(String uuid); + public String getName(); public String getContentType(); diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java index 45bf35fb5..0e70805c0 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java @@ -36,8 +36,9 @@ public class FileAttachmentsStorage implements AttachmentsStorage { try { byte[] buffer = new byte[1024 * 1024]; in = new FileInputStream(file); - while (in.read(buffer) >= 0) { - outputStream.write(buffer); + int read = -1; + while ((read = in.read(buffer)) >= 0) { + outputStream.write(buffer, 0, read); } } catch (IOException e) { throw new SlcException("Cannot write attachment " + attachment diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java index e4cefa85a..23956f6e4 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import org.argeo.slc.SlcException; import org.argeo.slc.core.attachment.Attachment; @@ -17,6 +18,7 @@ public class UploadAttachments implements Runnable { private Resource resource = null; private Map attachments = new HashMap(); private List attachTo = new ArrayList(); + private Boolean newUuidPerExecution = true; public void run() { if (attachment != null) { @@ -33,6 +35,8 @@ public class UploadAttachments implements Runnable { } protected void uploadAndAdd(Attachment attachment, Resource resource) { + if (newUuidPerExecution) + attachment.setUuid(UUID.randomUUID().toString()); attachmentUploader.upload(attachment, resource); for (AttachmentsEnabled attachmentsEnabled : attachTo) { attachmentsEnabled.addAttachment(attachment); @@ -59,4 +63,8 @@ public class UploadAttachments implements Runnable { this.resource = resource; } + public void setNewUuidPerExecution(Boolean newUuidPerExecution) { + this.newUuidPerExecution = newUuidPerExecution; + } + } diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListener.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListener.java index e1f84383b..e4455095f 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListener.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListener.java @@ -9,8 +9,6 @@ public interface SlcEventListener { * @return the event received or null if timeout was reached before * receiving one */ - public SlcEvent listen(String clientId, + public SlcEvent listen(String subscriberId, List descriptors, Long timeout); - - public void close(String clientId); } diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListenerRegister.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListenerRegister.java index 85e5cbd64..94767408f 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListenerRegister.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListenerRegister.java @@ -1,5 +1,6 @@ package org.argeo.slc.msg.event; +import java.util.List; public interface SlcEventListenerRegister { public void addEventListenerDescriptor( @@ -8,5 +9,9 @@ public interface SlcEventListenerRegister { public void removeEventListenerDescriptor( SlcEventListenerDescriptor eventListenerDescriptor); - public SlcEvent listen(SlcEventListener eventListener, Long timeout); + public List getDescriptorsCopy(); + + public String getId(); + + // public SlcEvent listen(SlcEventListener eventListener, Long timeout); } diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF index 68ce804ae..e29023a39 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF @@ -38,6 +38,7 @@ Import-Package: com.sun.xml.messaging.saaj.soap;optional=true, org.springframework.web.servlet.handler, org.springframework.web.servlet.view, org.springframework.web.util, + org.springframework.web.servlet.mvc, org.springframework.xml.xsd Require-Bundle: org.argeo.slc.server, org.argeo.slc.specs, diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml index 0ee624be4..703e681a7 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml @@ -28,4 +28,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml index 6755e712f..217dd5f2a 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml @@ -88,7 +88,7 @@ + scope="session"> -- 2.39.2