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

wusheng pushed a commit to branch jdk17
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 4f8919c5c5324343358a4621eff2444de1a193b8
Author: Wu Sheng <wu.sh...@foxmail.com>
AuthorDate: Tue Oct 26 11:45:21 2021 +0800

    Support JDK 16 and 17.
---
 .github/workflows/e2e.jdk-versions.yaml            |  2 +-
 CHANGES.md                                         |  1 +
 docs/en/setup/backend/backend-setup.md             |  2 +-
 .../org/apache/skywalking/oal/rt/OALRuntime.java   | 25 +++++++++++++++---
 .../dispatcher/DispatcherClassPackageHolder.java}  | 22 +++++-----------
 .../oal/rt/metrics/MetricClassPackageHolder.java}  | 22 +++++-----------
 .../builder/MetricBuilderClassPackageHolder.java}  | 22 +++++-----------
 .../server/core/analysis/meter/MeterSystem.java    | 26 ++++++++++++-------
 .../meter/dynamic/MeterClassPackageHolder.java}    | 22 +++++-----------
 .../oap/server/core/oal/rt/OALDefine.java          | 14 +++-------
 .../oap/server/library/util/JVMEnvUtil.java}       | 30 ++++++++++++----------
 .../oap/server/receiver/envoy/TCPOALDefine.java    |  3 +--
 12 files changed, 91 insertions(+), 100 deletions(-)

diff --git a/.github/workflows/e2e.jdk-versions.yaml 
b/.github/workflows/e2e.jdk-versions.yaml
index b68b6a2..36db82e 100644
--- a/.github/workflows/e2e.jdk-versions.yaml
+++ b/.github/workflows/e2e.jdk-versions.yaml
@@ -33,7 +33,7 @@ jobs:
     timeout-minutes: 90
     strategy:
       matrix:
-        jdk: [ 8, 11, 12, 13, 14, 15 ]
+        jdk: [ 8, 11, 12, 13, 14, 15, 16 ]
     env:
       SW_AGENT_JDK_VERSION: ${{ matrix.jdk }}
       SW_OAP_BASE_IMAGE: adoptopenjdk/openjdk${{ matrix.jdk }}:alpine-jre
diff --git a/CHANGES.md b/CHANGES.md
index 9bc7390..3fd4097 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -24,6 +24,7 @@ Release Notes.
   - Profile
   - Kafka: Base, Meter, Log, Profile
   - Client-JS
+* Support JDK 16 and 17.
 
 #### OAP Server
 
diff --git a/docs/en/setup/backend/backend-setup.md 
b/docs/en/setup/backend/backend-setup.md
index 543392f..b5651de 100755
--- a/docs/en/setup/backend/backend-setup.md
+++ b/docs/en/setup/backend/backend-setup.md
@@ -15,7 +15,7 @@ SkyWalking's backend distribution package consists of the 
following parts:
 
 ## Requirements and default settings
 
-Requirement: **JDK8 to JDK12 are tested**. Other versions are not tested and 
may or may not work.
+Requirement: **JDK8 to JDK17 are tested**. Other versions are not tested and 
may or may not work.
 
 Before you start, you should know that the main purpose of quickstart is to 
help you obtain a basic configuration for previews/demo. Performance and 
long-term running are not our goals.
 
diff --git 
a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/OALRuntime.java 
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/OALRuntime.java
index c75e837..afee5c8 100644
--- 
a/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/OALRuntime.java
+++ 
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oal/rt/OALRuntime.java
@@ -65,10 +65,14 @@ import 
org.apache.skywalking.oap.server.core.analysis.StreamAnnotationListener;
 import org.apache.skywalking.oap.server.core.oal.rt.OALCompileException;
 import org.apache.skywalking.oap.server.core.oal.rt.OALDefine;
 import org.apache.skywalking.oap.server.core.oal.rt.OALEngine;
