Skip to content

Commit 5e6ae79

Browse files
authored
Merge pull request #21 from oracle-devrel/tschecks
Tschecks
2 parents 90832eb + 68ace10 commit 5e6ae79

10 files changed

Lines changed: 192 additions & 63 deletions

File tree

IoTDBJDBC/.factorypath

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<factorypath>
22
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.42/lombok-1.18.42.jar" enabled="true" runInBatchMode="false"/>
3-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-inject-java/4.10.23/micronaut-inject-java-4.10.23.jar" enabled="true" runInBatchMode="false"/>
3+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-inject-java/4.10.26/micronaut-inject-java-4.10.26.jar" enabled="true" runInBatchMode="false"/>
44
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar" enabled="true" runInBatchMode="false"/>
5-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-core-processor/4.10.23/micronaut-core-processor-4.10.23.jar" enabled="true" runInBatchMode="false"/>
6-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-aop/4.10.23/micronaut-aop-4.10.23.jar" enabled="true" runInBatchMode="false"/>
5+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-core-processor/4.10.26/micronaut-core-processor-4.10.26.jar" enabled="true" runInBatchMode="false"/>
6+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-aop/4.10.26/micronaut-aop-4.10.26.jar" enabled="true" runInBatchMode="false"/>
77
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/javaparser/javaparser-symbol-solver-core/3.27.0/javaparser-symbol-solver-core-3.27.0.jar" enabled="true" runInBatchMode="false"/>
88
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/javaparser/javaparser-core/3.27.0/javaparser-core-3.27.0.jar" enabled="true" runInBatchMode="false"/>
99
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.49.4/checker-qual-3.49.4.jar" enabled="true" runInBatchMode="false"/>
@@ -13,17 +13,17 @@
1313
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.jar" enabled="true" runInBatchMode="false"/>
1414
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-util/9.8/asm-util-9.8.jar" enabled="true" runInBatchMode="false"/>
1515
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-analysis/9.8/asm-analysis-9.8.jar" enabled="true" runInBatchMode="false"/>
16-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-core-reactive/4.10.23/micronaut-core-reactive-4.10.23.jar" enabled="true" runInBatchMode="false"/>
16+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-core-reactive/4.10.26/micronaut-core-reactive-4.10.26.jar" enabled="true" runInBatchMode="false"/>
1717
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/>
1818
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm/9.8/asm-9.8.jar" enabled="true" runInBatchMode="false"/>
19-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-graal/4.10.23/micronaut-graal-4.10.23.jar" enabled="true" runInBatchMode="false"/>
20-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-http-validation/4.10.23/micronaut-http-validation-4.10.23.jar" enabled="true" runInBatchMode="false"/>
21-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-http-server/4.10.23/micronaut-http-server-4.10.23.jar" enabled="true" runInBatchMode="false"/>
22-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-router/4.10.23/micronaut-router-4.10.23.jar" enabled="true" runInBatchMode="false"/>
19+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-graal/4.10.26/micronaut-graal-4.10.26.jar" enabled="true" runInBatchMode="false"/>
20+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-http-validation/4.10.26/micronaut-http-validation-4.10.26.jar" enabled="true" runInBatchMode="false"/>
21+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-http-server/4.10.26/micronaut-http-server-4.10.26.jar" enabled="true" runInBatchMode="false"/>
22+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-router/4.10.26/micronaut-router-4.10.26.jar" enabled="true" runInBatchMode="false"/>
2323
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.7.12/reactor-core-3.7.12.jar" enabled="true" runInBatchMode="false"/>
24-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-websocket/4.10.23/micronaut-websocket-4.10.23.jar" enabled="true" runInBatchMode="false"/>
25-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-http-client-core/4.10.23/micronaut-http-client-core-4.10.23.jar" enabled="true" runInBatchMode="false"/>
26-
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-discovery-core/4.10.23/micronaut-discovery-core-4.10.23.jar" enabled="true" runInBatchMode="false"/>
24+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-websocket/4.10.26/micronaut-websocket-4.10.26.jar" enabled="true" runInBatchMode="false"/>
25+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-http-client-core/4.10.26/micronaut-http-client-core-4.10.26.jar" enabled="true" runInBatchMode="false"/>
26+
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-discovery-core/4.10.26/micronaut-discovery-core-4.10.26.jar" enabled="true" runInBatchMode="false"/>
2727
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/jsonschema/micronaut-json-schema-processor/1.7.4/micronaut-json-schema-processor-1.7.4.jar" enabled="true" runInBatchMode="false"/>
2828
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-inject/4.10.4/micronaut-inject-4.10.4.jar" enabled="true" runInBatchMode="false"/>
2929
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>

