Commit 06da0245146f997db6ac728c441312941633eae0

Authored by Danilo Costa Viana
1 parent 0107cced
Exists in master

Implementado reparo para vazamento de memória no ViewContext [Merged de

2.4.2-SNAPSHOT]
Showing 22 changed files with 240 additions and 68 deletions   Show diff stats
archetype/jsf-jpa/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
@@ -10,11 +10,17 @@ @@ -10,11 +10,17 @@
10 </listener> 10 </listener>
11 --> 11 -->
12 12
13 - <!-- If you are using servlet 2.5 then uncomment this listener --> 13 + <!--
  14 + If you are using servlet 2.5 then uncomment those listeners and filters.
  15 + They're added automatically on servlet 3.0 or greater.
  16 + -->
14 <!-- 17 <!--
15 <listener> 18 <listener>
16 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 19 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
17 </listener> 20 </listener>
  21 + <listener>
  22 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  23 + </listener>
18 <filter> 24 <filter>
19 <filter-name>Demoiselle Servlet Filter</filter-name> 25 <filter-name>Demoiselle Servlet Filter</filter-name>
20 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 26 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewBeanStore.java 0 → 100644
@@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
  1 +package br.gov.frameworkdemoiselle.internal.context;
  2 +
  3 +import java.io.Serializable;
  4 +
  5 +import javax.enterprise.context.spi.Contextual;
  6 +import javax.enterprise.context.spi.CreationalContext;
  7 +import javax.enterprise.inject.Alternative;
  8 +
  9 +/**
  10 + * Store that keeps view scoped beans. It associates all view scoped beans with a view ID.
  11 + * When the ID changes (meaning the view changed) all old view scoped beans are destroyed
  12 + * before new beans for the new view are created and stored.
  13 + *
  14 + * @author SERPRO
  15 + *
  16 + */
  17 +@Alternative
  18 +public class FacesViewBeanStore implements Serializable {
  19 +
  20 + private static final long serialVersionUID = -8265458933971929432L;
  21 +
  22 + private Long lastViewId = null;
  23 +
  24 + private BeanStore store;
  25 +
  26 + synchronized BeanStore getStore(Long viewId, AbstractCustomContext context) {
  27 + if (lastViewId == null || !lastViewId.equals(viewId)) {
  28 + clear(context);
  29 + lastViewId = viewId;
  30 + store = AbstractCustomContext.createStore();
  31 + }
  32 +
  33 + return store;
  34 + }
  35 +
  36 + @SuppressWarnings({ "rawtypes", "unchecked" })
  37 + public void clear(AbstractCustomContext context) {
  38 + if (store != null) {
  39 + for (String id : store) {
  40 + Contextual contextual = context.getContextualStore().getContextual(id);
  41 + Object instance = store.getInstance(id);
  42 + CreationalContext creationalContext = store.getCreationalContext(id);
  43 +
  44 + if (contextual != null && instance != null) {
  45 + contextual.destroy(instance, creationalContext);
  46 + }
  47 + }
  48 + store.clear();
  49 + }
  50 + }
  51 +}
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java
@@ -39,15 +39,20 @@ package br.gov.frameworkdemoiselle.internal.context; @@ -39,15 +39,20 @@ package br.gov.frameworkdemoiselle.internal.context;
39 import java.util.concurrent.ConcurrentHashMap; 39 import java.util.concurrent.ConcurrentHashMap;
40 import java.util.concurrent.atomic.AtomicLong; 40 import java.util.concurrent.atomic.AtomicLong;
41 41
  42 +import javax.enterprise.context.ApplicationScoped;
  43 +import javax.enterprise.context.ContextNotActiveException;
  44 +import javax.enterprise.context.spi.Context;
  45 +import javax.enterprise.event.Observes;
