Stabilize attachments and events
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 7 May 2009 21:01:13 +0000 (21:01 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 7 May 2009 21:01:13 +0000 (21:01 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2429 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

15 files changed:
demo/site/org.argeo.slc.demo.log4j/log4j.properties
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/WebSlcEventListenerRegister.java
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/attachment/GetAttachmentHandler.java
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/event/PollEventController.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentListener.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsSlcEventListener.java
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/attachment/Attachment.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListener.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/msg/event/SlcEventListenerRegister.java
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/META-INF/MANIFEST.MF
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/applicationContext.xml
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.webapp.war/WEB-INF/slc-service-servlet.xml

index 65e3e963cc101ae83a71323ec5f526bcec939fc3..a1a6509b69c56c31971bf8693c151d60ed040784 100644 (file)
@@ -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
 
index 7cc6e8b9dcd89439ff68ceb6604eb41c7b7042d9..a3da141dd5781d26283feaa37e717e78b12e2679 100644 (file)
@@ -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<SlcEventListenerDescriptor> descriptors = new Vector<SlcEventListenerDescriptor>();
@@ -40,47 +36,41 @@ public class WebSlcEventListenerRegister implements SlcEventListenerRegister,
                descriptors.remove(eventListenerDescriptor);
        }
 
-       // public synchronized List<SlcEventListenerDescriptor> getDescriptorsCopy()
-       // {
-       // return new ArrayList<SlcEventListenerDescriptor>(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<SlcEventListenerDescriptor> getDescriptorsCopy() {
+               return new ArrayList<SlcEventListenerDescriptor>(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;
-       }
-
 }
index b5ac9b5e65ccacf6ca8dda79a2c2267662e9128a..7591a7b5248ce57f49d3cd08344afe0220c0c1ae 100644 (file)
@@ -7,6 +7,8 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;\r
 import javax.servlet.http.HttpServletResponse;\r
 \r
+import org.apache.commons.io.FileUtils;\r
+import org.apache.commons.io.FilenameUtils;\r
 import org.argeo.slc.core.attachment.AttachmentsStorage;\r
 import org.argeo.slc.core.attachment.SimpleAttachment;\r
 import org.springframework.web.HttpRequestHandler;\r
@@ -23,20 +25,38 @@ public class GetAttachmentHandler implements HttpRequestHandler {
                String contentType = request.getParameter("contentType");\r
                String name = request.getParameter("name");\r
                if (contentType == null || "".equals(contentType.trim())) {\r
-                       contentType = FORCE_DOWNLOAD;\r
-               }\r
-\r
-               if (contentType.trim().equals(FORCE_DOWNLOAD)) {\r
                        if (name != null) {\r
-                               contentType = contentType + ";name=\"" + name + "\"";\r
-                               response.setHeader("Content-Disposition",\r
-                                               "attachment; filename=\"" + name + "\"");\r
+                               contentType = FORCE_DOWNLOAD;\r
+                               String ext = FilenameUtils.getExtension(name);\r
+                               // cf. http://en.wikipedia.org/wiki/Internet_media_type\r
+                               if ("csv".equals(ext))\r
+                                       contentType = "text/csv";\r
+                               else if ("pdf".equals(ext))\r
+                                       contentType = "application/pdf";\r
+                               else if ("zip".equals(ext))\r
+                                       contentType = "application/zip";\r
+                               else if ("html".equals(ext))\r
+                                       contentType = "application/html";\r
+                               else if ("txt".equals(ext))\r
+                                       contentType = "text/plain";\r
+                               else if ("doc".equals(ext) || "docx".equals(ext))\r
+                                       contentType = "application/msword";\r
+                               else if ("xls".equals(ext) || "xlsx".equals(ext))\r
+                                       contentType = "application/vnd.ms-excel";\r
+                               else if ("xml".equals(ext))\r
+                                       contentType = "text/xml";\r
                        }\r
-                       response.setHeader("Expires", "0");\r
-                       response.setHeader("Cache-Control", "no-cache, must-revalidate");\r
-                       response.setHeader("Pragma", "no-cache");\r
                }\r
 \r
+               if (name != null) {\r
+                       contentType = contentType + ";name=\"" + name + "\"";\r
+                       response.setHeader("Content-Disposition", "attachment; filename=\""\r
+                                       + name + "\"");\r
+               }\r
+               response.setHeader("Expires", "0");\r
+               response.setHeader("Cache-Control", "no-cache, must-revalidate");\r
+               response.setHeader("Pragma", "no-cache");\r
+\r
                SimpleAttachment resourceDescriptor = new SimpleAttachment();\r
                resourceDescriptor.setUuid(uuid);\r
                resourceDescriptor.setContentType(contentType);\r
index daa38314a8cb0200ace709e1ec31a087570dc862..856af5ce4a4b0d6ba102891a769bab63c62e55dc 100644 (file)
@@ -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);
 