IoTDBJDBC/pom.xml

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,21 @@ SOFTWARE. -->
4646
<parent>
4747
<groupId>io.micronaut.platform</groupId>
4848
<artifactId>micronaut-parent</artifactId>
49-
<version>4.10.14</version>
49+
<version>4.10.17</version>
5050
</parent>
5151

5252
<properties>
5353
<packaging>jar</packaging>
5454
<jdk.version>21</jdk.version>
5555
<release.version>21</release.version>
56-
<version.ocisdk>3.91.0</version.ocisdk>
56+
<version.ocisdk>3.92.0</version.ocisdk>
5757
<version.lombok>1.18.46</version.lombok>
5858
<version.slf4j>2.0.7</version.slf4j>
5959
<!-- Oracle JDBC 23ai line (set to the latest approved version) -->
60-
<version.ojdbc>23.8.0.25.04</version.ojdbc>
61-
<version.nosql>3.85.0</version.nosql>
60+
<version.ojdbc>23.26.2.0.0</version.ojdbc>
61+
<version.oracledbsecurity>21.21.0.0</version.oracledbsecurity>
62+
<!--<version.nosql>3.85.0</version.nosql>-->
63+
<version.nosql>5.4.21</version.nosql>
6264
<!--<micronaut.version>4.10.25</micronaut.version>-->
6365
<micronaut.runtime>netty</micronaut.runtime>
6466
<micronaut.aot.enabled>false</micronaut.aot.enabled>
@@ -109,7 +111,7 @@ SOFTWARE. -->
109111
<dependency>
110112
<groupId>org.projectlombok</groupId>
111113
<artifactId>lombok</artifactId>
112-
<version>${version.lombok}</version>
114+
<!--<version>${version.lombok}</version>-->
113115
<scope>compile</scope>
114116
</dependency> <!-- SLF4J is a logging
115117
facade that let's us change the actual logger
@@ -118,12 +120,12 @@ SOFTWARE. -->
118120
the standard Java logging utilities. By making the dependency declaration
119121
below Maven will bring in the core SLF4J jar files, and also the SLJ4J to
120122
java.util.logging binding -->
121-
<dependency>
123+
<!--<dependency>
122124
<groupId>org.slf4j</groupId>
123125
<artifactId>slf4j-jdk14</artifactId>
124126
<version>${version.slf4j}</version>
125127
<scope>compile</scope>
126-
</dependency>
128+
</dependency>-->
127129
<dependency>
128130
<groupId>io.micronaut.jsonschema</groupId>
129131
<artifactId>micronaut-json-schema-validation</artifactId>
@@ -133,19 +135,19 @@ SOFTWARE. -->
133135
<dependency>
134136
<groupId>com.oracle.oci.sdk</groupId>
135137
<artifactId>oci-java-sdk-common</artifactId>
136-
<version>${version.ocisdk}</version>
138+
<!--<version>${version.ocisdk}</version>-->
137139
<scope>compile</scope>
138140
</dependency>
139141

140142
<dependency>
141143
<groupId>com.oracle.oci.sdk</groupId>
142144
<artifactId>oci-java-sdk-common-httpclient-jersey3</artifactId>
143-
<version>${version.ocisdk}</version>
145+
<!--<version>${version.ocisdk}</version>-->
144146
</dependency>
145147
<dependency>
146148
<groupId>com.oracle.oci.sdk</groupId>
147149
<artifactId>oci-java-sdk-identitydataplane</artifactId>
148-
<version>${version.ocisdk}</version>
150+
<!--<version>${version.ocisdk}</version>-->
149151
</dependency>
150152

