generated from cuioss/cui-java-module-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
220 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
...tal-core/src/main/java/de/cuioss/portal/core/listener/RequestResponseLifecycleFilter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package de.cuioss.portal.core.listener; | ||
|
||
import java.io.IOException; | ||
|
||
import javax.enterprise.inject.spi.CDI; | ||
import javax.servlet.Filter; | ||
import javax.servlet.FilterChain; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.ServletRequest; | ||
import javax.servlet.ServletResponse; | ||
|
||
import de.cuioss.portal.core.listener.literal.ServletDestroyedLiteral; | ||
import de.cuioss.portal.core.listener.literal.ServletInitialized; | ||
import de.cuioss.portal.core.listener.literal.ServletInitializedLiteral; | ||
import de.cuioss.tools.logging.CuiLogger; | ||
|
||
/** | ||
* Inspired by deltaspike. Fires events for {@link ServletInitialized} and | ||
* {@link ServletDestroyed}. | ||
*/ | ||
public class RequestResponseLifecycleFilter implements Filter { | ||
|
||
private static final CuiLogger LOGGER = new CuiLogger(RequestResponseLifecycleFilter.class); | ||
|
||
@Override | ||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | ||
throws IOException, ServletException { | ||
|
||
var beanManager = CDI.current().getBeanManager(); | ||
|
||
LOGGER.trace("Fire @Initialized events"); | ||
beanManager.fireEvent(request, ServletInitializedLiteral.INSTANCE); | ||
beanManager.fireEvent(response, ServletInitializedLiteral.INSTANCE); | ||
|
||
try { | ||
LOGGER.trace("Execute Chain"); | ||
chain.doFilter(request, response); | ||
} finally { | ||
LOGGER.trace("Fire @Destroyed events"); | ||
beanManager.fireEvent(request, ServletDestroyedLiteral.INSTANCE); | ||
beanManager.fireEvent(response, ServletDestroyedLiteral.INSTANCE); | ||
} | ||
} | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
...re/portal-core/src/main/java/de/cuioss/portal/core/listener/literal/ServletDestroyed.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package de.cuioss.portal.core.listener.literal; | ||
|
||
import static java.lang.annotation.ElementType.FIELD; | ||
import static java.lang.annotation.ElementType.METHOD; | ||
import static java.lang.annotation.ElementType.PARAMETER; | ||
import static java.lang.annotation.ElementType.TYPE; | ||
import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
|
||
import java.lang.annotation.Documented; | ||
import java.lang.annotation.Retention; | ||
import java.lang.annotation.Target; | ||
|
||
import javax.inject.Qualifier; | ||
|
||
/** | ||
* Qualifier for events which are fired when servlet objects are deleted. | ||
* | ||
* @author https://github.com/apache/deltaspike/blob/deltaspike-1.9.6/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/lifecycle/Destroyed.java | ||
*/ | ||
@Qualifier | ||
@Target({ TYPE, METHOD, PARAMETER, FIELD }) | ||
@Retention(RUNTIME) | ||
@Documented | ||
public @interface ServletDestroyed { | ||
|
||
} |
15 changes: 15 additions & 0 deletions
15
...al-core/src/main/java/de/cuioss/portal/core/listener/literal/ServletDestroyedLiteral.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package de.cuioss.portal.core.listener.literal; | ||
|
||
import javax.enterprise.util.AnnotationLiteral; | ||
|
||
/** | ||
* Annotation literal for {@link ServletDestroyedLiteral}. | ||
* | ||
* @author https://github.com/apache/deltaspike/blob/deltaspike-1.9.6/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/literal/DestroyedLiteral.java | ||
*/ | ||
public class ServletDestroyedLiteral extends AnnotationLiteral<ServletInitialized> implements ServletDestroyed { | ||
|
||
private static final long serialVersionUID = 5587631398288144209L; | ||
public static final ServletDestroyed INSTANCE = new ServletDestroyedLiteral(); | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
.../portal-core/src/main/java/de/cuioss/portal/core/listener/literal/ServletInitialized.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package de.cuioss.portal.core.listener.literal; | ||
|
||
import static java.lang.annotation.ElementType.FIELD; | ||
import static java.lang.annotation.ElementType.METHOD; | ||
import static java.lang.annotation.ElementType.PARAMETER; | ||
import static java.lang.annotation.ElementType.TYPE; | ||
import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
|
||
import java.lang.annotation.Documented; | ||
import java.lang.annotation.Retention; | ||
import java.lang.annotation.Target; | ||
|
||
import javax.inject.Qualifier; | ||
|
||
/** | ||
* Qualifier for events which are fired when servlet objects are created. | ||
* | ||
* @author https://github.com/apache/deltaspike/blob/deltaspike-1.9.6/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/lifecycle/Initialized.java | ||
*/ | ||
@Qualifier | ||
@Target({ TYPE, METHOD, PARAMETER, FIELD }) | ||
@Retention(RUNTIME) | ||
@Documented | ||
public @interface ServletInitialized { | ||
|
||
} |
16 changes: 16 additions & 0 deletions
16
...-core/src/main/java/de/cuioss/portal/core/listener/literal/ServletInitializedLiteral.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package de.cuioss.portal.core.listener.literal; | ||
|
||
import javax.enterprise.util.AnnotationLiteral; | ||
|
||
/** | ||
* Annotation literal for {@link ServletInitialized}. | ||
* | ||
* @author https://github.com/apache/deltaspike/blob/deltaspike-1.9.6/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/literal/InitializedLiteral.java | ||
*/ | ||
public class ServletInitializedLiteral extends AnnotationLiteral<ServletInitialized> implements ServletInitialized { | ||
|
||
private static final long serialVersionUID = 1268993406072023790L; | ||
|
||
public static final ServletInitialized INSTANCE = new ServletInitializedLiteral(); | ||
|
||
} |
24 changes: 24 additions & 0 deletions
24
modules/core/portal-core/src/main/resources/META-INF/web-fragment.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<web-fragment xmlns="http://xmlns.jcp.org/xml/ns/javaee" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-fragment_3_1.xsd" | ||
version="3.1"> | ||
<name>portal_core</name> | ||
|
||
<ordering> | ||
<before> | ||
<others /> | ||
</before> | ||
</ordering> | ||
|
||
<distributable /> | ||
|
||
<filter> | ||
<filter-name>requestResponseEventFilter</filter-name> | ||
<filter-class>de.cuioss.portal.core.listener.RequestResponseLifecycleFilter</filter-class> | ||
</filter> | ||
|
||
<filter-mapping> | ||
<filter-name>requestResponseEventFilter</filter-name> | ||
<url-pattern>/*</url-pattern> | ||
</filter-mapping> | ||
</web-fragment> |
68 changes: 68 additions & 0 deletions
68
...tal-core/src/test/java/de/cuioss/portal/core/listener/RequestResponseEventFilterTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
package de.cuioss.portal.core.listener; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
|
||
import java.io.IOException; | ||
|
||
import javax.enterprise.event.Observes; | ||
import javax.servlet.FilterChain; | ||
import javax.servlet.ServletException; | ||
import javax.servlet.http.HttpServletRequest; | ||
import javax.servlet.http.HttpServletResponse; | ||
|
||
import org.apache.myfaces.test.mock.MockHttpServletRequest; | ||
import org.apache.myfaces.test.mock.MockHttpServletResponse; | ||
import org.easymock.EasyMock; | ||
import org.jboss.weld.junit5.auto.EnableAutoWeld; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import de.cuioss.portal.core.listener.RequestResponseLifecycleFilter; | ||
import de.cuioss.portal.core.listener.literal.ServletInitialized; | ||
|
||
@EnableAutoWeld | ||
class RequestResponseEventFilterTest { | ||
|
||
private boolean initRequest; | ||
private boolean destroyRequest; | ||
|
||
private boolean initResponse; | ||
private boolean destroyResponse; | ||
|
||
@BeforeEach | ||
void restEventResults() { | ||
initRequest = false; | ||
destroyRequest = false; | ||
initResponse = false; | ||
destroyResponse = false; | ||
} | ||
|
||
@Test | ||
void shouldFilter() throws IOException, ServletException { | ||
var filter = new RequestResponseLifecycleFilter(); | ||
FilterChain chain = EasyMock.createNiceMock(FilterChain.class); | ||
|
||
filter.doFilter(new MockHttpServletRequest(), new MockHttpServletResponse(), chain); | ||
assertTrue(destroyRequest); | ||
assertTrue(destroyResponse); | ||
assertTrue(initRequest); | ||
assertTrue(initResponse); | ||
} | ||
|
||
void initRequest(@Observes @ServletInitialized HttpServletRequest request) { | ||
initRequest = true; | ||
} | ||
|
||
void destroyRequest(@Observes @ServletInitialized HttpServletRequest request) { | ||
destroyRequest = true; | ||
} | ||
|
||
void initResponse(@Observes @ServletInitialized HttpServletResponse request) { | ||
initResponse = true; | ||
} | ||
|
||
void destroyResponse(@Observes @ServletInitialized HttpServletResponse request) { | ||
destroyResponse = true; | ||
} | ||
|
||
} |