This is an automated email from the ASF dual-hosted git repository.
sruehl 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 be0da39319 fix(plc4j/scraper): supply default connection manager, port
to new SPI, re-enable module
be0da39319 is described below
commit be0da3931904b4fdd95717eee31e3dcd42132c96
Author: Sebastian Rühl <[email protected]>
AuthorDate: Fri Jul 10 08:57:54 2026 +0200
fix(plc4j/scraper): supply default connection manager, port to new SPI,
re-enable module
The connection-cache re-implementation (1b961389c8) made
CachedPlcConnectionManager.Builder.build() throw an IllegalStateException
unless a PlcConnectionManager is set via withConnectionManager().
The config-based convenience constructors of ScraperImpl and
TriggeredScraperImpl still built the cache without one, so every
consumer using them failed at construction time (first observed as the
plc4x-extras Apache Calcite and Kafka CI failures).
- ScraperImpl/TriggeredScraperImpl: pass new DefaultPlcDriverManager()
explicitly, restoring the documented pre-rework default
- Add regression tests covering the config-based constructors (they were
previously only exercised by a @Disabled manual test, which is why CI
never caught this)
- Port the scraper tests to the restructured SPI:
DefaultPlcResponseItem moved to plc4j-spi-drivers
(org.apache.plc4x.java.spi.drivers.messages.items)
- Re-enable the scraper module in the plc4j-tools reactor; it was
parked by the SPI restructuring (372501287d) pending exactly this
port and now builds and tests green (opm/scraper-ng stay disabled)
---
plc4j/tools/pom.xml | 4 ++--
plc4j/tools/scraper/pom.xml | 6 ++++++
.../java/org/apache/plc4x/java/scraper/ScraperImpl.java | 5 ++++-
.../java/scraper/triggeredscraper/TriggeredScraperImpl.java | 5 ++++-
.../java/org/apache/plc4x/java/scraper/ScraperTaskTest.java | 2 +-
.../java/org/apache/plc4x/java/scraper/ScraperTest.java | 13 ++++++++++++-
.../scraper/triggeredscraper/TriggeredScraperImplTest.java | 11 ++++++++++-
7 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/plc4j/tools/pom.xml b/plc4j/tools/pom.xml
index 418447abcd..3afe91bd53 100644
--- a/plc4j/tools/pom.xml
+++ b/plc4j/tools/pom.xml
@@ -38,9 +38,9 @@
<subprojects>
<subproject>capture-replay</subproject>
<subproject>connection-cache</subproject>
+ <subproject>scraper</subproject>
<!--subproject>opm</subproject-->
- <!--subproject>scraper</subproject>
- <subproject>scraper-ng</subproject-->
+ <!--subproject>scraper-ng</subproject-->
</subprojects>
</project>
\ No newline at end of file
diff --git a/plc4j/tools/scraper/pom.xml b/plc4j/tools/scraper/pom.xml
index db3ac223ec..4a00a5a9f1 100644
--- a/plc4j/tools/scraper/pom.xml
+++ b/plc4j/tools/scraper/pom.xml
@@ -100,6 +100,12 @@
<version>0.14.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.plc4x</groupId>
+ <artifactId>plc4j-spi-drivers</artifactId>
+ <version>0.14.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
<!-- Test dependencies-->
<dependency>
diff --git
a/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/ScraperImpl.java
b/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/ScraperImpl.java
index d4428247e1..947e1240c7 100644
---
a/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/ScraperImpl.java
+++
b/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/ScraperImpl.java
@@ -24,6 +24,7 @@ import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.apache.commons.lang3.tuple.Triple;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
import org.apache.plc4x.java.api.PlcConnectionManager;
import org.apache.plc4x.java.scraper.config.ScraperConfiguration;
import org.apache.plc4x.java.scraper.exception.ScraperException;
@@ -97,7 +98,9 @@ public class ScraperImpl implements Scraper {
* (in the background) the idle connection is created and the
getConnection call returns fast.
*/
private static CachedPlcConnectionManager
createCachedPlcConnectionManager() {
- return CachedPlcConnectionManager.getBuilder().build();
+ return CachedPlcConnectionManager.getBuilder()
+ .withConnectionManager(new DefaultPlcDriverManager())
+ .build();
}
@Override
diff --git
a/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImpl.java
b/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImpl.java
index f394da11b5..2e319ac650 100644
---
a/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImpl.java
+++
b/plc4j/tools/scraper/src/main/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImpl.java
@@ -23,6 +23,7 @@ import
org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.PlcConnectionManager;
import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
@@ -174,7 +175,9 @@ public class TriggeredScraperImpl implements Scraper,
TriggeredScraperMBean {
* (in the background) the idle connection is created and the
getConnection call returns fast.
*/
private static CachedPlcConnectionManager
createCachedPlcConnectionManager() {
- return CachedPlcConnectionManager.getBuilder().build();
+ return CachedPlcConnectionManager.getBuilder()
+ .withConnectionManager(new DefaultPlcDriverManager())
+ .build();
}
/**
diff --git
a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTaskTest.java
b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTaskTest.java
index c0b2289c68..06905aa3a0 100644
---
a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTaskTest.java
+++
b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTaskTest.java
@@ -25,7 +25,7 @@ import org.apache.plc4x.java.api.types.PlcResponseCode;
import org.apache.plc4x.java.spi.values.PlcSTRING;
import org.apache.plc4x.java.mock.connection.MockConnection;
import org.apache.plc4x.java.mock.connection.MockDevice;
-import org.apache.plc4x.java.spi.messages.utils.DefaultPlcResponseItem;
+import org.apache.plc4x.java.spi.drivers.messages.items.DefaultPlcResponseItem;
import org.assertj.core.api.WithAssertions;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
diff --git
a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
index 3c4ccafa4c..06fd2c226c 100644
---
a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
+++
b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
@@ -25,7 +25,10 @@ import org.apache.plc4x.java.api.types.PlcResponseCode;
import org.apache.plc4x.java.spi.values.PlcDINT;
import org.apache.plc4x.java.mock.connection.MockConnection;
import org.apache.plc4x.java.mock.connection.MockDevice;
-import org.apache.plc4x.java.spi.messages.utils.DefaultPlcResponseItem;
+import org.apache.plc4x.java.scraper.config.ScraperConfiguration;
+import org.apache.plc4x.java.scraper.config.ScraperConfigurationClassicImpl;
+import org.apache.plc4x.java.scraper.exception.ScraperException;
+import org.apache.plc4x.java.spi.drivers.messages.items.DefaultPlcResponseItem;
import org.apache.plc4x.java.utils.cache.CachedPlcConnectionManager;
import org.assertj.core.api.WithAssertions;
import org.junit.jupiter.api.Disabled;
@@ -36,6 +39,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
+import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -77,6 +81,13 @@ class ScraperTest implements WithAssertions {
Thread.sleep(30_000_000);
}
+ @Test
+ void configConstructor_buildsDefaultConnectionManager() throws
ScraperException, IOException {
+ ScraperConfiguration config =
ScraperConfiguration.fromFile("src/test/resources/example.yml",
ScraperConfigurationClassicImpl.class);
+
+ assertThatCode(() -> new ScraperImpl(config, (j, a, m) ->
{})).doesNotThrowAnyException();
+ }
+
@Test
void scraper_schedulesJob() throws InterruptedException,
PlcConnectionException {
DefaultPlcDriverManager driverManager = new DefaultPlcDriverManager();
diff --git
a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
index db7ebfad3b..59dc177086 100644
---
a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
+++
b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
@@ -27,9 +27,10 @@ import
org.apache.plc4x.java.scraper.config.ScraperConfigurationClassicImpl;
import org.apache.plc4x.java.scraper.exception.ScraperException;
import
org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollector;
import
org.apache.plc4x.java.scraper.triggeredscraper.triggerhandler.collector.TriggerCollectorImpl;
-import org.apache.plc4x.java.spi.messages.utils.DefaultPlcResponseItem;
+import org.apache.plc4x.java.spi.drivers.messages.items.DefaultPlcResponseItem;
import org.apache.plc4x.java.spi.values.PlcBOOL;
import org.apache.plc4x.java.spi.values.PlcLINT;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -62,6 +63,14 @@ class TriggeredScraperImplTest {
mock2Connection.setDevice(mockDevice2);
}
+ @Test
+ void configConstructor_buildsDefaultConnectionManager() throws
ScraperException, IOException {
+ ScraperConfiguration configuration =
ScraperConfiguration.fromFile("src/test/resources/mock-scraper-config.yml",
ScraperConfigurationClassicImpl.class);
+ TriggerCollector triggerCollector = new
TriggerCollectorImpl(driverManager);
+
+ Assertions.assertDoesNotThrow(() -> new
TriggeredScraperImpl(configuration, (j, a, m) -> {}, triggerCollector));
+ }
+
/**
* Test is added because we assume some strange behavior.
*/