+import 
org.apache.skywalking.oap.server.core.source.oal.rt.dispatcher.DispatcherClassPackageHolder;
+import 
org.apache.skywalking.oap.server.core.source.oal.rt.metrics.MetricClassPackageHolder;
+import 
org.apache.skywalking.oap.server.core.source.oal.rt.metrics.builder.MetricBuilderClassPackageHolder;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilderFactory;
 import org.apache.skywalking.oap.server.core.storage.StorageException;
 import org.apache.skywalking.oap.server.core.storage.annotation.Column;
 import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.util.JVMEnvUtil;
 import org.apache.skywalking.oap.server.library.util.ResourceUtils;
 
 /**
@@ -295,7 +299,8 @@ public class OALRuntime implements OALEngine {
             constPool, AnnotationsAttribute.visibleTag);
         Annotation streamAnnotation = new Annotation(Stream.class.getName(), 
constPool);
         streamAnnotation.addMemberValue("name", new 
StringMemberValue(metricsStmt.getTableName(), constPool));
-        streamAnnotation.addMemberValue("scopeId", new 
IntegerMemberValue(constPool, metricsStmt.getFrom().getSourceScopeId()));
+        streamAnnotation.addMemberValue(
+            "scopeId", new IntegerMemberValue(constPool, 
metricsStmt.getFrom().getSourceScopeId()));
         streamAnnotation.addMemberValue(
             "builder", new 
ClassMemberValue(metricsBuilderClassName(metricsStmt, true), constPool));
         streamAnnotation.addMemberValue("processor", new 
ClassMemberValue(METRICS_STREAM_PROCESSOR, constPool));
@@ -305,7 +310,11 @@ public class OALRuntime implements OALEngine {
 
         Class targetClass;
         try {
-            targetClass = metricsClass.toClass(currentClassLoader, null);
+            if (JVMEnvUtil.version() < 9) {
+                targetClass = metricsClass.toClass(currentClassLoader, null);
+            } else {
+                targetClass = 
metricsClass.toClass(MetricClassPackageHolder.class);
+            }
         } catch (CannotCompileException e) {
             log.error("Can't compile/load " + className + ".", e);
             throw new OALCompileException(e.getMessage(), e);
@@ -359,7 +368,11 @@ public class OALRuntime implements OALEngine {
         }
 
         try {
-            metricsBuilderClass.toClass(currentClassLoader, null);
+            if (JVMEnvUtil.version() < 9) {
+                metricsBuilderClass.toClass(currentClassLoader, null);
+            } else {
+                
metricsBuilderClass.toClass(MetricBuilderClassPackageHolder.class);
+            }
         } catch (CannotCompileException e) {
             log.error("Can't compile/load " + className + ".", e);
             throw new OALCompileException(e.getMessage(), e);
@@ -437,7 +450,11 @@ public class OALRuntime implements OALEngine {
 
         Class targetClass;
         try {
-            targetClass = dispatcherClass.toClass(currentClassLoader, null);
+            if (JVMEnvUtil.version() < 9) {
+                targetClass = dispatcherClass.toClass(currentClassLoader, 
null);
+            } else {
+                targetClass = 
dispatcherClass.toClass(DispatcherClassPackageHolder.class);
+            }
         } catch (CannotCompileException e) {
             log.error("Can't compile/load " + className + ".", e);
             throw new OALCompileException(e.getMessage(), e);
diff --git 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
 
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/dispatcher/DispatcherClassPackageHolder.java
similarity index 58%
copy from 
oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
copy to 
oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/dispatcher/DispatcherClassPackageHolder.java
index 93ca899..076cc70 100644
--- 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
+++ 
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/dispatcher/DispatcherClassPackageHolder.java
@@ -6,30 +6,22 @@
  * (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
+ *     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.skywalking.oap.server.receiver.envoy;
-
-import org.apache.skywalking.oap.server.core.oal.rt.OALDefine;
+package org.apache.skywalking.oap.server.core.source.oal.rt.dispatcher;
 
 /**
- * OAL rules to calculate TCP-specific metrics.
+ * DispatcherClassPackageHolder holds the package for generated metric classes.
+ *
+ * @since 8.9.0 for adopting JDK16+ to avoid `--add-opens 
java.base/java.lang=ALL-UNNAMED`
  */