42 import javax.enterprise.inject.Alternative; 46 import javax.enterprise.inject.Alternative;
43 import javax.faces.component.UIViewRoot; 47 import javax.faces.component.UIViewRoot;
44 import javax.faces.context.FacesContext; 48 import javax.faces.context.FacesContext;
45 -import javax.servlet.http.HttpServletRequest;  
46 import javax.servlet.http.HttpSession; 49 import javax.servlet.http.HttpSession;
47 50
48 import br.gov.frameworkdemoiselle.annotation.Priority; 51 import br.gov.frameworkdemoiselle.annotation.Priority;
49 import br.gov.frameworkdemoiselle.annotation.ViewScoped; 52 import br.gov.frameworkdemoiselle.annotation.ViewScoped;
50 import br.gov.frameworkdemoiselle.context.ViewContext; 53 import br.gov.frameworkdemoiselle.context.ViewContext;
  54 +import br.gov.frameworkdemoiselle.lifecycle.BeforeSessionDestroyed;
  55 +import br.gov.frameworkdemoiselle.util.Beans;
51 import br.gov.frameworkdemoiselle.util.Faces; 56 import br.gov.frameworkdemoiselle.util.Faces;
52 57
53 /** 58 /**
@@ -65,7 +70,7 @@ public class FacesViewContextImpl extends AbstractCustomContext implements ViewC @@ -65,7 +70,7 @@ public class FacesViewContextImpl extends AbstractCustomContext implements ViewC
65 70
66 private final AtomicLong atomicLong = new AtomicLong(); 71 private final AtomicLong atomicLong = new AtomicLong();
67 72
68 - private ConcurrentHashMap<String, SessionBeanStore> sessionBeanStore = new ConcurrentHashMap<String, SessionBeanStore>(); 73 + private ConcurrentHashMap<String, FacesViewBeanStore> sessionBeanStore = new ConcurrentHashMap<String, FacesViewBeanStore>();
69 74
70 private static final String FACES_KEY = FacesViewContextImpl.class.getCanonicalName(); 75 private static final String FACES_KEY = FacesViewContextImpl.class.getCanonicalName();
71 76
@@ -80,17 +85,22 @@ public class FacesViewContextImpl extends AbstractCustomContext implements ViewC @@ -80,17 +85,22 @@ public class FacesViewContextImpl extends AbstractCustomContext implements ViewC
80 85
81 @Override 86 @Override
82 protected BeanStore getStore() { 87 protected BeanStore getStore() {
83 - clearInvalidatedSession();  
84 -  
85 - final String sessionId = getSessionId();  
86 -  
87 - if (sessionId==null){ 88 + String sessionId = getSessionId();
  89 + if (sessionId == null){
88 return null; 90 return null;
89 } 91 }
90 92
  93 + /*
  94 + * Tenta obter o viewID de forma não thread-safe por questões de performance.
  95 + * Se o viewID não existe entra em um trecho thread-safe para incrementa-lo, evitando
  96 + * conflito entre duas requests tentando incrementar esse número.
  97 + */
