diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index f459347..18edb97 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -43,11 +43,10 @@ jobs:
# libmeos is already built and installed under /usr/local by the
# provision-meos action, so build-jmeos.sh skips its own libmeos build
# and only builds the JMEOS jar from JMEOS main, installs it into the
- # local Maven repo, and stages libmeos.so under kafka-streams-app/lib.
+ # local Maven repo, and stages libmeos.so under the reactor-root lib/.
run: JOBS=2 ./build-jmeos.sh
- name: Test the Kafka Streams app
# The generated MeosOps* facades forward to the installed JMEOS jar; the tests
# exercise them against the freshly built libmeos, resolved via LD_LIBRARY_PATH.
- working-directory: kafka-streams-app
run: LD_LIBRARY_PATH="$PWD/lib" mvn -B test
diff --git a/.gitignore b/.gitignore
index b498157..d88fedd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,8 +7,8 @@ tools/meos-idl.json
# JMEOS native dependency — generated by build-jmeos.sh, never committed
.build-jmeos/
-kafka-streams-app/jar/
-kafka-streams-app/lib/
+jar/
+lib/
*.jar
*.so
diff --git a/kafka-streams-app/docs/benchmark.md b/benchmark/docs/benchmark.md
similarity index 100%
rename from kafka-streams-app/docs/benchmark.md
rename to benchmark/docs/benchmark.md
diff --git a/benchmark/pom.xml b/benchmark/pom.xml
new file mode 100644
index 0000000..56d90ac
--- /dev/null
+++ b/benchmark/pom.xml
@@ -0,0 +1,131 @@
+
+
+ 4.0.0
+
+
+ com.mobilitydb.kafka
+ mobility-kafka-parent
+ 1.0-SNAPSHOT
+
+
+ mobility-kafka-benchmark
+
+
+
+
+
+ com.mobilitydb.kafka
+ mobility-kafka-binding
+ ${project.version}
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ org.slf4j
+ slf4j-simple
+ ${slf4j.version}
+
+
+
+ org.apache.kafka
+ kafka-streams-test-utils
+ ${kafka.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit.version}
+ test
+
+
+
+
+ org.apache.kafka
+ kafka_2.13
+ ${kafka.version}
+ test
+
+
+ org.apache.kafka
+ kafka_2.13
+ ${kafka.version}
+ test-jartesttest
+
+
+ org.apache.kafka
+ kafka-streams
+ ${kafka.version}
+ test-jartesttest
+
+
+ org.apache.kafka
+ kafka-clients
+ ${kafka.version}
+ test-jartesttest
+
+
+ org.apache.kafka
+ kafka-server-common
+ ${kafka.version}
+ test-jartesttest
+
+
+ org.hamcrest
+ hamcrest
+ 2.2
+ test
+
+
+
+
+
+
+ maven-shade-plugin
+ 3.5.1
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+ *:*
+
+ META-INF/*.SF
+ META-INF/*.DSA
+ META-INF/*.RSA
+
+
+
+
+
+
+
+
+
+
diff --git a/kafka-streams-app/src/main/java/berlinmod/BerlinMODCorpus.java b/benchmark/src/main/java/berlinmod/BerlinMODCorpus.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/BerlinMODCorpus.java
rename to benchmark/src/main/java/berlinmod/BerlinMODCorpus.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/BerlinMODTopology.java b/benchmark/src/main/java/berlinmod/BerlinMODTopology.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/BerlinMODTopology.java
rename to benchmark/src/main/java/berlinmod/BerlinMODTopology.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/BerlinMODTrip.java b/benchmark/src/main/java/berlinmod/BerlinMODTrip.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/BerlinMODTrip.java
rename to benchmark/src/main/java/berlinmod/BerlinMODTrip.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/BerlinMODTripSerde.java b/benchmark/src/main/java/berlinmod/BerlinMODTripSerde.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/BerlinMODTripSerde.java
rename to benchmark/src/main/java/berlinmod/BerlinMODTripSerde.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Haversine.java b/benchmark/src/main/java/berlinmod/Haversine.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Haversine.java
rename to benchmark/src/main/java/berlinmod/Haversine.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/MEOSBridge.java b/benchmark/src/main/java/berlinmod/MEOSBridge.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/MEOSBridge.java
rename to benchmark/src/main/java/berlinmod/MEOSBridge.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/PointOfInterest.java b/benchmark/src/main/java/berlinmod/PointOfInterest.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/PointOfInterest.java
rename to benchmark/src/main/java/berlinmod/PointOfInterest.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q1ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q1ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q1ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q1ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q1SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q1SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q1SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q1SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q1WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q1WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q1WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q1WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q2ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q2ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q2ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q2ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q2SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q2SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q2SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q2SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q2WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q2WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q2WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q2WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q3ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q3ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q3ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q3ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q3SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q3SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q3SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q3SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q3WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q3WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q3WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q3WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q4ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q4ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q4ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q4ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q4SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q4SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q4SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q4SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q4WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q4WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q4WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q4WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q5ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q5ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q5ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q5ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q5SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q5SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q5SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q5SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q5WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q5WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q5WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q5WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q6ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q6ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q6ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q6ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q6SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q6SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q6SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q6SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q6WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q6WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q6WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q6WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q7ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q7ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q7ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q7ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q7SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q7SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q7SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q7SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q7WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q7WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q7WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q7WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q8ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q8ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q8ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q8ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q8SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q8SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q8SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q8SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q8WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q8WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q8WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q8WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q9ContinuousProcessor.java b/benchmark/src/main/java/berlinmod/Q9ContinuousProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q9ContinuousProcessor.java
rename to benchmark/src/main/java/berlinmod/Q9ContinuousProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q9SnapshotProcessor.java b/benchmark/src/main/java/berlinmod/Q9SnapshotProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q9SnapshotProcessor.java
rename to benchmark/src/main/java/berlinmod/Q9SnapshotProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/Q9WindowedProcessor.java b/benchmark/src/main/java/berlinmod/Q9WindowedProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/Q9WindowedProcessor.java
rename to benchmark/src/main/java/berlinmod/Q9WindowedProcessor.java
diff --git a/kafka-streams-app/src/main/java/berlinmod/SegmentDistance.java b/benchmark/src/main/java/berlinmod/SegmentDistance.java
similarity index 100%
rename from kafka-streams-app/src/main/java/berlinmod/SegmentDistance.java
rename to benchmark/src/main/java/berlinmod/SegmentDistance.java
diff --git a/kafka-streams-app/src/main/resources/log4j.properties b/benchmark/src/main/resources/log4j.properties
similarity index 100%
rename from kafka-streams-app/src/main/resources/log4j.properties
rename to benchmark/src/main/resources/log4j.properties
diff --git a/kafka-streams-app/src/test/java/berlinmod/BerlinMODBenchmark.java b/benchmark/src/test/java/berlinmod/BerlinMODBenchmark.java
similarity index 100%
rename from kafka-streams-app/src/test/java/berlinmod/BerlinMODBenchmark.java
rename to benchmark/src/test/java/berlinmod/BerlinMODBenchmark.java
diff --git a/kafka-streams-app/src/test/java/berlinmod/BerlinMODFullMatrixTest.java b/benchmark/src/test/java/berlinmod/BerlinMODFullMatrixTest.java
similarity index 100%
rename from kafka-streams-app/src/test/java/berlinmod/BerlinMODFullMatrixTest.java
rename to benchmark/src/test/java/berlinmod/BerlinMODFullMatrixTest.java
diff --git a/kafka-streams-app/src/test/java/berlinmod/BerlinMODSetSetJoinTest.java b/benchmark/src/test/java/berlinmod/BerlinMODSetSetJoinTest.java
similarity index 100%
rename from kafka-streams-app/src/test/java/berlinmod/BerlinMODSetSetJoinTest.java
rename to benchmark/src/test/java/berlinmod/BerlinMODSetSetJoinTest.java
diff --git a/kafka-streams-app/src/test/java/berlinmod/EmbeddedBrokerBenchmark.java b/benchmark/src/test/java/berlinmod/EmbeddedBrokerBenchmark.java
similarity index 100%
rename from kafka-streams-app/src/test/java/berlinmod/EmbeddedBrokerBenchmark.java
rename to benchmark/src/test/java/berlinmod/EmbeddedBrokerBenchmark.java
diff --git a/kafka-streams-app/src/test/resources/berlinmod_sample.csv b/benchmark/src/test/resources/berlinmod_sample.csv
similarity index 100%
rename from kafka-streams-app/src/test/resources/berlinmod_sample.csv
rename to benchmark/src/test/resources/berlinmod_sample.csv
diff --git a/binding/pom.xml b/binding/pom.xml
new file mode 100644
index 0000000..915db5d
--- /dev/null
+++ b/binding/pom.xml
@@ -0,0 +1,117 @@
+
+
+ 4.0.0
+
+
+ com.mobilitydb.kafka
+ mobility-kafka-parent
+ 1.0-SNAPSHOT
+
+
+ mobility-kafka-binding
+
+
+
+
+
+ com.mobilitydb
+ jmeos
+ ${jmeos.version}
+
+
+ com.github.jnr
+ jnr-ffi
+ ${jnr.version}
+
+
+ org.apache.kafka
+ kafka-streams
+ ${kafka.version}
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+
+ org.slf4j
+ slf4j-simple
+ ${slf4j.version}
+ test
+
+
+ org.apache.kafka
+ kafka-streams-test-utils
+ ${kafka.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit.version}
+ test
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+
+ generate-facades
+ generate-sources
+ exec
+
+ python3
+
+ ${project.basedir}/../tools/codegen_jvm.py
+ --engine
+ kafka
+ --catalog
+ ${project.basedir}/../tools/meos-idl.json
+ --jar
+ ${settings.localRepository}/com/mobilitydb/jmeos/${jmeos.version}/jmeos-${jmeos.version}.jar
+ --out
+ ${project.build.directory}/generated-facades
+
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 3.5.0
+
+
+ add-generated-facades
+ generate-sources
+ add-source
+
+
+ ${project.build.directory}/generated-facades/src/main/java
+
+
+
+
+
+
+
+
diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosBoundedStateProcessor.java b/binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosBoundedStateProcessor.java
similarity index 100%
rename from kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosBoundedStateProcessor.java
rename to binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosBoundedStateProcessor.java
diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosCrossStreamJoiner.java b/binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosCrossStreamJoiner.java
similarity index 100%
rename from kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosCrossStreamJoiner.java
rename to binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosCrossStreamJoiner.java
diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosOpsRuntime.java b/binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosOpsRuntime.java
similarity index 100%
rename from kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosOpsRuntime.java
rename to binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosOpsRuntime.java
diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosStatelessOps.java b/binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosStatelessOps.java
similarity index 100%
rename from kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosStatelessOps.java
rename to binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosStatelessOps.java
diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosWindowedAggregator.java b/binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosWindowedAggregator.java
similarity index 100%
rename from kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosWindowedAggregator.java
rename to binding/src/main/java/org/mobilitydb/kafka/meos/wirings/MeosWindowedAggregator.java
diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/README.md b/binding/src/main/java/org/mobilitydb/kafka/meos/wirings/README.md
similarity index 100%
rename from kafka-streams-app/src/main/java/org/mobilitydb/kafka/meos/wirings/README.md
rename to binding/src/main/java/org/mobilitydb/kafka/meos/wirings/README.md
diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosSetSetJoin.java b/binding/src/main/java/org/mobilitydb/meos/MeosSetSetJoin.java
similarity index 100%
rename from kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosSetSetJoin.java
rename to binding/src/main/java/org/mobilitydb/meos/MeosSetSetJoin.java
diff --git a/kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/MeosCbufferSmokeTest.java b/binding/src/test/java/org/mobilitydb/kafka/meos/MeosCbufferSmokeTest.java
similarity index 100%
rename from kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/MeosCbufferSmokeTest.java
rename to binding/src/test/java/org/mobilitydb/kafka/meos/MeosCbufferSmokeTest.java
diff --git a/kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/MeosFacadeSmokeTest.java b/binding/src/test/java/org/mobilitydb/kafka/meos/MeosFacadeSmokeTest.java
similarity index 100%
rename from kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/MeosFacadeSmokeTest.java
rename to binding/src/test/java/org/mobilitydb/kafka/meos/MeosFacadeSmokeTest.java
diff --git a/kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/MeosNpointSmokeTest.java b/binding/src/test/java/org/mobilitydb/kafka/meos/MeosNpointSmokeTest.java
similarity index 100%
rename from kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/MeosNpointSmokeTest.java
rename to binding/src/test/java/org/mobilitydb/kafka/meos/MeosNpointSmokeTest.java
diff --git a/kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/MeosPoseSmokeTest.java b/binding/src/test/java/org/mobilitydb/kafka/meos/MeosPoseSmokeTest.java
similarity index 100%
rename from kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/MeosPoseSmokeTest.java
rename to binding/src/test/java/org/mobilitydb/kafka/meos/MeosPoseSmokeTest.java
diff --git a/kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/wirings/demo/MeosWiringsDemoTopology.java b/binding/src/test/java/org/mobilitydb/kafka/meos/wirings/demo/MeosWiringsDemoTopology.java
similarity index 100%
rename from kafka-streams-app/src/test/java/org/mobilitydb/kafka/meos/wirings/demo/MeosWiringsDemoTopology.java
rename to binding/src/test/java/org/mobilitydb/kafka/meos/wirings/demo/MeosWiringsDemoTopology.java
diff --git a/build-jmeos.sh b/build-jmeos.sh
index 9865ab2..6c7cd9e 100755
--- a/build-jmeos.sh
+++ b/build-jmeos.sh
@@ -17,10 +17,10 @@
# 3. Registers the jar in the local Maven repository via
# `mvn install:install-file` under the coordinates the kafka-streams-app
# pom depends on (com.mobilitydb:jmeos:1.4.0 by default).
-# 4. Copies libmeos.so into kafka-streams-app/lib/ for the test/runtime
+# 4. Copies libmeos.so into the reactor-root lib/ for the test/runtime
# LD_LIBRARY_PATH.
#
-# After running this once, `cd kafka-streams-app && mvn test` resolves JMEOS as
+# After running this once, `mvn test` resolves JMEOS as
# an ordinary dependency — no committed jar/so required.
#
# The refs below track upstream MobilityDB master and MobilityDB/JMEOS main — the
@@ -51,7 +51,7 @@ JMEOS_VERSION="${JMEOS_VERSION:-1.4.0}"
# Layout.
# ---------------------------------------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-APP_DIR="${SCRIPT_DIR}/kafka-streams-app"
+APP_DIR="${SCRIPT_DIR}"
WORK_DIR="${WORK_DIR:-${SCRIPT_DIR}/.build-jmeos}"
JOBS="${JOBS:-$(nproc 2>/dev/null || echo 4)}"
diff --git a/kafka-streams-app/pom.xml b/kafka-streams-app/pom.xml
deleted file mode 100644
index 8bcf69a..0000000
--- a/kafka-streams-app/pom.xml
+++ /dev/null
@@ -1,222 +0,0 @@
-
-
- 4.0.0
-
- com.mobilitydb.kafka
- mobility-kafka-streams
- 1.0-SNAPSHOT
-
-
- 21
- 21
- UTF-8
- 3.6.0
- 2.18.2
- 2.0.16
- 5.11.4
- true
- ${project.basedir}/lib
-
-
-
-
-
- com.mobilitydb
- jmeos
- 1.4.0
-
-
- com.github.jnr
- jnr-ffi
- 2.1.10
-
-
- org.apache.kafka
- kafka-streams
- ${kafka.version}
-
-
-
- org.apache.kafka
- kafka-streams-test-utils
- ${kafka.version}
- test
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
-
-
-
- org.slf4j
- slf4j-api
- ${slf4j.version}
-
-
- org.slf4j
- slf4j-simple
- ${slf4j.version}
-
-
-
- org.junit.jupiter
- junit-jupiter-api
- ${junit.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-engine
- ${junit.version}
- test
-
-
-
-
- org.apache.kafka
- kafka_2.13
- ${kafka.version}
- test
-
-
- org.apache.kafka
- kafka_2.13
- ${kafka.version}
- test-jartesttest
-
-
- org.apache.kafka
- kafka-streams
- ${kafka.version}
- test-jartesttest
-
-
- org.apache.kafka
- kafka-clients
- ${kafka.version}
- test-jartesttest
-
-
- org.apache.kafka
- kafka-server-common
- ${kafka.version}
- test-jartesttest
-
-
- org.hamcrest
- hamcrest
- 2.2
- test
-
-
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
- 3.1.0
-
-
- generate-facades
- generate-sources
- exec
-
- python3
-
- ${project.basedir}/../tools/codegen_jvm.py
- --engine
- kafka
- --catalog
- ${project.basedir}/../tools/meos-idl.json
- --jar
- ${settings.localRepository}/com/mobilitydb/jmeos/1.4.0/jmeos-1.4.0.jar
- --out
- ${project.build.directory}/generated-facades
-
-
-
-
-
-
- org.codehaus.mojo
- build-helper-maven-plugin
- 3.5.0
-
-
- add-generated-facades
- generate-sources
- add-source
-
-
- ${project.build.directory}/generated-facades/src/main/java
-
-
-
-
-
-
- maven-compiler-plugin
- 3.12.1
-
- ${maven.compiler.source}
- ${maven.compiler.target}
-
-
-
- maven-surefire-plugin
- 3.2.5
-
- false
-
- ${meos.enabled}
-
-
- ${meos.lib.dir}
-
- --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
-
-
-
- maven-shade-plugin
- 3.5.1
-
-
- package
-
- shade
-
-
- false
-
-
-
-
-
- *:*
-
- META-INF/*.SF
- META-INF/*.DSA
- META-INF/*.RSA
-
-
-
-
-
-
-
-
-
-
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..5817910
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,63 @@
+
+
+ 4.0.0
+
+ com.mobilitydb.kafka
+ mobility-kafka-parent
+ 1.0-SNAPSHOT
+ pom
+
+
+ binding
+ benchmark
+
+
+
+ 21
+ 21
+ UTF-8
+ 3.6.0
+ 2.18.2
+ 2.0.16
+ 5.11.4
+ 1.4.0
+ 2.1.10
+ true
+
+ ${maven.multiModuleProjectDirectory}/lib
+
+
+
+
+
+
+ maven-compiler-plugin
+ 3.12.1
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+ maven-surefire-plugin
+ 3.2.5
+
+ false
+
+ ${meos.enabled}
+
+
+ ${meos.lib.dir}
+
+ --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
+
+
+
+
+
+