Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions IoTDBJDBC/.factorypath
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<factorypath>
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.42/lombok-1.18.42.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.17/slf4j-api-2.0.17.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-aop/4.10.23/micronaut-aop-4.10.23.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-aop/4.10.26/micronaut-aop-4.10.26.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/javaparser/javaparser-core/3.27.0/javaparser-core-3.27.0.jar" enabled="true" runInBatchMode="false"/>
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.49.4/checker-qual-3.49.4.jar" enabled="true" runInBatchMode="false"/>
Expand All @@ -13,17 +13,17 @@
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-tree/9.8/asm-tree-9.8.jar" enabled="true" runInBatchMode="false"/>
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-util/9.8/asm-util-9.8.jar" enabled="true" runInBatchMode="false"/>
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm-analysis/9.8/asm-analysis-9.8.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/>
<factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm/9.8/asm-9.8.jar" enabled="true" runInBatchMode="false"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-graal/4.10.23/micronaut-graal-4.10.23.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-router/4.10.23/micronaut-router-4.10.23.jar" enabled="true" runInBatchMode="false"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-graal/4.10.26/micronaut-graal-4.10.26.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-router/4.10.26/micronaut-router-4.10.26.jar" enabled="true" runInBatchMode="false"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.7.12/reactor-core-3.7.12.jar" enabled="true" runInBatchMode="false"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-websocket/4.10.23/micronaut-websocket-4.10.23.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-websocket/4.10.26/micronaut-websocket-4.10.26.jar" enabled="true" runInBatchMode="false"/>
<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"/>
<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"/>
<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"/>
<factorypathentry kind="VARJAR" id="M2_REPO/io/micronaut/micronaut-inject/4.10.4/micronaut-inject-4.10.4.jar" enabled="true" runInBatchMode="false"/>
<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"/>
Expand Down
30 changes: 16 additions & 14 deletions IoTDBJDBC/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,21 @@ SOFTWARE. -->
<parent>
<groupId>io.micronaut.platform</groupId>
<artifactId>micronaut-parent</artifactId>
<version>4.10.14</version>
<version>4.10.17</version>
</parent>

<properties>
<packaging>jar</packaging>
<jdk.version>21</jdk.version>
<release.version>21</release.version>
<version.ocisdk>3.91.0</version.ocisdk>
<version.ocisdk>3.92.0</version.ocisdk>
<version.lombok>1.18.46</version.lombok>
<version.slf4j>2.0.7</version.slf4j>
<!-- Oracle JDBC 23ai line (set to the latest approved version) -->
<version.ojdbc>23.8.0.25.04</version.ojdbc>
<version.nosql>3.85.0</version.nosql>
<version.ojdbc>23.26.2.0.0</version.ojdbc>
<version.oracledbsecurity>21.21.0.0</version.oracledbsecurity>
<!--<version.nosql>3.85.0</version.nosql>-->
<version.nosql>5.4.21</version.nosql>
<!--<micronaut.version>4.10.25</micronaut.version>-->
<micronaut.runtime>netty</micronaut.runtime>
<micronaut.aot.enabled>false</micronaut.aot.enabled>
Expand Down Expand Up @@ -109,7 +111,7 @@ SOFTWARE. -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${version.lombok}</version>
<!--<version>${version.lombok}</version>-->
<scope>compile</scope>
</dependency> <!-- SLF4J is a logging
facade that let's us change the actual logger
Expand All @@ -118,12 +120,12 @@ SOFTWARE. -->
the standard Java logging utilities. By making the dependency declaration
below Maven will bring in the core SLF4J jar files, and also the SLJ4J to
java.util.logging binding -->
<dependency>
<!--<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>${version.slf4j}</version>
<scope>compile</scope>
</dependency>
</dependency>-->
<dependency>
<groupId>io.micronaut.jsonschema</groupId>
<artifactId>micronaut-json-schema-validation</artifactId>
Expand All @@ -133,19 +135,19 @@ SOFTWARE. -->
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-common</artifactId>
<version>${version.ocisdk}</version>
<!--<version>${version.ocisdk}</version>-->
<scope>compile</scope>
</dependency>