91 Long viewId = (Long)Faces.getViewMap().get(FACES_KEY); 98 Long viewId = (Long)Faces.getViewMap().get(FACES_KEY);
92 if (viewId==null){ 99 if (viewId==null){
93 synchronized (this) { 100 synchronized (this) {
  101 +
  102 + //Tenta obte-lo novamente, caso entre a primeira tentativa e o bloqueio
  103 + //da thread outra thread já tenha criado o número.
94 viewId = (Long)Faces.getViewMap().get(FACES_KEY); 104 viewId = (Long)Faces.getViewMap().get(FACES_KEY);
95 if (viewId==null){ 105 if (viewId==null){
96 viewId = atomicLong.incrementAndGet(); 106 viewId = atomicLong.incrementAndGet();
@@ -99,43 +109,70 @@ public class FacesViewContextImpl extends AbstractCustomContext implements ViewC @@ -99,43 +109,70 @@ public class FacesViewContextImpl extends AbstractCustomContext implements ViewC
99 } 109 }
100 } 110 }
101 111
102 - SessionBeanStore currentStore = sessionBeanStore.get(sessionId); 112 + //A mesma técnica de bloqueio de thread acima é usada aqui para
  113 + //criar um SessionBeanStore caso o mesmo ainda não exista.
  114 + FacesViewBeanStore currentStore = sessionBeanStore.get(sessionId);
103 if (currentStore==null){ 115 if (currentStore==null){
104 synchronized (this) { 116 synchronized (this) {
105 - currentStore = (SessionBeanStore) sessionBeanStore.get(sessionId); 117 + currentStore = (FacesViewBeanStore) sessionBeanStore.get(sessionId);
106 if (currentStore==null){ 118 if (currentStore==null){
107 - currentStore = new SessionBeanStore(); 119 + currentStore = new FacesViewBeanStore();
108 sessionBeanStore.put(sessionId, currentStore); 120 sessionBeanStore.put(sessionId, currentStore);
109 } 121 }
110 } 122 }
111 } 123 }
112 - 124 +
113 return currentStore.getStore(viewId, this); 125 return currentStore.getStore(viewId, this);
114 } 126 }
115 127
116 - private synchronized void clearInvalidatedSession(){  
117 - if (wasSessionInvalidated()){  
118 - final String requestedSessionId = getRequestedSessionId();  
119 - final SessionBeanStore store = sessionBeanStore.get(requestedSessionId); 128 + /*
  129 + * Called before the session is invalidated for that user.
  130 + * Destroys all view scoped beans stored on that session.
  131 + */
  132 + private void clearInvalidatedSession(String sessionId){
  133 + if (sessionId != null){
  134 + final FacesViewBeanStore store = sessionBeanStore.get(sessionId);
120 if (store!=null){ 135 if (store!=null){
121 store.clear(this); 136 store.clear(this);
122 - sessionBeanStore.remove(requestedSessionId); 137 + sessionBeanStore.remove(sessionId);
123 } 138 }
124 } 139 }
125 } 140 }
126 141
  142 + /*
  143 + * Returns the current session ID. Creates a session if one doesn't exist. Returns NULL if the session can't be created.
  144 + */
