Skip to content

Commit

Permalink
Restructured listener
Browse files Browse the repository at this point in the history
  • Loading branch information
cuioss committed Jul 23, 2023
1 parent 474a563 commit bee7877
Show file tree
Hide file tree
Showing 8 changed files with 220 additions and 17 deletions.
17 changes: 0 additions & 17 deletions modules/core/portal-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50,23 +50,6 @@
<groupId>de.cuioss.portal.configuration</groupId>
<artifactId>portal-configuration-api</artifactId>
</dependency>
<!-- Deltaspike -->
<!-- <dependency>-->
<!-- <groupId>org.apache.deltaspike.core</groupId>-->
<!-- <artifactId>deltaspike-core-api</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.deltaspike.core</groupId>-->
<!-- <artifactId>deltaspike-core-impl</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.deltaspike.modules</groupId>-->
<!-- <artifactId>deltaspike-servlet-module-api</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.deltaspike.modules</groupId>-->
<!-- <artifactId>deltaspike-servlet-module-impl</artifactId>-->
<!-- </dependency>-->
<!-- Test Related -->
<dependency>
<groupId>org.easymock</groupId>
Expand Down
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);
}
}

}
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 {

}
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();

}
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 {

}
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();

}
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>
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;
}

}

0 comments on commit bee7877

Please sign in to comment.