You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/01/10 14:32:40 UTC
[isis] branch master updated: ISIS-2158: fixes to allow deployment
of Isis on Payara5
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new ca65ac2 ISIS-2158: fixes to allow deployment of Isis on Payara5
ca65ac2 is described below
commit ca65ac2435fe223a5d58e24229e2d0d5225697fe
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jan 10 15:32:32 2020 +0100
ISIS-2158: fixes to allow deployment of Isis on Payara5
applied workaround: CDI feels responsible to resolve injection points
for any Servlet or Filter registered on the ServletContext
programmatically; we can resolve this by replacing annotations @Inject
with @Autowire for any Servlet or Filter that gets contributed by a
WebModule
---
.../isis/config/viewer/wicket/WebAppContextPath.java | 2 ++
.../isis/security/shiro/webmodule/WebModuleShiro.java | 12 +++++++++++-
.../jaxrsresteasy4/webmodule/WebModuleJaxrsResteasy4.java | 7 +++++++
.../viewer/webmodule/IsisRestfulObjectsSessionFilter.java | 9 ++++-----
.../webmodule/IsisTransactionFilterForRestfulObjects.java | 6 +++---
.../modules/templresources/TemplateResourceServlet.java | 9 ++++-----
.../webapp/webappctx/IsisWebAppContextInitializer.java | 15 ++++++++++++++-
.../runtime/jee_support/IsisCDIBeanScanInterceptor.java | 2 ++
.../extensions/sse/webmodule/ServerSentEventsServlet.java | 6 +++---
9 files changed, 50 insertions(+), 18 deletions(-)
diff --git a/core/config/src/main/java/org/apache/isis/config/viewer/wicket/WebAppContextPath.java b/core/config/src/main/java/org/apache/isis/config/viewer/wicket/WebAppContextPath.java
index 0775644..263d313 100644
--- a/core/config/src/main/java/org/apache/isis/config/viewer/wicket/WebAppContextPath.java
+++ b/core/config/src/main/java/org/apache/isis/config/viewer/wicket/WebAppContextPath.java
@@ -47,6 +47,8 @@ import lombok.Getter;
@Qualifier("Default")
public class WebAppContextPath implements Serializable {
+ private static final long serialVersionUID = 1L;
+
/**
* In the form "xxx/yyy" (no leading nor trailing '/').
*/
diff --git a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
index ef994b5..d2cdb7c 100644
--- a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
+++ b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/webmodule/WebModuleShiro.java
@@ -25,6 +25,7 @@ import java.util.Map;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
@@ -45,6 +46,7 @@ import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.webapp.modules.WebModuleAbstract;
import org.apache.isis.webapp.modules.WebModuleContext;
@@ -117,7 +119,7 @@ public class WebModuleShiro extends WebModuleAbstract {
* Adds support for dependency injection into security realms
* @since 2.0
*/
- @NoArgsConstructor // don't remove, this is class is managed by Isis
+ @NoArgsConstructor // don't remove, this class is managed by Isis
public static class EnvironmentLoaderListenerForIsis extends EnvironmentLoaderListener {
@Inject private ServiceInjector serviceInjector;
@@ -126,6 +128,14 @@ public class WebModuleShiro extends WebModuleAbstract {
public EnvironmentLoaderListenerForIsis(ServiceInjector serviceInjector) {
this.serviceInjector = serviceInjector;
}
+
+ @Override
+ public void contextInitialized(ServletContextEvent sce) {
+ System.err.println("intercepted: " + this);
+ _Exceptions.dumpStackTrace();
+ System.err.println("======================================================");
+ super.contextInitialized(sce);
+ }
@Override
protected WebEnvironment createEnvironment(ServletContext servletContext) {
diff --git a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/webmodule/WebModuleJaxrsResteasy4.java b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/webmodule/WebModuleJaxrsResteasy4.java
index ffa3f3c..0b15dcd 100644
--- a/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/webmodule/WebModuleJaxrsResteasy4.java
+++ b/core/viewers/restfulobjects/jaxrs-resteasy-4/src/main/java/org/apache/isis/viewer/restfulobjects/jaxrsresteasy4/webmodule/WebModuleJaxrsResteasy4.java
@@ -24,6 +24,8 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
+import org.jboss.resteasy.core.providerfactory.ResteasyProviderFactoryImpl;
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
@@ -74,6 +76,9 @@ public final class WebModuleJaxrsResteasy4 extends WebModuleAbstract {
@Override
public void prepare(WebModuleContext ctx) {
+
+ ResteasyProviderFactory.setInstance(new ResteasyProviderFactoryImpl());
+
super.prepare(ctx);
if(!isApplicable(ctx)) {
@@ -87,6 +92,8 @@ public final class WebModuleJaxrsResteasy4 extends WebModuleAbstract {
@Override
public Can<ServletContextListener> init(ServletContext ctx) throws ServletException {
+ ResteasyProviderFactory.setInstance(new ResteasyProviderFactoryImpl());
+
registerFilter(ctx, ISIS_SESSION_FILTER_FOR_RESTFUL_OBJECTS, IsisRestfulObjectsSessionFilter.class)
.ifPresent(filterReg -> {
// this is mapped to the entire application;
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisRestfulObjectsSessionFilter.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisRestfulObjectsSessionFilter.java
index a9e79d2..9bdae7e 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisRestfulObjectsSessionFilter.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisRestfulObjectsSessionFilter.java
@@ -29,7 +29,6 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.inject.Inject;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
@@ -39,6 +38,8 @@ import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.factory.InstanceUtil;
@@ -153,10 +154,8 @@ public class IsisRestfulObjectsSessionFilter implements Filter {
return Pattern.compile(".*\\." + input);
};
- @Inject
- private IsisSessionFactory isisSessionFactory;
- @Inject
- private SpecificationLoader specificationLoader;
+ @Autowired private IsisSessionFactory isisSessionFactory;
+ @Autowired private SpecificationLoader specificationLoader;
private List<String> passThruList = Collections.emptyList();
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisTransactionFilterForRestfulObjects.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisTransactionFilterForRestfulObjects.java
index 96af113..3aee005 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisTransactionFilterForRestfulObjects.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisTransactionFilterForRestfulObjects.java
@@ -20,7 +20,6 @@ package org.apache.isis.viewer.restfulobjects.viewer.webmodule;
import java.io.IOException;
-import javax.inject.Inject;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
@@ -28,6 +27,8 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.transaction.TransactionalException;
+import org.springframework.beans.factory.annotation.Autowired;
+
import org.apache.isis.applib.services.xactn.TransactionService;
//@WebFilter(servletNames= {"RestfulObjectsRestEasyDispatcher"}) //[ahuber] to support
@@ -35,8 +36,7 @@ import org.apache.isis.applib.services.xactn.TransactionService;
//with skinny war deployment requires additional configuration, so for now we disable this annotation
public class IsisTransactionFilterForRestfulObjects implements Filter {
- @Inject
- private TransactionService transactionService;
+ @Autowired private TransactionService transactionService;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
diff --git a/core/webapp/src/main/java/org/apache/isis/webapp/modules/templresources/TemplateResourceServlet.java b/core/webapp/src/main/java/org/apache/isis/webapp/modules/templresources/TemplateResourceServlet.java
index 8cb2411..0a35c02 100644
--- a/core/webapp/src/main/java/org/apache/isis/webapp/modules/templresources/TemplateResourceServlet.java
+++ b/core/webapp/src/main/java/org/apache/isis/webapp/modules/templresources/TemplateResourceServlet.java
@@ -23,13 +23,14 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-import javax.inject.Inject;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+
import org.apache.isis.commons.internal.base._Bytes;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.config.RestEasyConfiguration;
@@ -53,10 +54,8 @@ public class TemplateResourceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private TemplateResourceServlet_HtmlTemplateVariables templateVariables;
- @Inject
- private RestEasyConfiguration restEasyConfiguration;
- @Inject
- private WebAppContextPath webAppContextPath;
+ @Autowired private RestEasyConfiguration restEasyConfiguration;
+ @Autowired private WebAppContextPath webAppContextPath;
@Override
public void init(ServletConfig config) throws ServletException {
diff --git a/core/webapp/src/main/java/org/apache/isis/webapp/webappctx/IsisWebAppContextInitializer.java b/core/webapp/src/main/java/org/apache/isis/webapp/webappctx/IsisWebAppContextInitializer.java
index c4c504a..2a9507b 100644
--- a/core/webapp/src/main/java/org/apache/isis/webapp/webappctx/IsisWebAppContextInitializer.java
+++ b/core/webapp/src/main/java/org/apache/isis/webapp/webappctx/IsisWebAppContextInitializer.java
@@ -19,6 +19,7 @@
package org.apache.isis.webapp.webappctx;
import java.util.EventListener;
+import java.util.concurrent.atomic.LongAdder;
import javax.inject.Inject;
import javax.servlet.ServletContext;
@@ -27,6 +28,7 @@ import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.springframework.boot.web.servlet.ServletContextInitializer;
+import org.springframework.stereotype.Component;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal.context._Context;
@@ -53,9 +55,12 @@ import lombok.extern.log4j.Log4j2;
* @since 2.0
*
*/
+@Component
@Log4j2
public class IsisWebAppContextInitializer implements ServletContextInitializer {
+ private final static LongAdder instanceCount = new LongAdder();
+
@Inject private ServiceRegistry serviceRegistry; // this dependency ensures Isis has been initialized/provisioned
@Inject private IsisConfiguration isisConfiguration;
@Inject private WebAppContextPath webAppContextPath;
@@ -65,6 +70,13 @@ public class IsisWebAppContextInitializer implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
+ { // onStartup(...) must be a one shot, otherwise just ignore
+ if(instanceCount.intValue() > 0) {
+ return;
+ }
+ instanceCount.increment();
+ }
+
if(!isIsisProvisioned()) {
log.error("skipping initialization, Spring should already have provisioned all configured Beans");
return;
@@ -73,7 +85,7 @@ public class IsisWebAppContextInitializer implements ServletContextInitializer {
// set the ServletContext initializing thread as preliminary default until overridden by
// IsisWicketApplication#init() or others, that better know what ClassLoader to use as application default.
_Context.setDefaultClassLoader(Thread.currentThread().getContextClassLoader(), false);
-
+
val contextPath = servletContext.getContextPath();
log.info("=== PHASE 1 === Setting up ServletContext parameters, contextPath = " + contextPath);
@@ -97,6 +109,7 @@ public class IsisWebAppContextInitializer implements ServletContextInitializer {
log.info("about to destroy the context");
webModuleContext.shutdown(event);
}
+ instanceCount.reset();
log.info("context destroyed");
}
diff --git a/incubator/extensions/core/microprofile/src/main/java/org/apache/isis/runtime/jee_support/IsisCDIBeanScanInterceptor.java b/incubator/extensions/core/microprofile/src/main/java/org/apache/isis/runtime/jee_support/IsisCDIBeanScanInterceptor.java
index d925b00..b8954b1 100644
--- a/incubator/extensions/core/microprofile/src/main/java/org/apache/isis/runtime/jee_support/IsisCDIBeanScanInterceptor.java
+++ b/incubator/extensions/core/microprofile/src/main/java/org/apache/isis/runtime/jee_support/IsisCDIBeanScanInterceptor.java
@@ -27,6 +27,7 @@ import javax.enterprise.inject.spi.BeforeBeanDiscovery;
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;
import javax.servlet.ServletContextListener;
+import javax.servlet.http.HttpServlet;
import org.springframework.stereotype.Component;
@@ -64,6 +65,7 @@ public final class IsisCDIBeanScanInterceptor implements Extension {
private static final List<Predicate<Class<?>>> vetoTests = _Lists.of(
ExceptionRecognizer.class::isAssignableFrom,
ServletContextListener.class::isAssignableFrom, // seems this has no effect anyway
+ HttpServlet.class::isAssignableFrom, // seems this has no effect either
type->type.getName().startsWith("org.springframework."),
type->type.getName().startsWith("org.apache.isis."),
type->_Annotations.isPresent(type, Component.class));
diff --git a/valuetypes/sse/src/main/java/org/apache/isis/extensions/sse/webmodule/ServerSentEventsServlet.java b/valuetypes/sse/src/main/java/org/apache/isis/extensions/sse/webmodule/ServerSentEventsServlet.java
index 585c20c..b2da45e 100644
--- a/valuetypes/sse/src/main/java/org/apache/isis/extensions/sse/webmodule/ServerSentEventsServlet.java
+++ b/valuetypes/sse/src/main/java/org/apache/isis/extensions/sse/webmodule/ServerSentEventsServlet.java
@@ -23,13 +23,14 @@ import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ForkJoinPool;
-import javax.inject.Inject;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+
import org.apache.isis.applib.util.JaxbAdapters;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.context._Context;
@@ -54,8 +55,7 @@ public class ServerSentEventsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private ExecutorService threadPool;
- @Inject
- private SseService sseService;
+ @Autowired private SseService sseService;
@Override
public void init() throws ServletException {