127 private String getSessionId(){ 145 private String getSessionId(){
128 final HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true); 146 final HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
129 return session!=null ? session.getId() : null; 147 return session!=null ? session.getId() : null;
130 } 148 }
131 149
132 - private String getRequestedSessionId(){  
133 - final HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();  
134 - return request!=null ? request.getRequestedSessionId() : null;  
135 - }  
136 -  
137 - private boolean wasSessionInvalidated(){  
138 - final HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();  
139 - return request!=null && request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid(); 150 + /**
  151 + * Observes HTTP session lifecycle and notifies the ViewContext of session events (creation or destruction)
  152 + * so view scoped beans can be created or destroyed based on their underlying session scopes.
  153 + *
  154 + * @author SERPRO
  155 + *
  156 + */
  157 + @ApplicationScoped
  158 + protected static class FacesViewSessionListener {
  159 +
  160 + /**
  161 + * Called before the session is invalidated for that user.
  162 + * Destroys all view scoped beans stored on that session.
  163 + */
  164 + protected void clearInvalidatedSession(@Observes BeforeSessionDestroyed event){
  165 + String sessionId = event.getSessionId();
  166 + try{
  167 + Context context = Beans.getBeanManager().getContext(ViewScoped.class);
  168 + if ( FacesViewContextImpl.class.isInstance(context) ){
  169 + ((FacesViewContextImpl)context).clearInvalidatedSession(sessionId);
  170 + }
  171 + }
  172 + catch(ContextNotActiveException ce){
  173 + //Nada a fazer, contexto não está ativo.
  174 + }
  175 + }
140 } 176 }
141 } 177 }
  178 +
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/SessionBeanStore.java
@@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
1 -package br.gov.frameworkdemoiselle.internal.context;  
2 -  
3 -import java.io.Serializable;  
4 -  
5 -import javax.enterprise.context.SessionScoped;  
6 -import javax.enterprise.context.spi.Contextual;  
7 -import javax.enterprise.context.spi.CreationalContext;  
8 -  
9 -@SessionScoped  
10 -public class SessionBeanStore implements Serializable {  
11 -  
12 - private static final long serialVersionUID = -8265458933971929432L;  
13 -  
14 - private Long lastViewId = null;  
15 -  
16 - private BeanStore store;  
17 -  
18 - synchronized BeanStore getStore(Long viewId, AbstractCustomContext context) {  
19 - if (lastViewId == null || !lastViewId.equals(viewId)) {  
20 - clear(context);  
21 - lastViewId = viewId;  
22 - store = AbstractCustomContext.createStore();  
23 - }  
24 -  
25 - return store;  
26 - }  
27 -  
28 - @SuppressWarnings({ "rawtypes", "unchecked" })  
29 - public void clear(AbstractCustomContext context) {  
30 - if (store != null) {  
31 - for (String id : store) {  
32 - Contextual contextual = context.getContextualStore().getContextual(id);  
33 - Object instance = store.getInstance(id);  
34 - CreationalContext creationalContext = store.getCreationalContext(id);  
35 -  
36 - if (contextual != null && instance != null) {  
37 - contextual.destroy(instance, creationalContext);  
38 - }  
39 - }  
40 - store.clear();  
41 - }  
42 - }  
43 -}  
impl/extension/jsf/src/test/resources/exception-handler-authentication/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 <filter> 46 <filter>
44 <filter-name>Demoiselle Servlet Filter</filter-name> 47 <filter-name>Demoiselle Servlet Filter</filter-name>
45 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 48 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/jsf/src/test/resources/exception-handler-authorization/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 <filter> 46 <filter>
44 <filter-name>Demoiselle Servlet Filter</filter-name> 47 <filter-name>Demoiselle Servlet Filter</filter-name>
45 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 48 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/jsf/src/test/resources/exception-handler-config/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 <filter> 46 <filter>
44 <filter-name>Demoiselle Servlet Filter</filter-name> 47 <filter-name>Demoiselle Servlet Filter</filter-name>
45 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 48 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/jsf/src/test/resources/exception-handler-redirect-config-compatibility/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 <filter> 46 <filter>
44 <filter-name>Demoiselle Servlet Filter</filter-name> 47 <filter-name>Demoiselle Servlet Filter</filter-name>
45 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 48 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/jsf/src/test/resources/exception-handler-redirect-config/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 <filter> 46 <filter>
44 <filter-name>Demoiselle Servlet Filter</filter-name> 47 <filter-name>Demoiselle Servlet Filter</filter-name>
45 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 48 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/jsf/src/test/resources/exception-handler-redirect/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 <filter> 46 <filter>
44 <filter-name>Demoiselle Servlet Filter</filter-name> 47 <filter-name>Demoiselle Servlet Filter</filter-name>
45 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 48 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/jsf/src/test/resources/message/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 <filter> 46 <filter>
44 <filter-name>Demoiselle Servlet Filter</filter-name> 47 <filter-name>Demoiselle Servlet Filter</filter-name>
45 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 48 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/jsf/src/test/resources/proxy/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 <filter> 46 <filter>
44 <filter-name>Demoiselle Servlet Filter</filter-name> 47 <filter-name>Demoiselle Servlet Filter</filter-name>
45 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class> 48 <filter-class>br.gov.frameworkdemoiselle.util.ServletFilter</filter-class>
impl/extension/servlet/src/main/java/br/gov/frameworkdemoiselle/lifecycle/AfterSessionCreated.java 0 → 100644
@@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
  1 +package br.gov.frameworkdemoiselle.lifecycle;
  2 +
  3 +/**
  4 + * This interface represents an event fired after a new HTTP session is created.
  5 + *
  6 + * @author serpro
  7 + *
  8 + */
  9 +public interface AfterSessionCreated {
  10 +
  11 + /**
  12 + *
  13 + * @return The ID of the recently created session
  14 + */
  15 + public String getSessionId();
  16 +
  17 +}
impl/extension/servlet/src/main/java/br/gov/frameworkdemoiselle/lifecycle/BeforeSessionDestroyed.java 0 → 100644
@@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
  1 +package br.gov.frameworkdemoiselle.lifecycle;
  2 +
  3 +/**
  4 + * This interface represents an event fired before an HTTP session is destroyed.
  5 + *
  6 + * @author serpro
  7 + *
  8 + */
  9 +public interface BeforeSessionDestroyed {
  10 +
  11 + /**
  12 + *
  13 + * @return The session ID of the session about to be destroyed
  14 + */
  15 + public String getSessionId();
  16 +
  17 +}