index 46e828060b2f08cfe2b7eea795e8db81b4afe377..8b91e7697093dfdd6c4bd0e4a1be824cb3ff6f91 100644 (file)
@@ -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) {
index 5cea81d5841b88ca469052e6b5965aa22a5458b2..eb0fa7b6083429f5e656a42dcaa87942c2078889 100644 (file)
@@ -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<String, ListeningClient> clients = Collections
-                       .synchronizedMap(new HashMap<String, ListeningClient>());
+       private List<String> subscriberIds = new ArrayList<String>();
 
-       public SlcEvent listen(String clientId,
+       private Boolean isClosed = false;
+
+       // private Map<String, ListeningClient> clients = Collections
+       // .synchronizedMap(new HashMap<String, ListeningClient>());
+
+       public SlcEvent listen(String subscriberId,
                        List<SlcEventListenerDescriptor> 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;
+       // }
+       //
+       // }
 }
index a217638e202fe60605f5e10e550bfd11b2504db3..def44a8a15d94b78de11fee4fce67aa7e46e6406 100644 (file)
@@ -19,6 +19,7 @@ import org.hibernate.HibernateException;
 import org.hibernate.Session;\r
 import org.springframework.orm.hibernate3.HibernateCallback;\r
 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
+import org.springframework.util.Assert;\r
 \r
 /**\r
  * The Hibernate implementation for tree-based result of the test result dao.\r
@@ -107,6 +108,17 @@ public class TreeTestResultDaoHibernate extends HibernateDaoSupport implements
                                        throws HibernateException, SQLException {\r
                                TreeTestResult treeTestResult = getTreeTestResult(session,\r
                                                testResultId);\r
+\r
+                               // Check is there is already such an attachment\r
+                               Assert.notNull(attachment, "attachment is null");\r
+                               Assert.notNull(session, "session is null");\r
+                               SimpleAttachment att = (SimpleAttachment) session.get(\r
+                                               attachment.getClass(), attachment.getUuid());\r
+                               if (att != null)\r
+                                       throw new SlcException(\r
+                                                       "There is already an attachement with id "\r
+                                                                       + attachment.getUuid());\r
+\r
                                treeTestResult.getAttachments().add(attachment);\r
                                session.update(treeTestResult);\r
                                return treeTestResult;\r
index e55260ed7d3978c5fcaec87293403664d8ef9e8c..cb387c094498b5ff9edeb63b3cea43aff1fe56c8 100644 (file)
@@ -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();
index 45bf35fb5e9d14514a571a3a645bdeb9bc3198f0..0e70805c061c602f10e678d9063ef176f503d060 100644 (file)
@@ -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
index e4cefa85a65c27340dbcc987d36c8c920f989ca9..23956f6e47b772a3a4a1b3a722a484b5f337fe3f 100644 (file)
@@ -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<Attachment, Resource> attachments = new HashMap<Attachment, Resource>();
        private List<AttachmentsEnabled> attachTo = new ArrayList<AttachmentsEnabled>();
+       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;
+       }
+
 }
index e1f84383b2606a63892d6d9147f60929ac925a70..e4455095fc8455d14e1d98cf5de4b051c233d7ac 100644 (file)
@@ -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<SlcEventListenerDescriptor> descriptors, Long timeout);
-
-       public void close(String clientId);
 }
index 85e5cbd646fe9eb9d555088a5a44f48ec1da9f1e..94767408f4f304615e00a6cb4fbf8e8886fd922c 100644 (file)
@@ -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<SlcEventListenerDescriptor> getDescriptorsCopy();
+
+       public String getId();
+
+       // public SlcEvent listen(SlcEventListener eventListener, Long timeout);
 }
index 68ce804ae7d5787e30f712bb82d6bc7664cb0f9c..e29023a390a2cc6b272f44c84256e4750fc02647 100644 (file)
@@ -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,
index 0ee624be412c92415ef2a15c576c7cb5500d4b45..703e681a76d30c8b7dbd47307cef1c74e745b5e7 100644 (file)
                <property name="ignoreUnresolvablePlaceholders" value="true" />
        </bean>
 
+       <!-- Web Services transactions -->
+       <aop:config>
+               <aop:pointcut id="epMethods"
+                       expression="execution(* org.springframework.web.servlet.mvc.Controller.handleRequest(..))" />
+               <aop:advisor advice-ref="epAdvice" pointcut-ref="epMethods" />
+       </aop:config>
+
+       <tx:advice id="epAdvice" transaction-manager="hibernateTransactionManager">
+               <tx:attributes>
+                       <tx:method name="*" propagation="REQUIRED" />
+               </tx:attributes>
+       </tx:advice>
+
 </beans>
\ No newline at end of file
index 6755e712f1e5c0722e11ecc437d0be0122e5a54d..217dd5f2a97e47a1643ced6f816c4a05f281c804 100644 (file)
@@ -88,7 +88,7 @@
        </bean>
 
        <bean name="eventListenerRegister" class="org.argeo.slc.web.mvc.WebSlcEventListenerRegister"
-               scope="session" init-method="init" destroy-method="close">
+               scope="session">
                <aop:scoped-proxy />
        </bean>