From 86d51916011a32fe322a40234372f68b8346c45d Mon Sep 17 00:00:00 2001 From: LO Kam Tao Leo Date: Thu, 17 Feb 2022 11:04:12 +0000 Subject: [PATCH] Skeleton --- .classpath | 20 ++++++ .gitignore | 3 + .project | 23 ++++++ .settings/org.eclipse.jdt.core.prefs | 13 ++++ .settings/org.eclipse.m2e.core.prefs | 4 ++ pom.xml | 55 ++++++++++++++ src/log4j2.xml | 14 ++++ src/org/leolo/rail/ConfigurationManager.java | 64 +++++++++++++++++ src/org/leolo/rail/Constants.java | 11 +++ src/org/leolo/rail/DatabaseManager.java | 103 +++++++++++++++++++++++++++ src/org/leolo/rail/NRDataDamon.java | 34 +++++++++ src/org/leolo/rail/package-info.java | 8 +++ 12 files changed, 352 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 pom.xml create mode 100644 src/log4j2.xml create mode 100644 src/org/leolo/rail/ConfigurationManager.java create mode 100644 src/org/leolo/rail/Constants.java create mode 100644 src/org/leolo/rail/DatabaseManager.java create mode 100644 src/org/leolo/rail/NRDataDamon.java create mode 100644 src/org/leolo/rail/package-info.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..ef141e6 --- /dev/null +++ b/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f16ab4c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin/ +/target/ +configuration.properties diff --git a/.project b/.project new file mode 100644 index 0000000..5f20488 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + nr data damon + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8445b6b --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,13 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0e19efe --- /dev/null +++ b/pom.xml @@ -0,0 +1,55 @@ + + 4.0.0 + org.leolo.rail + nr-data-damon + 0.0.1-SNAPSHOT + + src + + + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + + + + + org.mariadb.jdbc + mariadb-java-client + 2.7.2 + + + org.json + json + 20210307 + + + org.apache.logging.log4j + log4j-core + 2.13.3 + + + org.apache.logging.log4j + log4j-api + 2.13.3 + + + org.quartz-scheduler + quartz + 2.3.2 + + + org.apache.activemq + activemq-stomp + 5.16.4 + + + + \ No newline at end of file diff --git a/src/log4j2.xml b/src/log4j2.xml new file mode 100644 index 0000000..6e6f5f9 --- /dev/null +++ b/src/log4j2.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/leolo/rail/ConfigurationManager.java b/src/org/leolo/rail/ConfigurationManager.java new file mode 100644 index 0000000..71957d4 --- /dev/null +++ b/src/org/leolo/rail/ConfigurationManager.java @@ -0,0 +1,64 @@ +package org.leolo.rail; + + +import java.io.FileReader; +import java.io.IOException; +import java.util.Properties; +import java.util.function.BiConsumer; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ConfigurationManager { + private static Logger log = LogManager.getLogger(ConfigurationManager.class); + + private static ConfigurationManager instance; + private Properties prop = new Properties(); + + public synchronized static ConfigurationManager getInstance() { + if(instance==null) { + instance = new ConfigurationManager(); + } + return instance; + } + + private ConfigurationManager() { + try(FileReader fr = new FileReader("configuration.properties")){ + log.debug("Loading properties file"); + prop.load(fr); + log.info("{} entries loaded", prop.size()); + }catch(IOException e) { + log.fatal(e.getMessage(), e); + System.exit(1); + } + + } + + public void forEach(BiConsumer action) { + prop.forEach(action); + } + + public Object get(Object key) { + return prop.get(key); + } + + public Object getOrDefault(Object key, Object defaultValue) { + return prop.getOrDefault(key, defaultValue); + } + + public String getProperty(String key, String defaultValue) { + return prop.getProperty(key, defaultValue); + } + + public String getProperty(String key) { + return prop.getProperty(key); + } + + public int size() { + return prop.size(); + } + + public boolean containsKey(Object key) { + return prop.containsKey(key); + } +} diff --git a/src/org/leolo/rail/Constants.java b/src/org/leolo/rail/Constants.java new file mode 100644 index 0000000..313a88f --- /dev/null +++ b/src/org/leolo/rail/Constants.java @@ -0,0 +1,11 @@ +package org.leolo.rail; + +public class Constants { + + public static class NetworkRail{ + + public static final String TOPIC_NAME_VTSP = "VSTP_ALL"; + + } + +} diff --git a/src/org/leolo/rail/DatabaseManager.java b/src/org/leolo/rail/DatabaseManager.java new file mode 100644 index 0000000..719a979 --- /dev/null +++ b/src/org/leolo/rail/DatabaseManager.java @@ -0,0 +1,103 @@ +package org.leolo.rail; + + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import javax.sql.XAConnection; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.mariadb.jdbc.MariaDbPoolDataSource; + +public class DatabaseManager { + + private static Logger log = LogManager.getLogger(DatabaseManager.class); + + private static DatabaseManager instance; + + private MariaDbPoolDataSource ds; + + public synchronized static DatabaseManager getInstance() { + if(instance==null) { + instance = new DatabaseManager(); + } + return instance; + } + + private DatabaseManager() { + ConfigurationManager cm = ConfigurationManager.getInstance(); + if( + !cm.containsKey("db.host")|| + !cm.containsKey("db.user")|| + !cm.containsKey("db.pwd")|| + !cm.containsKey("db.name") + ) { + log.fatal("Missing required property"); + System.exit(1); + } + String url = "jdbc:mariadb://"+cm.getProperty("db.host")+ + ":"+cm.getProperty("db.port", "3306")+ + "/"+cm.getProperty("db.name"); + log.info("Connecting to DB {} as {}", url, cm.get("db.user")); + try { + ds = new MariaDbPoolDataSource(url); + ds.setMaxPoolSize(Integer.parseInt(cm.getOrDefault("db.poolsize", "20").toString())); + ds.setUser(cm.getProperty("db.user").toString()); + ds.setPassword(cm.getProperty("db.pwd").toString()); + } catch (SQLException e) { + log.fatal("Cannot connect to DB",e); + System.exit(-2); + } + } + + public boolean testPool() { + try(Connection conn = ds.getConnection()){ + try(Statement stmt = conn.createStatement()){ + try (ResultSet rs = stmt.executeQuery("SELECT CONNECTION_ID()")){ + if(rs.next()) { + log.debug("Connection ID: {}", rs.getString(1)); + } + } + } + } catch (SQLException e) { + log.warn("Exception when testing the connection., e"); + return false; + } + return true; + } + + public Connection getConnection() throws SQLException { + Connection conn = ds.getConnection(); + conn.setAutoCommit(false); + return conn; + } + + public XAConnection getXAConnection() throws SQLException { + XAConnection conn = ds.getXAConnection(); + return conn; + } + + @Deprecated + public void clear() { + try( + Connection conn = getConnection(); + Statement stmt = conn.createStatement(); + ){ + stmt.execute("TRUNCATE TABLE train_assoc"); + stmt.execute("TRUNCATE TABLE tiploc"); + stmt.execute("TRUNCATE TABLE train_schedule"); + stmt.execute("TRUNCATE TABLE train_schedule_detail"); + stmt.execute("TRUNCATE TABLE train_schedule_location"); + stmt.execute("TRUNCATE TABLE train_error"); + }catch(SQLException e) { + log.error(e.getMessage(), e); + } + } + + public void shutdown() { + ds.close(); + } +} diff --git a/src/org/leolo/rail/NRDataDamon.java b/src/org/leolo/rail/NRDataDamon.java new file mode 100644 index 0000000..d2dab9c --- /dev/null +++ b/src/org/leolo/rail/NRDataDamon.java @@ -0,0 +1,34 @@ +package org.leolo.rail; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.impl.StdSchedulerFactory; + +public class NRDataDamon { + + private Logger log = LogManager.getLogger(getClass()); + + public static void main(String [] args) { + Logger log = LogManager.getLogger(NRDataDamon.class); + ConfigurationManager.getInstance().forEach((k,v)->{ + if(k.toString().endsWith(".pwd")) { + log.info("{} : {}", k , "****"); + }else { + log.info("{} : {}", k, v); + } + }); + log.info("Opening database connection"); + DatabaseManager.getInstance().testPool(); + log.info("Database connected"); + try { + Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); + scheduler.start(); + } catch (SchedulerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +} diff --git a/src/org/leolo/rail/package-info.java b/src/org/leolo/rail/package-info.java new file mode 100644 index 0000000..a8138fb --- /dev/null +++ b/src/org/leolo/rail/package-info.java @@ -0,0 +1,8 @@ +/** + * + */ +/** + * @author user + * + */ +package org.leolo.rail; \ No newline at end of file