This is an automated email from the ASF dual-hosted git repository.

jungm pushed a commit to branch issue/TOMEE-4710
in repository https://gitbox.apache.org/repos/asf/tomee.git

commit 581940a642cde8f7d2f2755a8b623c889fc2c658
Author: Markus Jung <[email protected]>
AuthorDate: Wed Sep 23 21:15:22 2026 +0200

    TOMEE-4710 - drop patching catalina.jar
---
 tomee/apache-tomee/pom.xml                         |   8 --
 .../java/org/apache/catalina/util/ServerInfo.java  | 148 ---------------------
 .../java/org/apache/tomee/installer/Installer.java |  60 +++++++--
 3 files changed, 52 insertions(+), 164 deletions(-)

diff --git a/tomee/apache-tomee/pom.xml b/tomee/apache-tomee/pom.xml
index a5198ea65d..7074ee322c 100644
--- a/tomee/apache-tomee/pom.xml
+++ b/tomee/apache-tomee/pom.xml
@@ -156,14 +156,6 @@
       <scope>runtime</scope>
     </dependency>
 
-    <!-- needed to compile in intellij for tomcat patches -->
-    <dependency>
-      <groupId>org.apache.tomcat</groupId>
-      <artifactId>tomcat-catalina</artifactId>
-      <version>${tomcat.version}</version>
-      <scope>provided</scope>
-    </dependency>
-
     <!-- needed for BOM generation -->
     <dependency>
       <groupId>org.projectlombok</groupId>
diff --git 
a/tomee/apache-tomee/src/patch/java/org/apache/catalina/util/ServerInfo.java 
b/tomee/apache-tomee/src/patch/java/org/apache/catalina/util/ServerInfo.java
deleted file mode 100644
index 54adbf2b44..0000000000
--- a/tomee/apache-tomee/src/patch/java/org/apache/catalina/util/ServerInfo.java
+++ /dev/null
@@ -1,148 +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.catalina.util;
-
-
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.apache.tomcat.util.ExceptionUtils;
-
-
-/**
- * Simple utility module to make it easy to plug in the server identifier
- * when integrating Tomcat.
- *
- * @author Craig R. McClanahan
- */
-public class ServerInfo {
-
-
-    // ------------------------------------------------------- Static Variables
-
-
-    /**
-     * The server information String with which we identify ourselves.
-     */
-    private static final String serverInfo;
-
-    /**
-     * The server built String.
-     */
-    private static final String serverBuilt;
-
-    /**
-     * The server's version number String.
-     */
-    private static final String serverNumber;
-
-    static {
-
-        String info = null;
-        String built = null;
-        String number = null;
-
-        Properties props = new Properties();
-        try (InputStream is = ServerInfo.class.getResourceAsStream
-                ("/org/apache/catalina/util/ServerInfo.properties")) {
-            props.load(is);
-            info = props.getProperty("server.info");
-            built = props.getProperty("server.built");
-            number = props.getProperty("server.number");
-        } catch (Throwable t) {
-            ExceptionUtils.handleThrowable(t);
-        }
-        if (info == null || info.equals("Apache Tomcat/@VERSION@")) {
-            info = "Apache Tomcat/10.0.x-dev";
-        }
-        if (built == null || built.equals("@VERSION_BUILT@")) {
-            built = "unknown";
-        }
-        if (number == null || number.equals("@VERSION_NUMBER@")) {
-            number = "10.0.x";
-        }
-
-        // TOMEE-4014 - PATCH START
-        try {
-            final Class<?> systemInstanceClass = 
Class.forName("org.apache.openejb.loader.SystemInstance");
-            final Class<?> optionsClass = 
Class.forName("org.apache.openejb.loader.Options");
-            final Object systemInstance = 
systemInstanceClass.getDeclaredMethod("get").invoke(null);
-            final Object optionsInstance = 
systemInstanceClass.getDeclaredMethod("getOptions").invoke(systemInstance);
-
-            final boolean keepServerInfo = (boolean) 
optionsClass.getDeclaredMethod("get", String.class, 
boolean.class).invoke(optionsInstance, "tomee.keep-server-info", false);
-
-            if (!keepServerInfo) {
-                final int slash = info.indexOf('/');
-                final Class<?> versionClass = 
Class.forName("org.apache.openejb.util.OpenEjbVersion");
-                final Object instance = 
versionClass.getDeclaredMethod("get").invoke(null);
-                final String tomeeVersion = (String) 
versionClass.getDeclaredMethod("getVersion").invoke(instance);
-
-                info = info.substring(0, slash) + " (TomEE)" + 
info.substring(slash) + " (" + tomeeVersion + ")";
-            }
-        } catch (Throwable t) {
-            // ignore
-            t.printStackTrace();
-        }
-        // TOMEE-4014 - PATCH END
-
-        serverInfo = info;
-        serverBuilt = built;
-        serverNumber = number;
-    }
-
-
-    // --------------------------------------------------------- Public Methods
-
-
-    /**
-     * @return the server identification for this version of Tomcat.
-     */
-    public static String getServerInfo() {
-        return serverInfo;
-    }
-
-    /**
-     * @return the server built time for this version of Tomcat.
-     */
-    public static String getServerBuilt() {
-        return serverBuilt;
-    }
-
-    /**
-     * @return the server's version number.
-     */
-    public static String getServerNumber() {
-        return serverNumber;
-    }
-
-    public static void main(String args[]) {
-        System.out.println("Server version: " + getServerInfo());
-        System.out.println("Server built:   " + getServerBuilt());
-        System.out.println("Server number:  " + getServerNumber());
-        System.out.println("OS Name:        " +
-                System.getProperty("os.name"));
-        System.out.println("OS Version:     " +
-                System.getProperty("os.version"));
-        System.out.println("Architecture:   " +
-                System.getProperty("os.arch"));
-        System.out.println("JVM Version:    " +
-                System.getProperty("java.runtime.version"));
-        System.out.println("JVM Vendor:     " +
-                System.getProperty("java.vm.vendor"));
-    }
-
-}
\ No newline at end of file
diff --git 
a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java 
b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
index 435fe9b7d3..fd1055a79c 100644
--- a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
+++ b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
@@ -16,14 +16,17 @@
  */
 package org.apache.tomee.installer;
 