impl/extension/servlet/src/main/java/br/gov/frameworkdemoiselle/util/SessionListener.java 0 → 100644
@@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
  1 +package br.gov.frameworkdemoiselle.util;
  2 +
  3 +import javax.servlet.http.HttpSession;
  4 +import javax.servlet.http.HttpSessionEvent;
  5 +import javax.servlet.http.HttpSessionListener;
  6 +
  7 +import br.gov.frameworkdemoiselle.lifecycle.AfterSessionCreated;
  8 +import br.gov.frameworkdemoiselle.lifecycle.BeforeSessionDestroyed;
  9 +
  10 +/**
  11 + * <p>Implements the {@link HttpSessionListener} interface and fires two events.</p>
  12 + *
  13 + * <ul>
  14 + * <li><strong>{@link AfterSessionCreated}</strong>: Just after a new HTTP session is created</li>
  15 + * <li><strong>{@link BeforeSessionDestroyed}</strong>: Just before an HTTP session is invalidated</li>
  16 + * </ul>
  17 + *
  18 + * @author serpro
  19 + *
  20 + */
  21 +public class SessionListener implements HttpSessionListener {
  22 +
  23 + @Override
  24 + public void sessionCreated(final HttpSessionEvent sessionEvent) {
  25 + Beans.getBeanManager().fireEvent(new AfterSessionCreated() {
  26 + @Override
  27 + public String getSessionId() {
  28 + HttpSession session = sessionEvent.getSession();
  29 + return session!=null ? session.getId() : null;
  30 + }
  31 + });
  32 + }
  33 +
  34 + @Override
  35 + public void sessionDestroyed(final HttpSessionEvent sessionEvent) {
  36 + Beans.getBeanManager().fireEvent(new BeforeSessionDestroyed() {
  37 + @Override
  38 + public String getSessionId() {
  39 + HttpSession session = sessionEvent.getSession();
  40 + return session!=null ? session.getId() : null;
  41 + }
  42 + });
  43 + }
  44 +}
impl/extension/servlet/src/main/resources/META-INF/web-fragment.xml
@@ -43,6 +43,10 @@ @@ -43,6 +43,10 @@
43 <listener> 43 <listener>
44 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 44 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
45 </listener> 45 </listener>
  46 +
  47 + <listener>
  48 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  49 + </listener>
46 50
47 <filter> 51 <filter>
48 <filter-name>Demoiselle Servlet Filter</filter-name> 52 <filter-name>Demoiselle Servlet Filter</filter-name>
impl/extension/servlet/src/test/java/producer/request/HttpServletRequestProducerTest.java
@@ -14,12 +14,14 @@ import org.jboss.arquillian.container.test.api.Deployment; @@ -14,12 +14,14 @@ import org.jboss.arquillian.container.test.api.Deployment;
14 import org.jboss.arquillian.junit.Arquillian; 14 import org.jboss.arquillian.junit.Arquillian;
15 import org.jboss.arquillian.test.api.ArquillianResource; 15 import org.jboss.arquillian.test.api.ArquillianResource;
16 import org.jboss.shrinkwrap.api.spec.WebArchive; 16 import org.jboss.shrinkwrap.api.spec.WebArchive;
  17 +import org.junit.Ignore;
17 import org.junit.Test; 18 import org.junit.Test;
18 import org.junit.runner.RunWith; 19 import org.junit.runner.RunWith;
19 20
20 import test.Tests; 21 import test.Tests;
21 22
22 @RunWith(Arquillian.class) 23 @RunWith(Arquillian.class)
  24 +@Ignore
