This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 3975-telemetry
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/3975-telemetry by this push:
new 7b76f211431 CAUSEWAY-3975: consolidating custom request processing
logic (wicket)
7b76f211431 is described below
commit 7b76f211431e3a1b92fb8ca6768850071c8e6a42
Author: andi-huber <[email protected]>
AuthorDate: Fri Mar 20 23:38:59 2026 +0100
CAUSEWAY-3975: consolidating custom request processing logic (wicket)
---
.../testdomain/conf/Configuration_usingWicket.java | 5 +-
.../{RequestCycle2.java => RootRequestMapper.java} | 67 ++++++++++------
.../integration/WebRequestCycleForCauseway.java | 10 ++-
.../CausewayWicketAjaxRequestListenerUtil.java | 91 ----------------------
.../wicketapp/CausewayWicketApplication.java | 7 +-
5 files changed, 56 insertions(+), 124 deletions(-)
diff --git
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingWicket.java
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingWicket.java
index b535c6edda3..e8c488746d9 100644
---
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingWicket.java
+++
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/conf/Configuration_usingWicket.java
@@ -61,7 +61,7 @@
import org.apache.causeway.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.causeway.viewer.wicket.ui.pages.obj.DomainObjectPage;
import
org.apache.causeway.viewer.wicket.viewer.CausewayModuleViewerWicketViewer;
-import
org.apache.causeway.viewer.wicket.viewer.wicketapp.CausewayWicketAjaxRequestListenerUtil;
+import org.apache.causeway.viewer.wicket.viewer.integration.RootRequestMapper;
import lombok.AccessLevel;
import lombok.Getter;
@@ -349,8 +349,7 @@ protected IPageFactory newPageFactory() {
@Override
protected void internalInit() {
super.internalInit();
- // intercept AJAX requests and reload view-models so any detached
entities are re-fetched
- CausewayWicketAjaxRequestListenerUtil.setRootRequestMapper(this);
+ setRootRequestMapper(new RootRequestMapper(this));
}
}
diff --git
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/RequestCycle2.java
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/RootRequestMapper.java
similarity index 54%
rename from
viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/RequestCycle2.java
rename to
viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/RootRequestMapper.java
index a7631deb424..1d50d625120 100644
---
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/RequestCycle2.java
+++
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/RootRequestMapper.java
@@ -18,34 +18,26 @@
*/
package org.apache.causeway.viewer.wicket.viewer.integration;
+import org.apache.wicket.Application;
+import org.apache.wicket.SystemMapper;
+import org.apache.wicket.core.request.handler.ListenerRequestHandler;
+import org.apache.wicket.core.request.mapper.PageInstanceMapper;
import org.apache.wicket.request.IRequestCycle;
import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.request.cycle.RequestCycleContext;
+import org.apache.wicket.request.IRequestMapper;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.component.IRequestablePage;
import org.apache.causeway.applib.services.iactnlayer.InteractionContext;
import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.applib.services.user.UserService;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.viewer.wicket.ui.pages.PageAbstract;
import lombok.extern.slf4j.Slf4j;
-public class RequestCycle2 extends RequestCycle {
+public final class RootRequestMapper extends SystemMapper implements
IRequestMapper {
- public RequestCycle2(final RequestCycleContext context) {
- super(context);
- }
-
- record Wrapper(IRequestHandler delegate) implements IRequestHandler {
- @Override
- public void respond(final IRequestCycle requestCycle) {
- delegate.respond(requestCycle);
- }
- @Override
- public void detach(final IRequestCycle requestCycle) {
- delegate.detach(requestCycle);
- }
- }
+ public static ThreadLocal<InteractionContext> X = new ThreadLocal<>();
@Slf4j
record RequestHandlerWrapper(
@@ -67,18 +59,43 @@ public void detach(final IRequestCycle requestCycle) {
}
}
+ public RootRequestMapper(final Application application) {
+ super(application);
+ }
+
@Override
- protected IRequestHandler resolveRequestHandler() {
+ public IRequestHandler mapRequest(final Request request) {
var mmc = MetaModelContext.instanceElseFail();
-
- var ic = new SessionAuthenticator(mmc.getInteractionService(),
mmc.lookupServiceElseFail(UserService.class))
- .determineInteractionContext()
- .orElse(null);
+// var ic = new SessionAuthenticator(mmc.getInteractionService(),
mmc.lookupServiceElseFail(UserService.class))
+// .determineInteractionContext()
+// .orElse(null);
return new RequestHandlerWrapper(
mmc.getInteractionService(),
- ic,
- super.resolveRequestHandler());
+ X.get(),
+ super.mapRequest(request));
+ }
+
+ // intercept AJAX requests and reload view-models so any detached entities
are re-fetched
+ @Override
+ protected IRequestMapper newPageInstanceMapper() {
+ return new PageInstanceMapper() {
+ @Override
+ public IRequestHandler mapRequest(final Request request) {
+ var handler = super.mapRequest(request);
+
+ if (handler instanceof ListenerRequestHandler) {
+
+ final IRequestablePage iRequestablePage =
((ListenerRequestHandler) handler).getPage();
+
+ if (iRequestablePage instanceof PageAbstract pageAbstract)
{
+ pageAbstract.onNewRequestCycle();
+ }
+ }
+
+ return handler;
+ }
+ };
}
}
diff --git
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/WebRequestCycleForCauseway.java
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/WebRequestCycleForCauseway.java
index a4240799c16..5f52bc2a2ba 100644
---
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/WebRequestCycleForCauseway.java
+++
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/integration/WebRequestCycleForCauseway.java
@@ -55,12 +55,14 @@
import org.apache.causeway.applib.services.i18n.TranslationContext;
import org.apache.causeway.applib.services.iactn.Interaction;
import org.apache.causeway.applib.services.metrics.MetricsService;
+import org.apache.causeway.applib.services.user.UserService;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.commons.internal.base._Strings;
import org.apache.causeway.commons.internal.base._Timing;
import org.apache.causeway.commons.internal.base._Timing.StopWatch;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
+import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
import
org.apache.causeway.core.metamodel.specloader.validator.MetaModelInvalidException;
import org.apache.causeway.viewer.commons.model.error.ExceptionModel;
@@ -142,7 +144,13 @@ public synchronized void onBeginRequest(final RequestCycle
requestCycle) {
}
return;
}
-
+
+ var mmc = MetaModelContext.instanceElseFail();
+ var ic = new SessionAuthenticator(mmc.getInteractionService(),
mmc.lookupServiceElseFail(UserService.class))
+ .determineInteractionContext()
+ .orElse(null);
+ RootRequestMapper.X.set(ic);
+
if(log.isTraceEnabled()) {
log.trace("onBeginRequest out - session about to open");
}
diff --git
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/wicketapp/CausewayWicketAjaxRequestListenerUtil.java
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/wicketapp/CausewayWicketAjaxRequestListenerUtil.java
deleted file mode 100644
index 6a7c3ed4b11..00000000000
---
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/wicketapp/CausewayWicketAjaxRequestListenerUtil.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.viewer.wicket.viewer.wicketapp;
-
-import org.apache.wicket.SystemMapper;
-import org.apache.wicket.core.request.handler.ListenerRequestHandler;
-import org.apache.wicket.core.request.mapper.PageInstanceMapper;
-import org.apache.wicket.protocol.http.WebApplication;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.IRequestMapper;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.component.IRequestablePage;
-
-import org.apache.causeway.viewer.wicket.ui.pages.PageAbstract;
-
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public final class CausewayWicketAjaxRequestListenerUtil {
-
- public void setRootRequestMapper(
- final WebApplication app) {
-
- app.setRootRequestMapper(new SystemMapper(app) {
- @Override
- protected IRequestMapper newPageInstanceMapper() {
- return new PageInstanceMapper() {
- @Override
- public IRequestHandler mapRequest(final Request request) {
- var handler = super.mapRequest(request);
- //final boolean isAjax =
((WebRequest)request).isAjax();
-
- if(handler instanceof ListenerRequestHandler) {
-// _Debug.log("AJAX via ListenerRequestHandler");
-//
RequestCycle.get().getListeners().add(newRequestCycleListener());
-
- final IRequestablePage iRequestablePage =
-
((ListenerRequestHandler)handler).getPage();
-
- if(iRequestablePage instanceof PageAbstract
pageAbstract) {
- pageAbstract.onNewRequestCycle();
- }
-
- }
-
- return handler;
- }
- };
- }
- });
- }
-
-// public IListener newAjaxListener() {
-//
-// RequestCycle x;
-//
-// return new IListener() {;
-// @Override
-// public void onBeforeRespond(final Map<String, Component> map,
final AjaxRequestTarget target) {
-// _Debug.log("AJAX via IListener");
-// DomainObjectPage.broadcastAjaxRequest(target.getPage(),
target);
-// }
-// };
-// }
-
-// private IRequestCycleListener newRequestCycleListener() {
-// return new IRequestCycleListener() {
-// @Override
-// public void onRequestHandlerResolved(final RequestCycle cycle,
final IRequestHandler handler) {
-// _Debug.log("RequestCycle: handler resolved %s", handler);
-// }
-// };
-// }
-
-}
diff --git
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/wicketapp/CausewayWicketApplication.java
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/wicketapp/CausewayWicketApplication.java
index 706c9855140..41bb10f8294 100644
---
a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/wicketapp/CausewayWicketApplication.java
+++
b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/wicketapp/CausewayWicketApplication.java
@@ -68,7 +68,7 @@
import
org.apache.causeway.viewer.wicket.viewer.integration.AuthenticatedWebSessionForCauseway;
import
org.apache.causeway.viewer.wicket.viewer.integration.CausewayResourceSettings;
import
org.apache.causeway.viewer.wicket.viewer.integration.ConverterForObjectAdapter;
-import org.apache.causeway.viewer.wicket.viewer.integration.RequestCycle2;
+import org.apache.causeway.viewer.wicket.viewer.integration.RootRequestMapper;
import
org.apache.causeway.viewer.wicket.viewer.integration.WebRequestCycleForCauseway;
import lombok.Getter;
@@ -138,10 +138,9 @@ protected void internalInit() {
// settings before any other.
setResourceSettings(new CausewayResourceSettings(this));
super.internalInit();
- setRequestCycleProvider(RequestCycle2::new);
+ //setRequestCycleProvider(RequestCycle2::new);
- // intercept AJAX requests and reload view-models so any detached
entities are re-fetched
- CausewayWicketAjaxRequestListenerUtil.setRootRequestMapper(this);
+ setRootRequestMapper(new RootRequestMapper(this));
}
private AjaxRequestTarget decorate(final AjaxRequestTarget
ajaxRequestTarget) {