diff --git a/.classpath b/.classpath
index 566accb..20acc62 100644
--- a/.classpath
+++ b/.classpath
@@ -7,5 +7,6 @@
+
diff --git a/bin/de/hottis/MeasurementCollector/DatabaseEngine.class b/bin/de/hottis/MeasurementCollector/DatabaseEngine.class
new file mode 100644
index 0000000..79c084f
Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/DatabaseEngine.class differ
diff --git a/bin/de/hottis/MeasurementCollector/ITriggerable.class b/bin/de/hottis/MeasurementCollector/ITriggerable.class
new file mode 100644
index 0000000..dd0298d
Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/ITriggerable.class differ
diff --git a/bin/de/hottis/MeasurementCollector/MBusParser.class b/bin/de/hottis/MeasurementCollector/MBusParser.class
index 51e651c..8c52d4f 100644
Binary files a/bin/de/hottis/MeasurementCollector/MBusParser.class and b/bin/de/hottis/MeasurementCollector/MBusParser.class differ
diff --git a/bin/de/hottis/MeasurementCollector/MeasurementCollector.class b/bin/de/hottis/MeasurementCollector/MeasurementCollector.class
index 0c74550..103418a 100644
Binary files a/bin/de/hottis/MeasurementCollector/MeasurementCollector.class and b/bin/de/hottis/MeasurementCollector/MeasurementCollector.class differ
diff --git a/bin/de/hottis/MeasurementCollector/TriggerTimer.class b/bin/de/hottis/MeasurementCollector/TriggerTimer.class
new file mode 100644
index 0000000..ed194f6
Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/TriggerTimer.class differ
diff --git a/bin/log4j2.xml b/bin/log4j2.xml
index 0566786..09cd5cf 100644
--- a/bin/log4j2.xml
+++ b/bin/log4j2.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/libraries/mysql-connector-java-5.1.44-bin.jar b/libraries/mysql-connector-java-5.1.44-bin.jar
new file mode 100644
index 0000000..2f2e32d
Binary files /dev/null and b/libraries/mysql-connector-java-5.1.44-bin.jar differ
diff --git a/src/de/hottis/MeasurementCollector/DatabaseEngine.java b/src/de/hottis/MeasurementCollector/DatabaseEngine.java
new file mode 100644
index 0000000..267783e
--- /dev/null
+++ b/src/de/hottis/MeasurementCollector/DatabaseEngine.java
@@ -0,0 +1,80 @@
+package de.hottis.MeasurementCollector;
+
+import java.util.List;
+import java.util.Properties;
+import java.util.Timer;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class DatabaseEngine extends Thread implements ITriggerable {
+ final protected Logger logger = LogManager.getRootLogger();
+
+ private Properties config;
+ private DataObjectQueue queue;
+ private boolean stop;
+ private boolean triggerFlag;
+ private Timer timer;
+
+ public DatabaseEngine(Properties config, DataObjectQueue queue) {
+ super("MeasurementCollector.DatabaseEngine");
+ this.config = config;
+ this.queue = queue;
+ this.stop = false;
+ this.triggerFlag = false;
+ }
+
+ public void requestShutdown() {
+ logger.info("Shutdown of database engine requested");
+ this.stop = true;
+ try {
+ this.join();
+ logger.info("Database engine is down");
+ } catch (InterruptedException e) {
+ logger.error("Waiting for shutdown of database engine interrupted");
+ }
+ }
+
+ public synchronized void trigger() {
+ logger.debug("DatabaseEngine triggered");
+ triggerFlag = true;
+ notify();
+ }
+
+ public void init() {
+ timer = new Timer("DatabaseEngineTrigger");
+ timer.schedule(new TriggerTimer(this), 0, 60 * 1000);
+ }
+
+ @Override
+ public synchronized void run() {
+ while (! stop) {
+ logger.debug("DatabaseEngine is about to wait");
+ while (! triggerFlag) {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ }
+ }
+ triggerFlag = false;
+ logger.debug("DatabaseEngine has received trigger");
+
+ try {
+ while (true) {
+ List adol = queue.peek();
+ if (adol == null) {
+ break;
+ }
+
+ for (ADataObject ado : adol) {
+ logger.debug(ado);
+ }
+
+ queue.remove(adol);
+ }
+ } catch (Exception e) {
+ logger.error("Exception in outer database engine loop", e);
+ }
+ }
+ }
+}
diff --git a/src/de/hottis/MeasurementCollector/ITriggerable.java b/src/de/hottis/MeasurementCollector/ITriggerable.java
new file mode 100644
index 0000000..dcca883
--- /dev/null
+++ b/src/de/hottis/MeasurementCollector/ITriggerable.java
@@ -0,0 +1,5 @@
+package de.hottis.MeasurementCollector;
+
+public interface ITriggerable {
+ public void trigger();
+}
diff --git a/src/de/hottis/MeasurementCollector/MBusParser.java b/src/de/hottis/MeasurementCollector/MBusParser.java
index 529b41f..c08fd77 100644
--- a/src/de/hottis/MeasurementCollector/MBusParser.java
+++ b/src/de/hottis/MeasurementCollector/MBusParser.java
@@ -81,12 +81,12 @@ public class MBusParser extends AMessageParser {
if (dataParsers.containsKey(name)) {
List measurementItems = dataParsers.get(name).parse(timestamp, dataRecords);
- for (ADataObject ado : measurementItems) {
- logger.debug(ado);
- }
+ //for (ADataObject ado : measurementItems) {
+ // logger.debug(ado);
+ //}
queue.add(measurementItems);
- logger.debug("Queue size: " + queue.size());
+ //logger.debug("Queue size: " + queue.size());
} else {
logger.warn("unknown name: " + name);
}
diff --git a/src/de/hottis/MeasurementCollector/MeasurementCollector.java b/src/de/hottis/MeasurementCollector/MeasurementCollector.java
index 8feeaee..22dcac2 100644
--- a/src/de/hottis/MeasurementCollector/MeasurementCollector.java
+++ b/src/de/hottis/MeasurementCollector/MeasurementCollector.java
@@ -16,17 +16,24 @@ public class MeasurementCollector {
final Properties config = new Properties();
config.load(MeasurementCollector.class.getClassLoader().getResourceAsStream(PROPS_FILENAME));
-
+ logger.debug("Configuration loaded");
MqttReceiver mqttReceiver = new MqttReceiver(config);
mqttReceiver.connect();
-
+ logger.debug("MqttReceiver started");
+
DataObjectQueue queue = new DataObjectQueue();
+ logger.debug("Queue instantiated");
MBusParser mbusParser = new MBusParser(config, queue);
mbusParser.registerConfiguredDataParsers();
mqttReceiver.registerParser(mbusParser);
+ logger.debug("MBusParser started");
+ DatabaseEngine databaseEngine = new DatabaseEngine(config, queue);
+ databaseEngine.init();
+ databaseEngine.start();
+ logger.debug("DatabaseEngine started");
}
}
diff --git a/src/de/hottis/MeasurementCollector/TriggerTimer.java b/src/de/hottis/MeasurementCollector/TriggerTimer.java
new file mode 100644
index 0000000..926b6e1
--- /dev/null
+++ b/src/de/hottis/MeasurementCollector/TriggerTimer.java
@@ -0,0 +1,15 @@
+package de.hottis.MeasurementCollector;
+
+import java.util.TimerTask;
+
+public class TriggerTimer extends TimerTask {
+ private ITriggerable triggerable;
+
+ public TriggerTimer(ITriggerable triggerable) {
+ this.triggerable = triggerable;
+ }
+
+ public void run() {
+ triggerable.trigger();
+ }
+}
diff --git a/src/log4j2.xml b/src/log4j2.xml
index 0566786..09cd5cf 100644
--- a/src/log4j2.xml
+++ b/src/log4j2.xml
@@ -2,7 +2,7 @@
-
+