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
229 additions
and
0 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
...re/src/main/java/de/cuioss/portal/core/cdi/servlet/bridge/RequestResponseEventFilter.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.cdi.servlet.bridge; | ||
|
||
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.cdi.servlet.literal.DestroyedLiteral; | ||
import de.cuioss.portal.core.cdi.servlet.literal.Initialized; | ||
import de.cuioss.portal.core.cdi.servlet.literal.InitializedLiteral; | ||
import de.cuioss.tools.logging.CuiLogger; | ||
|
||
/** | ||
* Inspired by deltaspike. Fires events for {@link Initialized} and | ||
* {@link Destroyed}. | ||
*/ | ||
public class RequestResponseEventFilter implements Filter { | ||
|
||
private static final CuiLogger LOGGER = new CuiLogger(RequestResponseEventFilter.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, InitializedLiteral.INSTANCE); | ||
beanManager.fireEvent(response, InitializedLiteral.INSTANCE); | ||
|
||
try { | ||
LOGGER.trace("Execute Chain"); | ||
chain.doFilter(request, response); | ||
} finally { | ||
LOGGER.trace("Fire @Destroyed events"); | ||
beanManager.fireEvent(request, DestroyedLiteral.INSTANCE); | ||
beanManager.fireEvent(response, DestroyedLiteral.INSTANCE); | ||
} | ||
} | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
...s/core/portal-core/src/main/java/de/cuioss/portal/core/cdi/servlet/literal/Destroyed.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.cdi.servlet.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 Destroyed { | ||
|
||
} |
15 changes: 15 additions & 0 deletions
15
...portal-core/src/main/java/de/cuioss/portal/core/cdi/servlet/literal/DestroyedLiteral.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.cdi.servlet.literal; | ||
|
||
import javax.enterprise.util.AnnotationLiteral; | ||
|
||
/** | ||
* Annotation literal for {@link DestroyedLiteral}. | ||
* | ||
* @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 DestroyedLiteral extends AnnotationLiteral<Initialized> implements Destroyed { | ||
|
||
private static final long serialVersionUID = 5587631398288144209L; | ||
public static final Destroyed INSTANCE = new DestroyedLiteral(); | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
...core/portal-core/src/main/java/de/cuioss/portal/core/cdi/servlet/literal/Initialized.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.cdi.servlet.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 Initialized { | ||
|
||
} |
16 changes: 16 additions & 0 deletions
16
...rtal-core/src/main/java/de/cuioss/portal/core/cdi/servlet/literal/InitializedLiteral.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.cdi.servlet.literal; | ||
|
||
import javax.enterprise.util.AnnotationLiteral; | ||
|
||
/** | ||
* Annotation literal for {@link Initialized}. | ||
* | ||
* @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 InitializedLiteral extends AnnotationLiteral<Initialized> implements Initialized { | ||
|
||
private static final long serialVersionUID = 1268993406072023790L; | ||
|
||
public static final Initialized INSTANCE = new InitializedLiteral(); | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
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,26 @@ | ||
<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 /> | ||
<listener> | ||
<listener-class></listener-class> | ||
</listener> | ||
<filter> | ||
<filter-name>requestResponseEventFilter</filter-name> | ||
<filter-class>de.cuioss.portal.core.cdi.servlet.bridge.RequestResponseEventFilter</filter-class> | ||
</filter> | ||
|
||
<filter-mapping> | ||
<filter-name>requestResponseEventFilter</filter-name> | ||
<url-pattern>/*</url-pattern> | ||
</filter-mapping> | ||
</web-fragment> |
67 changes: 67 additions & 0 deletions
67
...rc/test/java/de/cuioss/portal/core/cdi/servlet/bridge/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,67 @@ | ||
package de.cuioss.portal.core.cdi.servlet.bridge; | ||
|
||
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.cdi.servlet.literal.Initialized; | ||
|
||
@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 RequestResponseEventFilter(); | ||
FilterChain chain = EasyMock.createNiceMock(FilterChain.class); | ||
|
||
filter.doFilter(new MockHttpServletRequest(), new MockHttpServletResponse(), chain); | ||
assertTrue(destroyRequest); | ||
assertTrue(destroyResponse); | ||
assertTrue(initRequest); | ||
assertTrue(initResponse); | ||
} | ||
|
||
void initRequest(@Observes @Initialized HttpServletRequest request) { | ||
initRequest = true; | ||
} | ||
|
||
void destroyRequest(@Observes @Initialized HttpServletRequest request) { | ||
destroyRequest = true; | ||
} | ||
|
||
void initResponse(@Observes @Initialized HttpServletResponse request) { | ||
initResponse = true; | ||
} | ||
|
||
void destroyResponse(@Observes @Initialized HttpServletResponse request) { | ||
destroyResponse = true; | ||
} | ||
|
||
} |