You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2021/10/26 03:45:43 UTC

[skywalking] branch jdk17 created (now 4f8919c)

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

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


      at 4f8919c  Support JDK 16 and 17.

This branch includes the following new commits:

     new 4f8919c  Support JDK 16 and 17.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[skywalking] 01/01: Support JDK 16 and 17.

Posted by wu...@apache.org.
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...@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"
         );
     }
 }