From b176b61cd39b3fa7a2c394f33a3acd987e7e3f59 Mon Sep 17 00:00:00 2001 From: Ondro Mihalyi Date: Sat, 30 Dec 2023 09:00:55 +0100 Subject: [PATCH 1/9] GH #25039 A custom view handler that can delegate to default view handler --- .../resources/applications/applications.xhtml | 10 ++++ .../src/main/resources/pluginTreeNodeApps.jsf | 2 +- appserver/admingui/war/pom.xml | 10 ++++ .../admingui/common/AdminGuiApplication.java | 41 +++++++++++++ .../common/AdminGuiApplicationFactory.java | 57 +++++++++++++++++++ .../admingui/common/AdminGuiViewHandler.java | 42 ++++++++++++++ .../src/main/webapp/WEB-INF/faces-config.xml | 22 ++----- 7 files changed, 166 insertions(+), 18 deletions(-) create mode 100644 appserver/admingui/common/src/main/resources/applications/applications.xhtml create mode 100644 appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java create mode 100644 appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplicationFactory.java create mode 100644 appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java diff --git a/appserver/admingui/common/src/main/resources/applications/applications.xhtml b/appserver/admingui/common/src/main/resources/applications/applications.xhtml new file mode 100644 index 00000000000..50544ccfd61 --- /dev/null +++ b/appserver/admingui/common/src/main/resources/applications/applications.xhtml @@ -0,0 +1,10 @@ + + + + + Facelet Title + + + Hello from Facelets + + diff --git a/appserver/admingui/common/src/main/resources/pluginTreeNodeApps.jsf b/appserver/admingui/common/src/main/resources/pluginTreeNodeApps.jsf index 42596cac9de..f8496053999 100644 --- a/appserver/admingui/common/src/main/resources/pluginTreeNodeApps.jsf +++ b/appserver/admingui/common/src/main/resources/pluginTreeNodeApps.jsf @@ -24,7 +24,7 @@ treeAdaptorClass="org.glassfish.admingui.common.tree.ListTreeAdaptor" children="#{requestScope.children}" text="$resource{i18n.tree.applications}" - url="/common/applications/applications.jsf" + url="/common/applications/applications.xhtml" expanded="false" childImageURL="/resource/images/webModule.gif" imageURL="/resource/images/application.gif" diff --git a/appserver/admingui/war/pom.xml b/appserver/admingui/war/pom.xml index e405506e7b7..87dfc34e267 100644 --- a/appserver/admingui/war/pom.xml +++ b/appserver/admingui/war/pom.xml @@ -86,6 +86,16 @@ woodstock-webui-jsf-suntheme provided + + jakarta.faces + jakarta.faces-api + provided + + + jakarta.el + jakarta.el-api + provided + diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java new file mode 100644 index 00000000000..b6cb8c558f1 --- /dev/null +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ +package org.glassfish.admingui.common; + +import jakarta.faces.application.ApplicationWrapper; +import jakarta.faces.application.ViewHandler; + +/** + * + * @author Ondro Mihalyi + */ +public class AdminGuiApplication extends ApplicationWrapper { + + ViewHandler defaultViewHandler = null; + + @Override + public void setViewHandler(ViewHandler handler) { + if (defaultViewHandler == null) { + defaultViewHandler = handler; + } + super.setViewHandler(handler); + } + + public ViewHandler getDefaViewHandler() { + return defaultViewHandler; + } + +} diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplicationFactory.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplicationFactory.java new file mode 100644 index 00000000000..51bf45a0e28 --- /dev/null +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplicationFactory.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ +package org.glassfish.admingui.common; + +import jakarta.faces.application.Application; +import jakarta.faces.application.ApplicationFactory; +import jakarta.faces.application.ApplicationWrapper; +import jakarta.faces.application.ViewHandler; + +/** + * + * @author Ondro Mihalyi + */ +public class AdminGuiApplicationFactory extends ApplicationFactory { + + Application app; + + public AdminGuiApplicationFactory(ApplicationFactory wrapped) { + super(wrapped); + app = new ApplicationWrapper(wrapped.getApplication()) { + @Override + public void setViewHandler(ViewHandler handler) { + super.setViewHandler(handler); + } + + @Override + public ViewHandler getViewHandler() { + return super.getViewHandler(); + } + + }; + } + + @Override + public Application getApplication() { + return app; + } + + @Override + public void setApplication(Application application) { + app = application; + } + +} diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java new file mode 100644 index 00000000000..9a880d7170b --- /dev/null +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023 Contributors to the Eclipse Foundation + * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ +package org.glassfish.admingui.common; + +import jakarta.faces.application.Application; +import jakarta.faces.application.ViewHandler; +import jakarta.faces.application.ViewHandlerWrapper; +import jakarta.faces.context.FacesContext; + +/** + * + * @author Ondro Mihalyi + */ +public class AdminGuiViewHandler extends ViewHandlerWrapper { + + private ViewHandler defauViewHandler = null; + + public AdminGuiViewHandler(ViewHandler wrapped) { + super(wrapped); + Application app = FacesContext.getCurrentInstance().getApplication(); + if (app instanceof AdminGuiApplication) { + defauViewHandler = ((AdminGuiApplication) app).getDefaViewHandler(); + } else { + defauViewHandler = wrapped; + } + } + +} diff --git a/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml b/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml index 477607cf533..16d20746890 100644 --- a/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml +++ b/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml @@ -22,25 +22,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_4_0.xsd" version="4.0"> - + admingui - - en - de - sv - en_US - fr - ko - ja - zh_TW - zh_CN - es - it - pt_BR - - com.sun.webui.jsf.faces.UIComponentELResolver + org.glassfish.admingui.common.AdminGuiViewHandler - + + org.glassfish.admingui.common.AdminGuiApplicationFactory + org.glassfish.main.admingui console-common diff --git a/appserver/admingui/commandrecorder/pom.xml b/appserver/admingui/commandrecorder/pom.xml new file mode 100644 index 00000000000..2adb7f2ef23 --- /dev/null +++ b/appserver/admingui/commandrecorder/pom.xml @@ -0,0 +1,49 @@ + + + + + 4.0.0 + + + org.glassfish.main.admingui + admingui + 7.0.16-SNAPSHOT + ../pom.xml + + + console-commandrecorder-plugin + glassfish-jar + + Admin Console Command Recorder Plugin + Command Recorder plugin bundle for GlassFish Admin Console + + + + org.glassfish.main.admingui + console-common + ${project.version} + provided + + + jakarta.enterprise + jakarta.enterprise.cdi-api + provided + + + diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorderConsolePlugin.java b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorderConsolePlugin.java new file mode 100644 index 00000000000..c4e17e7b29c --- /dev/null +++ b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorderConsolePlugin.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ +package org.glassfish.commandrecorder.admingui; + +import java.net.URL; +import org.glassfish.api.admingui.ConsoleProvider; +import org.jvnet.hk2.annotations.Service; + +@Service +public class CommandRecorderConsolePlugin implements ConsoleProvider { + + @Override + public URL getConfiguration() { + return null; + } + +} diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/MenuView.java b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/MenuView.java new file mode 100644 index 00000000000..80a44c2044f --- /dev/null +++ b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/MenuView.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ +package org.glassfish.commandrecorder.admingui; + +import jakarta.enterprise.context.SessionScoped; +import jakarta.inject.Named; +import java.io.Serializable; + +@Named +@SessionScoped +public class MenuView implements Serializable { + private boolean enabled = false; + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public void toggle() { + enabled = !enabled; + } + + public String getToggleButtonTitle() { + return (enabled ? "Disable" : "Enable") + " command recorder"; + } +} diff --git a/appserver/admingui/commandrecorder/src/main/resources/META-INF/beans.xml b/appserver/admingui/commandrecorder/src/main/resources/META-INF/beans.xml new file mode 100644 index 00000000000..4ca8195bea5 --- /dev/null +++ b/appserver/admingui/commandrecorder/src/main/resources/META-INF/beans.xml @@ -0,0 +1,5 @@ + + + diff --git a/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/menu.xhtml b/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/menu.xhtml new file mode 100644 index 00000000000..dcedd06b8e4 --- /dev/null +++ b/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/menu.xhtml @@ -0,0 +1,18 @@ + + + + + Command Recorder + + + + + + + +
+ +
+
+ diff --git a/appserver/admingui/common/src/main/resources/applications/upload.jsf b/appserver/admingui/common/src/main/resources/applications/upload.jsf index 85e2ee52368..5d887fc83b6 100644 --- a/appserver/admingui/common/src/main/resources/applications/upload.jsf +++ b/appserver/admingui/common/src/main/resources/applications/upload.jsf @@ -29,7 +29,7 @@ - diff --git a/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc b/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc index e364edb39a1..7ac987657fc 100644 --- a/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc +++ b/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc @@ -65,7 +65,11 @@ onFocus="window.status='$resource{i18n.masthead.restartStatusMsg}'; return true" url="#{request.contextPath}/common/appServer/restart.jsf"> - " + + + + " diff --git a/appserver/admingui/pom.xml b/appserver/admingui/pom.xml index e3cee273b66..2f9a0206288 100644 --- a/appserver/admingui/pom.xml +++ b/appserver/admingui/pom.xml @@ -86,6 +86,7 @@ core concurrent cluster + commandrecorder community-theme web gf-admingui-connector diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java index 6cba5c82da9..20ac1f48e9b 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java @@ -17,6 +17,7 @@ import jakarta.faces.application.Application; import jakarta.faces.application.ApplicationWrapper; +import jakarta.faces.application.ResourceHandler; import jakarta.faces.application.ViewHandler; /** @@ -29,6 +30,10 @@ public class AdminGuiApplication extends ApplicationWrapper { public AdminGuiApplication(Application wrapped) { super(wrapped); + final ResourceHandler resourceHandlerInWrapped = wrapped.getResourceHandler(); + if (resourceHandlerInWrapped != null) { + setResourceHandler(resourceHandlerInWrapped); + } } @Override @@ -43,4 +48,9 @@ public ViewHandler getDefaultViewHandler() { return defaultViewHandler; } + @Override + public void setResourceHandler(ResourceHandler resourceHandler) { + super.setResourceHandler(new AdminGuiResourceHandler(resourceHandler)); + } + } diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiResourceHandler.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiResourceHandler.java new file mode 100644 index 00000000000..132628da4cd --- /dev/null +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiResourceHandler.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ +package org.glassfish.admingui.common; + +import jakarta.faces.application.ResourceHandler; +import jakarta.faces.application.ResourceHandlerWrapper; +import jakarta.faces.application.ViewResource; +import jakarta.faces.context.FacesContext; + +public class AdminGuiResourceHandler extends ResourceHandlerWrapper { + + public AdminGuiResourceHandler(ResourceHandler wrapped) { + super(wrapped); + } + + @Override + public ViewResource createViewResource(FacesContext context, String resourceName) { + final ViewResource viewResourceFromWrapped = super.createViewResource(context, resourceName); + if (viewResourceFromWrapped != null) { + return viewResourceFromWrapped; + } else { + return createResource(resourceName); + } + } + +} diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java index e6107c31470..ba79a0067d9 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java @@ -45,7 +45,7 @@ public ViewHandler getWrapped() { if (FacesContext.getCurrentInstance() != null) { requestServletPath = FacesContext.getCurrentInstance().getExternalContext().getRequestServletPath(); } - if (defaultViewHandler != null && requestServletPath != null && requestServletPath.startsWith("/faces")) { + if (defaultViewHandler != null && requestServletPath != null && requestServletPath.endsWith(".xhtml")) { return defaultViewHandler; } return super.getWrapped(); diff --git a/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml b/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml index 16d20746890..af9882ac343 100644 --- a/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml +++ b/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml @@ -29,81 +29,4 @@ org.glassfish.admingui.common.AdminGuiApplicationFactory - - - - - - - - diff --git a/appserver/admingui/war/src/main/webapp/header.xhtml b/appserver/admingui/war/src/main/webapp/header.xhtml index ea62a56da50..8dfae3226ec 100644 --- a/appserver/admingui/war/src/main/webapp/header.xhtml +++ b/appserver/admingui/war/src/main/webapp/header.xhtml @@ -4,8 +4,15 @@ xmlns:h="jakarta.faces.html"> Facelet Title + + + + + - #{headerView.title} (using standard Jakarta Faces) +
+ +
diff --git a/appserver/featuresets/web/pom.xml b/appserver/featuresets/web/pom.xml index e6cefd8c6dd..46b9c88a708 100644 --- a/appserver/featuresets/web/pom.xml +++ b/appserver/featuresets/web/pom.xml @@ -1830,6 +1830,17 @@
+ + org.glassfish.main.admingui + console-commandrecorder-plugin + ${project.version} + + + * + * + + + org.glassfish.main.admingui console-web-plugin From 807a4daa7179f43835f8c50e2ae1e3e653bb7816 Mon Sep 17 00:00:00 2001 From: Ondro Mihalyi Date: Tue, 9 Jul 2024 14:18:31 +0200 Subject: [PATCH 5/9] GH #25039 Facelets in Console: Command recorder plugin Button to toggle Command logger Simplified plugins via Faces - plain JARs in Admin WAR, which contain facelets and resources in META-INF/resources, and Java model as plain CDI beans in the JAR. Subject is retrieved from Jakarta Security - worth to move to a common module. --- appserver/admingui/commandrecorder/pom.xml | 21 ++++- .../admingui/CommandRecorder.java | 76 +++++++++++++++++++ .../Hk2ServicesProducer.java} | 34 ++++----- .../SecurityProducer.java} | 21 ++--- .../src/main/resources/META-INF/beans.xml | 5 -- .../resources/commandrecorder/menu.xhtml | 26 ++++++- appserver/admingui/war/pom.xml | 11 +++ .../admingui/common/AdminGuiApplication.java | 10 --- .../common/AdminGuiResourceHandler.java | 39 ---------- .../war/src/main/webapp/WEB-INF/web.xml | 2 +- appserver/featuresets/web/pom.xml | 11 --- .../commandlogger/AdminCommandLogger.java | 2 +- 12 files changed, 159 insertions(+), 99 deletions(-) create mode 100644 appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java rename appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/{MenuView.java => cdi/Hk2ServicesProducer.java} (51%) rename appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/{CommandRecorderConsolePlugin.java => cdi/SecurityProducer.java} (57%) delete mode 100644 appserver/admingui/commandrecorder/src/main/resources/META-INF/beans.xml delete mode 100644 appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiResourceHandler.java diff --git a/appserver/admingui/commandrecorder/pom.xml b/appserver/admingui/commandrecorder/pom.xml index 2adb7f2ef23..e26a049ecc3 100644 --- a/appserver/admingui/commandrecorder/pom.xml +++ b/appserver/admingui/commandrecorder/pom.xml @@ -34,6 +34,16 @@ Command Recorder plugin bundle for GlassFish Admin Console + + jakarta.enterprise + jakarta.enterprise.cdi-api + provided + + + jakarta.security.enterprise + jakarta.security.enterprise-api + provided + org.glassfish.main.admingui console-common @@ -41,8 +51,15 @@ provided - jakarta.enterprise - jakarta.enterprise.cdi-api + org.glassfish.main.extras + command-logger + ${project.version} + provided + + + org.glassfish.main.admin + rest-service + ${project.version} provided diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java new file mode 100644 index 00000000000..ac5724cf845 --- /dev/null +++ b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ +package org.glassfish.commandrecorder.admingui; + +import static org.glassfish.extras.commandlogger.AdminCommandLogger.LogMode.NO_COMMAND; +import static org.glassfish.extras.commandlogger.AdminCommandLogger.LogMode.WRITE_COMMANDS; + +import jakarta.enterprise.context.RequestScoped; +import jakarta.enterprise.inject.Instance; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import java.io.Serializable; +import javax.security.auth.Subject; +import org.glassfish.api.ActionReport; +import org.glassfish.api.admin.CommandRunner; +import org.glassfish.api.admin.ParameterMap; +import org.glassfish.extras.commandlogger.AdminCommandLogger; + +@Named +@RequestScoped +public class CommandRecorder implements Serializable { + + @Inject + Instance commandRunnerprovider; + + @Inject + Instance actionReportProvider; + + @Inject + Instance subjectProvider; + + public boolean isEnabled() { + return !NO_COMMAND.equals(AdminCommandLogger.LogMode.get()); + } + + public void setEnabled(boolean enabled) { + if (enabled) { + setSystemProperty(WRITE_COMMANDS); + } else { + setSystemProperty(NO_COMMAND); + } + } + + private void setSystemProperty(AdminCommandLogger.LogMode propertyValue) { + final CommandRunner.CommandInvocation commandInvocation = commandRunnerprovider.get().getCommandInvocation("create-system-properties", actionReportProvider.get(), subjectProvider.get()); + commandInvocation.parameters(parameters(propertyValue)).execute(); + } + + public void toggle() { + setEnabled(!isEnabled()); + } + + public String getToggleButtonTitle() { + return (isEnabled() ? "Disable" : "Enable") + " logging commands"; + } + + private ParameterMap parameters(AdminCommandLogger.LogMode propertyValue) { + ParameterMap data = new ParameterMap(); + data.add("target", "server"); + data.add("DEFAULT", AdminCommandLogger.LogMode.PROPERTY_NAME + "=" + propertyValue.name()); + return data; + } +} diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/MenuView.java b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/Hk2ServicesProducer.java similarity index 51% rename from appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/MenuView.java rename to appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/Hk2ServicesProducer.java index 80a44c2044f..5c6662331b0 100644 --- a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/MenuView.java +++ b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/Hk2ServicesProducer.java @@ -13,30 +13,28 @@ * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 */ -package org.glassfish.commandrecorder.admingui; +package org.glassfish.commandrecorder.admingui.cdi; -import jakarta.enterprise.context.SessionScoped; -import jakarta.inject.Named; -import java.io.Serializable; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; +import org.glassfish.api.ActionReport; +import org.glassfish.api.admin.CommandRunner; +import org.glassfish.internal.api.Globals; -@Named -@SessionScoped -public class MenuView implements Serializable { - private boolean enabled = false; +@ApplicationScoped +public class Hk2ServicesProducer { - public boolean isEnabled() { - return enabled; + @Produces + CommandRunner getCommandRunner() { + return getGlobalService(CommandRunner.class); } - public void setEnabled(boolean enabled) { - this.enabled = enabled; + @Produces + ActionReport getActionReport() { + return getGlobalService(ActionReport.class); } - public void toggle() { - enabled = !enabled; - } - - public String getToggleButtonTitle() { - return (enabled ? "Disable" : "Enable") + " command recorder"; + private static T getGlobalService(Class aClass) { + return Globals.getDefaultHabitat().getService(aClass); } } diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorderConsolePlugin.java b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/SecurityProducer.java similarity index 57% rename from appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorderConsolePlugin.java rename to appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/SecurityProducer.java index c4e17e7b29c..1e5386eb387 100644 --- a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorderConsolePlugin.java +++ b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/SecurityProducer.java @@ -13,18 +13,21 @@ * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 */ -package org.glassfish.commandrecorder.admingui; +package org.glassfish.commandrecorder.admingui.cdi; -import java.net.URL; -import org.glassfish.api.admingui.ConsoleProvider; -import org.jvnet.hk2.annotations.Service; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; +import jakarta.security.enterprise.SecurityContext; +import java.security.Principal; +import java.util.Set; +import javax.security.auth.Subject; -@Service -public class CommandRecorderConsolePlugin implements ConsoleProvider { +@ApplicationScoped +public class SecurityProducer { - @Override - public URL getConfiguration() { - return null; + @Produces + Subject getSubject(SecurityContext securityContext) { + return new Subject(true, securityContext.getPrincipalsByType(Principal.class), Set.of(), Set.of()); } } diff --git a/appserver/admingui/commandrecorder/src/main/resources/META-INF/beans.xml b/appserver/admingui/commandrecorder/src/main/resources/META-INF/beans.xml deleted file mode 100644 index 4ca8195bea5..00000000000 --- a/appserver/admingui/commandrecorder/src/main/resources/META-INF/beans.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/menu.xhtml b/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/menu.xhtml index dcedd06b8e4..972e0a3db32 100644 --- a/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/menu.xhtml +++ b/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/menu.xhtml @@ -1,4 +1,21 @@ + @@ -11,8 +28,11 @@ - + +
+
+ #{commandRecorder.toggleButtonTitle}
+
+
diff --git a/appserver/admingui/war/pom.xml b/appserver/admingui/war/pom.xml index 2cef28e63f8..bc9af12b324 100644 --- a/appserver/admingui/war/pom.xml +++ b/appserver/admingui/war/pom.xml @@ -54,6 +54,17 @@
+ + ${project.groupId} + console-commandrecorder-plugin + ${project.version} + + + * + * + + + diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java index 20ac1f48e9b..6cba5c82da9 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java @@ -17,7 +17,6 @@ import jakarta.faces.application.Application; import jakarta.faces.application.ApplicationWrapper; -import jakarta.faces.application.ResourceHandler; import jakarta.faces.application.ViewHandler; /** @@ -30,10 +29,6 @@ public class AdminGuiApplication extends ApplicationWrapper { public AdminGuiApplication(Application wrapped) { super(wrapped); - final ResourceHandler resourceHandlerInWrapped = wrapped.getResourceHandler(); - if (resourceHandlerInWrapped != null) { - setResourceHandler(resourceHandlerInWrapped); - } } @Override @@ -48,9 +43,4 @@ public ViewHandler getDefaultViewHandler() { return defaultViewHandler; } - @Override - public void setResourceHandler(ResourceHandler resourceHandler) { - super.setResourceHandler(new AdminGuiResourceHandler(resourceHandler)); - } - } diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiResourceHandler.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiResourceHandler.java deleted file mode 100644 index 132628da4cd..00000000000 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiResourceHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2024 Contributors to the Eclipse Foundation - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0, which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the - * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, - * version 2 with the GNU Classpath Exception, which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - */ -package org.glassfish.admingui.common; - -import jakarta.faces.application.ResourceHandler; -import jakarta.faces.application.ResourceHandlerWrapper; -import jakarta.faces.application.ViewResource; -import jakarta.faces.context.FacesContext; - -public class AdminGuiResourceHandler extends ResourceHandlerWrapper { - - public AdminGuiResourceHandler(ResourceHandler wrapped) { - super(wrapped); - } - - @Override - public ViewResource createViewResource(FacesContext context, String resourceName) { - final ViewResource viewResourceFromWrapped = super.createViewResource(context, resourceName); - if (viewResourceFromWrapped != null) { - return viewResourceFromWrapped; - } else { - return createResource(resourceName); - } - } - -} diff --git a/appserver/admingui/war/src/main/webapp/WEB-INF/web.xml b/appserver/admingui/war/src/main/webapp/WEB-INF/web.xml index 953b1eaf4c7..9f10626971c 100644 --- a/appserver/admingui/war/src/main/webapp/WEB-INF/web.xml +++ b/appserver/admingui/war/src/main/webapp/WEB-INF/web.xml @@ -113,7 +113,7 @@ FacesServlet - /faces/* + *.xhtml FacesServlet diff --git a/appserver/featuresets/web/pom.xml b/appserver/featuresets/web/pom.xml index 46b9c88a708..e6cefd8c6dd 100644 --- a/appserver/featuresets/web/pom.xml +++ b/appserver/featuresets/web/pom.xml @@ -1830,17 +1830,6 @@ - - org.glassfish.main.admingui - console-commandrecorder-plugin - ${project.version} - - - * - * - - - org.glassfish.main.admingui console-web-plugin diff --git a/nucleus/extras/command-logger/src/main/java/org/glassfish/extras/commandlogger/AdminCommandLogger.java b/nucleus/extras/command-logger/src/main/java/org/glassfish/extras/commandlogger/AdminCommandLogger.java index c6cb927127a..4b5bfb03746 100644 --- a/nucleus/extras/command-logger/src/main/java/org/glassfish/extras/commandlogger/AdminCommandLogger.java +++ b/nucleus/extras/command-logger/src/main/java/org/glassfish/extras/commandlogger/AdminCommandLogger.java @@ -77,7 +77,7 @@ private String constructCommandLine(String commandName, ParameterMap parameters) .collect(joining(" ")); } - private static enum LogMode { + public static enum LogMode { ALL_COMMANDS, INTERNAL_COMMANDS, WRITE_COMMANDS, READ_WRITE_COMMANDS, NO_COMMAND; public static final LogMode DEFAULT = LogMode.NO_COMMAND; From 94ae8aa32adefde8b69d4eac43d7e03b88403e28 Mon Sep 17 00:00:00 2001 From: Ondro Mihalyi Date: Thu, 11 Jul 2024 12:55:38 +0200 Subject: [PATCH 6/9] GH #25039 Facelets in Console: Moved integration to the commandrecorder plugin Moved all the code needed to integrate the Command Recorder console plugin into the plugin module. This means that Admin Console will work without issues if the module is not present. Since the Admin Recorder plugin is deployed in the AdminGUI application and not as an OSGi bundle in modules, I needed to update the ConsolePluginService: * it's now created by an HK2 locator specific to the deployed app, so that it finds console plugins also in the web app, not only in OSGi modules * it searches for all plugin configuration files in the classloader and remove duplicities (because the web app classloader also finds all files in OSGi bundles via the parent classloader) Also removed the demo facelets files.(header.xhtml, etc.) --- appserver/admingui/cluster/pom.xml | 4 +- .../plugin/CommandRecorderConsolePlugin.java} | 22 ++++------ .../META-INF/admingui/console-config.xml | 29 +++++++++++++ .../plugin/mastheadStatusArea.jsf | 22 ++++++++++ .../main/resources/applications/upload.jsf | 2 - .../src/main/resources/branding/masthead.inc | 4 -- .../admingui/plugin/ConsolePluginService.java | 42 +++++++++++++------ .../webapp/{header.xhtml => iframe.xhtml} | 0 appserver/web/web-glue/pom.xml | 4 ++ .../sun/enterprise/web/WebModuleListener.java | 32 +++++++++++--- 10 files changed, 121 insertions(+), 40 deletions(-) rename appserver/admingui/{war/src/main/java/org/glassfish/admingui/common/view/HeaderView.java => commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/plugin/CommandRecorderConsolePlugin.java} (68%) create mode 100644 appserver/admingui/commandrecorder/src/main/resources/META-INF/admingui/console-config.xml create mode 100644 appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/plugin/mastheadStatusArea.jsf rename appserver/admingui/war/src/main/webapp/{header.xhtml => iframe.xhtml} (100%) diff --git a/appserver/admingui/cluster/pom.xml b/appserver/admingui/cluster/pom.xml index 76147b560df..2bf8467efaa 100644 --- a/appserver/admingui/cluster/pom.xml +++ b/appserver/admingui/cluster/pom.xml @@ -34,12 +34,12 @@ Clustering support plugin bundle for GlassFish Admin Console - + org.glassfish.main.admingui console-common diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/view/HeaderView.java b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/plugin/CommandRecorderConsolePlugin.java similarity index 68% rename from appserver/admingui/war/src/main/java/org/glassfish/admingui/common/view/HeaderView.java rename to appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/plugin/CommandRecorderConsolePlugin.java index 925e4815a23..e2f302f7f8f 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/view/HeaderView.java +++ b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/plugin/CommandRecorderConsolePlugin.java @@ -13,21 +13,17 @@ * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 */ -package org.glassfish.admingui.common.view; +package org.glassfish.commandrecorder.admingui.plugin; -import jakarta.enterprise.context.RequestScoped; -import jakarta.inject.Named; +import java.net.URL; +import org.glassfish.api.admingui.ConsoleProvider; +import org.jvnet.hk2.annotations.Service; -/** - * - * @author Ondro Mihalyi - */ -@RequestScoped -@Named -public class HeaderView { +@Service +public class CommandRecorderConsolePlugin implements ConsoleProvider { - public String getTitle() { - return "This is a new header"; + @Override + public URL getConfiguration() { + return null; } - } diff --git a/appserver/admingui/commandrecorder/src/main/resources/META-INF/admingui/console-config.xml b/appserver/admingui/commandrecorder/src/main/resources/META-INF/admingui/console-config.xml new file mode 100644 index 00000000000..30b842e2ca1 --- /dev/null +++ b/appserver/admingui/commandrecorder/src/main/resources/META-INF/admingui/console-config.xml @@ -0,0 +1,29 @@ + + + + + + + + diff --git a/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/plugin/mastheadStatusArea.jsf b/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/plugin/mastheadStatusArea.jsf new file mode 100644 index 00000000000..e17db41713a --- /dev/null +++ b/appserver/admingui/commandrecorder/src/main/resources/META-INF/resources/commandrecorder/plugin/mastheadStatusArea.jsf @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/appserver/admingui/common/src/main/resources/applications/upload.jsf b/appserver/admingui/common/src/main/resources/applications/upload.jsf index 5d887fc83b6..bf5681eac67 100644 --- a/appserver/admingui/common/src/main/resources/applications/upload.jsf +++ b/appserver/admingui/common/src/main/resources/applications/upload.jsf @@ -29,8 +29,6 @@ - diff --git a/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc b/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc index 7ac987657fc..20b4497989f 100644 --- a/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc +++ b/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc @@ -65,10 +65,6 @@ onFocus="window.status='$resource{i18n.masthead.restartStatusMsg}'; return true" url="#{request.contextPath}/common/appServer/restart.jsf"> - - - " @@ -80,24 +81,39 @@ protected synchronized void init() { if ((providers != null) && (providers.iterator().hasNext())) { // Get our parser... ConfigParser parser = new ConfigParser(habitat); - URL url = null; String id = null; + Map configUrls = new HashMap<>(); + // Loop through the configs and add them all for (ConsoleProvider provider : providers) { // Read the contents from the URL - url = provider.getConfiguration(); - if (url == null) { - url = provider.getClass().getClassLoader().getResource( - ConsoleProvider.DEFAULT_CONFIG_FILENAME); + URL url = provider.getConfiguration(); + Iterator urlsIterator; + if (url != null) { + urlsIterator = List.of(url).iterator(); + } else { + try { + urlsIterator = provider.getClass().getClassLoader().getResources( + ConsoleProvider.DEFAULT_CONFIG_FILENAME).asIterator(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + if (!urlsIterator.hasNext()) { + logger.log(Level.INFO, "Unable to find " + + ConsoleProvider.DEFAULT_CONFIG_FILENAME + + " file for provider '" + + provider.getClass().getName() + "'"); + continue; + } } - if (url == null) { - logger.log(Level.INFO, "Unable to find " - + ConsoleProvider.DEFAULT_CONFIG_FILENAME - + " file for provider '" - + provider.getClass().getName() + "'"); - continue; + while (urlsIterator.hasNext()) { + configUrls.put(urlsIterator.next(), provider.getClass().getClassLoader()); } + } + for (Map.Entry entry : configUrls.entrySet()) { + URL url = entry.getKey(); + ClassLoader classLoader = entry.getValue(); //System.out.println("Provider *"+provider+"* : url=*"+url+"*"); DomDocument doc = parser.parse(url); @@ -107,8 +123,8 @@ protected synchronized void init() { // Save the ClassLoader for later //System.out.println("Storing: " + config.getId() + " : " + provider.getClass().getClassLoader()); id = config.getId(); - moduleClassLoaderMap.put(id, provider.getClass().getClassLoader()); - classLoaderModuleMap.put(provider.getClass().getClassLoader(), id); + moduleClassLoaderMap.put(id, classLoader); + classLoaderModuleMap.put(classLoader, id); // Add the new IntegrationPoints addIntegrationPoints(config.getIntegrationPoints(), id); diff --git a/appserver/admingui/war/src/main/webapp/header.xhtml b/appserver/admingui/war/src/main/webapp/iframe.xhtml similarity index 100% rename from appserver/admingui/war/src/main/webapp/header.xhtml rename to appserver/admingui/war/src/main/webapp/iframe.xhtml diff --git a/appserver/web/web-glue/pom.xml b/appserver/web/web-glue/pom.xml index 809f934ed0f..b9933d0ea70 100755 --- a/appserver/web/web-glue/pom.xml +++ b/appserver/web/web-glue/pom.xml @@ -89,6 +89,10 @@ org.glassfish.hk2 hk2-core + + org.glassfish.hk2 + hk2-utils + org.glassfish.main.common stats77 diff --git a/appserver/web/web-glue/src/main/java/com/sun/enterprise/web/WebModuleListener.java b/appserver/web/web-glue/src/main/java/com/sun/enterprise/web/WebModuleListener.java index cef81d82a05..48afd16b9cf 100644 --- a/appserver/web/web-glue/src/main/java/com/sun/enterprise/web/WebModuleListener.java +++ b/appserver/web/web-glue/src/main/java/com/sun/enterprise/web/WebModuleListener.java @@ -14,7 +14,6 @@ * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 */ - package com.sun.enterprise.web; import com.sun.appserv.web.cache.CacheManager; @@ -62,10 +61,16 @@ import static java.util.logging.Level.WARNING; import static org.glassfish.web.LogFacade.CLASS_CAST_EXCEPTION; +import java.io.IOException; +import org.glassfish.hk2.api.DynamicConfigurationService; +import org.glassfish.hk2.api.MultiException; +import org.glassfish.hk2.api.Populator; +import org.glassfish.hk2.api.ServiceLocatorFactory; +import org.glassfish.hk2.utilities.ClasspathDescriptorFileFinder; + /** * Startup event listener for a Context that configures the properties of that Jsp Servlet from sun-web.xml */ - final class WebModuleListener implements LifecycleListener { /** @@ -126,10 +131,9 @@ public void lifecycleEvent(LifecycleEvent event) { } // ------------------------------------------------------- Private Methods - /** - * Configure all JSP related aspects of the web module, including any relevant TLDs as well as the jsp config settings - * of the JspServlet (using the values from sun-web.xml's jsp-config). + * Configure all JSP related aspects of the web module, including any relevant TLDs as well as the jsp config + * settings of the JspServlet (using the values from sun-web.xml's jsp-config). */ private void configureJsp(WebModule webModule) { @@ -183,9 +187,12 @@ private void configureJsp(WebModule webModule) { servletContext.setAttribute("com.sun.appserv.tldlistener.map", tldListenerMap); ServiceLocator defaultServices = webContainer.getServerContext().getDefaultServices(); + final String servicesName = webModule.getComponentId(); + ServiceLocator webAppServices = ServiceLocatorFactory.getInstance().create(servicesName, defaultServices); + initializeChildServices(webAppServices, Thread.currentThread().getContextClassLoader()); // set services for jsf injection - servletContext.setAttribute(Constants.HABITAT_ATTRIBUTE, defaultServices); + servletContext.setAttribute(Constants.HABITAT_ATTRIBUTE, webAppServices); SunWebAppImpl bean = webModule.getIasWebAppConfigBean(); @@ -265,6 +272,19 @@ private void configureJsp(WebModule webModule) { } + private static void initializeChildServices(ServiceLocator serviceLocator, ClassLoader childClassLoader) { + DynamicConfigurationService dcs = + serviceLocator.getService(DynamicConfigurationService.class); + Populator populator = dcs.getPopulator(); + try { + populator.populate(new ClasspathDescriptorFileFinder(childClassLoader)); + } catch (IOException ex) { + Logger.getLogger(WebModuleListener.class.getName()).log(Level.SEVERE, null, ex); + } catch (MultiException ex) { + Logger.getLogger(WebModuleListener.class.getName()).log(Level.SEVERE, null, ex); + } + } + private boolean includeInitialized; private List includeJars; From 3bb8de0f32a31e398e62fa2200d03a9c9325d4ab Mon Sep 17 00:00:00 2001 From: Ondro Mihalyi Date: Thu, 11 Jul 2024 19:03:29 +0200 Subject: [PATCH 7/9] GH #25039 Facelets in Console: Clean up Moved CDI producers into Admin Core, so that they can be reused by other modules and we avoid conflicts or implicit dependencies if multiple modules define the same producers or rely on beans produced by other modules. --- appserver/admingui/commandrecorder/pom.xml | 2 +- .../META-INF/admingui/console-config.xml | 2 +- .../plugin/mastheadStatusArea.jsf | 2 -- .../src/main/resources/branding/masthead.inc | 2 +- appserver/admingui/core/pom.xml | 10 ++++++++++ .../admingui/cdi/Hk2ServicesProducer.java | 2 +- .../admingui/cdi/SecurityProducer.java | 2 +- .../admingui/common/AdminGuiApplication.java | 2 +- .../common/AdminGuiApplicationFactory.java | 2 +- .../admingui/common/AdminGuiViewHandler.java | 3 +-- .../src/main/webapp/WEB-INF/faces-config.xml | 15 +++++++++++++++ .../war/src/main/webapp/WEB-INF/web.xml | 4 ++++ .../admingui/war/src/main/webapp/iframe.xhtml | 18 ------------------ 13 files changed, 37 insertions(+), 29 deletions(-) rename appserver/admingui/{commandrecorder/src/main/java/org/glassfish/commandrecorder => core/src/main/java/org/glassfish}/admingui/cdi/Hk2ServicesProducer.java (96%) rename appserver/admingui/{commandrecorder/src/main/java/org/glassfish/commandrecorder => core/src/main/java/org/glassfish}/admingui/cdi/SecurityProducer.java (95%) delete mode 100644 appserver/admingui/war/src/main/webapp/iframe.xhtml diff --git a/appserver/admingui/commandrecorder/pom.xml b/appserver/admingui/commandrecorder/pom.xml index e26a049ecc3..15bbcb4ed41 100644 --- a/appserver/admingui/commandrecorder/pom.xml +++ b/appserver/admingui/commandrecorder/pom.xml @@ -1,7 +1,7 @@ diff --git a/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc b/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc index 20b4497989f..e364edb39a1 100644 --- a/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc +++ b/appserver/admingui/community-theme/src/main/resources/branding/masthead.inc @@ -65,7 +65,7 @@ onFocus="window.status='$resource{i18n.masthead.restartStatusMsg}'; return true" url="#{request.contextPath}/common/appServer/restart.jsf"> - " + " diff --git a/appserver/admingui/core/pom.xml b/appserver/admingui/core/pom.xml index fb590295fa0..6a5c72894ed 100644 --- a/appserver/admingui/core/pom.xml +++ b/appserver/admingui/core/pom.xml @@ -34,6 +34,16 @@ Admin Console Core Jar + + jakarta.enterprise + jakarta.enterprise.cdi-api + provided + + + jakarta.security.enterprise + jakarta.security.enterprise-api + provided + org.glassfish.woodstock woodstock-webui-jsf diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/Hk2ServicesProducer.java b/appserver/admingui/core/src/main/java/org/glassfish/admingui/cdi/Hk2ServicesProducer.java similarity index 96% rename from appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/Hk2ServicesProducer.java rename to appserver/admingui/core/src/main/java/org/glassfish/admingui/cdi/Hk2ServicesProducer.java index 5c6662331b0..eb1d05ac2d5 100644 --- a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/Hk2ServicesProducer.java +++ b/appserver/admingui/core/src/main/java/org/glassfish/admingui/cdi/Hk2ServicesProducer.java @@ -13,7 +13,7 @@ * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 */ -package org.glassfish.commandrecorder.admingui.cdi; +package org.glassfish.admingui.cdi; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Produces; diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/SecurityProducer.java b/appserver/admingui/core/src/main/java/org/glassfish/admingui/cdi/SecurityProducer.java similarity index 95% rename from appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/SecurityProducer.java rename to appserver/admingui/core/src/main/java/org/glassfish/admingui/cdi/SecurityProducer.java index 1e5386eb387..f093b9e9373 100644 --- a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/cdi/SecurityProducer.java +++ b/appserver/admingui/core/src/main/java/org/glassfish/admingui/cdi/SecurityProducer.java @@ -13,7 +13,7 @@ * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 */ -package org.glassfish.commandrecorder.admingui.cdi; +package org.glassfish.admingui.cdi; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Produces; diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java index 6cba5c82da9..7f45c0285f0 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Contributors to the Eclipse Foundation + * Copyright (c) 2024 Contributors to the Eclipse Foundation * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplicationFactory.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplicationFactory.java index fba4e2afc9b..4e7920a3092 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplicationFactory.java +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplicationFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Contributors to the Eclipse Foundation + * Copyright (c) 2024 Contributors to the Eclipse Foundation * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java index ba79a0067d9..93c92cd68d0 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java @@ -1,6 +1,5 @@ /* - * Copyright (c) 2023 Contributors to the Eclipse Foundation - * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024 Contributors to the Eclipse Foundation * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml b/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml index af9882ac343..b53ed6e77f6 100644 --- a/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml +++ b/appserver/admingui/war/src/main/webapp/WEB-INF/faces-config.xml @@ -25,6 +25,21 @@ admingui org.glassfish.admingui.common.AdminGuiViewHandler + + en + de + sv + en_US + fr + ko + ja + zh_TW + zh_CN + es + it + pt_BR + + com.sun.webui.jsf.faces.UIComponentELResolver org.glassfish.admingui.common.AdminGuiApplicationFactory diff --git a/appserver/admingui/war/src/main/webapp/WEB-INF/web.xml b/appserver/admingui/war/src/main/webapp/WEB-INF/web.xml index 9f10626971c..f5c5c9993d9 100644 --- a/appserver/admingui/war/src/main/webapp/WEB-INF/web.xml +++ b/appserver/admingui/war/src/main/webapp/WEB-INF/web.xml @@ -111,6 +111,10 @@ FacesServlet /html/* + + FacesServlet + /faces/* + FacesServlet *.xhtml diff --git a/appserver/admingui/war/src/main/webapp/iframe.xhtml b/appserver/admingui/war/src/main/webapp/iframe.xhtml deleted file mode 100644 index 8dfae3226ec..00000000000 --- a/appserver/admingui/war/src/main/webapp/iframe.xhtml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - Facelet Title - - - - - - - - - - From 97767d5def65333411d4a7269a221a1a9de49763 Mon Sep 17 00:00:00 2001 From: Ondro Mihalyi Date: Sat, 13 Jul 2024 23:02:31 +0200 Subject: [PATCH 8/9] GH #25039 Facelets in Console: Clean up Removed unnecessary Serializable --- .../glassfish/commandrecorder/admingui/CommandRecorder.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java index ac5724cf845..cc0e5f45d0a 100644 --- a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java +++ b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java @@ -22,7 +22,6 @@ import jakarta.enterprise.inject.Instance; import jakarta.inject.Inject; import jakarta.inject.Named; -import java.io.Serializable; import javax.security.auth.Subject; import org.glassfish.api.ActionReport; import org.glassfish.api.admin.CommandRunner; @@ -31,7 +30,7 @@ @Named @RequestScoped -public class CommandRecorder implements Serializable { +public class CommandRecorder { @Inject Instance commandRunnerprovider; From dc5613fa3241c0acc0e337ab0fdce7d9aece5aeb Mon Sep 17 00:00:00 2001 From: Ondro Mihalyi Date: Tue, 16 Jul 2024 12:48:18 +0200 Subject: [PATCH 9/9] GH #25039 Improvements based on review comments --- appserver/admingui/commandrecorder/pom.xml | 2 +- .../commandrecorder/admingui/CommandRecorder.java | 4 ++-- .../admingui/common/AdminGuiApplication.java | 2 +- .../admingui/common/AdminGuiViewHandler.java | 2 +- .../com/sun/enterprise/web/WebModuleListener.java | 12 +++++------- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/appserver/admingui/commandrecorder/pom.xml b/appserver/admingui/commandrecorder/pom.xml index 15bbcb4ed41..f7966c72eb4 100644 --- a/appserver/admingui/commandrecorder/pom.xml +++ b/appserver/admingui/commandrecorder/pom.xml @@ -17,7 +17,7 @@ --> - + 4.0.0 diff --git a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java index cc0e5f45d0a..980fa349476 100644 --- a/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java +++ b/appserver/admingui/commandrecorder/src/main/java/org/glassfish/commandrecorder/admingui/CommandRecorder.java @@ -33,7 +33,7 @@ public class CommandRecorder { @Inject - Instance commandRunnerprovider; + Instance commandRunnerProvider; @Inject Instance actionReportProvider; @@ -54,7 +54,7 @@ public void setEnabled(boolean enabled) { } private void setSystemProperty(AdminCommandLogger.LogMode propertyValue) { - final CommandRunner.CommandInvocation commandInvocation = commandRunnerprovider.get().getCommandInvocation("create-system-properties", actionReportProvider.get(), subjectProvider.get()); + final CommandRunner.CommandInvocation commandInvocation = commandRunnerProvider.get().getCommandInvocation("create-system-properties", actionReportProvider.get(), subjectProvider.get()); commandInvocation.parameters(parameters(propertyValue)).execute(); } diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java index 7f45c0285f0..67c27978bcf 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiApplication.java @@ -25,7 +25,7 @@ */ public class AdminGuiApplication extends ApplicationWrapper { - ViewHandler defaultViewHandler = null; + ViewHandler defaultViewHandler; public AdminGuiApplication(Application wrapped) { super(wrapped); diff --git a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java index 93c92cd68d0..0254f3ab965 100644 --- a/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java +++ b/appserver/admingui/war/src/main/java/org/glassfish/admingui/common/AdminGuiViewHandler.java @@ -26,7 +26,7 @@ */ public class AdminGuiViewHandler extends ViewHandlerWrapper { - private ViewHandler defaultViewHandler = null; + private ViewHandler defaultViewHandler; public AdminGuiViewHandler(ViewHandler wrapped) { super(wrapped); diff --git a/appserver/web/web-glue/src/main/java/com/sun/enterprise/web/WebModuleListener.java b/appserver/web/web-glue/src/main/java/com/sun/enterprise/web/WebModuleListener.java index 48afd16b9cf..9c7be5d49e5 100644 --- a/appserver/web/web-glue/src/main/java/com/sun/enterprise/web/WebModuleListener.java +++ b/appserver/web/web-glue/src/main/java/com/sun/enterprise/web/WebModuleListener.java @@ -189,7 +189,7 @@ private void configureJsp(WebModule webModule) { ServiceLocator defaultServices = webContainer.getServerContext().getDefaultServices(); final String servicesName = webModule.getComponentId(); ServiceLocator webAppServices = ServiceLocatorFactory.getInstance().create(servicesName, defaultServices); - initializeChildServices(webAppServices, Thread.currentThread().getContextClassLoader()); + initializeServicesFromClassLoader(webAppServices, Thread.currentThread().getContextClassLoader()); // set services for jsf injection servletContext.setAttribute(Constants.HABITAT_ATTRIBUTE, webAppServices); @@ -272,16 +272,14 @@ private void configureJsp(WebModule webModule) { } - private static void initializeChildServices(ServiceLocator serviceLocator, ClassLoader childClassLoader) { + private static void initializeServicesFromClassLoader(ServiceLocator serviceLocator, ClassLoader classLoader) { DynamicConfigurationService dcs = serviceLocator.getService(DynamicConfigurationService.class); Populator populator = dcs.getPopulator(); try { - populator.populate(new ClasspathDescriptorFileFinder(childClassLoader)); - } catch (IOException ex) { - Logger.getLogger(WebModuleListener.class.getName()).log(Level.SEVERE, null, ex); - } catch (MultiException ex) { - Logger.getLogger(WebModuleListener.class.getName()).log(Level.SEVERE, null, ex); + populator.populate(new ClasspathDescriptorFileFinder(classLoader)); + } catch (IOException | MultiException ex) { + _logger.log(Level.SEVERE, ex, ex::getMessage); } }