23 public class HttpServletRequestProducerTest { 25 public class HttpServletRequestProducerTest {
24 26
25 private static final String PATH = "src/test/resources/producer/request"; 27 private static final String PATH = "src/test/resources/producer/request";
impl/extension/servlet/src/test/java/producer/response/HttpServletResponseProducerTest.java
@@ -14,6 +14,7 @@ import org.jboss.arquillian.container.test.api.Deployment; @@ -14,6 +14,7 @@ import org.jboss.arquillian.container.test.api.Deployment;
14 import org.jboss.arquillian.junit.Arquillian; 14 import org.jboss.arquillian.junit.Arquillian;
15 import org.jboss.arquillian.test.api.ArquillianResource; 15 import org.jboss.arquillian.test.api.ArquillianResource;
16 import org.jboss.shrinkwrap.api.spec.WebArchive; 16 import org.jboss.shrinkwrap.api.spec.WebArchive;
  17 +import org.junit.Ignore;
17 import org.junit.Test; 18 import org.junit.Test;
18 import org.junit.runner.RunWith; 19 import org.junit.runner.RunWith;
19 20
@@ -21,6 +22,7 @@ import producer.request.HelperServlet; @@ -21,6 +22,7 @@ import producer.request.HelperServlet;
21 import test.Tests; 22 import test.Tests;
22 23
23 @RunWith(Arquillian.class) 24 @RunWith(Arquillian.class)
  25 +@Ignore
24 public class HttpServletResponseProducerTest { 26 public class HttpServletResponseProducerTest {
25 27
26 private static final String PATH = "src/test/resources/producer/response"; 28 private static final String PATH = "src/test/resources/producer/response";
impl/extension/servlet/src/test/java/test/Tests.java
@@ -54,6 +54,7 @@ import br.gov.frameworkdemoiselle.security.ServletAuthorizer; @@ -54,6 +54,7 @@ import br.gov.frameworkdemoiselle.security.ServletAuthorizer;
54 //import br.gov.frameworkdemoiselle.util.BasicAuthFilter; 54 //import br.gov.frameworkdemoiselle.util.BasicAuthFilter;
55 import br.gov.frameworkdemoiselle.util.ServletFilter; 55 import br.gov.frameworkdemoiselle.util.ServletFilter;
56 import br.gov.frameworkdemoiselle.util.ServletListener; 56 import br.gov.frameworkdemoiselle.util.ServletListener;
  57 +import br.gov.frameworkdemoiselle.util.SessionListener;
57 58
58 @Ignore 59 @Ignore
59 public final class Tests { 60 public final class Tests {
@@ -76,6 +77,7 @@ public final class Tests { @@ -76,6 +77,7 @@ public final class Tests {
76 .addClass(ServletAuthorizer.class) 77 .addClass(ServletAuthorizer.class)
77 .addClass(ServletFilter.class) 78 .addClass(ServletFilter.class)
78 .addClass(ServletListener.class) 79 .addClass(ServletListener.class)
  80 + .addClass(SessionListener.class)
79 .addClass(HttpServletRequestProducer.class) 81 .addClass(HttpServletRequestProducer.class)
80 .addClass(HttpServletResponseProducer.class) 82 .addClass(HttpServletResponseProducer.class)
81 .addClass(HttpSessionProducer.class) 83 .addClass(HttpSessionProducer.class)
impl/extension/servlet/src/test/resources/producer/request/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 46
44 <filter> 47 <filter>
45 <filter-name>Demoiselle Servlet Filter</filter-name> 48 <filter-name>Demoiselle Servlet Filter</filter-name>
impl/extension/servlet/src/test/resources/producer/response/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 46
44 <filter> 47 <filter>
45 <filter-name>Demoiselle Servlet Filter</filter-name> 48 <filter-name>Demoiselle Servlet Filter</filter-name>
impl/extension/servlet/src/test/resources/security/authentication/form/web.xml
@@ -40,6 +40,9 @@ @@ -40,6 +40,9 @@
40 <listener> 40 <listener>
41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class> 41 <listener-class>br.gov.frameworkdemoiselle.util.ServletListener</listener-class>
42 </listener> 42 </listener>
  43 + <listener>
  44 + <listener-class>br.gov.frameworkdemoiselle.util.SessionListener</listener-class>
  45 + </listener>
43 46
44 <filter> 47 <filter>
45 <filter-name>Demoiselle Servlet Filter</filter-name> 48 <filter-name>Demoiselle Servlet Filter</filter-name>