Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-10725 Support for Java 11 (LTS)
  3. FLINK-13451

Rework CommonTestUtils.createClassNotInClassPath() to not use Unsafe.defineClass()

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 1.9.0
    • 1.10.0
    • Tests

    Description

      The method Unsafe.defineClass() is removed in Java 11.
      To support Java 11, we need to rework the method CommonTestUtils.createClassNotInClassPath() to use a different mechanism.

      Java 11 introduces a new way to define a class from byte code via MethodHandles. However, because these do not exist in Java 8, we cannot use them if we want to keep supporting Java 8, which we most likely want to do for quite a while.

      A method that works across both versions is to write the class byte code out to a temporary file and create a new URLClassLoader that loads the class from that file.

      That solution is not a complete drop-in replacement, because it cannot add the class to an existing class loader, but can only create a new pair of (classloader & new-class-in-that-classloader). But it is seems straightforward to adjust the existing tests to work with that.

      Attachments

        Issue Links

          Activity

            People

              sewen Stephan Ewen
              sewen Stephan Ewen
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m