<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-common-httpclient-jersey3</artifactId>
<version>${version.ocisdk}</version>
<!--<version>${version.ocisdk}</version>-->
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-identitydataplane</artifactId>
<version>${version.ocisdk}</version>
<!--<version>${version.ocisdk}</version>-->
</dependency>

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

<dependency>
<groupId>com.oracle.database.security</groupId>
<artifactId>osdt_cert</artifactId>
<version>21.21.0.0</version>
<version>${version.oracledbsecurity}</version>
</dependency>

<dependency>
<groupId>com.oracle.nosql.sdk</groupId>
<artifactId>nosqldriver</artifactId>
<version>5.3.7</version>
<!--<version>5.4.21</version>-->
<!--<version>5.4.23</version>-->
<version>${version.nosql}</version>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,23 +65,25 @@ Software and the Larger Work(s), and to sublicense the foregoing rights on
@Singleton
public class DeviceModelInstancesCache {
private static final String INSTANCE_ID_COLUMN_NAME = "instanceid";
private static final String INSTANCE_ID_COLUMN_DISPLAY_NAME = "displayname";
private static final String EXTERNAL_KEY_COLUMN_NAME = "externalkey";
private static final String MODEL_ID_COLUMN_NAME = "modelid";
private static final String MODEL_NAME_COLUMN_NAME = "modelname";
// these are used for bulk pre-loading of entries
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";
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";
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";
// we we don't know about this then we will try an individual load
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' ) = ? ";
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' ) = ? ";
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' ) = ?";
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' ) = ?";

private final String schemaName;
private final DBConnectionSupplier dbConnectionSupplier;
private Connection connection;

private final Map<String, String> instanceIdToModelId = Collections.synchronizedMap(new HashMap<>());
private final Map<String, String> instanceIdToExternalKey = Collections.synchronizedMap(new HashMap<>());
private final Map<String, String> instanceIdToInstanceName = Collections.synchronizedMap(new HashMap<>());
private final Map<String, String> instanceIdToModelName = Collections.synchronizedMap(new HashMap<>());
private final Map<String, String> externalKeyToInstanceId = Collections.synchronizedMap(new HashMap<>());
private final Map<String, String> modelIdToModelName = Collections.synchronizedMap(new HashMap<>());
Expand Down Expand Up @@ -147,7 +149,8 @@ public void configure() throws Exception {
// set this up so we can re-use it later if we need to query for an instance we
// didn't know about
log.fine("Creating prepared statements");
selectModelIdByInstanceIdPS = connection.prepareStatement(SELECT_MODEL_ID_AND_EXTERNAL_KEY_BY_INSTANCE_ID);
selectModelIdByInstanceIdPS = connection
.prepareStatement(SELECT_MODEL_ID_DISPLAY_NAME_AND_EXTERNAL_KEY_BY_INSTANCE_ID);
selectModelNameByModelIdPS = connection.prepareStatement(SELECT_MODEL_NAME_BY_MODEL_ID);
selectModelIdByModelNamePS = connection.prepareStatement(SELECT_MODEL_ID_BY_MODEL_NAME);
log.fine("Prepared statements created");
Expand Down Expand Up @@ -349,15 +352,17 @@ private String loadModelByModelName(@NotNull @NotEmpty String modelName)
private void preloadExistingInstances() throws SQLException {
// get all of the results
try (Statement s = connection.createStatement();
ResultSet rs = s.executeQuery(SELECT_MODEL_ID_EXTERNAL_KEY_AND_INSTANCE_ID)) {
ResultSet rs = s.executeQuery(SELECT_MODEL_ID_EXTERNAL_KEY_DISPLAY_NAME_AND_INSTANCE_ID)) {
while (rs.next()) {
String modelIdExistingInstance = rs.getString(MODEL_ID_COLUMN_NAME);
String instanceIdExistingInstance = rs.getString(INSTANCE_ID_COLUMN_NAME);
String externalKeyExistingInstance = rs.getString(EXTERNAL_KEY_COLUMN_NAME);
String instanceDisplayName = rs.getString(INSTANCE_ID_COLUMN_DISPLAY_NAME);
String modelName = modelIdToModelName.get(modelIdExistingInstance);
instanceIdToModelId.put(instanceIdExistingInstance, modelIdExistingInstance);
log.info("Added instance id " + instanceIdExistingInstance + " to modelId " + modelIdExistingInstance
+ " mapping");
instanceIdToInstanceName.put(instanceIdExistingInstance, instanceDisplayName);
log.info("Added instance id " + instanceIdExistingInstance + " named " + instanceDisplayName
+ " to modelId " + modelIdExistingInstance + " mapping");
instanceIdToModelName.put(instanceIdExistingInstance, modelName);
log.info("Added instance id " + instanceIdExistingInstance + " to modelName " + modelName + " mapping");
instanceIdToExternalKey.put(instanceIdExistingInstance, externalKeyExistingInstance);
Expand Down Expand Up @@ -421,6 +426,54 @@ public String getModelIdByInstanceId(@NotNull @NotEmpty String instanceId, boole
}
}

/**
* try to get the modelId from the cache or if there is no cachedata
*
* @param instanceId the instance to locate
* @param cacheMissingResults if true and we already have looked but not found
* this then don't look again
* @return the instance display name is there is one
* @throws MissingInstanceException throws an exception if we can't locate the
* instance (either in the known missing cache
* if cacheMissingResults is true, or in the
* IoT service otherwise)
* @throws SQLException if there was a problem querying the iot
* service
*/
public String getInstanceDisplayNameByInstanceId(@NotNull @NotEmpty String instanceId, boolean cacheMissingResults)
throws MissingInstanceException, SQLException {
boolean knownMissing = foundMissingInstanceIds.contains(instanceId);
// are we looking at the cache ?
if (cacheMissingResults && knownMissing) {
// we know it's missing, and we are not checking an other time
throw new MissingInstanceException(
"No instance found in cache and not checking again for instanceid" + instanceId);
}
// do we already have the info ? note that empty string and null are valid
// responses here.
if (instanceIdToExternalKey.containsKey(instanceId)) {
// we have the key, the model could be a string, null blank etc if one hasn't
// been set, but that's still valid.
return instanceIdToExternalKey.get(instanceId);
}
// we don't have a cached version
// let's try and locate it
try {
InstanceKeyInfo ike = loadInstanceByInstanceId(instanceId);
// OK we have something, was it previously tagged as knownMissing ? if so remove
// the id
if (knownMissing) {
foundMissingInstanceIds.remove(instanceId);
}
return ike.getInstanceDisplayName();
} catch (MissingInstanceException e) {
// cache the missing result for later use
foundMissingInstanceIds.add(instanceId);
// then throw the exception
throw e;
}
}

/**
* try to get the external key from the cache or if there is no cachedata
*
Expand Down Expand Up @@ -522,12 +575,14 @@ private InstanceKeyInfo loadInstanceByInstanceId(@NotNull @NotEmpty String insta
if (rs.next()) {
String modelId = rs.getString(MODEL_ID_COLUMN_NAME);
String externalKey = rs.getString(EXTERNAL_KEY_COLUMN_NAME);
String instanceDisplayName = rs.getString(INSTANCE_ID_COLUMN_DISPLAY_NAME);
String modelName = modelIdToModelName.get(modelId);
instanceIdToModelId.put(instanceId, modelId);
instanceIdToModelName.put(instanceId, modelName);
instanceIdToExternalKey.put(instanceId, externalKey);
instanceIdToInstanceName.put(instanceId, instanceDisplayName);
externalKeyToInstanceId.put(externalKey, instanceId);
return new InstanceKeyInfo(instanceId, modelId, externalKey);
return new InstanceKeyInfo(instanceId, modelId, externalKey, instanceDisplayName);
} else {
throw new MissingInstanceException("No instance found for instance id " + instanceId);
}
Expand All @@ -544,6 +599,7 @@ private class InstanceKeyInfo {
String instanceId;
String modelId;
String externalKey;
String instanceDisplayName;
}

public void unconfigure() throws Exception {
Expand Down
Loading