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

glcj pushed a commit to branch feature/merlot
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git


The following commit(s) were added to refs/heads/feature/merlot by this push:
     new 7b67615  Kafka multitopic support from decanter model. Working on.
7b67615 is described below

commit 7b67615a712ae383f2eace125ec36b8fc76ca5b9
Author: César García <[email protected]>
AuthorDate: Sun Apr 26 09:58:37 2026 -0400

    Kafka multitopic support from decanter model. Working on.
---
 .gitignore                                         |   1 +
 .../merlot/drv/s7/core/S7DBAiFactoryTest.java      | 204 ++++-------
 .../merlot/drv/s7/core/S7DBDiFactoryTest.java      | 123 +++++++
 .../merlot/org.apache.plc4x.merlot.kafka/pom.xml   | 108 ++++++
 .../org.apache.karaf.decanter.collector.kafka.cfg  |  85 +++++
 .../apache/plc4x/merlot/kafka/api/MyService.java   |  23 ++
 .../plc4x/merlot/kafka/api/MyServiceImpl.java      |  25 ++
 .../core/MerlotKafkaManagedServiceFactory.java     |  41 +++
 .../kafka/impl/MerlotKafkaDecanterCollector.java   | 109 ++++++
 .../resources/OSGI-INF/blueprint/kafka-service.xml |  31 ++
 plc4j/tools/merlot/pom.xml                         | 404 ++++++++++++++-------
 11 files changed, 886 insertions(+), 268 deletions(-)

diff --git a/.gitignore b/.gitignore
index 1a86979..a002f0d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ target
 # Source bundle from PLC4C
 /plc4c/plc4c/
 /plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/nbproject/
+/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/nbproject/
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiFactoryTest.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiFactoryTest.java
index 640cfb4..a5d85fd 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiFactoryTest.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiFactoryTest.java
@@ -29,9 +29,10 @@ import org.junit.Before;
 import org.junit.Test;
 import java.util.UUID;
 import static org.junit.Assert.*;
-import org.junit.Ignore;
 
-@Ignore
+/**
+ * Functional test for S7DBAiFactory (Analog Input).
+ */
 public class S7DBAiFactoryTest {
 
     private S7DBAiFactory factory;
@@ -44,42 +45,42 @@ public class S7DBAiFactoryTest {
         factory = new S7DBAiFactory();
         record = factory.create("AI_TEST");
 
-        // Setup Buffer
+        // Setup Buffer (BUFFER_SIZE = 64 in S7DBAiFactory)
         byteBuf = Unpooled.buffer(64);
-        // Initialize buffer with some data
-        // iMode (short) at 0
-        byteBuf.setShort(0, 1);
-        // iErrorCode (short) at 2
-        byteBuf.setShort(2, 0);
-        // iStatus (short) at 4
-        byteBuf.setShort(4, 100);
-        // rActiveValue (float) at 6
+        
+        // Fill buffer based on S7DBAiFactory.update() logic:
+        // Offset 0: iMode (short)
+        byteBuf.setShort(0, (short) 2);
+        // Offset 2: iErrorCode (short)
+        byteBuf.setShort(2, (short) 0);
+        // Offset 4: iStatus (short)
+        byteBuf.setShort(4, (short) 100);
+        // Offset 6: rActiveValue (float)
         byteBuf.setFloat(6, 12.34f);
-        // rInputValue (float) at 10
+        // Offset 10: rInputValue (float)
         byteBuf.setFloat(10, 56.78f);
-        // rManualValue (float) at 14
+        // Offset 14: rManualValue (float)
         byteBuf.setFloat(14, 90.12f);
-        // bPB_ResetError, bPBEN_ResetError, bError at 18 (byte)
-        // Bit 0: bPB_ResetError, Bit 1: bPBEN_ResetError, Bit 2: bError
-        byteBuf.setByte(18, 0b00000111); // All true
-
-        // Status byte at 20
-        // Bit 0: bLowLowAlarm, Bit 1: bHighHighAlarm, Bit 2: bInvalid
-        byteBuf.setByte(20, 0b00000101); // LowLow=true, HighHigh=false, 
Invalid=true
-
-        // Parameters
-        // iSensorType (short) at 22
-        byteBuf.setShort(22, 2);
-        // rInEngUnitsMin (float) at 24
+        
+        // Offset 18: byTemp (bits: 0:bPB_ResetError, 1:bPBEN_ResetError, 
2:bError)
+        // Set bits 0 and 2 to true (0b00000101 = 5)
+        byteBuf.setByte(18, (byte) 5);
+
+        // Offset 20: byTemp (bits: 0:bLowLowAlarm, 1:bHighHighAlarm, 
2:bInvalid)
+        // Set bit 1 to true (0b00000010 = 2)
+        byteBuf.setByte(20, (byte) 2);
+
+        // Offset 22: iSensorType (short)
+        byteBuf.setShort(22, (short) 1);
+        // Offset 24: rInEngUnitsMin (float)
         byteBuf.setFloat(24, 0.0f);
-        // rInEngUnitsMax (float) at 28
+        // Offset 28: rInEngUnitsMax (float)
         byteBuf.setFloat(28, 100.0f);
-        // ... other floats ...
 
         // Setup PlcItem
         String uuid = UUID.randomUUID().toString();
-        plcItem = new PlcItemImpl.PlcItemBuilder("ITEM_TEST")
-                .setItemDescription("Test Item")
+        plcItem = new PlcItemImpl.PlcItemBuilder("ITEM_AI_TEST")
+                .setItemDescription("Test Item for S7 Analog Input")
                 .setItemId(uuid)
                 .setItemUid(UUID.fromString(uuid))
                 .build();
@@ -88,123 +89,68 @@ public class S7DBAiFactoryTest {
     }
 
     @Test
