[jdbc] Upgrade derby from 10.12.1.1 to 10.14.2.0 (#13038)
* Use derby instead of derbyclient, fix bnd optional package imports * Update versions add dynamic package import for custom JDBC drivers * Prevent redundant null check warnings Signed-off-by: Wouter Born <github@maindrain.net>
This commit is contained in:
parent
4e69e17f41
commit
97956d30e9
|
@ -9,7 +9,7 @@ The following databases are currently supported and tested:
|
||||||
|
|
||||||
| Database | Tested Driver / Version |
|
| Database | Tested Driver / Version |
|
||||||
| -------------------------------------------- | ------------------------------------------------------------ |
|
| -------------------------------------------- | ------------------------------------------------------------ |
|
||||||
| [Apache Derby](https://db.apache.org/derby/) | [derby-10.12.1.1.jar](https://mvnrepository.com/artifact/org.apache.derby/derby) |
|
| [Apache Derby](https://db.apache.org/derby/) | [derby-10.14.2.0.jar](https://mvnrepository.com/artifact/org.apache.derby/derby) |
|
||||||
| [H2](https://www.h2database.com/) | [h2-1.4.191.jar](https://mvnrepository.com/artifact/com.h2database/h2) |
|
| [H2](https://www.h2database.com/) | [h2-1.4.191.jar](https://mvnrepository.com/artifact/com.h2database/h2) |
|
||||||
| [HSQLDB](http://hsqldb.org/) | [hsqldb-2.3.3.jar](https://mvnrepository.com/artifact/org.hsqldb/hsqldb) |
|
| [HSQLDB](http://hsqldb.org/) | [hsqldb-2.3.3.jar](https://mvnrepository.com/artifact/org.hsqldb/hsqldb) |
|
||||||
| [MariaDB](https://mariadb.org/) | [mariadb-java-client-1.4.6.jar](https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client) |
|
| [MariaDB](https://mariadb.org/) | [mariadb-java-client-1.4.6.jar](https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client) |
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
<name>openHAB Add-ons :: Bundles :: Persistence Service :: JDBC</name>
|
<name>openHAB Add-ons :: Bundles :: Persistence Service :: JDBC</name>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<bnd.importpackage>!org.osgi.service.jdbc.*,!sun.security.*,!org.apache.lucene.*,!org.apache.logging.log4j,!waffle.windows.auth.*,!org.hibernate.*,!org.jboss.*,!org.codehaus.groovy.*,!com.codahale.metrics.*,!com.google.protobuf.*,!com.ibm.icu.*,!com.ibm.jvm.*,!com.mchange.*,!com.sun.*,!com.vividsolutions.*,!io.prometheus.*,com.mysql.jdbc;resolution:=optional,org.apache.derby.*;resolution:=optional,org.h2;resolution:=optional,org.h2.jdbcx;resolution:=optional,org.hsqldb;resolution:=optional,org.hsqldb.jdbc;resolution:=optional,org.mariadb.jdbc;resolution:=optional,org.postgresql;resolution:=optional,org.sqlite;resolution:=optional,org.sqlite.jdbc4;resolution:=optional,javassist*;resolution:=optional</bnd.importpackage>
|
<bnd.importpackage>!org.osgi.service.jdbc.*,!sun.security.*,!org.apache.lucene.*,!org.apache.logging.log4j,!waffle.windows.auth.*,!org.hibernate.*,!org.jboss.*,!org.codehaus.groovy.*,!com.codahale.metrics.*,!com.google.protobuf.*,!com.ibm.icu.*,!com.ibm.jvm.*,!com.mchange.*,!com.sun.*,!com.vividsolutions.*,!io.prometheus.*,com.mysql.*;resolution:=optional,org.apache.derby.*;resolution:=optional,org.h2.*;resolution:=optional,org.hsqldb;resolution:=optional,org.hsqldb.jdbc;resolution:=optional,org.mariadb.*;resolution:=optional,org.postgresql.*;resolution:=optional,org.sqlite;resolution:=optional,org.sqlite.jdbc4;resolution:=optional,javassist*;resolution:=optional</bnd.importpackage>
|
||||||
<dep.noembedding>derby,h2,hsqldb,mariadb-java-client,mysql-connector-java,postgresql,sqlite-jdbc</dep.noembedding>
|
<dep.noembedding>derby,h2,hsqldb,mariadb-java-client,mysql-connector-java,postgresql,sqlite-jdbc</dep.noembedding>
|
||||||
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
<yank.version>3.2.0</yank.version>
|
<yank.version>3.2.0</yank.version>
|
||||||
|
|
||||||
<!-- JDBC database driver versions -->
|
<!-- JDBC database driver versions -->
|
||||||
<derby.version>10.12.1.1</derby.version>
|
<derby.version>10.14.2.0</derby.version>
|
||||||
<h2.version>1.4.191</h2.version>
|
<h2.version>1.4.191</h2.version>
|
||||||
<hsqldb.version>2.3.3</hsqldb.version>
|
<hsqldb.version>2.3.3</hsqldb.version>
|
||||||
<mariadb.version>1.4.6</mariadb.version>
|
<mariadb.version>1.4.6</mariadb.version>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<feature name="openhab-persistence-jdbc-derby" description="JDBC Persistence Apache Derby" version="${project.version}">
|
<feature name="openhab-persistence-jdbc-derby" description="JDBC Persistence Apache Derby" version="${project.version}">
|
||||||
<configfile finalname="${openhab.conf}/services/jdbc.cfg" override="false">mvn:org.openhab.addons.features.karaf/org.openhab.addons.features.karaf.openhab-addons-external/${project.version}/cfg/jdbc</configfile>
|
<configfile finalname="${openhab.conf}/services/jdbc.cfg" override="false">mvn:org.openhab.addons.features.karaf/org.openhab.addons.features.karaf.openhab-addons-external/${project.version}/cfg/jdbc</configfile>
|
||||||
<feature prerequisite="false" dependency="false">openhab-runtime-base</feature>
|
<feature prerequisite="false" dependency="false">openhab-runtime-base</feature>
|
||||||
<bundle start-level="80">mvn:org.apache.derby/derbyclient/10.12.1.1</bundle>
|
<bundle start-level="80">mvn:org.apache.derby/derby/10.14.2.0</bundle>
|
||||||
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.persistence.jdbc/${project.version}</bundle>
|
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.persistence.jdbc/${project.version}</bundle>
|
||||||
</feature>
|
</feature>
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -245,18 +246,21 @@ public class JdbcBaseDAO {
|
||||||
* ITEMS DAOs *
|
* ITEMS DAOs *
|
||||||
**************/
|
**************/
|
||||||
public @Nullable Integer doPingDB() {
|
public @Nullable Integer doPingDB() {
|
||||||
return Yank.queryScalar(sqlPingDB, (Class<@Nullable Integer>) Integer.class, null);
|
final @Nullable Integer result = Yank.queryScalar(sqlPingDB, Integer.class, null);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable String doGetDB() {
|
public @Nullable String doGetDB() {
|
||||||
return Yank.queryScalar(sqlGetDB, (Class<@Nullable String>) String.class, null);
|
final @Nullable String result = Yank.queryScalar(sqlGetDB, String.class, null);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean doIfTableExists(ItemsVO vo) {
|
public boolean doIfTableExists(ItemsVO vo) {
|
||||||
String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" },
|
String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" },
|
||||||
new String[] { vo.getItemsManageTable() });
|
new String[] { vo.getItemsManageTable() });
|
||||||
logger.debug("JDBC::doIfTableExists sql={}", sql);
|
logger.debug("JDBC::doIfTableExists sql={}", sql);
|
||||||
return Yank.queryScalar(sql, (Class<@Nullable String>) String.class, null) != null;
|
final @Nullable String result = Yank.queryScalar(sql, String.class, null);
|
||||||
|
return Objects.nonNull(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long doCreateNewEntryInItemsTable(ItemsVO vo) {
|
public Long doCreateNewEntryInItemsTable(ItemsVO vo) {
|
||||||
|
@ -321,7 +325,7 @@ public class JdbcBaseDAO {
|
||||||
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
||||||
new String[] { "#tableName#", "#tablePrimaryValue#" },
|
new String[] { "#tableName#", "#tablePrimaryValue#" },
|
||||||
new String[] { storedVO.getTableName(), sqlTypes.get("tablePrimaryValue") });
|
new String[] { storedVO.getTableName(), sqlTypes.get("tablePrimaryValue") });
|
||||||
Object[] params = new Object[] { storedVO.getValue(), storedVO.getValue() };
|
Object[] params = { storedVO.getValue(), storedVO.getValue() };
|
||||||
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
||||||
Yank.execute(sql, params);
|
Yank.execute(sql, params);
|
||||||
}
|
}
|
||||||
|
@ -331,7 +335,7 @@ public class JdbcBaseDAO {
|
||||||
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
||||||
new String[] { "#tableName#", "#tablePrimaryValue#" }, new String[] { storedVO.getTableName(), "?" });
|
new String[] { "#tableName#", "#tablePrimaryValue#" }, new String[] { storedVO.getTableName(), "?" });
|
||||||
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.toInstant().toEpochMilli());
|
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.toInstant().toEpochMilli());
|
||||||
Object[] params = new Object[] { timestamp, storedVO.getValue(), storedVO.getValue() };
|
Object[] params = { timestamp, storedVO.getValue(), storedVO.getValue() };
|
||||||
logger.debug("JDBC::doStoreItemValue sql={} timestamp={} value='{}'", sql, timestamp, storedVO.getValue());
|
logger.debug("JDBC::doStoreItemValue sql={} timestamp={} value='{}'", sql, timestamp, storedVO.getValue());
|
||||||
Yank.execute(sql, params);
|
Yank.execute(sql, params);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ package org.openhab.persistence.jdbc.db;
|
||||||
|
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.measure.Quantity;
|
import javax.measure.Quantity;
|
||||||
|
@ -44,13 +45,16 @@ import org.slf4j.LoggerFactory;
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class JdbcDerbyDAO extends JdbcBaseDAO {
|
public class JdbcDerbyDAO extends JdbcBaseDAO {
|
||||||
|
private static final String DRIVER_CLASS_NAME = org.apache.derby.jdbc.EmbeddedDriver.class.getName();
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static final String DATA_SOURCE_CLASS_NAME = org.apache.derby.jdbc.EmbeddedDataSource.class.getName();
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(JdbcDerbyDAO.class);
|
private final Logger logger = LoggerFactory.getLogger(JdbcDerbyDAO.class);
|
||||||
|
|
||||||
/********
|
/********
|
||||||
* INIT *
|
* INIT *
|
||||||
********/
|
********/
|
||||||
public JdbcDerbyDAO() {
|
public JdbcDerbyDAO() {
|
||||||
super();
|
|
||||||
initSqlTypes();
|
initSqlTypes();
|
||||||
initDbProps();
|
initDbProps();
|
||||||
initSqlQueries();
|
initSqlQueries();
|
||||||
|
@ -84,9 +88,9 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
|
||||||
private void initDbProps() {
|
private void initDbProps() {
|
||||||
// Properties for HikariCP
|
// Properties for HikariCP
|
||||||
// Use driverClassName
|
// Use driverClassName
|
||||||
databaseProps.setProperty("driverClassName", "org.apache.derby.jdbc.EmbeddedDriver");
|
databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
|
||||||
// OR dataSourceClassName
|
// OR dataSourceClassName
|
||||||
// databaseProps.setProperty("dataSourceClassName", "org.apache.derby.jdbc.EmbeddedDataSource");
|
// databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
|
||||||
databaseProps.setProperty("maximumPoolSize", "1");
|
databaseProps.setProperty("maximumPoolSize", "1");
|
||||||
databaseProps.setProperty("minimumIdle", "1");
|
databaseProps.setProperty("minimumIdle", "1");
|
||||||
}
|
}
|
||||||
|
@ -103,7 +107,7 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
|
||||||
**************/
|
**************/
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Integer doPingDB() {
|
public @Nullable Integer doPingDB() {
|
||||||
return Yank.queryScalar(sqlPingDB, (Class<@Nullable Integer>) Integer.class, null);
|
return Yank.queryScalar(sqlPingDB, Integer.class, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -111,7 +115,8 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
|
||||||
String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" },
|
String sql = StringUtilsExt.replaceArrayMerge(sqlIfTableExists, new String[] { "#searchTable#" },
|
||||||
new String[] { vo.getItemsManageTable().toUpperCase() });
|
new String[] { vo.getItemsManageTable().toUpperCase() });
|
||||||
logger.debug("JDBC::doIfTableExists sql={}", sql);
|
logger.debug("JDBC::doIfTableExists sql={}", sql);
|
||||||
return Yank.queryScalar(sql, (Class<@Nullable String>) String.class, null) != null;
|
final @Nullable String result = Yank.queryScalar(sql, String.class, null);
|
||||||
|
return Objects.nonNull(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -158,7 +163,7 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
|
||||||
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
|
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
|
||||||
new String[] { storedVO.getTableName().toUpperCase(), storedVO.getDbType(),
|
new String[] { storedVO.getTableName().toUpperCase(), storedVO.getDbType(),
|
||||||
sqlTypes.get("tablePrimaryValue") });
|
sqlTypes.get("tablePrimaryValue") });
|
||||||
Object[] params = new Object[] { storedVO.getValue() };
|
Object[] params = { storedVO.getValue() };
|
||||||
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
||||||
Yank.execute(sql, params);
|
Yank.execute(sql, params);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,13 +30,16 @@ import org.slf4j.LoggerFactory;
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class JdbcH2DAO extends JdbcBaseDAO {
|
public class JdbcH2DAO extends JdbcBaseDAO {
|
||||||
|
private static final String DRIVER_CLASS_NAME = org.h2.Driver.class.getName();
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static final String DATA_SOURCE_CLASS_NAME = org.h2.jdbcx.JdbcDataSource.class.getName();
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(JdbcH2DAO.class);
|
private final Logger logger = LoggerFactory.getLogger(JdbcH2DAO.class);
|
||||||
|
|
||||||
/********
|
/********
|
||||||
* INIT *
|
* INIT *
|
||||||
********/
|
********/
|
||||||
public JdbcH2DAO() {
|
public JdbcH2DAO() {
|
||||||
super();
|
|
||||||
initSqlQueries();
|
initSqlQueries();
|
||||||
initSqlTypes();
|
initSqlTypes();
|
||||||
initDbProps();
|
initDbProps();
|
||||||
|
@ -61,9 +64,9 @@ public class JdbcH2DAO extends JdbcBaseDAO {
|
||||||
*/
|
*/
|
||||||
private void initDbProps() {
|
private void initDbProps() {
|
||||||
// Properties for HikariCP
|
// Properties for HikariCP
|
||||||
databaseProps.setProperty("driverClassName", "org.h2.Driver");
|
databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
|
||||||
// driverClassName OR BETTER USE dataSourceClassName
|
// driverClassName OR BETTER USE dataSourceClassName
|
||||||
// databaseProps.setProperty("dataSourceClassName", "org.h2.jdbcx.JdbcDataSource");
|
// databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************
|
/**************
|
||||||
|
@ -79,7 +82,7 @@ public class JdbcH2DAO extends JdbcBaseDAO {
|
||||||
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
||||||
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
|
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
|
||||||
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
|
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
|
||||||
Object[] params = new Object[] { storedVO.getValue() };
|
Object[] params = { storedVO.getValue() };
|
||||||
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
||||||
Yank.execute(sql, params);
|
Yank.execute(sql, params);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,13 +32,16 @@ import org.slf4j.LoggerFactory;
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class JdbcHsqldbDAO extends JdbcBaseDAO {
|
public class JdbcHsqldbDAO extends JdbcBaseDAO {
|
||||||
|
private static final String DRIVER_CLASS_NAME = org.hsqldb.jdbcDriver.class.getName();
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static final String DATA_SOURCE_CLASS_NAME = org.hsqldb.jdbc.JDBCDataSource.class.getName();
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(JdbcHsqldbDAO.class);
|
private final Logger logger = LoggerFactory.getLogger(JdbcHsqldbDAO.class);
|
||||||
|
|
||||||
/********
|
/********
|
||||||
* INIT *
|
* INIT *
|
||||||
********/
|
********/
|
||||||
public JdbcHsqldbDAO() {
|
public JdbcHsqldbDAO() {
|
||||||
super();
|
|
||||||
initSqlQueries();
|
initSqlQueries();
|
||||||
initSqlTypes();
|
initSqlTypes();
|
||||||
initDbProps();
|
initDbProps();
|
||||||
|
@ -71,7 +74,9 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
|
||||||
*/
|
*/
|
||||||
private void initDbProps() {
|
private void initDbProps() {
|
||||||
// Properties for HikariCP
|
// Properties for HikariCP
|
||||||
databaseProps.setProperty("driverClassName", "org.hsqldb.jdbcDriver");
|
databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
|
||||||
|
// driverClassName OR BETTER USE dataSourceClassName
|
||||||
|
// databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************
|
/**************
|
||||||
|
@ -79,7 +84,7 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
|
||||||
**************/
|
**************/
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Integer doPingDB() {
|
public @Nullable Integer doPingDB() {
|
||||||
return Yank.queryScalar(sqlPingDB, (Class<@Nullable Integer>) Integer.class, null);
|
return Yank.queryScalar(sqlPingDB, Integer.class, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -111,7 +116,7 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
|
||||||
new String[] { "#tableName#", "#dbType#", "#tableName#", "#tablePrimaryValue#" },
|
new String[] { "#tableName#", "#dbType#", "#tableName#", "#tablePrimaryValue#" },
|
||||||
new String[] { storedVO.getTableName(), storedVO.getDbType(), storedVO.getTableName(),
|
new String[] { storedVO.getTableName(), storedVO.getDbType(), storedVO.getTableName(),
|
||||||
sqlTypes.get("tablePrimaryValue") });
|
sqlTypes.get("tablePrimaryValue") });
|
||||||
Object[] params = new Object[] { storedVO.getValue() };
|
Object[] params = { storedVO.getValue() };
|
||||||
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
||||||
Yank.execute(sql, params);
|
Yank.execute(sql, params);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
*/
|
*/
|
||||||
package org.openhab.persistence.jdbc.db;
|
package org.openhab.persistence.jdbc.db;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
import org.knowm.yank.Yank;
|
import org.knowm.yank.Yank;
|
||||||
|
@ -28,13 +30,16 @@ import org.slf4j.LoggerFactory;
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class JdbcMariadbDAO extends JdbcBaseDAO {
|
public class JdbcMariadbDAO extends JdbcBaseDAO {
|
||||||
|
private static final String DRIVER_CLASS_NAME = org.mariadb.jdbc.Driver.class.getName();
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static final String DATA_SOURCE_CLASS_NAME = org.mariadb.jdbc.MariaDbDataSource.class.getName();
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(JdbcMariadbDAO.class);
|
private final Logger logger = LoggerFactory.getLogger(JdbcMariadbDAO.class);
|
||||||
|
|
||||||
/********
|
/********
|
||||||
* INIT *
|
* INIT *
|
||||||
********/
|
********/
|
||||||
public JdbcMariadbDAO() {
|
public JdbcMariadbDAO() {
|
||||||
super();
|
|
||||||
initSqlTypes();
|
initSqlTypes();
|
||||||
initDbProps();
|
initDbProps();
|
||||||
initSqlQueries();
|
initSqlQueries();
|
||||||
|
@ -66,9 +71,9 @@ public class JdbcMariadbDAO extends JdbcBaseDAO {
|
||||||
|
|
||||||
// Properties for HikariCP
|
// Properties for HikariCP
|
||||||
// Use driverClassName
|
// Use driverClassName
|
||||||
databaseProps.setProperty("driverClassName", "org.mariadb.jdbc.Driver");
|
databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
|
||||||
// driverClassName OR BETTER USE dataSourceClassName
|
// driverClassName OR BETTER USE dataSourceClassName
|
||||||
// databaseProps.setProperty("dataSourceClassName", "org.mariadb.jdbc.MySQLDataSource");
|
// databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
|
||||||
databaseProps.setProperty("maximumPoolSize", "3");
|
databaseProps.setProperty("maximumPoolSize", "3");
|
||||||
databaseProps.setProperty("minimumIdle", "2");
|
databaseProps.setProperty("minimumIdle", "2");
|
||||||
}
|
}
|
||||||
|
@ -91,8 +96,8 @@ public class JdbcMariadbDAO extends JdbcBaseDAO {
|
||||||
**************/
|
**************/
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Integer doPingDB() {
|
public @Nullable Integer doPingDB() {
|
||||||
final @Nullable Long result = Yank.queryScalar(sqlPingDB, (Class<@Nullable Long>) Long.class, null);
|
final @Nullable Long result = Yank.queryScalar(sqlPingDB, Long.class, null);
|
||||||
return result != null ? result.intValue() : null;
|
return Objects.nonNull(result) ? result.intValue() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************
|
/*************
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
*/
|
*/
|
||||||
package org.openhab.persistence.jdbc.db;
|
package org.openhab.persistence.jdbc.db;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
import org.knowm.yank.Yank;
|
import org.knowm.yank.Yank;
|
||||||
|
@ -32,13 +34,16 @@ import org.slf4j.LoggerFactory;
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class JdbcMysqlDAO extends JdbcBaseDAO {
|
public class JdbcMysqlDAO extends JdbcBaseDAO {
|
||||||
|
private static final String DRIVER_CLASS_NAME = com.mysql.jdbc.Driver.class.getName();
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static final String DATA_SOURCE_CLASS_NAME = com.mysql.cj.jdbc.MysqlDataSource.class.getName();
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(JdbcMysqlDAO.class);
|
private final Logger logger = LoggerFactory.getLogger(JdbcMysqlDAO.class);
|
||||||
|
|
||||||
/********
|
/********
|
||||||
* INIT *
|
* INIT *
|
||||||
********/
|
********/
|
||||||
public JdbcMysqlDAO() {
|
public JdbcMysqlDAO() {
|
||||||
super();
|
|
||||||
initSqlTypes();
|
initSqlTypes();
|
||||||
initDbProps();
|
initDbProps();
|
||||||
initSqlQueries();
|
initSqlQueries();
|
||||||
|
@ -69,9 +74,9 @@ public class JdbcMysqlDAO extends JdbcBaseDAO {
|
||||||
|
|
||||||
// Properties for HikariCP
|
// Properties for HikariCP
|
||||||
// Use driverClassName
|
// Use driverClassName
|
||||||
databaseProps.setProperty("driverClassName", "com.mysql.jdbc.Driver");
|
databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
|
||||||
// OR dataSourceClassName
|
// OR dataSourceClassName
|
||||||
// databaseProps.setProperty("dataSourceClassName", "com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
|
// databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
|
||||||
databaseProps.setProperty("maximumPoolSize", "3");
|
databaseProps.setProperty("maximumPoolSize", "3");
|
||||||
databaseProps.setProperty("minimumIdle", "2");
|
databaseProps.setProperty("minimumIdle", "2");
|
||||||
}
|
}
|
||||||
|
@ -94,8 +99,8 @@ public class JdbcMysqlDAO extends JdbcBaseDAO {
|
||||||
**************/
|
**************/
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Integer doPingDB() {
|
public @Nullable Integer doPingDB() {
|
||||||
final @Nullable Long result = Yank.queryScalar(sqlPingDB, (Class<@Nullable Long>) Long.class, null);
|
final @Nullable Long result = Yank.queryScalar(sqlPingDB, Long.class, null);
|
||||||
return result != null ? result.intValue() : null;
|
return Objects.nonNull(result) ? result.intValue() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************
|
/*************
|
||||||
|
|
|
@ -36,13 +36,16 @@ import org.slf4j.LoggerFactory;
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class JdbcPostgresqlDAO extends JdbcBaseDAO {
|
public class JdbcPostgresqlDAO extends JdbcBaseDAO {
|
||||||
|
private static final String DRIVER_CLASS_NAME = org.postgresql.Driver.class.getName();
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static final String DATA_SOURCE_CLASS_NAME = org.postgresql.ds.PGSimpleDataSource.class.getName();
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(JdbcPostgresqlDAO.class);
|
private final Logger logger = LoggerFactory.getLogger(JdbcPostgresqlDAO.class);
|
||||||
|
|
||||||
/********
|
/********
|
||||||
* INIT *
|
* INIT *
|
||||||
********/
|
********/
|
||||||
public JdbcPostgresqlDAO() {
|
public JdbcPostgresqlDAO() {
|
||||||
super();
|
|
||||||
initSqlQueries();
|
initSqlQueries();
|
||||||
initSqlTypes();
|
initSqlTypes();
|
||||||
initDbProps();
|
initDbProps();
|
||||||
|
@ -94,9 +97,9 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO {
|
||||||
// databaseProps.setProperty("dataSource.prepStmtCacheSqlLimit", "2048");
|
// databaseProps.setProperty("dataSource.prepStmtCacheSqlLimit", "2048");
|
||||||
|
|
||||||
// Properties for HikariCP
|
// Properties for HikariCP
|
||||||
databaseProps.setProperty("driverClassName", "org.postgresql.Driver");
|
databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
|
||||||
// driverClassName OR BETTER USE dataSourceClassName
|
// driverClassName OR BETTER USE dataSourceClassName
|
||||||
// databaseProps.setProperty("dataSourceClassName", "org.postgresql.ds.PGSimpleDataSource");
|
// databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
|
||||||
// databaseProps.setProperty("maximumPoolSize", "3");
|
// databaseProps.setProperty("maximumPoolSize", "3");
|
||||||
// databaseProps.setProperty("minimumIdle", "2");
|
// databaseProps.setProperty("minimumIdle", "2");
|
||||||
}
|
}
|
||||||
|
@ -141,7 +144,7 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO {
|
||||||
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
||||||
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
|
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
|
||||||
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
|
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
|
||||||
Object[] params = new Object[] { storedVO.getValue() };
|
Object[] params = { storedVO.getValue() };
|
||||||
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
||||||
Yank.execute(sql, params);
|
Yank.execute(sql, params);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,13 +32,16 @@ import org.slf4j.LoggerFactory;
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class JdbcSqliteDAO extends JdbcBaseDAO {
|
public class JdbcSqliteDAO extends JdbcBaseDAO {
|
||||||
|
private static final String DRIVER_CLASS_NAME = org.sqlite.JDBC.class.getName();
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static final String DATA_SOURCE_CLASS_NAME = org.sqlite.SQLiteDataSource.class.getName();
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(JdbcSqliteDAO.class);
|
private final Logger logger = LoggerFactory.getLogger(JdbcSqliteDAO.class);
|
||||||
|
|
||||||
/********
|
/********
|
||||||
* INIT *
|
* INIT *
|
||||||
********/
|
********/
|
||||||
public JdbcSqliteDAO() {
|
public JdbcSqliteDAO() {
|
||||||
super();
|
|
||||||
initSqlQueries();
|
initSqlQueries();
|
||||||
initSqlTypes();
|
initSqlTypes();
|
||||||
initDbProps();
|
initDbProps();
|
||||||
|
@ -66,9 +69,9 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
|
||||||
*/
|
*/
|
||||||
private void initDbProps() {
|
private void initDbProps() {
|
||||||
// Properties for HikariCP
|
// Properties for HikariCP
|
||||||
databaseProps.setProperty("driverClassName", "org.sqlite.JDBC");
|
databaseProps.setProperty("driverClassName", DRIVER_CLASS_NAME);
|
||||||
// driverClassName OR BETTER USE dataSourceClassName
|
// driverClassName OR BETTER USE dataSourceClassName
|
||||||
// databaseProps.setProperty("dataSourceClassName", "org.sqlite.SQLiteDataSource");
|
// databaseProps.setProperty("dataSourceClassName", DATA_SOURCE_CLASS_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************
|
/**************
|
||||||
|
@ -77,7 +80,7 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable String doGetDB() {
|
public @Nullable String doGetDB() {
|
||||||
return Yank.queryColumn(sqlGetDB, "file", (Class<@Nullable String>) String.class, null).get(0);
|
return Yank.queryColumn(sqlGetDB, "file", String.class, null).get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -99,7 +102,7 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
|
||||||
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
|
||||||
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
|
new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
|
||||||
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
|
new String[] { storedVO.getTableName(), storedVO.getDbType(), sqlTypes.get("tablePrimaryValue") });
|
||||||
Object[] params = new Object[] { storedVO.getValue() };
|
Object[] params = { storedVO.getValue() };
|
||||||
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
logger.debug("JDBC::doStoreItemValue sql={} value='{}'", sql, storedVO.getValue());
|
||||||
Yank.execute(sql, params);
|
Yank.execute(sql, params);
|
||||||
}
|
}
|
||||||
|
|
|
@ -272,7 +272,7 @@ public class JdbcConfiguration {
|
||||||
}
|
}
|
||||||
matcher.reset();
|
matcher.reset();
|
||||||
matcher.find();
|
matcher.find();
|
||||||
if (!matcher.group(1).equals("sqltype")) {
|
if (!"sqltype".equals(matcher.group(1))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String itemType = matcher.group(2);
|
String itemType = matcher.group(2);
|
||||||
|
@ -304,7 +304,7 @@ public class JdbcConfiguration {
|
||||||
if (serviceName != null) {
|
if (serviceName != null) {
|
||||||
switch (serviceName) {
|
switch (serviceName) {
|
||||||
case "derby":
|
case "derby":
|
||||||
warn += "\tDerby: version >= 10.11.1.1 from https://mvnrepository.com/artifact/org.apache.derby/derby\n";
|
warn += "\tDerby: version >= 10.14.2.0 from https://mvnrepository.com/artifact/org.apache.derby/derby\n";
|
||||||
break;
|
break;
|
||||||
case "h2":
|
case "h2":
|
||||||
warn += "\tH2: version >= 1.4.189 from https://mvnrepository.com/artifact/com.h2database/h2\n";
|
warn += "\tH2: version >= 1.4.189 from https://mvnrepository.com/artifact/com.h2database/h2\n";
|
||||||
|
@ -313,13 +313,13 @@ public class JdbcConfiguration {
|
||||||
warn += "\tHSQLDB: version >= 2.3.3 from https://mvnrepository.com/artifact/org.hsqldb/hsqldb\n";
|
warn += "\tHSQLDB: version >= 2.3.3 from https://mvnrepository.com/artifact/org.hsqldb/hsqldb\n";
|
||||||
break;
|
break;
|
||||||
case "mariadb":
|
case "mariadb":
|
||||||
warn += "\tMariaDB: version >= 1.2.0 from https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client\n";
|
warn += "\tMariaDB: version >= 1.4.6 from https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client\n";
|
||||||
break;
|
break;
|
||||||
case "mysql":
|
case "mysql":
|
||||||
warn += "\tMySQL: version >= 5.1.36 from https://mvnrepository.com/artifact/mysql/mysql-connector-java\n";
|
warn += "\tMySQL: version >= 8.0.30 from https://mvnrepository.com/artifact/mysql/mysql-connector-java\n";
|
||||||
break;
|
break;
|
||||||
case "postgresql":
|
case "postgresql":
|
||||||
warn += "\tPostgreSQL:version >= 9.4.1208 from https://mvnrepository.com/artifact/org.postgresql/postgresql\n";
|
warn += "\tPostgreSQL:version >= 42.4.1 from https://mvnrepository.com/artifact/org.postgresql/postgresql\n";
|
||||||
break;
|
break;
|
||||||
case "sqlite":
|
case "sqlite":
|
||||||
warn += "\tSQLite: version >= 3.16.1 from https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc\n";
|
warn += "\tSQLite: version >= 3.16.1 from https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc\n";
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2010-2022 Contributors to the openHAB project
|
||||||
|
*
|
||||||
|
* See the NOTICE file(s) distributed with this work for additional
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made available under the
|
||||||
|
* terms of the Eclipse Public License 2.0 which is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-2.0
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
@org.osgi.annotation.bundle.Header(name = org.osgi.framework.Constants.DYNAMICIMPORT_PACKAGE, value = "*")
|
||||||
|
package org.openhab.persistence.jdbc.internal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This dynamic import is required for loading the JDBC driver class.
|
||||||
|
*
|
||||||
|
* @author Wouter Born - Initial contribution
|
||||||
|
*/
|
Loading…
Reference in New Issue