+import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.Options;
 import org.apache.openejb.loader.SystemInstance;
 
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.StringReader;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
 import java.util.function.Function;
 import java.util.jar.JarFile;
 
@@ -138,6 +141,7 @@ public class Installer implements InstallerInterface {
 
         commentDeploymentDir();
         installConfigFiles(true);
+        installServerInfo();
 
         removeTomcatLibJar("annotations-api.jar");
         // addJavaeeInEndorsed();
@@ -174,6 +178,49 @@ public class Installer implements InstallerInterface {
         }
     }
 
+    // Tomcat reads its server info from 
org/apache/catalina/util/ServerInfo.properties, and the lib/ directory comes
+    // before lib/catalina.jar in common.loader, so this copy with the TomEE 
version shows up in the startup log,
+    // ServletContext#getServerInfo(), error pages and "catalina.sh version"
+    private void installServerInfo() {
+        final String serverInfoPath = 
"org/apache/catalina/util/ServerInfo.properties";
+        final File serverInfoFile = new File(paths.getCatalinaLibDir(), 
serverInfoPath);
+        if (serverInfoFile.exists()) {
+            return;
+        }
+
+        try (final JarFile catalinaJar = new JarFile(new 
File(paths.getCatalinaLibDir(), "catalina.jar"))) {
+            final String tomcatServerInfo = Installers.readEntry(catalinaJar, 
serverInfoPath, alerts);
+            if (tomcatServerInfo == null) {
+                return;
+            }
+
+            final Properties tomcatServerInfoProperties = new Properties();
+            tomcatServerInfoProperties.load(new 
StringReader(tomcatServerInfo));
+            final String info = 
tomcatServerInfoProperties.getProperty("server.info");
+            final int slash = info == null ? -1 : info.indexOf('/');
+            if (slash < 0) {
+                return;
+            }
+
+            // not OpenEjbVersion, it uses the context classloader which 
doesn't see openejb-core during the build
+            final String tomeeVersion = 
IO.readProperties(Installer.class.getClassLoader().getResourceAsStream("openejb-version.properties"),
 new Properties())
+                    .getProperty("version");
+            final String tomeeInfo = info.substring(0, slash) + " (TomEE)" + 
info.substring(slash) + " (" + tomeeVersion + ")";
+
+            if (!serverInfoFile.getParentFile().isDirectory() && 
!serverInfoFile.getParentFile().mkdirs()) {
+                alerts.addWarning("Unable to create " + 
serverInfoFile.getParentFile().getAbsolutePath());
+                return;
+            }
+            if (Installers.writeAll(serverInfoFile, 
tomcatServerInfo.replace("server.info=" + info,
+                    "# Overrides server.info of catalina.jar, remove this file 
to report plain Apache Tomcat\n" +
+                    "server.info=" + tomeeInfo), alerts)) {
+                alerts.addInfo("Add TomEE server info to lib");
+            }
+        } catch (final IOException e) {
+            alerts.addWarning("Unable to add TomEE server info to lib: " + 
e.getMessage());
+        }
+    }
+
     private void removeTomcatLibJar(final String name) {
         final File jar = new File(paths.getCatalinaLibDir(), name);
         removeJar(jar);
@@ -587,12 +634,9 @@ public class Installer implements InstallerInterface {
                         "\n" +
                         "# ----- Execute The Requested Command");
 
-        newCatalinaSh = newCatalinaSh.replace("    \"$_RUNJAVA\"   \\\n" +
-            "      -classpath \"$CATALINA_HOME/lib/catalina.jar\" \\\n" +
-            "      org.apache.catalina.util.ServerInfo",
-            "   eval \"\\\"$_RUNJAVA\\\"\" \"$JAVA_OPTS\" \\\n" +
-                "         -classpath 
\"\\\"$CATALINA_HOME/lib/catalina.jar:$CATALINA_HOME/lib/openejb-core-"+ 
properties.get("tomee.version") + ".jar\\\"\" \\\n" +
-                "         org.apache.catalina.util.ServerInfo");
+        // "catalina.sh version" should see 
lib/org/apache/catalina/util/ServerInfo.properties like common.loader does
+        newCatalinaSh = newCatalinaSh.replace("-classpath 
\"\\\"$CATALINA_HOME/bin/tomcat-juli.jar:$CATALINA_HOME/lib/*\\\"\"",
+            "-classpath 
\"\\\"$CATALINA_BASE/lib:$CATALINA_HOME/lib:$CATALINA_HOME/bin/tomcat-juli.jar:$CATALINA_HOME/lib/*\\\"\"");
 
         // overwrite the catalina.sh file
         if (Installers.writeAll(paths.getCatalinaShFile(), newCatalinaSh, 
alerts)) {
@@ -644,8 +688,8 @@ public class Installer implements InstallerInterface {
                         "\r\n" +
                         "rem ----- Execute The Requested Command");
 
-        newCatalinaBat = newCatalinaBat.replace("%_EXECJAVA% %JAVA_OPTS% 
-classpath \"%CATALINA_HOME%\\lib\\catalina.jar\" 
org.apache.catalina.util.ServerInfo",
-            "%_EXECJAVA% %JAVA_OPTS% -classpath 
\"%CATALINA_HOME%\\lib\\catalina.jar;%CATALINA_HOME%\\lib\\openejb-core-" + 
properties.get("tomee.version") + ".jar\" org.apache.catalina.util.ServerInfo");
+        newCatalinaBat = newCatalinaBat.replace("-classpath 
\"%CATALINA_HOME%\\bin\\tomcat-juli.jar;%CATALINA_HOME%\\lib\\*\"",
+            "-classpath 
\"%CATALINA_BASE%\\lib;%CATALINA_HOME%\\lib;%CATALINA_HOME%\\bin\\tomcat-juli.jar;%CATALINA_HOME%\\lib\\*\"");
 
         // overwrite the catalina.bat file
         if (Installers.writeAll(paths.getCatalinaBatFile(), newCatalinaBat, 
alerts)) {

Reply via email to