-    public void testCreate() {
-        assertNotNull(record);
+    public void testStructureCreation() {
+        assertNotNull("Record should not be null", record);
         PVStructure pvStructure = 
record.getPVRecordStructure().getPVStructure();
-        assertNotNull(pvStructure);
-
-        assertNotNull(pvStructure.getStructureField("cmd"));
-        assertNotNull(pvStructure.getStructureField("sts"));
-        assertNotNull(pvStructure.getStructureField("par"));
-        assertNotNull(pvStructure.getStringField("id"));
+        
+        assertNotNull("cmd structure should exist", 
pvStructure.getStructureField("cmd"));
+        assertNotNull("sts structure should exist", 
pvStructure.getStructureField("sts"));
+        assertNotNull("par structure should exist", 
pvStructure.getStructureField("par"));
+        assertNotNull("id field should exist", 
pvStructure.getStringField("id"));
     }
 
     @Test
-    public void testAttach() {
-        PVString id = 
record.getPVRecordStructure().getPVStructure().getStringField("id");
-        id.put("s7:%DB100:23:BYTE[64]"); // Example S7 address
-
+    public void testAttachAndParsing() {
+        PVStructure pvStructure = 
record.getPVRecordStructure().getPVStructure();
+        // S7DBAiFactory uses the 'id' field to parse the S7 address
+        pvStructure.getStringField("id").put("s7:%DB100:0:BYTE[64]");
+        
         record.atach(plcItem);
-
-        assertEquals(23, record.getByteOffset());
-        // Bit offset is usually 0 unless specified otherwise
-        assertEquals(0, record.getBiteOffset());
+        
+        assertEquals("Byte offset should be 0", 0, record.getByteOffset());
     }
 
     @Test
-    public void testUpdate() {
-        PVString id = 
record.getPVRecordStructure().getPVStructure().getStringField("id");
-        id.put("s7:%DB100:0:BYTE[64]"); // Offset 0 for simplicity with our 
buffer
+    public void testDataUpdateMapping() {
+        PVStructure pvStructure = 
record.getPVRecordStructure().getPVStructure();
+        pvStructure.getStringField("id").put("s7:%DB100:0:BYTE[64]");
+        
         record.atach(plcItem);
-
-        // Manually set the inner buffer of the record to match our test buffer
-        // because atach() slices the buffer based on offset.
-        // Since we created a raw buffer and wrapped it in PlcRawByteArray,
-        // and PlcItemImpl might handle it differently, let's ensure the 
record has
-        // access to data.
-        // In S7DBAiFactory.atach: innerBuffer =
-        // plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
-        // We need to make sure plcItem.getItemByteBuf() returns something 
valid.
-        // PlcItemImpl usually wraps the PlcValue.
-
-        // Let's simulate the update
         record.update();
 
-        PVStructure pvStructure = 
record.getPVRecordStructure().getPVStructure();
         PVStructure cmd = pvStructure.getStructureField("cmd");
         PVStructure sts = pvStructure.getStructureField("sts");
         PVStructure par = pvStructure.getStructureField("par");
 
-        assertEquals(1, cmd.getShortField("iMode").get());
-        assertEquals(100, cmd.getShortField("iStatus").get());
-        assertEquals(12.34f, cmd.getFloatField("rActiveValue").get(), 0.001f);
-        assertEquals(56.78f, cmd.getFloatField("rInputValue").get(), 0.001f);
-        assertEquals(90.12f, cmd.getFloatField("rManualValue").get(), 0.001f);
-
-        assertEquals(true, cmd.getBooleanField("bPB_ResetError").get());
-        assertEquals(true, cmd.getBooleanField("bPBEN_ResetError").get());
-        assertEquals(true, cmd.getBooleanField("bError").get());
-
-        assertEquals(true, sts.getBooleanField("bLowLowAlarm").get());
-        assertEquals(false, sts.getBooleanField("bHighHighAlarm").get());
-        assertEquals(true, sts.getBooleanField("bInvalid").get());
-
-        assertEquals(2, par.getShortField("iSensorType").get());
-        assertEquals(0.0f, par.getFloatField("rInEngUnitsMin").get(), 0.001f);
-        assertEquals(100.0f, par.getFloatField("rInEngUnitsMax").get(), 
0.001f);
-    }
-
-    @Test
-    public void testProcess() {
-        PVString id = 
record.getPVRecordStructure().getPVStructure().getStringField("id");
-        id.put("s7:%DB100:0:BYTE[64]");
-        record.atach(plcItem);
-
-        // Enable write
-        PVBoolean writeEnable = 
record.getPVRecordStructure().getPVStructure().getBooleanField("write_enable");
-        writeEnable.put(true);
-
-        // Change a value in PV
-        PVStructure cmd = 
record.getPVRecordStructure().getPVStructure().getStructureField("cmd");
-        cmd.getShortField("iMode").put((short) 5);
-
-        // Call process
-        record.process();
-
-        // Verify that the buffer (which represents the PLC memory) is updated
-        // Note: S7DBAiFactory.process() calls super.process().
-        // We need to verify if super.process() writes back to the buffer or 
sends a
-        // write request.
-        // Assuming it writes back to the buffer mapped to the fields.
-        // Let's check if the buffer was modified.
-        // The factory maps fields to offsets. iMode is at offset 3 (from 
fieldOffsets
-        // in Factory)?
-        // Wait, let's check fieldOffsets in S7DBAiFactory.java
-        // fieldOffsets.add(3, new ImmutablePair(0, (byte) -1)); //iMode -> 
Offset 0
-
-        // So if we change iMode to 5, the buffer at offset 0 should be 5.
-        // However, process() logic in DBBaseFactory usually handles writing 
from PV to
-        // Buffer/PLC.
-        // Let's assume it writes to the buffer if it's a local buffer 
simulation.
-
-        // Re-reading the buffer to see if it changed requires access to the 
inner
-        // buffer or the original buffer.
-        // Since innerBuffer is a slice of the original buffer, changes should 
reflect
-        // if it's a direct slice.
-
-        // Let's check the byteBuf we created.
-        // assertEquals(5, byteBuf.getShort(0));
-        // Note: This assertion depends heavily on DBBaseFactory 
implementation.
-        // If it doesn't write back immediately or uses a different mechanism, 
this
-        // might fail.
-        // But for a unit test of the Factory logic (mapping), this is the 
intention.
+        // Verify Command values
+        assertEquals("iMode should be 2", (short) 2, 
cmd.getShortField("iMode").get());
+        assertEquals("rActiveValue should be 12.34", 12.34f, 
cmd.getFloatField("rActiveValue").get(), 0.001f);
+        assertTrue("bPB_ResetError (bit 0) should be true", 
cmd.getBooleanField("bPB_ResetError").get());
+        assertFalse("bPBEN_ResetError (bit 1) should be false", 
cmd.getBooleanField("bPBEN_ResetError").get());
+        assertTrue("bError (bit 2) should be true", 
cmd.getBooleanField("bError").get());
+
+        // Verify Status values
+        assertFalse("bLowLowAlarm (bit 0) should be false", 
sts.getBooleanField("bLowLowAlarm").get());
+        assertTrue("bHighHighAlarm (bit 1) should be true", 
sts.getBooleanField("bHighHighAlarm").get());
+
+        // Verify Parameter values
+        assertEquals("iSensorType should be 1", (short) 1, 
par.getShortField("iSensorType").get());
+        assertEquals("rInEngUnitsMin should be 0.0", 0.0f, 
par.getFloatField("rInEngUnitsMin").get(), 0.001f);
+        assertEquals("rInEngUnitsMax should be 100.0", 100.0f, 
par.getFloatField("rInEngUnitsMax").get(), 0.001f);
     }
 
     @Test
-    public void testGetFieldsToMonitor() {
-        String fields = record.getFieldsToMonitor();
-        assertNotNull(fields);
-        assertTrue(fields.contains("cmd{iMode"));
-        assertTrue(fields.contains("par{iSensorType"));
+    public void testFieldOffsetsMapping() {
+        assertNotNull("Field offsets should be initialized", 
record.getFieldOffsets());
+        
+        // iMode is at index 3, pointing to byte offset 0
+        assertEquals("iMode byte offset should be 0", (Object) 0, 
record.getFieldOffsets().get(3).getLeft());
+        
+        // rManualValue is at index 4, pointing to byte offset 14
+        assertEquals("rManualValue byte offset should be 14", (Object) 14, 
record.getFieldOffsets().get(4).getLeft());
+        
+        // bPB_ResetError is at index 5, pointing to byte offset 18, bit 0
+        assertEquals("bPB_ResetError byte offset should be 18", (Object) 18, 
record.getFieldOffsets().get(5).getLeft());
+        assertEquals("bPB_ResetError bit offset should be 0", (Object) (byte) 
0, record.getFieldOffsets().get(5).getRight());
     }
 }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDiFactoryTest.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDiFactoryTest.java
new file mode 100644
index 0000000..03d0e82
--- /dev/null
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDiFactoryTest.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://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.plc4x.merlot.drv.s7.core;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import org.apache.plc4x.java.spi.values.PlcRawByteArray;
+import org.apache.plc4x.merlot.api.PlcItem;
+import org.apache.plc4x.merlot.api.impl.PlcItemImpl;
+import org.apache.plc4x.merlot.db.api.DBRecord;
+import org.epics.pvdata.pv.*;
+import org.junit.Before;
+import org.junit.Test;
+import java.util.UUID;
+import static org.junit.Assert.*;
+
+/**
+ * Functional test for S7DBDiFactory.
+ */
+public class S7DBDiFactoryTest {
+
+    private S7DBDiFactory factory;
+    private DBRecord record;
+    private PlcItem plcItem;
+    private ByteBuf byteBuf;
+
+    @Before
+    public void setUp() {
+        factory = new S7DBDiFactory();
+        record = factory.create("DI_TEST");
+
+        // Setup Buffer (BUFFER_SIZE = 3 in S7DBDiFactory)
+        byteBuf = Unpooled.buffer(3);
+        
+        // 1. Set iMode (short) at offset 0 -> Value: 1234
+        byteBuf.setShort(0, (short) 1234);
+        
+        // 2. Set byTemp (byte) at offset 2
+        // Bit mapping in S7DBDiFactory:
+        // Bit 0: bOn, Bit 1: bOnActual, Bit 2: bPB_On, Bit 3: bPB_Off, Bit 4: 
bPBEN_On, Bit 5: bPBEN_Off
+        // Let's set bits 0, 2, 4 to true (0b00010101 = 21 decimal)
+        byteBuf.setByte(2, (byte) 21);
+
+        // Setup PlcItem with the buffer
+        String uuid = UUID.randomUUID().toString();
+        plcItem = new PlcItemImpl.PlcItemBuilder("ITEM_TEST")
+                .setItemDescription("Test Item for S7 Digital Input")
+                .setItemId(uuid)
+                .setItemUid(UUID.fromString(uuid))
+                .build();
+
+        plcItem.setPlcValue(new PlcRawByteArray(byteBuf.array()));
+    }
+
+    @Test
+    public void testStructureCreation() {
+        assertNotNull("Record should not be null", record);
+        PVStructure pvStructure = 
record.getPVRecordStructure().getPVStructure();
+        
+        assertNotNull("udtHMI structure should exist", 
pvStructure.getStructureField("udtHMI"));
+        assertNotNull("udtError structure should exist", 
pvStructure.getStructureField("udtError"));
+        assertNotNull("write_enable field should exist", 
pvStructure.getBooleanField("write_enable"));
+        assertNotNull("offset field should exist", 
pvStructure.getStringField("offset"));
+    }
+
+    @Test
+    public void testDataUpdateMapping() {
+        PVStructure pvStructure = 
record.getPVRecordStructure().getPVStructure();
+        
+        // Set offset to 0 so it reads from the beginning of our buffer
+        pvStructure.getStringField("offset").put("0");
+        
+        // Attach and trigger update
+        record.atach(plcItem);
+        record.update();
+
+        PVStructure udtHMI = pvStructure.getStructureField("udtHMI");
+        
+        // Verify iMode
+        assertEquals("iMode should match buffer value", (short) 1234, 
udtHMI.getShortField("iMode").get());
+        
+        // Verify Bits (based on byte value 21 -> 0b00010101)
+        assertTrue("bOn (bit 0) should be true", 
udtHMI.getBooleanField("bOn").get());
+        assertFalse("bOnActual (bit 1) should be false", 
udtHMI.getBooleanField("bOnActual").get());
+        assertTrue("bPB_On (bit 2) should be true", 
udtHMI.getBooleanField("bPB_On").get());
+        assertFalse("bPB_Off (bit 3) should be false", 
udtHMI.getBooleanField("bPB_Off").get());
+        assertTrue("bPBEN_On (bit 4) should be true", 
udtHMI.getBooleanField("bPBEN_On").get());
+        assertFalse("bPBEN_Off (bit 5) should be false", 
udtHMI.getBooleanField("bPBEN_Off").get());
+        
+        // Verify write_enable is automatically enabled after first run
+        assertTrue("write_enable should be true after update", 
pvStructure.getBooleanField("write_enable").get());
+    }
+
+    @Test
+    public void testFieldOffsetsMapping() {
+        // Verify that the factory correctly initialized the field offsets for 
writing
+        assertNotNull("Field offsets should be initialized", 
record.getFieldOffsets());
+        
+        // iMode is at index 3 in the list, pointing to byte offset 2 (as per 
S7DBDiFactory source)
+        // Note: The factory uses fieldOffsets.add(3, new ImmutablePair(2, 
(byte) -1))
+        assertEquals("iMode offset should be 2", (Object) 2, 
record.getFieldOffsets().get(3).getLeft());
+        
+        // bPB_On is at index 4, pointing to byte offset 4, bit 2
+        assertEquals("bPB_On byte offset should be 4", (Object) 4, 
record.getFieldOffsets().get(4).getLeft());
+        assertEquals("bPB_On bit offset should be 2", (Object) (byte) 2, 
record.getFieldOffsets().get(4).getRight());
+    }
+}
diff --git a/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/pom.xml 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/pom.xml
new file mode 100644
index 0000000..d65ee83
--- /dev/null
+++ b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/pom.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
+    <!--
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements.  See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version 2.0
+        (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
+
+        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.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+    <artifactId>merlot</artifactId>
+    <groupId>org.apache.plc4x</groupId>
+    <version>0.13.0-SNAPSHOT</version>
+  </parent>
+
+    <groupId>org.apache.plc4x.merlot.kafka</groupId>
+    <artifactId>org.apache.plc4x.merlot.kafka</artifactId>
+    <version>0.13.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>PLC4J: Merlot :: kafka :: Appender&amp;Collector</name>
+    <description>org.apache.plc4x.merlot.kafka OSGi blueprint bundle 
project.</description>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>5.1.9</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                        <Bundle-Version>${project.version}</Bundle-Version>
+                        
<Export-Package>org.apache.plc4x.merlot.kafka*;version=${project.version}</Export-Package>
+                        <Import-Package>*</Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-clean-plugin</artifactId>
+                <version>3.4.0</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>3.3.1</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.13.0</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <maxmem>256M</maxmem>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.5.2</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-install-plugin</artifactId>
+                <version>3.1.3</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>3.1.3</version>
+            </plugin>
+
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.core</artifactId>
+            <version>8.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.cm</artifactId>
+            <version>1.6.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.annotation</artifactId>
+            <version>8.1.0</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/cfg/org.apache.karaf.decanter.collector.kafka.cfg
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/cfg/org.apache.karaf.decanter.collector.kafka.cfg
new file mode 100644
index 0000000..15ebd09
--- /dev/null
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/cfg/org.apache.karaf.decanter.collector.kafka.cfg
@@ -0,0 +1,85 @@
+################################################################################
+#
+#    Licensed to the Apache Software Foundation (ASF) under one or more
+#    contributor license agreements.  See the NOTICE file distributed with
+#    this work for additional information regarding copyright ownership.
+#    The ASF licenses this file to You under the Apache License, Version 2.0
+#    (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
+#
+#    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.
+#
+################################################################################
+
+###############################
+# Decanter Kafka Configuration
+###############################
+
+# A list of host/port pairs to use for establishing the initial connection to 
the Kafka cluster
+#bootstrap.servers=localhost:9092
+
+# An id string to identify the group where the consumer belongs to
+#group.id=decanter
+
+# Enable auto commit of consumed messages
+#enable.auto.commit=true
+
+# Auto commit interval (in ms) triggering the commit
+#auto.commit.interval.ms=1000
+
+# Timeout on the consumer session
+#session.timeout.ms=30000
+
+# Serializer class for key that implements the Serializer interface
+#key.serializer=org.apache.kafka.common.serialization.StringSerializer
+
+# Serializer class for value that implements the Serializer interface.
+#value.serializer=org.apache.kafka.common.serialization.StringSerializer
+
+# Name of the topic
+#topic=decanter
+
+# Security (SSL)
+#security.protocol=SSL
+
+# SSL truststore location (Kafka broker) and password
+#ssl.truststore.location=${karaf.etc}/keystores/keystore.jks
+#ssl.truststore.password=karaf
+
+# SSL keystore (if client authentication is required)
+#ssl.keystore.location=${karaf.etc}/keystores/clientstore.jks
+#ssl.keystore.password=karaf
+#ssl.key.password=karaf
+
+# (Optional) SSL provider (default uses the JVM one)
+#ssl.provider=
+
+# (Optional) SSL Cipher suites
+#ssl.cipher.suites=
+
+# (Optional) SSL Protocols enabled (default is TLSv1.2,TLSv1.1,TLSv1)
+#ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
+
+# (Optional) SSL Truststore type (default is JKS)
+#ssl.truststore.type=JKS
+
+# (Optional) SSL Keystore type (default is JKS)
+#ssl.keystore.type=JKS
+
+# Security (SASL)
+# For SASL, you have to configure Java System property as explained in 
http://kafka.apache.org/documentation.html#security_ssl
+
+# message type (text to use the unmarshaller or raw to not use it)
+message.type=text
+
+# Unmarshaller to use (json is recommended)
+unmarshaller.target=(dataFormat=json)
+
+# custom fields
+fields.remove.request-size-max=remove
\ No newline at end of file
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/api/MyService.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/api/MyService.java
new file mode 100644
index 0000000..1dd42ce
--- /dev/null
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/api/MyService.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (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
+ *
+ * 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.plc4x.merlot.kafka.api;
+
+public interface MyService {
+    
+    public String echo(String message);
+    
+}
\ No newline at end of file
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/api/MyServiceImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/api/MyServiceImpl.java
new file mode 100644
index 0000000..f840714
--- /dev/null
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/api/MyServiceImpl.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (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
+ *
+ * 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.plc4x.merlot.kafka.api;
+
+public class MyServiceImpl implements MyService {
+    
+    public String echo(String message) {
+        return "Echo processed: " + message;
+    }
+    
+}
\ No newline at end of file
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/core/MerlotKafkaManagedServiceFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/core/MerlotKafkaManagedServiceFactory.java
new file mode 100644
index 0000000..361e283
--- /dev/null
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/core/MerlotKafkaManagedServiceFactory.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (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
+ *
+ * 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.plc4x.merlot.kafka.core;
+
+import java.util.Dictionary;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedServiceFactory;
+
+
+public class MerlotKafkaManagedServiceFactory implements ManagedServiceFactory 
{
+
+    @Override
+    public String getName() {
+        return "Prueba";
+    }
+
+    @Override
+    public void updated(String pid, Dictionary<String, ?> properties) throws 
ConfigurationException {
+        System.out.println("pid: " + pid);
+    }
+
+    @Override
+    public void deleted(String pid) {
+        System.out.println("pid: " + pid);
+    }
+    
+}
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/impl/MerlotKafkaDecanterCollector.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/impl/MerlotKafkaDecanterCollector.java
new file mode 100644
index 0000000..774c6a4
--- /dev/null
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/java/org/apache/plc4x/merlot/kafka/impl/MerlotKafkaDecanterCollector.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (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
+ *
+ * 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.plc4x.merlot.kafka.impl;
+
+import java.util.Dictionary;
+import java.util.Properties;
+
+
+public class MerlotKafkaDecanterCollector {
+    
+    private String topic;
+    private String eventAdminTopic;
+    private boolean consuming = false;
+    private String messageType;
+    
+    public void activate(String pid, Dictionary<String, Object> properties) {
+
+        topic = getValue(properties, "topic", "decanter");
+        eventAdminTopic = getValue(properties, EventConstants.EVENT_TOPIC, 
"decanter/collect/kafka/decanter");
+        messageType = getValue(properties, "message.type", "text");
+
+        Properties config = new Properties();
+
+        String bootstrapServers = getValue(properties, "bootstrap.servers", 
"localhost:9092");
+        config.put("bootstrap.servers", bootstrapServers);
+
+        String groupId = getValue(properties, "group.id", "decanter");
+        config.put("group.id", groupId);
+
+        String enableAutoCommit = getValue(properties, "enable.auto.commit", 
"true");
+        config.put("enable.auto.commit", enableAutoCommit);
+
+        String autoCommitIntervalMs = getValue(properties, 
"auto.commit.interval.ms", "1000");
+        config.put("auto.commit.interval.ms", autoCommitIntervalMs);
+
+        String sessionTimeoutMs = getValue(properties, "session.timeout.ms", 
"10000");
+        config.put("session.timeout.ms", sessionTimeoutMs);
+
+        String keyDeserializer = getValue(properties, "key.deserializer", 
"org.apache.kafka.common.serialization.StringDeserializer");
+        config.put("key.deserializer", keyDeserializer);
+
+        String valueDeserializer = getValue(properties, "value.deserializer", 
"org.apache.kafka.common.serialization.StringDeserializer");
+        config.put("value.deserializer", valueDeserializer);
+
+        String securityProtocol = getValue(properties, "security.protocol", 
null);
+        if (securityProtocol != null)
+            config.put("security.protocol", securityProtocol);
+
+        String sslTruststoreLocation = getValue(properties, 
"ssl.truststore.location", null);
+        if (sslTruststoreLocation != null)
+            config.put("ssl.truststore.location", sslTruststoreLocation);
+
+        String sslTruststorePassword = getValue(properties, 
"ssl.truststore.password", null);
+        if (sslTruststorePassword != null)
+            config.put("ssl.truststore.password", sslTruststorePassword);
+
+        String sslKeystoreLocation = getValue(properties, 
"ssl.keystore.location", null);
+        if (sslKeystoreLocation != null)
+            config.put("ssl.keystore.location", sslKeystoreLocation);
+
+        String sslKeystorePassword = getValue(properties, 
"ssl.keystore.password", null);
+        if (sslKeystorePassword != null)
+            config.put("ssl.keystore.password", sslKeystorePassword);
+
+        String sslKeyPassword = getValue(properties, "ssl.key.password", null);
+        if (sslKeyPassword != null)
+            config.put("ssl.key.password", sslKeyPassword);
+
+        String sslProvider = getValue(properties, "ssl.provider", null);
+        if (sslProvider != null)
+            config.put("ssl.provider", sslProvider);
+
+        String sslCipherSuites = getValue(properties, "ssl.cipher.suites", 
null);
+        if (sslCipherSuites != null)
+            config.put("ssl.cipher.suites", sslCipherSuites);
+
+        String sslEnabledProtocols = getValue(properties, 
"ssl.enabled.protocols", null);
+        if (sslEnabledProtocols != null)
+            config.put("ssl.enabled.protocols", sslEnabledProtocols);
+
+        String sslTruststoreType = getValue(properties, "ssl.truststore.type", 
null);
+        if (sslTruststoreType != null)
+            config.put("ssl.truststore.type", sslTruststoreType);
+
+        String sslKeystoreType = getValue(properties, "ssl.keystore.type", 
null);
+        if (sslKeystoreType != null)
+            config.put("ssl.keystore.type", sslKeystoreType);         
+    }   
+    
+    private String getValue(Dictionary<String, Object> config, String key, 
String defaultValue) {
+        String value = (String)config.get(key);
+        return (value != null) ? value :  defaultValue;
+    }    
+    
+}
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/resources/OSGI-INF/blueprint/kafka-service.xml
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/resources/OSGI-INF/blueprint/kafka-service.xml
new file mode 100644
index 0000000..e4e9ac7
--- /dev/null
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.kafka/src/main/resources/OSGI-INF/blueprint/kafka-service.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (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
+
+  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.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"; 
default-activation="eager">
+
+    <bean id="serviceBean" 
+        
class="org.apache.plc4x.merlot.kafka.core.MerlotKafkaManagedServiceFactory"
+        scope="singleton"/>
+
+    <service ref="serviceBean" 
+            interface="org.osgi.service.cm.ManagedServiceFactory">
+        <service-properties>
+            <entry key="service.pid" 
value="org.apache.karaf.decanter.collector.kafka"/>               
+        </service-properties>   
+    </service>
+
+</blueprint>
\ No newline at end of file
diff --git a/plc4j/tools/merlot/pom.xml b/plc4j/tools/merlot/pom.xml
index 4e37564..74a9a78 100644
--- a/plc4j/tools/merlot/pom.xml
+++ b/plc4j/tools/merlot/pom.xml
@@ -16,157 +16,283 @@ software distributed under the License is distributed on 
an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+--><project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+        
+    
+  <modelVersion>4.0.0</modelVersion>
       
-    <modelVersion>4.0.0</modelVersion>
     
-    <!--    <parent>
+  <!--    <parent>
         <groupId>org.apache.plc4x</groupId>
         <artifactId>plc4j-integrations</artifactId>
         <version>0.13.0-SNAPSHOT</version>
     </parent>-->
+      
     
     
-    <groupId>org.apache.plc4x</groupId>
-    <artifactId>merlot</artifactId>
-    <version>0.13.0-SNAPSHOT</version>
-
-    <packaging>pom</packaging>
-    <name>PLC4J: Integrations: Apache Karaf</name>
-    <description>Integration module for integrating PLC4X into Apache 
Karaf.</description>
+  <groupId>org.apache.plc4x</groupId>
       
-    <repositories>
-        <repository>
-            <id>gitlab-maven-antlr4</id>
-            
<url>http://gitlab.devops.aimsites.nl/api/v4/projects/152/packages/maven</url>
-        </repository>
-    </repositories>
+  <artifactId>merlot</artifactId>
       
-    <pluginRepositories>
-        <pluginRepository>
-            <id>gitlab-maven-antlr4</id>
-            
<url>http://gitlab.devops.aimsites.nl/api/v4/projects/152/packages/maven</url>
-        </pluginRepository>
-    </pluginRepositories>
-
-    <properties>
-        <!-- Inherited -->
-        <plc4x.version>0.13.1</plc4x.version>
-        <apache.log4j.version>2.20.0</apache.log4j.version>
-        <bit-io.version>1.4.3</bit-io.version>
-        <c3p0.version>0.9.5.5</c3p0.version>
-        <commons-codec.version>1.19.0</commons-codec.version>
-        <commons-net.version>3.12.0</commons-net.version>      
-        <commons-lang3.version>3.20.0</commons-lang3.version>
-        <commons-io.version>2.21.0</commons-io.version>        
-        <hikaricp.version>2.7.9</hikaricp.version>
-        <netty.version>4.1.104.Final</netty.version>
-        <quartz.version>2.3.2</quartz.version>
-        <slf4j.version>2.0.3</slf4j.version>
-        <spifly.version>1.3.6</spifly.version>
-        <jackson.version>2.19.0</jackson.version>
-        <jakarta.xml.bind.version>2.3.3</jakarta.xml.bind.version>
-        <parser-ng.version>0.1.8</parser-ng.version>
-        <vavr.version>0.10.4</vavr.version>
-        <logback.version>1.5.3</logback.version>
-        <aries.spifly.version>1.3.7</aries.spifly.version>
-        <asm.version>9.6</asm.version>
-        <artemis.version>2.38.0</artemis.version>
-        <awaitility.version>3.1.6</awaitility.version>        
-        <decanter.version>2.10.0</decanter.version>
-        <hawtbuf.version>1.11</hawtbuf.version>
-        <hawtdispatch.version>1.22</hawtdispatch.version>
-        <mqtt-client.version>1.16</mqtt-client.version> 
-        <javax.servlet.version>4.0.1</javax.servlet.version>
-
-        <!-- Database used in Pax-jdbc -->
-        <derby.version>10.14.2.0</derby.version>
-        <h2.version>2.1.210</h2.version>
-        <sqlite-jdbc.version>3.46.1.0</sqlite-jdbc.version>
-
-        <!-- Remove GPL licence -->
-        <javaluator.version>3.0.3</javaluator.version>
-
-        <!-- Integration version -->
-        <karaf.version>4.4.10</karaf.version>
-        <decanter.version>2.10.0</decanter.version>
-        <org.osgi.core.version>6.0.0</org.osgi.core.version>
-        <osgi.core.version>8.0.0</osgi.core.version>
-        <osgi.cmpn.version>7.0.0</osgi.cmpn.version>
-        <osgi.device.version>1.1.0</osgi.device.version>
-        <org.osgi.dal.version>1.0.2</org.osgi.dal.version>
-        <disruptor.version>4.0.0</disruptor.version>
-        <maven-failsafe-plugin.version>3.5.3</maven-failsafe-plugin.version>   
 
-
-        <!-- EPICS -->
-        <epics.core.version>7.0.9</epics.core.version>
-        <epics.util.version>1.0.7</epics.util.version>
-        <epics.vtype.version>1.0.7</epics.vtype.version>
-        <epics.vtype.json.version>2.9.0</epics.vtype.json.version>    
-        <epics.vtype.all.version>1.0.7</epics.vtype.all.version>
-        <epics.ntypes.version>0.3.8</epics.ntypes.version>
-        <epics.jca.version>2.4.8</epics.jca.version>
-        <epics.pvaccess.version>5.1.8</epics.pvaccess.version>
-        <epics.pvaclient.version>4.3.2</epics.pvaclient.version>
-        <epics.pvdata.version>6.1.8</epics.pvdata.version>
-        <epics.pvdatabase.version>4.3.1</epics.pvdatabase.version>
-        <epics.gpclient.version>1.0.8</epics.gpclient.version>
-        <epics.gpclient.core.version>1.0.8</epics.gpclient.core.version>
-        <epics.gpclient.sim.version>1.0.8</epics.gpclient.sim.version>
-        <epics.gpclient.loc.version>1.0.8</epics.gpclient.loc.version>
-        <epics.gpclient.pva.version>1.0.8</epics.gpclient.pva.version>
-        <epics.gpclient.ca.version>1.0.8</epics.gpclient.ca.version>
+  <version>0.13.0-SNAPSHOT</version>
+      
+  <packaging>pom</packaging>
+      
+  <name>PLC4J: Integrations: Apache Karaf</name>
+      
+  <description>Integration module for integrating PLC4X into Apache 
Karaf.</description>
+        
+    
+  <repositories>
+            
+    <repository>
+                  
+      <id>gitlab-maven-antlr4</id>
+                  
+      
<url>http://gitlab.devops.aimsites.nl/api/v4/projects/152/packages/maven</url>
+              
+    </repository>
+        
+  </repositories>
+        
+    
+  <pluginRepositories>
+            
+    <pluginRepository>
+                  
+      <id>gitlab-maven-antlr4</id>
+                  
+      
<url>http://gitlab.devops.aimsites.nl/api/v4/projects/152/packages/maven</url>
+              
+    </pluginRepository>
+        
+  </pluginRepositories>
+      
+  <properties>
+            
+    <!-- Inherited -->
+            
+    <plc4x.version>0.13.1</plc4x.version>
+            
+    <apache.log4j.version>2.20.0</apache.log4j.version>
+            
+    <bit-io.version>1.4.3</bit-io.version>
+            
+    <c3p0.version>0.9.5.5</c3p0.version>
+            
+    <commons-codec.version>1.19.0</commons-codec.version>
+            
+    <commons-net.version>3.12.0</commons-net.version>
+          
+        
+    <commons-lang3.version>3.20.0</commons-lang3.version>
+            
+    <commons-io.version>2.21.0</commons-io.version>
+            
+        
+    <hikaricp.version>2.7.9</hikaricp.version>
+            
+    <netty.version>4.1.104.Final</netty.version>
+            
+    <quartz.version>2.3.2</quartz.version>
+            
+    <slf4j.version>2.0.3</slf4j.version>
+            
+    <spifly.version>1.3.6</spifly.version>
+            
+    <jackson.version>2.19.0</jackson.version>
+            
+    <jakarta.xml.bind.version>2.3.3</jakarta.xml.bind.version>
+            
+    <parser-ng.version>0.1.8</parser-ng.version>
+            
+    <vavr.version>0.10.4</vavr.version>
+            
+    <logback.version>1.5.3</logback.version>
+            
+    <aries.spifly.version>1.3.7</aries.spifly.version>
+            
+    <asm.version>9.6</asm.version>
+            
+    <artemis.version>2.38.0</artemis.version>
+            
+    <awaitility.version>3.1.6</awaitility.version>
+            
+        
+    <decanter.version>2.10.0</decanter.version>
+            
+    <hawtbuf.version>1.11</hawtbuf.version>
+            
+    <hawtdispatch.version>1.22</hawtdispatch.version>
+            
+    <mqtt-client.version>1.16</mqtt-client.version>
+     
+        
+    <javax.servlet.version>4.0.1</javax.servlet.version>
+            
+    <!-- Database used in Pax-jdbc -->
+            
+    <derby.version>10.14.2.0</derby.version>
+            
+    <h2.version>2.1.210</h2.version>
+            
+    <sqlite-jdbc.version>3.46.1.0</sqlite-jdbc.version>
+            
+    <!-- Remove GPL licence -->
+            
+    <javaluator.version>3.0.3</javaluator.version>
+            
+    <!-- Integration version -->
+            
+    <karaf.version>4.4.10</karaf.version>
+            
+    <decanter.version>2.10.0</decanter.version>
+            
+    <org.osgi.core.version>6.0.0</org.osgi.core.version>
+            
+    <osgi.core.version>8.0.0</osgi.core.version>
+            
+    <osgi.cmpn.version>7.0.0</osgi.cmpn.version>
+            
+    <osgi.device.version>1.1.0</osgi.device.version>
+            
+    <org.osgi.dal.version>1.0.2</org.osgi.dal.version>
+            
+    <disruptor.version>4.0.0</disruptor.version>
+            
+    <maven-failsafe-plugin.version>3.5.3</maven-failsafe-plugin.version>
+        
 
-        <!-- GRPC Service -->
-        <protobuf.version>4.31.1</protobuf.version>
-        <protobuf.nano.version>3.1.0</protobuf.nano.version>
-        <proto.google.commons.version>2.58.0</proto.google.commons.version>
-        <grpc.version>1.62.2</grpc.version>
-        <guava.android.version>32.1.3-android</guava.android.version>
-        <errorprone.version>2.23.0</errorprone.version>
-        <annotations.api.version>6.0.53</annotations.api.version>
-        <failureaccess.version>1.0.1</failureaccess.version>
-        <j2objc.version>2.8</j2objc.version>
-        <jsr305.version>3.0.2</jsr305.version>
-        <okio.version>3.9.0</okio.version>
-        <tomcat.annotation.version>6.0.53</tomcat.annotation.version>
-        <annotation.version>13.0</annotation.version>
-        <kotlin.version>1.9.21</kotlin.version>
         
-        <!-- IoTDB -->
-        <iotdb.session.version>2.0.7</iotdb.session.version>
-        <tsfile.version>2.2.1</tsfile.version>
-        <lz4.versio>1.3.0</lz4.versio>
-        <thrift.version>0.13.0</thrift.version>
-             
-    </properties>
+    <!-- EPICS -->
+            
+    <epics.core.version>7.0.9</epics.core.version>
+            
+    <epics.util.version>1.0.7</epics.util.version>
+            
+    <epics.vtype.version>1.0.7</epics.vtype.version>
+            
+    <epics.vtype.json.version>2.9.0</epics.vtype.json.version>
         
+        
+    <epics.vtype.all.version>1.0.7</epics.vtype.all.version>
+            
+    <epics.ntypes.version>0.3.8</epics.ntypes.version>
+            
+    <epics.jca.version>2.4.8</epics.jca.version>
+            
+    <epics.pvaccess.version>5.1.8</epics.pvaccess.version>
+            
+    <epics.pvaclient.version>4.3.2</epics.pvaclient.version>
+            
+    <epics.pvdata.version>6.1.8</epics.pvdata.version>
+            
+    <epics.pvdatabase.version>4.3.1</epics.pvdatabase.version>
+            
+    <epics.gpclient.version>1.0.8</epics.gpclient.version>
+            
+    <epics.gpclient.core.version>1.0.8</epics.gpclient.core.version>
+            
+    <epics.gpclient.sim.version>1.0.8</epics.gpclient.sim.version>
+            
+    <epics.gpclient.loc.version>1.0.8</epics.gpclient.loc.version>
+            
+    <epics.gpclient.pva.version>1.0.8</epics.gpclient.pva.version>
+            
+    <epics.gpclient.ca.version>1.0.8</epics.gpclient.ca.version>
+            
+    <!-- GRPC Service -->
+            
+    <protobuf.version>4.31.1</protobuf.version>
+            
+    <protobuf.nano.version>3.1.0</protobuf.nano.version>
+            
+    <proto.google.commons.version>2.58.0</proto.google.commons.version>
+            
+    <grpc.version>1.62.2</grpc.version>
+            
+    <guava.android.version>32.1.3-android</guava.android.version>
+            
+    <errorprone.version>2.23.0</errorprone.version>
+            
+    <annotations.api.version>6.0.53</annotations.api.version>
+            
+    <failureaccess.version>1.0.1</failureaccess.version>
+            
+    <j2objc.version>2.8</j2objc.version>
+            
+    <jsr305.version>3.0.2</jsr305.version>
+            
+    <okio.version>3.9.0</okio.version>
+            
+    <tomcat.annotation.version>6.0.53</tomcat.annotation.version>
+            
+    <annotation.version>13.0</annotation.version>
+            
+    <kotlin.version>1.9.21</kotlin.version>
+            
+        
+    <!-- IoTDB -->
+            
+    <iotdb.session.version>2.0.7</iotdb.session.version>
+            
+    <tsfile.version>2.2.1</tsfile.version>
+            
+    <lz4.versio>1.3.0</lz4.versio>
+            
+    <thrift.version>0.13.0</thrift.version>
+                 
+    
+  </properties>
+          
   
-    <modules>
-        <module>org.apache.plc4x.merlot.modbus.dev</module>
-        <module>org.apache.plc4x.merlot.modbus.svr</module>
-        <module>org.apache.plc4x.merlot.scheduler</module>
-        <module>org.apache.plc4x.merlot.branding</module>
-        <module>org.apache.plc4x.merlot.uns</module>
-        <module>org.apache.plc4x.merlot.features</module>
-        <module>org.apache.plc4x.merlot.das</module>
-        <module>org.apache.plc4x.merlot.modbus.sim</module>
-        <module>org.apache.plc4x.merlot.db</module>
-        <module>org.apache.plc4x.merlot.das.api</module>
-        <module>org.apache.plc4x.merlot.derby</module>
-        <module>org.apache.plc4x.merlot.h2</module>
-        <module>org.apache.plc4x.merlot.drv.simulated</module>
-        <module>org.apache.plc4x.merlot.das.ref</module>
-        <module>org.apache.plc4x.merlot.grpc</module>
-        <!--  <module>org.apache.plc4x.merlot.ui</module> -->
-        <module>org.apache.plc4x.merlot.drv.s7</module>
-        <module>org.apache.plc4x.merlot.drv.mb</module>
-        <module>org.apache.plc4x.merlot.archiver</module>
-        <module>org.apache.plc4x.merlot</module>        
-    </modules>
-  
+    
+  <modules>
+            
+    <module>org.apache.plc4x.merlot.modbus.dev</module>
+            
+    <module>org.apache.plc4x.merlot.modbus.svr</module>
+            
+    <module>org.apache.plc4x.merlot.scheduler</module>
+            
+    <module>org.apache.plc4x.merlot.branding</module>
+            
+    <module>org.apache.plc4x.merlot.uns</module>
+            
+    <module>org.apache.plc4x.merlot.features</module>
+            
+    <module>org.apache.plc4x.merlot.das</module>
+            
+    <module>org.apache.plc4x.merlot.modbus.sim</module>
+            
+    <module>org.apache.plc4x.merlot.db</module>
+            
+    <module>org.apache.plc4x.merlot.das.api</module>
+            
+    <module>org.apache.plc4x.merlot.derby</module>
+            
+    <module>org.apache.plc4x.merlot.h2</module>
+            
+    <module>org.apache.plc4x.merlot.drv.simulated</module>
+            
+    <module>org.apache.plc4x.merlot.das.ref</module>
+            
+    <module>org.apache.plc4x.merlot.grpc</module>
+            
+    <!--  <module>org.apache.plc4x.merlot.ui</module> -->
+            
+    <module>org.apache.plc4x.merlot.drv.s7</module>
+            
+    <module>org.apache.plc4x.merlot.drv.mb</module>
+            
+    <module>org.apache.plc4x.merlot.archiver</module>
+            
+    <module>org.apache.plc4x.merlot</module>
+            
+      
+    <module>org.apache.plc4x.merlot.kafka</module>
+      
+  </modules>
+    
+
 </project>

Reply via email to