Uploaded image for project: 'WildFly Core'
  1. WildFly Core
  2. WFCORE-1494

Investigate consequences of changes in JDK9 on JBoss Logging

    Details

    • Type: Task
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: 2.1.0.Final
    • Fix Version/s: 3.0.0.Alpha1
    • Component/s: Logging
    • Labels:
      None

      Description

      When running:

      $[wildfly-core/logging]>mvn test -Dtest=**/Log4jAppenderTestCase

      on JDK9 the test is failing.

      levelTest(org.jboss.as.logging.logmanager.Log4jAppenderTestCase)  Time elapsed: 0.006 sec  <<< ERROR!
      java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager")
      	at org.jboss.logmanager.Logger.getLogger(Logger.java:57)
      	at org.jboss.as.logging.logmanager.Log4jAppenderTestCase.<init>(Log4jAppenderTestCase.java:49)
      
      formatTest(org.jboss.as.logging.logmanager.Log4jAppenderTestCase)  Time elapsed: 0.001 sec  <<< ERROR!
      java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager")
      	at org.jboss.logmanager.Logger.getLogger(Logger.java:57)
      	at org.jboss.as.logging.logmanager.Log4jAppenderTestCase.<init>(Log4jAppenderTestCase.java:49)
      

      After short debugging I identified the difference between JDK8 and JKD9 that is causing the test to fail. In JDK8 the relevant piece of code was:

      // java.util.logging.Logger
      
         private static Logger demandLogger(String name, String resourceBundleName, Class<?> caller) {
              LogManager manager = LogManager.getLogManager();
              SecurityManager sm = System.getSecurityManager();
              if (sm != null && !SystemLoggerHelper.disableCallerCheck) {
                  if (caller.getClassLoader() == null) {
                      return manager.demandSystemLogger(name, resourceBundleName);
                  }
              }
              return manager.demandLogger(name, resourceBundleName, caller);
              // ends up calling new Logger(name, resourceBundleName, caller)
              // iff the logger doesn't exist already
          }
      

      in JDK9 the Security Manager check part disappeared:

      // java.util.logging.Logger
      
         private static Logger demandLogger(String name, String resourceBundleName, Class<?> caller) {
              LogManager manager = LogManager.getLogManager();
              if (!SystemLoggerHelper.disableCallerCheck) {
                  if (caller.getClassLoader() == null) {
                      return manager.demandSystemLogger(name, resourceBundleName, caller);
                  }
              }
              return manager.demandLogger(name, resourceBundleName, caller);
              // ends up calling new Logger(name, resourceBundleName, caller)
              // iff the logger doesn't exist already
          }
      

      This change causes the platform java.util.logging.Logger is returned instead of expected one
      org.jboss.logmanager.Logger.

      It is possible to workaround this problem by setting sun.util.logging.disableCallerCheck JVM property, like:

      $[wildfly-core/logging]>mvn test -Dtest=**/Log4jAppenderTestCase -Dsun.util.logging.disableCallerCheck=true

      Please investigate, whether this is regression that should be addressed by Oracle and if there are not other potential problems affecting proper logging functionality on JDK9.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  jamezp James Perkins
                  Reporter:
                  ropalka Richard Opalka
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  3 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: