From 3f8bbc41687e8252c3b0c7bbde5aa30e1ad1e689 Mon Sep 17 00:00:00 2001 From: chang Date: Mon, 27 Apr 2020 18:36:55 +0800 Subject: [PATCH] test: add example fix: nullException --- .../java/com/taosdata/jdbc/TSDBSubscribe.java | 30 ++++++---- .../src/main/java/TSDBSyncSample.java | 2 +- .../java/TestAsyncTSDBSubscribeSample.java | 58 ++++++++++++++++++ .../main/java/TestTSDBSubscribeSample.java | 59 +++++++++++++++++++ 4 files changed, 135 insertions(+), 14 deletions(-) create mode 100644 tests/examples/JDBC/JDBCDemo/src/main/java/TestAsyncTSDBSubscribeSample.java create mode 100644 tests/examples/JDBC/JDBCDemo/src/main/java/TestTSDBSubscribeSample.java diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java index ef83ed3a75..3b479aafc3 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBSubscribe.java @@ -119,21 +119,25 @@ public class TSDBSubscribe { throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL)); } - synchronized (timerTaskMap.get(subscription)) { - while (1 == timerTaskMap.get(subscription).getState()) { - try { - Thread.sleep(10); - } catch (Exception e) { - throw new RuntimeException(e); + if (null != timerTaskMap.get(subscription)) { + synchronized (timerTaskMap.get(subscription)) { + while (1 == timerTaskMap.get(subscription).getState()) { + try { + Thread.sleep(10); + } catch (Exception e) { + throw new RuntimeException(e); + } } + timerTaskMap.get(subscription).setState(2); + if (!timerTaskMap.isEmpty() && timerTaskMap.containsKey(subscription)) { + timerTaskMap.get(subscription).cancel(); + timerTaskMap.remove(subscription); + scheduledMap.get(subscription).cancel(false); + scheduledMap.remove(subscription); + } + this.connecter.unsubscribe(subscription, isKeep); } - timerTaskMap.get(subscription).setState(2); - if (!timerTaskMap.isEmpty() && timerTaskMap.containsKey(subscription)) { - timerTaskMap.get(subscription).cancel(); - timerTaskMap.remove(subscription); - scheduledMap.get(subscription).cancel(false); - scheduledMap.remove(subscription); - } + } else { this.connecter.unsubscribe(subscription, isKeep); } } diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/TSDBSyncSample.java b/tests/examples/JDBC/JDBCDemo/src/main/java/TSDBSyncSample.java index c093b604da..d0c167e714 100644 --- a/tests/examples/JDBC/JDBCDemo/src/main/java/TSDBSyncSample.java +++ b/tests/examples/JDBC/JDBCDemo/src/main/java/TSDBSyncSample.java @@ -4,7 +4,7 @@ public class TSDBSyncSample { private static final String JDBC_PROTOCAL = "jdbc:TAOS://"; private static final String TSDB_DRIVER = "com.taosdata.jdbc.TSDBDriver"; - private String host = "127.0.0.1"; + private String host = "10.211.55.3"; private String user = "root"; private String password = "taosdata"; private int port = 0; diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/TestAsyncTSDBSubscribeSample.java b/tests/examples/JDBC/JDBCDemo/src/main/java/TestAsyncTSDBSubscribeSample.java new file mode 100644 index 0000000000..00da0be060 --- /dev/null +++ b/tests/examples/JDBC/JDBCDemo/src/main/java/TestAsyncTSDBSubscribeSample.java @@ -0,0 +1,58 @@ +import com.taosdata.jdbc.*; +import org.apache.commons.lang3.StringUtils; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.util.Properties; + +public class TestAsyncTSDBSubscribeSample { + public static void main(String[] args) { + String dbName = "log"; + String tName = "dn_10_211_55_3"; + String host = "10.211.55.3"; + String topic = "test"; + + Connection connection = null; + TSDBSubscribe subscribe = null; + long subscribId = 0; + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Properties properties = new Properties(); + properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host); + connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + dbName + "?user=root&password=taosdata", properties); + String rawSql = "select * from " + tName + ";"; + subscribe = ((TSDBConnection) connection).createSubscribe(); + subscribId = subscribe.subscribe(topic, rawSql, false, 1000, new CallBack("first")); + long subscribId2 = subscribe.subscribe("test", rawSql, false, 1000, new CallBack("second")); + int a = 0; + Thread.sleep(2000); + subscribe.unsubscribe(subscribId, true); + System.err.println("cancel subscribe"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static class CallBack implements TSDBSubscribeCallBack { + private String name = ""; + + public CallBack(String name) { + this.name = name; + } + + @Override + public void invoke(TSDBResultSet resultSet) { + try { + while (null !=resultSet && resultSet.next()) { + System.out.print("callback_" + name + ": "); + for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) { + System.out.printf(i + ": " + resultSet.getString(i) + "\t"); + } + System.out.println(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/TestTSDBSubscribeSample.java b/tests/examples/JDBC/JDBCDemo/src/main/java/TestTSDBSubscribeSample.java new file mode 100644 index 0000000000..389af33ed0 --- /dev/null +++ b/tests/examples/JDBC/JDBCDemo/src/main/java/TestTSDBSubscribeSample.java @@ -0,0 +1,59 @@ +import com.taosdata.jdbc.TSDBConnection; +import com.taosdata.jdbc.TSDBDriver; +import com.taosdata.jdbc.TSDBResultSet; +import com.taosdata.jdbc.TSDBSubscribe; +import org.apache.commons.lang3.StringUtils; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.util.Properties; + +public class TestTSDBSubscribeSample { + public static void main(String[] args) throws Exception { + // use log db + String dbName = "log"; + String tName = "dn_10_211_55_3"; + String host = "10.211.55.3"; + String topic = "test"; + + Connection connection = null; + TSDBSubscribe subscribe = null; + long subscribId = 0; + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Properties properties = new Properties(); + properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host); + connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + dbName + "?user=root&password=taosdata" + , properties); + String rawSql = "select * from " + tName + ";"; + subscribe = ((TSDBConnection) connection).createSubscribe(); + subscribId = subscribe.subscribe(topic, rawSql, false, 1000); + int a = 0; + while (true) { + Thread.sleep(1000); + TSDBResultSet resSet = subscribe.consume(subscribId); + + while (resSet.next()) { + for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) { + System.out.printf(i + ": " + resSet.getString(i) + "\t"); + } + System.out.println("\n================"); + } + + a++; + if (a >= 10) { + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != subscribe && 0 != subscribId) { + subscribe.unsubscribe(subscribId, true); + } + if (null != connection) { + connection.close(); + } + } + } +} -- GitLab