151153
<!-- Oracle JDBC driver (JDBC 4.3+; recommended for Java 11/17/21+) -->
@@ -165,20 +167,20 @@ SOFTWARE. -->
165167
<dependency>
166168
<groupId>com.oracle.database.security</groupId>
167169
<artifactId>osdt_core</artifactId>
168-
<version>21.21.0.0</version>
170+
<version>${version.oracledbsecurity}</version>
169171
</dependency>
170172

171173
<dependency>
172174
<groupId>com.oracle.database.security</groupId>
173175
<artifactId>osdt_cert</artifactId>
174-
<version>21.21.0.0</version>
176+
<version>${version.oracledbsecurity}</version>
175177
</dependency>
176178

177179
<dependency>
178180
<groupId>com.oracle.nosql.sdk</groupId>
179181
<artifactId>nosqldriver</artifactId>
180-
<version>5.3.7</version>
181-
<!--<version>5.4.21</version>-->
182+
<!--<version>5.4.23</version>-->
183+
<version>${version.nosql}</version>
182184
</dependency>
183185

184186
<dependency>

IoTDBJDBC/src/main/java/com/oracle/demo/timg/iot/iotdbjdbc/messagehandler/iotdbutils/DeviceModelInstancesCache.java

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,23 +65,25 @@ Software and the Larger Work(s), and to sublicense the foregoing rights on
6565
@Singleton
6666
public class DeviceModelInstancesCache {
6767
private static final String INSTANCE_ID_COLUMN_NAME = "instanceid";
68+
private static final String INSTANCE_ID_COLUMN_DISPLAY_NAME = "displayname";
6869
private static final String EXTERNAL_KEY_COLUMN_NAME = "externalkey";
6970
private static final String MODEL_ID_COLUMN_NAME = "modelid";
7071
private static final String MODEL_NAME_COLUMN_NAME = "modelname";
7172
// these are used for bulk pre-loading of entries
7273
public final static String SELECT_MODEL_IDS_AND_MODEL_NAMES = "SELECT JSON_VALUE (dtm.data, '$._id' ) AS modelid, JSON_VALUE(dtm.data, '$.displayName' ) AS modelname FROM digital_twin_models dtm";
73-
public final static String SELECT_MODEL_ID_EXTERNAL_KEY_AND_INSTANCE_ID = "SELECT JSON_VALUE (dti.data, '$._id' ) AS instanceid, JSON_VALUE (dti.data, '$.digitalTwinModelId' ) AS modelid, JSON_VALUE (dti.data, '$.externalKey' ) AS externalkey FROM digital_twin_instances dti";
74+
public final static String SELECT_MODEL_ID_EXTERNAL_KEY_DISPLAY_NAME_AND_INSTANCE_ID = "SELECT JSON_VALUE (dti.data, '$._id' ) AS instanceid, JSON_VALUE (dti.data, '$.digitalTwinModelId' ) AS modelid, JSON_VALUE (dti.data, '$.externalKey' ) AS externalkey, JSON_VALUE(dti.data, '$.displayName' ) AS displayname FROM digital_twin_instances dti";
7475
// we we don't know about this then we will try an individual load
7576
public final static String SELECT_MODEL_NAME_BY_MODEL_ID = "SELECT JSON_VALUE(dtm.data, '$.displayName' ) AS modelname FROM digital_twin_models dtm WHERE JSON_VALUE (dtm.data, '$._id' ) = ? ";
7677
public final static String SELECT_MODEL_ID_BY_MODEL_NAME = "SELECT JSON_VALUE (dtm.data, '$._id' ) AS modelid FROM digital_twin_models dtm WHERE JSON_VALUE(dtm.data, '$.displayName' ) = ? ";
77-
public final static String SELECT_MODEL_ID_AND_EXTERNAL_KEY_BY_INSTANCE_ID = "SELECT JSON_VALUE (dti.data, '$.digitalTwinModelId' ) AS modelid, JSON_VALUE (dti.data, '$.externalKey' ) AS externalkey FROM digital_twin_instances dti WHERE JSON_VALUE(dti.data, '$._id' ) = ?";
78+
public final static String SELECT_MODEL_ID_DISPLAY_NAME_AND_EXTERNAL_KEY_BY_INSTANCE_ID = "SELECT JSON_VALUE (dti.data, '$.digitalTwinModelId' ) AS modelid, JSON_VALUE (dti.data, '$.externalKey' ) AS externalkey, JSON_VALUE(dti.data, '$.displayName' ) FROM digital_twin_instances dti WHERE JSON_VALUE(dti.data, '$._id' ) = ?";
7879

7980
private final String schemaName;
8081
private final DBConnectionSupplier dbConnectionSupplier;
8182
private Connection connection;
8283

8384
private final Map<String, String> instanceIdToModelId = Collections.synchronizedMap(new HashMap<>());
8485
private final Map<String, String> instanceIdToExternalKey = Collections.synchronizedMap(new HashMap<>());
86+
private final Map<String, String> instanceIdToInstanceName = Collections.synchronizedMap(new HashMap<>());
8587
private final Map<String, String> instanceIdToModelName = Collections.synchronizedMap(new HashMap<>());
8688
private final Map<String, String> externalKeyToInstanceId = Collections.synchronizedMap(new HashMap<>());
8789
private final Map<String, String> modelIdToModelName = Collections.synchronizedMap(new HashMap<>());
@@ -147,7 +149,8 @@ public void configure() throws Exception {
147149
// set this up so we can re-use it later if we need to query for an instance we
148150
// didn't know about
149151
log.fine("Creating prepared statements");
150-
selectModelIdByInstanceIdPS = connection.prepareStatement(SELECT_MODEL_ID_AND_EXTERNAL_KEY_BY_INSTANCE_ID);
152+
selectModelIdByInstanceIdPS = connection
153+
.prepareStatement(SELECT_MODEL_ID_DISPLAY_NAME_AND_EXTERNAL_KEY_BY_INSTANCE_ID);
151154
selectModelNameByModelIdPS = connection.prepareStatement(SELECT_MODEL_NAME_BY_MODEL_ID);
152155
selectModelIdByModelNamePS = connection.prepareStatement(SELECT_MODEL_ID_BY_MODEL_NAME);
153156
log.fine("Prepared statements created");
@@ -349,15 +352,17 @@ private String loadModelByModelName(@NotNull @NotEmpty String modelName)
349352
private void preloadExistingInstances() throws SQLException {
350353
// get all of the results
351354
try (Statement s = connection.createStatement();
352-
ResultSet rs = s.executeQuery(SELECT_MODEL_ID_EXTERNAL_KEY_AND_INSTANCE_ID)) {
355+
ResultSet rs = s.executeQuery(SELECT_MODEL_ID_EXTERNAL_KEY_DISPLAY_NAME_AND_INSTANCE_ID)) {
353356
while (rs.next()) {
354357
String modelIdExistingInstance = rs.getString(MODEL_ID_COLUMN_NAME);
355358
String instanceIdExistingInstance = rs.getString(INSTANCE_ID_COLUMN_NAME);
356359
String externalKeyExistingInstance = rs.getString(EXTERNAL_KEY_COLUMN_NAME);
360+
String instanceDisplayName = rs.getString(INSTANCE_ID_COLUMN_DISPLAY_NAME);
357361
String modelName = modelIdToModelName.get(modelIdExistingInstance);
358362
instanceIdToModelId.put(instanceIdExistingInstance, modelIdExistingInstance);
359-
log.info("Added instance id " + instanceIdExistingInstance + " to modelId " + modelIdExistingInstance
360-
+ " mapping");
363+
instanceIdToInstanceName.put(instanceIdExistingInstance, instanceDisplayName);
364+
log.info("Added instance id " + instanceIdExistingInstance + " named " + instanceDisplayName
365+
+ " to modelId " + modelIdExistingInstance + " mapping");
361366
instanceIdToModelName.put(instanceIdExistingInstance, modelName);
362367
log.info("Added instance id " + instanceIdExistingInstance + " to modelName " + modelName + " mapping");
363368
instanceIdToExternalKey.put(instanceIdExistingInstance, externalKeyExistingInstance);
@@ -421,6 +426,54 @@ public String getModelIdByInstanceId(@NotNull @NotEmpty String instanceId, boole
421426
}
422427
}
423428

429+
/**
430+
* try to get the modelId from the cache or if there is no cachedata
431+
*
432+
* @param instanceId the instance to locate
433+
* @param cacheMissingResults if true and we already have looked but not found
434+
* this then don't look again
435+
* @return the instance display name is there is one
436+
* @throws MissingInstanceException throws an exception if we can't locate the
437+
* instance (either in the known missing cache
438+
* if cacheMissingResults is true, or in the
439+
* IoT service otherwise)
440+
* @throws SQLException if there was a problem querying the iot
441+
* service
442+
*/
443+
public String getInstanceDisplayNameByInstanceId(@NotNull @NotEmpty String instanceId, boolean cacheMissingResults)
444+
throws MissingInstanceException, SQLException {
445+
boolean knownMissing = foundMissingInstanceIds.contains(instanceId);
446+
// are we looking at the cache ?
447+
if (cacheMissingResults && knownMissing) {
448+
// we know it's missing, and we are not checking an other time
449+
throw new MissingInstanceException(
450+
"No instance found in cache and not checking again for instanceid" + instanceId);
451+
}
452+
// do we already have the info ? note that empty string and null are valid
453+
// responses here.
454+
if (instanceIdToExternalKey.containsKey(instanceId)) {
455+
// we have the key, the model could be a string, null blank etc if one hasn't
456+
// been set, but that's still valid.
457+
return instanceIdToExternalKey.get(instanceId);
458+
}
459+
// we don't have a cached version
460+
// let's try and locate it
461+
try {
462+
InstanceKeyInfo ike = loadInstanceByInstanceId(instanceId);
463+
// OK we have something, was it previously tagged as knownMissing ? if so remove
464+
// the id
465+
if (knownMissing) {
466+
foundMissingInstanceIds.remove(instanceId);
467+
}
468+
return ike.getInstanceDisplayName();
469+
} catch (MissingInstanceException e) {
470+
// cache the missing result for later use
471+
foundMissingInstanceIds.add(instanceId);
472+
// then throw the exception
473+
throw e;
474+
}
475+
}
476+
424477
/**
425478
* try to get the external key from the cache or if there is no cachedata
426479
*
@@ -522,12 +575,14 @@ private InstanceKeyInfo loadInstanceByInstanceId(@NotNull @NotEmpty String insta
522575
if (rs.next()) {
523576
String modelId = rs.getString(MODEL_ID_COLUMN_NAME);
524577
String externalKey = rs.getString(EXTERNAL_KEY_COLUMN_NAME);
578+
String instanceDisplayName = rs.getString(INSTANCE_ID_COLUMN_DISPLAY_NAME);
525579
String modelName = modelIdToModelName.get(modelId);
526580
instanceIdToModelId.put(instanceId, modelId);
527581
instanceIdToModelName.put(instanceId, modelName);
528582
instanceIdToExternalKey.put(instanceId, externalKey);
583+
instanceIdToInstanceName.put(instanceId, instanceDisplayName);
529584
externalKeyToInstanceId.put(externalKey, instanceId);
530-
return new InstanceKeyInfo(instanceId, modelId, externalKey);
585+
return new InstanceKeyInfo(instanceId, modelId, externalKey, instanceDisplayName);
531586
} else {
532587
throw new MissingInstanceException("No instance found for instance id " + instanceId);
533588
}
@@ -544,6 +599,7 @@ private class InstanceKeyInfo {
544599
String instanceId;
545600
String modelId;
546601
String externalKey;
602+
String instanceDisplayName;
547603
}
548604

549605
public void unconfigure() throws Exception {

0 commit comments

Comments
 (0)