-public class TCPOALDefine extends OALDefine {
-    public static final TCPOALDefine INSTANCE = new TCPOALDefine();
-
-    private TCPOALDefine() {
-        super(
-            "oal/tcp.oal",
-            "org.apache.skywalking.oap.server.core.source",
-            "org.apache.skywalking.oap.server.core.source.tcp"
-        );
-    }
+public class DispatcherClassPackageHolder {
 }
diff --git 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
 
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/metrics/MetricClassPackageHolder.java
similarity index 58%
copy from 
oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
copy to 
oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/metrics/MetricClassPackageHolder.java
index 93ca899..c95ff64 100644
--- 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
+++ 
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/metrics/MetricClassPackageHolder.java
@@ -6,30 +6,22 @@
  * (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
+ *     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.skywalking.oap.server.receiver.envoy;
-
-import org.apache.skywalking.oap.server.core.oal.rt.OALDefine;
+package org.apache.skywalking.oap.server.core.source.oal.rt.metrics;
 
 /**
- * OAL rules to calculate TCP-specific metrics.
+ * MetricClassPackageHolder holds the package for generated metric classes.
+ *
+ * @since 8.9.0 for adopting JDK16+ to avoid `--add-opens 
java.base/java.lang=ALL-UNNAMED`
  */
-public class TCPOALDefine extends OALDefine {
-    public static final TCPOALDefine INSTANCE = new TCPOALDefine();
-
-    private TCPOALDefine() {
-        super(
-            "oal/tcp.oal",
-            "org.apache.skywalking.oap.server.core.source",
-            "org.apache.skywalking.oap.server.core.source.tcp"
-        );
-    }
+public class MetricClassPackageHolder {
 }
diff --git 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
 
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/metrics/builder/MetricBuilderClassPackageHolder.java
similarity index 58%
copy from 
oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
copy to 
oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/metrics/builder/MetricBuilderClassPackageHolder.java
index 93ca899..ef10c24 100644
--- 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
+++ 
b/oap-server/oal-rt/src/main/java/org/apache/skywalking/oap/server/core/source/oal/rt/metrics/builder/MetricBuilderClassPackageHolder.java
@@ -6,30 +6,22 @@
  * (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
+ *     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.skywalking.oap.server.receiver.envoy;
-
-import org.apache.skywalking.oap.server.core.oal.rt.OALDefine;
+package org.apache.skywalking.oap.server.core.source.oal.rt.metrics.builder;
 
 /**
- * OAL rules to calculate TCP-specific metrics.
+ * MetricBuilderClassPackageHolder holds the package for generated metric 
builder classes.
+ *
+ * @since 8.9.0 for adopting JDK16+ to avoid `--add-opens 
java.base/java.lang=ALL-UNNAMED`
  */
-public class TCPOALDefine extends OALDefine {
-    public static final TCPOALDefine INSTANCE = new TCPOALDefine();
-
-    private TCPOALDefine() {
-        super(
-            "oal/tcp.oal",
-            "org.apache.skywalking.oap.server.core.source",
-            "org.apache.skywalking.oap.server.core.source.tcp"
-        );
-    }
+public class MetricBuilderClassPackageHolder {
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java
index 9930155..91996b5 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java
@@ -39,6 +39,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.UnexpectedException;
 import org.apache.skywalking.oap.server.core.analysis.StreamDefinition;
 import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
+import 
org.apache.skywalking.oap.server.core.analysis.meter.dynamic.MeterClassPackageHolder;
 import 
org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue;
 import 
org.apache.skywalking.oap.server.core.analysis.meter.function.MeterFunction;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
@@ -46,6 +47,7 @@ import 
org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProces
 import org.apache.skywalking.oap.server.core.storage.StorageException;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.module.Service;
+import org.apache.skywalking.oap.server.library.util.JVMEnvUtil;
 
 /**
  * MeterSystem provides the API way to create {@link MetricsStreamProcessor} 
rather than manual analysis metrics or OAL
@@ -103,8 +105,8 @@ public class MeterSystem implements Service {
      * @throws UnexpectedException      if binary code manipulation fails or 
stream core failure.
      */
     public synchronized <T> void create(String metricsName,
-        String functionName,
-        ScopeType type) throws IllegalArgumentException {
+                                        String functionName,
+                                        ScopeType type) throws 
IllegalArgumentException {
         final Class<? extends AcceptableValue> meterFunction = 
functionRegister.get(functionName);
 
         if (meterFunction == null) {
@@ -138,9 +140,9 @@ public class MeterSystem implements Service {
      * @throws UnexpectedException      if binary code manipulation fails or 
stream core failure.
      */
     public synchronized <T> void create(String metricsName,
-                                           String functionName,
-                                           ScopeType type,
-                                           Class<T> dataType) throws 
IllegalArgumentException {
+                                        String functionName,
+                                        ScopeType type,
+                                        Class<T> dataType) throws 
IllegalArgumentException {
         /**
          * Create a new meter class dynamically.
          */
@@ -191,11 +193,13 @@ public class MeterSystem implements Service {
          */
         try {
             CtClass existingMetric = classPool.get(METER_CLASS_PACKAGE + 
className);
-            if (existingMetric.getSuperclass() != parentClass || type != 
meterPrototypes.get(metricsName).getScopeType()) {
-                throw new IllegalArgumentException(metricsName + " has been 
defined, but calculate function or/are scope type is/are different.");
+            if (existingMetric.getSuperclass() != parentClass || type != 
meterPrototypes.get(metricsName)
+                                                                               
         .getScopeType()) {
+                throw new IllegalArgumentException(
+                    metricsName + " has been defined, but calculate function 
or/are scope type is/are different.");
             }
             log.info("Metric {} is already defined, so skip the metric 
creation.", metricsName);
-            return ;
+            return;
         } catch (NotFoundException e) {
         }
 
@@ -230,7 +234,11 @@ public class MeterSystem implements Service {
 
         Class targetClass;
         try {
-            targetClass = 
metricsClass.toClass(MeterSystem.class.getClassLoader(), null);
+            if (JVMEnvUtil.version() < 9) {
+                targetClass = 
metricsClass.toClass(MeterSystem.class.getClassLoader(), null);
+            } else {
+                targetClass = 
metricsClass.toClass(MeterClassPackageHolder.class);
+            }
             AcceptableValue prototype = (AcceptableValue) 
targetClass.newInstance();
             meterPrototypes.put(metricsName, new MeterDefinition(type, 
prototype, dataType));
 
diff --git 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/dynamic/MeterClassPackageHolder.java
similarity index 58%
copy from 
oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
copy to 
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/dynamic/MeterClassPackageHolder.java
index 93ca899..7d3b6b5 100644
--- 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/dynamic/MeterClassPackageHolder.java
@@ -6,30 +6,22 @@
  * (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
+ *     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.skywalking.oap.server.receiver.envoy;
-
-import org.apache.skywalking.oap.server.core.oal.rt.OALDefine;
+package org.apache.skywalking.oap.server.core.analysis.meter.dynamic;
 
 /**
- * OAL rules to calculate TCP-specific metrics.
+ * MeterClassPackageHolder holds the package for generated meter classes.
+ *
+ * @since 8.9.0 for adopting JDK16+ to avoid `--add-opens 
java.base/java.lang=ALL-UNNAMED`
  */
-public class TCPOALDefine extends OALDefine {
-    public static final TCPOALDefine INSTANCE = new TCPOALDefine();
-
-    private TCPOALDefine() {
-        super(
-            "oal/tcp.oal",
-            "org.apache.skywalking.oap.server.core.source",
-            "org.apache.skywalking.oap.server.core.source.tcp"
-        );
-    }
+public class MeterClassPackageHolder {
 }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/oal/rt/OALDefine.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/oal/rt/OALDefine.java
index b33cd07..a6e2de9 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/oal/rt/OALDefine.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/oal/rt/OALDefine.java
@@ -32,18 +32,12 @@ import static java.util.Objects.requireNonNull;
 @EqualsAndHashCode
 public abstract class OALDefine {
     protected OALDefine(final String configFile,
-              final String sourcePackage) {
-        this(configFile, sourcePackage, sourcePackage);
-    }
-
-    protected OALDefine(final String configFile,
-                        final String sourcePackage,
-                        final String dispatcherPackage) {
+                        final String sourcePackage) {
         this.configFile = requireNonNull(configFile);
         this.sourcePackage = appendPoint(requireNonNull(sourcePackage));
-        this.dynamicMetricsClassPackage = appendPoint(sourcePackage + 
".oal.rt.metrics");
-        this.dynamicMetricsBuilderClassPackage = appendPoint(sourcePackage + 
".oal.rt.metrics.builder");
-        this.dynamicDispatcherClassPackage = appendPoint(dispatcherPackage + 
".oal.rt.dispatcher");
+        this.dynamicMetricsClassPackage = 
"org.apache.skywalking.oap.server.core.source.oal.rt.metrics.";
+        this.dynamicMetricsBuilderClassPackage = 
"org.apache.skywalking.oap.server.core.source.oal.rt.metrics.builder.";
+        this.dynamicDispatcherClassPackage = 
"org.apache.skywalking.oap.server.core.source.oal.rt.dispatcher.";
     }
 
     private final String configFile;
diff --git 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
 
b/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/JVMEnvUtil.java
similarity index 51%
copy from 
oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
copy to 
oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/JVMEnvUtil.java
index 93ca899..d50f2e8 100644
--- 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
+++ 
b/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/JVMEnvUtil.java
@@ -6,30 +6,34 @@
  * (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
+ *     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.skywalking.oap.server.receiver.envoy;
-
-import org.apache.skywalking.oap.server.core.oal.rt.OALDefine;
+package org.apache.skywalking.oap.server.library.util;
 
 /**
- * OAL rules to calculate TCP-specific metrics.
+ * JVMEnvUtil provides the metadata of current JVM.
  */
-public class TCPOALDefine extends OALDefine {
-    public static final TCPOALDefine INSTANCE = new TCPOALDefine();
+public class JVMEnvUtil {
+    private static final String JVM_VERSION = 
System.getProperty("java.version");
+    private static int JVM_MAJOR_VERSION = -1;
 
-    private TCPOALDefine() {
-        super(
-            "oal/tcp.oal",
-            "org.apache.skywalking.oap.server.core.source",
-            "org.apache.skywalking.oap.server.core.source.tcp"
-        );
+    public static int version() {
+        if (JVM_MAJOR_VERSION < 0) {
+            final String[] versionSegments = JVM_VERSION.split("\\.");
+            if (versionSegments[0].equals("1")) {
+                JVM_MAJOR_VERSION = Integer.parseInt(versionSegments[1]);
+            } else {
+                JVM_MAJOR_VERSION = Integer.parseInt(versionSegments[0]);
+            }
+        }
+        return JVM_MAJOR_VERSION;
     }
 }
diff --git 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
 
b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
index 93ca899..96d968e 100644
--- 
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
+++ 
b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/TCPOALDefine.java
@@ -28,8 +28,7 @@ public class TCPOALDefine extends OALDefine {
     private TCPOALDefine() {
         super(
             "oal/tcp.oal",
-            "org.apache.skywalking.oap.server.core.source",
-            "org.apache.skywalking.oap.server.core.source.tcp"
+            "org.apache.skywalking.oap.server.core.source"
         );
     }
 }

Reply via email to