You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by hu...@apache.org on 2022/05/22 06:26:27 UTC

[plc4x] branch develop updated: fix(plc4j): Set the class loader for for the driver to be the same as the PlcDriverManager

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

hutcheb pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 10e942b74f fix(plc4j): Set the class loader for for the driver to be the same as the PlcDriverManager
10e942b74f is described below

commit 10e942b74f4a4ebb8924c63c554400871918ad6b
Author: hutcheb <be...@gmail.com>
AuthorDate: Sun May 22 06:25:09 2022 +0000

    fix(plc4j): Set the class loader for for the driver to be the same as the PlcDriverManager
---
 .../org/apache/plc4x/java/PlcDriverManager.java    | 26 +++++++++++++++++-----
 .../org/apache/plc4x/kafka/Plc4xSourceTask.java    |  2 +-
 2 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/PlcDriverManager.java b/plc4j/api/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
index 13c39797ad..f62d407b3b 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
@@ -69,9 +69,16 @@ public class PlcDriverManager {
      * @throws PlcConnectionException an exception if the connection attempt failed.
      */
     public PlcConnection getConnection(String url) throws PlcConnectionException {
-        PlcDriver driver = getDriverForUrl(url);
-        PlcConnection connection = driver.getConnection(url);
-        connection.connect();
+        ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(this.classLoader);
+        PlcConnection connection;
+        try {
+            PlcDriver driver = getDriverForUrl(url);
+            connection = driver.getConnection(url);
+            connection.connect();
+        } finally {
+            Thread.currentThread().setContextClassLoader(originalClassLoader);
+        }
         return connection;
     }
 
@@ -84,9 +91,16 @@ public class PlcDriverManager {
      * @throws PlcConnectionException an exception if the connection attempt failed.
      */
     public PlcConnection getConnection(String url, PlcAuthentication authentication) throws PlcConnectionException {
-        PlcDriver driver = getDriverForUrl(url);
-        PlcConnection connection = driver.getConnection(url, authentication);
-        connection.connect();
+        ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader(this.classLoader);
+        PlcConnection connection;
+        try {
+            PlcDriver driver = getDriverForUrl(url);
+            connection = driver.getConnection(url, authentication);
+            connection.connect();
+        } finally {
+            Thread.currentThread().setContextClassLoader(originalClassLoader);
+        }
         return connection;
     }
 
diff --git a/plc4j/integrations/apache-kafka/src/main/java/org/apache/plc4x/kafka/Plc4xSourceTask.java b/plc4j/integrations/apache-kafka/src/main/java/org/apache/plc4x/kafka/Plc4xSourceTask.java
index 95e6d11606..9fa01fdc72 100644
--- a/plc4j/integrations/apache-kafka/src/main/java/org/apache/plc4x/kafka/Plc4xSourceTask.java
+++ b/plc4j/integrations/apache-kafka/src/main/java/org/apache/plc4x/kafka/Plc4xSourceTask.java
@@ -153,7 +153,7 @@ public class Plc4xSourceTask extends SourceTask {
         ScraperConfigurationTriggeredImpl scraperConfig = builder.build();
 
         try {
-            PlcDriverManager manager = new PlcDriverManager();
+            PlcDriverManager manager = new PooledDriverManager();
             PlcDriverManager plcDriverManager = new CachedDriverManager(plc4xConnectionString,() -> manager.getConnection(plc4xConnectionString));
             TriggerCollector triggerCollector = new TriggerCollectorImpl(plcDriverManager);
             scraper = new TriggeredScraperImpl(scraperConfig, (jobName, sourceName, results) -> {