From 8be265b7b580ea75b5a2992bf89d96efd83a8584 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Thu, 14 Mar 2024 12:48:08 -0700
Subject: [PATCH 01/25] Adding shared data
Adding shared data interfaces
Updating processing context interface with new global and model shared data
---
.../core/CacheOperationStatus.java | 30 +++++++++++++++++++
.../digitaltwin/core/CacheResult.java | 24 +++++++++++++++
.../digitaltwin/core/ProcessingContext.java | 13 ++++++++
.../digitaltwin/core/SharedData.java | 27 +++++++++++++++++
4 files changed, 94 insertions(+)
create mode 100644 Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
create mode 100644 Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
create mode 100644 Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
new file mode 100644
index 0000000..8a0a8ab
--- /dev/null
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
@@ -0,0 +1,30 @@
+package com.scaleoutsoftware.digitaltwin.core;
+
+public enum CacheOperationStatus {
+
+ /**
+ * The object was successfully retrieved.
+ */
+
+ ObjectRetrieved,
+
+ /**
+ * The object was successfully added/updated.
+ */
+ ObjectPut,
+
+ /**
+ * The object could not be retrieved because it was not found.
+ */
+ ObjectDoesNotExist,
+
+ /**
+ * The object was removed successfully.
+ */
+ ObjectRemoved,
+
+ /**
+ * The cache was cleared successfully.
+ */
+ CacheCleared
+}
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
new file mode 100644
index 0000000..204bb1d
--- /dev/null
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
@@ -0,0 +1,24 @@
+package com.scaleoutsoftware.digitaltwin.core;
+
+/**
+ * Represents a response from a {@link SharedData} operation.
+ */
+public interface CacheResult {
+ /**
+ * Gets the key or null to the object associated with the result.
+ * @return the key or null.
+ */
+ public String getKey();
+
+ /**
+ * Get the object returned from a Get operation.
+ * @return the object or null.
+ */
+ public byte[] getValue();
+
+ /**
+ * Gets the status of the cache operation.
+ * @return the operation status.
+ */
+ CacheOperationStatus getStatus();
+}
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
index c785eff..676ad4a 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
@@ -222,4 +222,17 @@ public abstract class ProcessingContext implements Serializable {
* @return the {@link SimulationController} or null if no simulation is running.
*/
public abstract SimulationController getSimulationController();
+
+ /**
+ * Retrieve a {@link SharedData} accessor for this model's shared data.
+ * @return a {@link SharedData} instance.
+ */
+ public abstract SharedData getSharedModelData();
+
+ /**
+ * Retrieve a {@link SharedData} accessor for globally shared data.
+ * @return a {@link SharedData} instance.
+ */
+ public abstract SharedData getSharedGlobalData();
+
}
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
new file mode 100644
index 0000000..42ecac0
--- /dev/null
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
@@ -0,0 +1,27 @@
+package com.scaleoutsoftware.digitaltwin.core;
+
+public interface SharedData {
+ /**
+ * Retrieves an existing object from the cache.
+ * @return A cache result.
+ */
+ public CacheResult get(String key);
+
+ /**
+ * Put a new key/value mapping into the cache.
+ * @return a cache result.
+ */
+ public CacheResult put(String key, byte[] value);
+
+ /**
+ * Remove a key/value mapping from the cache.
+ * @return a cache result.
+ */
+ public CacheResult remove();
+
+ /**
+ * Clear the shared data cache.
+ * @return a cache result.
+ */
+ public CacheResult clear();
+}
From 95b447d5aed0d6708fcdc5f8dc8d39764e9816c1 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Thu, 14 Mar 2024 12:55:15 -0700
Subject: [PATCH 02/25] Fixing shared data remove interface
Fixing shared data remove interface
---
Core/build.gradle | 2 +-
.../java/com/scaleoutsoftware/digitaltwin/core/SharedData.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Core/build.gradle b/Core/build.gradle
index fdb95ca..075bdee 100644
--- a/Core/build.gradle
+++ b/Core/build.gradle
@@ -3,7 +3,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.0.4'
+version '3.0.6'
sourceCompatibility = JavaVersion.VERSION_12
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
index 42ecac0..7268adf 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
@@ -17,7 +17,7 @@ public interface SharedData {
* Remove a key/value mapping from the cache.
* @return a cache result.
*/
- public CacheResult remove();
+ public CacheResult remove(String key);
/**
* Clear the shared data cache.
From 6f5f28ca909fe6845e2fa2be51d98657c3fc04e1 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Thu, 14 Mar 2024 13:17:22 -0700
Subject: [PATCH 03/25] Updating development environment
Update workbench with shared data implementation
---
Development/build.gradle | 4 +-
.../development/TwinExecutionEngine.java | 28 +++++-
.../WorkbenchProcessingContext.java | 18 +++-
.../development/WorkbenchSharedData.java | 97 +++++++++++++++++++
.../development/TestWorkbench.java | 40 ++++++++
5 files changed, 181 insertions(+), 6 deletions(-)
create mode 100644 Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
diff --git a/Development/build.gradle b/Development/build.gradle
index f6d33ca..7aef498 100644
--- a/Development/build.gradle
+++ b/Development/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.0.5'
+version '3.0.6'
sourceCompatibility = JavaVersion.VERSION_12
@@ -20,7 +20,7 @@ dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
// public build configuration
- implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.4'
+ implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.6'
// local build configuration
//implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar')
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
index 385049a..6c02378 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
@@ -34,6 +34,8 @@ class TwinExecutionEngine implements Closeable {
private ConcurrentHashMap> _messageProcessorValueTypes;
private ConcurrentHashMap> _modelInstances;
private ConcurrentHashMap> _alertProviders;
+ private ConcurrentHashMap> _modelsSharedData;
+ private HashMap _globalSharedData;
private Workbench _workbench;
private ConcurrentHashMap _simulationSchedulers;
private ConcurrentHashMap _realTimeTimers;
@@ -52,7 +54,9 @@ void init( ) {
_simulationProcessors = new ConcurrentHashMap<>();
_messageProcessorValueTypes = new ConcurrentHashMap<>();
_modelInstances = new ConcurrentHashMap<>();
- _alertProviders = new ConcurrentHashMap<>();
+ _modelsSharedData = new ConcurrentHashMap<>();
+ _globalSharedData = new HashMap<>();
+ _alertProviders = new ConcurrentHashMap<>();
_simulationSchedulers = new ConcurrentHashMap<>();
_realTimeTimers = new ConcurrentHashMap<>();
_gson = new Gson();
@@ -242,6 +246,18 @@ SimulationStep runSimulationStep(SimulationStepArgs args) {
return status;
}
+ HashMap getModelData(String model) {
+ HashMap sharedData = _modelsSharedData.get(model);
+ if(sharedData == null) sharedData = new HashMap<>();
+ _modelsSharedData.put(model, sharedData);
+ return sharedData;
+ }
+
+ HashMap getGlobalSharedData() {
+ return _globalSharedData;
+ }
+
+
public void logMessage(String model, LogMessage message) {
ConcurrentLinkedQueue prev = _workbench.LOGGED_MESSAGES.get(model);
if(prev == null) {
@@ -315,7 +331,10 @@ ProcessingResult run(String model, String id, String source, String serializedLi
instance = proxy.getInstance();
}
MessageProcessor mp = _messageProcessors.get(model);
- WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine);
+ HashMap sharedData = _modelsSharedData.get(model);
+ if(sharedData == null) sharedData = new HashMap<>();
+ _modelsSharedData.put(model, sharedData);
+ WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData);
context.reset(model, id, source, instance);
ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(serializedList, _messageProcessorValueTypes.get(model)));
if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin;
@@ -360,7 +379,10 @@ ProcessingResult run(String model, String id, String source, List messag
instance = proxy.getInstance();
}
MessageProcessor mp = _messageProcessors.get(model);
- WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine);
+ HashMap sharedData = _modelsSharedData.get(model);
+ if(sharedData == null) sharedData = new HashMap<>();
+ _modelsSharedData.put(model, sharedData);
+ WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData);
context.reset(model, id, source, instance);
ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(messages, _messageProcessorValueTypes.get(model)));
if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin;
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
index f08c7fc..8905ce9 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
@@ -31,11 +31,15 @@ class WorkbenchProcessingContext extends ProcessingContext {
String _source;
DigitalTwinBase _twinInstance;
SimulationController _controller;
+ HashMap _modelData;
+ HashMap _globalData;
boolean _forceSave;
- WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine) {
+ WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine, HashMap modelSharedData, HashMap globalSharedData) {
_twinExecutionEngine = twinExecutionEngine;
_controller = null;
+ _modelData = modelSharedData;
+ _globalData = globalSharedData;
}
WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine, SimulationController controller) {
@@ -56,6 +60,8 @@ void reset(String model, String id, String source) {
_id = id;
_forceSave = false;
_source = source;
+ _modelData = _twinExecutionEngine.getModelData(model);
+ _globalData = _twinExecutionEngine.getGlobalSharedData();
}
void resetInstance(DigitalTwinBase instance) {
@@ -210,4 +216,14 @@ public Date getCurrentTime() {
public SimulationController getSimulationController() {
return _controller;
}
+
+ @Override
+ public SharedData getSharedModelData() {
+ return new WorkbenchSharedData(_modelData);
+ }
+
+ @Override
+ public SharedData getSharedGlobalData() {
+ return new WorkbenchSharedData(_globalData);
+ }
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
new file mode 100644
index 0000000..ffee258
--- /dev/null
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
@@ -0,0 +1,97 @@
+package com.scaleoutsoftware.digitaltwin.development;
+
+import com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus;
+import com.scaleoutsoftware.digitaltwin.core.CacheResult;
+import com.scaleoutsoftware.digitaltwin.core.SharedData;
+
+import java.util.HashMap;
+
+public class WorkbenchSharedData implements SharedData {
+ private final HashMap data;
+
+ public WorkbenchSharedData(HashMap shared) {
+ data = shared;
+ }
+ @Override
+ public CacheResult get(String s) {
+ return new CacheResult() {
+ @Override
+ public String getKey() {
+ return s;
+ }
+
+ @Override
+ public byte[] getValue() {
+ return data.getOrDefault(s, null);
+ }
+
+ @Override
+ public CacheOperationStatus getStatus() {
+ return data.containsKey(s) ? CacheOperationStatus.ObjectRetrieved : CacheOperationStatus.ObjectDoesNotExist;
+ }
+ };
+ }
+
+ @Override
+ public CacheResult put(String s, byte[] bytes) {
+ data.put(s, bytes);
+ return new CacheResult() {
+ @Override
+ public String getKey() {
+ return s;
+ }
+
+ @Override
+ public byte[] getValue() {
+ return bytes;
+ }
+
+ @Override
+ public CacheOperationStatus getStatus() {
+ return CacheOperationStatus.ObjectPut;
+ }
+ };
+ }
+
+ @Override
+ public CacheResult remove(String s) {
+ byte[] v = data.remove(s);
+ return new CacheResult() {
+ @Override
+ public String getKey() {
+ return s;
+ }
+
+ @Override
+ public byte[] getValue() {
+ return v;
+ }
+
+ @Override
+ public CacheOperationStatus getStatus() {
+ return v == null ? CacheOperationStatus.ObjectDoesNotExist : CacheOperationStatus.ObjectRemoved;
+ }
+ };
+ }
+
+ @Override
+ public CacheResult clear() {
+ data.clear();
+ return new CacheResult() {
+ @Override
+ public String getKey() {
+ return null;
+ }
+
+ @Override
+ public byte[] getValue() {
+ return null;
+ }
+
+ @Override
+ public CacheOperationStatus getStatus() {
+ return CacheOperationStatus.CacheCleared;
+ }
+ };
+ }
+}
diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
index 1be1f3c..34ec72f 100644
--- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
+++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
@@ -93,6 +93,34 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase
case "StopTimer":
processingContext.stopTimer("timer");
break;
+ case "SharedData":
+ SharedData sharedData = processingContext.getSharedModelData();
+ CacheResult result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8));
+ if(result.getStatus() == CacheOperationStatus.ObjectPut) {
+ System.out.println("Successfully stored object in model storage.");
+ }
+ result = sharedData.get("Hello");
+ if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) {
+ System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage.");
+ }
+ result = sharedData.remove("Hello");
+ if(result.getStatus() == CacheOperationStatus.ObjectRemoved) {
+ System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage.");
+ }
+ sharedData = processingContext.getSharedGlobalData();
+ result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8));
+ if(result.getStatus() == CacheOperationStatus.ObjectPut) {
+ System.out.println("Successfully stored object in global storage.");
+ }
+ result = sharedData.get("Hello");
+ if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) {
+ System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage.");
+ }
+ result = sharedData.remove("Hello");
+ if(result.getStatus() == CacheOperationStatus.ObjectRemoved) {
+ System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage.");
+ }
+ break;
default:
break;
}
@@ -736,4 +764,16 @@ public void TestWorkbenchGenerateModelSchemaExceptionally() throws Exception {
throw e;
}
}
+
+ @Test
+ public void TestWorkbenchSharedData() throws Exception {
+ try (Workbench workbench = new Workbench()) {
+ workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class);
+ LinkedList messages = new LinkedList<>();
+ messages.add(new SimpleMessage("SharedData", 29));
+ workbench.send("Simple", "23", messages);
+ } catch (Exception e) {
+ throw e;
+ }
+ }
}
From 7577ec1198c131236416fe3b678bd25b8723f62e Mon Sep 17 00:00:00 2001
From: olivier-tritschler
Date: Tue, 2 Apr 2024 12:37:10 -0700
Subject: [PATCH 04/25] Add a new persistence provider enum for the DynamoDB
provider
---
.../digitaltwin/core/PersistenceProviderType.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
index 0ac9523..2228792 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
@@ -26,6 +26,10 @@ public enum PersistenceProviderType implements Serializable {
* Enum for the Azure Digital Twin service.
*/
AzureDigitalTwinsService("AzureDigitalTwinsService", 1),
+ /**
+ * Enum for DynamoDB
+ */
+ DynamoDb("DynamoDB", 5),
/**
* Enum for SQLite
*/
From 849ece439e32025123c8c08eccd99377a9f1b6e2 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Wed, 24 Apr 2024 16:40:48 -0700
Subject: [PATCH 05/25] Adding runThisInstance implementation and
delayIndefinitely
Adding new runThisInstance and delayIndefinitely methods to the ProcessingContext's SimulationController.
---
.../core/SimulationController.java | 26 ++++++
.../digitaltwin/development/Constants.java | 79 +++++++++++++++++
.../development/SimulationEvent.java | 2 +
.../development/SimulationEventTwinImpl.java | 15 ++++
.../development/SimulationScheduler.java | 87 ++----------------
.../development/SimulationWorker.java | 88 +++++++++++++++++--
.../development/TwinExecutionEngine.java | 27 +++++-
.../WorkbenchProcessingContext.java | 4 +-
.../WorkbenchSimulationController.java | 37 +++++++-
.../development/TestWorkbench.java | 50 ++++++++++-
10 files changed, 317 insertions(+), 98 deletions(-)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
index 14d32fd..fb00cf2 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
@@ -16,6 +16,7 @@
package com.scaleoutsoftware.digitaltwin.core;
import java.time.Duration;
+import java.util.Date;
/**
* The SimulationController interface is used to interact with the running DigitalTwin simulation.
@@ -64,6 +65,20 @@ public interface SimulationController {
*/
SendingResult delay(Duration duration);
+ /**
+ *
+ * Delay simulation processing for this DigitalTwin instance, indefinitely.
+ *
+ *
+ *
+ * Simulation processing will be delayed until this instance is run with {@link SimulationController#runThisTwin()}.
+ *
+ *
+ * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled}
+ * if the delay was not processed.
+ */
+ SendingResult delayIndefinitely();
+
/**
*
* Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin
@@ -144,9 +159,20 @@ public interface SimulationController {
*/
SendingResult deleteThisInstance();
+ /**
+ * Run this instance during this simulation step. The instance will be run using the models {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)}
+ * implementation.
+ *
+ * This will cause the simulation sub-system to run this instance regardless of the instances current
+ * {@link DigitalTwinBase#NextSimulationTime}.
+ */
+ void runThisInstance();
+
/**
* Stop the simulation.
* @return a {@link SimulationStatus#InstanceRequestedStop}.
*/
SimulationStatus stopSimulation();
+
+
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java
index c5f8044..4b9361b 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java
@@ -17,4 +17,83 @@
class Constants {
public static final int MAX_TIMER_COUNT = 5;
+ /**
+ *
+ * Returns a hash that is suitable for inserting an object into a hash-based collection.
+ *
+ * -----------------------------------------------------------------------------
+ * MurmurHash3 was written by Austin Appleby, and is placed in the public
+ * domain. The author hereby disclaims copyright to this source code.
+ *
+ * Note - The x86 and x64 versions do _not_ produce the same results, as the
+ * algorithms are optimized for their respective platforms. You can still
+ * compile and run any of them on any platform, but your performance with the
+ * non-native version will be less than optimal.
+ * Original code from:
+ * https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp
+ * -----------------------------------------------------------------------------
+ *
+ * This implementation is tweaked to initialize with a hard-coded seed and to return a long instead of a
+ * 32-bit unsigned integer (since Java doesn't easily support unsigned integers).
+ * @param data The byte array to be hashed.
+ * @return Hash code for the array, with values ranging from 0 to 4,294,967,295.
+ */
+ static long getHash(byte[] data) {
+ if(data == null) {
+ throw new IllegalArgumentException("Hash data was null.");
+ }
+
+ final int seed = 947203; // Scaleout's implementation-specific seed.
+ final int c1 = 0xcc9e2d51;
+ final int c2 = 0x1b873593;
+
+ int len = data.length;
+ int h1 = seed;
+ int roundedEnd = len & 0xfffffffc; // round down to 4 byte block
+
+ for (int i = 0; i < roundedEnd; i += 4) {
+ // little endian load order
+ int k1 = (data[i] & 0xff) | ((data[i + 1] & 0xff) << 8) | ((data[i + 2] & 0xff) << 16) | (data[i + 3] << 24);
+ k1 *= c1;
+ k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15);
+ k1 *= c2;
+
+ h1 ^= k1;
+ h1 = (h1 << 13) | (h1 >>> 19); // ROTL32(h1,13);
+ h1 = h1 * 5 + 0xe6546b64;
+ }
+
+ // tail (leftover bytes that didn't fit into a 4-byte block)
+ int k1 = 0;
+
+ switch (len & 0x03) {
+ case 3:
+ k1 = (data[roundedEnd + 2] & 0xff) << 16;
+ // fallthrough
+ case 2:
+ k1 |= (data[roundedEnd + 1] & 0xff) << 8;
+ // fallthrough
+ case 1:
+ k1 |= (data[roundedEnd] & 0xff);
+ k1 *= c1;
+ k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15);
+ k1 *= c2;
+ h1 ^= k1;
+ }
+
+ // finalization
+ h1 ^= len;
+
+ // fmix(h1);
+ h1 ^= h1 >>> 16;
+ h1 *= 0x85ebca6b;
+ h1 ^= h1 >>> 13;
+ h1 *= 0xc2b2ae35;
+ h1 ^= h1 >>> 16;
+
+ // Other languages want to represent the hash as an unsigned int, but java doesn't easily have
+ // unsigned types. So we move the signed integer's bits into an "unsigned" long, which
+ // is big enough to hold all the positive values of an unsigned int.
+ return h1 & 0x00000000ffffffffL;
+ }
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
index ebd133b..19e739b 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
@@ -49,6 +49,8 @@ String getId() {
return _id;
}
+ String getModel() {return _model;}
+
void setNextSimulationTime(long nextSimulationTime) {
_nextSimulationTime = nextSimulationTime;
handleResetNextSimulationTime();
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
index e040d9f..9d1f9a7 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
@@ -19,7 +19,9 @@
import com.scaleoutsoftware.digitaltwin.core.ProcessingContext;
import com.scaleoutsoftware.digitaltwin.core.SimulationProcessor;
+import java.nio.charset.StandardCharsets;
import java.util.Date;
+import java.util.Objects;
class SimulationEventTwinImpl extends SimulationEvent {
SimulationProcessor _processor;
@@ -63,4 +65,17 @@ void handleResetNextSimulationTime() {
base.NextSimulationTime = _nextSimulationTime;
_proxy.setInstance(base);
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ SimulationEventTwinImpl that = (SimulationEventTwinImpl) o;
+ return this._proxy.getInstance().getId().compareTo(that._id) == 0 && this._proxy.getInstance().getModel().compareTo(that._model) == 0;
+ }
+
+ @Override
+ public int hashCode() {
+ return (int)Constants.getHash(_id.getBytes(StandardCharsets.UTF_8));
+ }
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
index 3b3566c..3deaeca 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
@@ -54,7 +54,7 @@ public SimulationScheduler(String modelName,
_modelName = modelName;
_simulationProcessor = modelProcessor;
for(int i = 0; i < NUM_SIMULATION_WORKERS; i++) {
- _workers.add(new SimulationWorker(i, _modelName, _simulationProcessor, digitalTwinClass, executor));
+ _workers.add(new SimulationWorker(i, _modelName, _simulationProcessor, digitalTwinClass, executor, this));
}
}
@@ -146,87 +146,14 @@ void stopTimer(String modelName, String id, String timerName) {
worker.stopTimer(modelName, id, timerName);
}
- private int findSlotId(String id) {
- return (int)((getHash(id.getBytes(StandardCharsets.UTF_8))) % (long)NUM_SIMULATION_WORKERS);
+ void runThisInstance(String model, String id) throws WorkbenchException {
+ SimulationWorker worker = _workers.get(findSlotId(id));
+ worker.runThisInstance(model, id);
}
- /**
- *
- * Returns a hash that is suitable for inserting an object into a hash-based collection.
- *
- * -----------------------------------------------------------------------------
- * MurmurHash3 was written by Austin Appleby, and is placed in the public
- * domain. The author hereby disclaims copyright to this source code.
- *
- * Note - The x86 and x64 versions do _not_ produce the same results, as the
- * algorithms are optimized for their respective platforms. You can still
- * compile and run any of them on any platform, but your performance with the
- * non-native version will be less than optimal.
- * Original code from:
- * https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp
- * -----------------------------------------------------------------------------
- *
- * This implementation is tweaked to initialize with a hard-coded seed and to return a long instead of a
- * 32-bit unsigned integer (since Java doesn't easily support unsigned integers).
- * @param data The byte array to be hashed.
- * @return Hash code for the array, with values ranging from 0 to 4,294,967,295.
- */
- static long getHash(byte[] data) {
- if(data == null) {
- throw new IllegalArgumentException("Hash data was null.");
- }
-
- final int seed = 947203; // Scaleout's implementation-specific seed.
- final int c1 = 0xcc9e2d51;
- final int c2 = 0x1b873593;
-
- int len = data.length;
- int h1 = seed;
- int roundedEnd = len & 0xfffffffc; // round down to 4 byte block
-
- for (int i = 0; i < roundedEnd; i += 4) {
- // little endian load order
- int k1 = (data[i] & 0xff) | ((data[i + 1] & 0xff) << 8) | ((data[i + 2] & 0xff) << 16) | (data[i + 3] << 24);
- k1 *= c1;
- k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15);
- k1 *= c2;
-
- h1 ^= k1;
- h1 = (h1 << 13) | (h1 >>> 19); // ROTL32(h1,13);
- h1 = h1 * 5 + 0xe6546b64;
- }
-
- // tail (leftover bytes that didn't fit into a 4-byte block)
- int k1 = 0;
-
- switch (len & 0x03) {
- case 3:
- k1 = (data[roundedEnd + 2] & 0xff) << 16;
- // fallthrough
- case 2:
- k1 |= (data[roundedEnd + 1] & 0xff) << 8;
- // fallthrough
- case 1:
- k1 |= (data[roundedEnd] & 0xff);
- k1 *= c1;
- k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15);
- k1 *= c2;
- h1 ^= k1;
- }
-
- // finalization
- h1 ^= len;
+ private int findSlotId(String id) {
+ return (int)((Constants.getHash(id.getBytes(StandardCharsets.UTF_8))) % (long)NUM_SIMULATION_WORKERS);
+ }
- // fmix(h1);
- h1 ^= h1 >>> 16;
- h1 *= 0x85ebca6b;
- h1 ^= h1 >>> 13;
- h1 *= 0xc2b2ae35;
- h1 ^= h1 >>> 16;
- // Other languages want to represent the hash as an unsigned int, but java doesn't easily have
- // unsigned types. So we move the signed integer's bits into an "unsigned" long, which
- // is big enough to hold all the positive values of an unsigned int.
- return h1 & 0x00000000ffffffffL;
- }
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
index ce759fd..14ab16f 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
@@ -23,28 +23,34 @@
import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Predicate;
class SimulationWorker implements Callable {
private final Logger _logger = LogManager.getLogger(SimulationWorker.class);
private final PriorityQueue _timeOrderedQueue = new PriorityQueue<>();
private final ConcurrentHashMap _timers = new ConcurrentHashMap<>();
+ private final ConcurrentHashMap _events = new ConcurrentHashMap<>();
private final int _slotId;
private final String _modelName;
private final SimulationProcessor _simulationProcessor;
private final TwinExecutionEngine _twinExecutionEngine;
+ private final SimulationScheduler _simulationScheduler;
private long _curSimulationTime;
private long _simulationInterval;
private long _nextSimulationTime;
+ private boolean _running;
public SimulationWorker(int slotId,
String model,
SimulationProcessor modelProcessor,
Class extends DigitalTwinBase> digitalTwinClass,
- TwinExecutionEngine engine) {
+ TwinExecutionEngine engine,
+ SimulationScheduler scheduler) {
_slotId = slotId;
_modelName = model;
_simulationProcessor = modelProcessor;
_twinExecutionEngine = engine;
+ _simulationScheduler = scheduler;
}
public void reset(SimulationStepArgs runSimulationEventArgs) {
@@ -55,38 +61,84 @@ public void reset(SimulationStepArgs runSimulationEventArgs) {
public void shutdown() {
_timeOrderedQueue.clear();
+ _events.clear();
+ _timers.clear();
}
public void addTwinToQueue(TwinProxy proxy) {
- SimulationEvent event = new SimulationEventTwinImpl(0, proxy, _simulationProcessor);
+ SimulationEvent event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor);
_timeOrderedQueue.add(event);
+ _events.put(String.format("%s%s",event.getModel(),event.getId()), event);
+ }
+
+ public void addTwinToQueue(SimulationEvent event) {
+ _timeOrderedQueue.add(event);
+ _events.put(String.format("%s%s",event.getModel(),event.getId()), event);
}
public void addTimerToQueue(TwinProxy proxy, String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) {
SimulationEvent event = new SimulationEventTimerImpl(modelName, id, interval.toMillis(), timerName, proxy, handler);
_timers.put(timerName, event);
_timeOrderedQueue.add(event);
+ _events.put(String.format("%s%s",event.getModel(),event.getId()), event);
}
public void stopTimer(String model, String id, String timerName) {
SimulationEvent event = _timers.remove(String.format("%s%s%s",model, id,timerName));
event.setProxyState(ProxyState.Removed);
+ _events.remove(String.format("%s%s",event.getModel(),event.getId()));
+ }
+
+ public void runThisInstance(String model, String id) throws WorkbenchException {
+ SimulationEvent event = _events.get(String.format("%s%s",model,id));
+ if(event == null) {
+ TwinProxy proxy = _twinExecutionEngine.getTwinProxy(model, id);
+ event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor);
+ }
+ WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine, _simulationScheduler);
+ WorkbenchProcessingContext processingContext = new WorkbenchProcessingContext(_twinExecutionEngine, simulationController);
+ Date date = new Date();
+ date.setTime(_curSimulationTime);
+ event.processSimulationEvent(processingContext, date);
+ if(simulationController.delayRequested()) {
+ long delay = simulationController.getRequestedDelay();
+ if(delay == 0x0000e677d21fdbffL) {
+ event.setPriority(simulationController.getRequestedDelay());
+ event.setNextSimulationTime(simulationController.getRequestedDelay());
+ } else if (delay == 0L) {
+ event.setPriority(_curSimulationTime);
+ event.setNextSimulationTime(_curSimulationTime);
+ } else {
+ event.setPriority(_curSimulationTime + simulationController.getRequestedDelay());
+ event.setNextSimulationTime(_curSimulationTime + simulationController.getRequestedDelay());
+ }
+ } else {
+ event.setPriority(_curSimulationTime + _simulationInterval);
+ event.setNextSimulationTime(_curSimulationTime + _simulationInterval);
+ }
+ _events.put(String.format("%s%s",model,id), event);
+ _timeOrderedQueue.add(event);
}
@Override
public SimulationStep call() throws Exception {
+ synchronized (this) {
+ _running = true;
+ }
SimulationTime simulationTime = new SimulationTime(_curSimulationTime, _simulationInterval);
long lowestNextSimulationTime = Long.MAX_VALUE;
long nextQueueTm = Long.MAX_VALUE;
boolean keepProcessing = true;
boolean delayed = false;
+ boolean addToBuffer = true;
List buffer = new LinkedList<>();
- WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine);
+ WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine, _simulationScheduler);
WorkbenchProcessingContext processingContext = new WorkbenchProcessingContext(_twinExecutionEngine, simulationController);
Date currentTime = new Date();
currentTime.setTime(_curSimulationTime);
int processed = 0;
do {
+ addToBuffer = true;
SimulationEvent next = _timeOrderedQueue.poll();
if(next != null) {
if(next.getProxyState() == ProxyState.Active) {
@@ -102,10 +154,20 @@ public SimulationStep call() throws Exception {
_logger.error("simulation processor threw an exception.", e);
result = ProcessingResult.NoUpdate;
}
- if(simulationController.getRequestedDelay() != Long.MIN_VALUE && simulationController.getRequestedDelay() != 0) {
+ if(simulationController.delayRequested()) {
delayed = true;
- next.setPriority(simulationTime.getCurrentSimulationTime() + simulationController.getRequestedDelay());
- next.setNextSimulationTime(simulationTime.getCurrentSimulationTime() + simulationController.getRequestedDelay());
+ long delay = simulationController.getRequestedDelay();
+ if(delay == 0x0000e677d21fdbffL) {
+ next.setPriority(simulationController.getRequestedDelay());
+ next.setNextSimulationTime(simulationController.getRequestedDelay());
+ } else if (delay == 0L) {
+ next.setPriority(_curSimulationTime);
+ next.setNextSimulationTime(_curSimulationTime);
+ addToBuffer = false;
+ } else {
+ next.setPriority(simulationTime.getCurrentSimulationTime() + simulationController.getRequestedDelay());
+ next.setNextSimulationTime(simulationTime.getCurrentSimulationTime() + simulationController.getRequestedDelay());
+ }
} else {
next.setPriority(simulationTime.getNextSimulationTime());
next.setNextSimulationTime(simulationTime.getNextSimulationTime());
@@ -116,15 +178,25 @@ public SimulationStep call() throws Exception {
if(simulationController.deleted()) {
result = ProcessingResult.NoUpdate;
}
-
+ if(!simulationController.enqueue()) {
+ // the user called "runThisInstance" -- the work item has already been reenqued for the
+ // current time slice.
+ addToBuffer = false;
+ }
} else {
+ synchronized (this) {
+ _running = false;
+ }
keepProcessing = false;
}
- if(!simulationController.deleted()) {
+ if(!simulationController.deleted() && addToBuffer) {
buffer.add(next);
}
}
} else {
+ synchronized (this) {
+ _running = false;
+ }
keepProcessing = false;
nextQueueTm = Long.MAX_VALUE;
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
index 4848b19..0896623 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
@@ -163,6 +163,16 @@ DigitalTwinBase getTwinInstance(String model, String id) {
return ret;
}
+ TwinProxy getTwinProxy(String model, String id) {
+ TwinProxy proxy = null;
+ ConcurrentHashMap instances = _modelInstances.get(model);
+ if(instances != null) {
+ proxy = instances.get(id);
+ return proxy;
+ }
+ return proxy;
+ }
+
String generateModelSchema(String model) throws WorkbenchException {
if(_digitalTwins.get(model) != null) {
ModelSchema schema;
@@ -334,7 +344,12 @@ ProcessingResult run(String model, String id, String source, String serializedLi
HashMap sharedData = _modelsSharedData.get(model);
if(sharedData == null) sharedData = new HashMap<>();
_modelsSharedData.put(model, sharedData);
- WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData);
+ SimulationController simulationController = null;
+ SimulationScheduler scheduler = _simulationSchedulers.get(model);
+ if(scheduler != null) {
+ simulationController = new WorkbenchSimulationController(this, scheduler);
+ }
+ WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData, simulationController);
context.reset(model, id, source, instance);
ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(serializedList, _messageProcessorValueTypes.get(model)));
if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin;
@@ -382,8 +397,16 @@ ProcessingResult run(String model, String id, String source, List messag
HashMap sharedData = _modelsSharedData.get(model);
if(sharedData == null) sharedData = new HashMap<>();
_modelsSharedData.put(model, sharedData);
- WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData);
+ WorkbenchSimulationController simulationController = null;
+ SimulationScheduler scheduler = _simulationSchedulers.get(model);
+ if(scheduler != null) {
+ simulationController = new WorkbenchSimulationController(this, scheduler);
+ }
+ WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData, simulationController);
context.reset(model, id, source, instance);
+ if(simulationController != null) {
+ simulationController.reset(model, id);
+ }
ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(messages, _messageProcessorValueTypes.get(model)));
if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin;
switch(res) {
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
index 8905ce9..d4478d7 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
@@ -35,9 +35,9 @@ class WorkbenchProcessingContext extends ProcessingContext {
HashMap _globalData;
boolean _forceSave;
- WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine, HashMap modelSharedData, HashMap globalSharedData) {
+ WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine, HashMap modelSharedData, HashMap globalSharedData, SimulationController simulationController) {
_twinExecutionEngine = twinExecutionEngine;
- _controller = null;
+ _controller = simulationController;
_modelData = modelSharedData;
_globalData = globalSharedData;
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
index 1a5e54b..a8094d7 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
@@ -24,14 +24,18 @@
class WorkbenchSimulationController implements SimulationController {
TwinExecutionEngine _engine;
+ SimulationScheduler _scheduler;
private long _requestedDelay;
+ private boolean _delayRequested;
private boolean _deleted;
+ private boolean _enqueue;
private String _modelName;
private String _id;
private SimulationStatus _simulationStatus = SimulationStatus.Running;
- public WorkbenchSimulationController(TwinExecutionEngine engine) {
- _engine = engine;
+ public WorkbenchSimulationController(TwinExecutionEngine engine, SimulationScheduler scheduler) {
+ _engine = engine;
+ _scheduler = scheduler;
}
@Override
@@ -42,6 +46,14 @@ public Duration getSimulationTimeIncrement() {
@Override
public SendingResult delay(Duration duration) {
_requestedDelay = duration.toMillis();
+ _delayRequested = true;
+ return SendingResult.Handled;
+ }
+
+ @Override
+ public SendingResult delayIndefinitely() {
+ _requestedDelay = 0x0000e677d21fdbffL;
+ _delayRequested = true;
return SendingResult.Handled;
}
@@ -116,17 +128,34 @@ public SendingResult deleteThisInstance() {
return SendingResult.Handled;
}
+ @Override
+ public void runThisTwin() {
+ try {
+ _scheduler.runThisInstance(_modelName, _id);
+ _enqueue = false;
+ } catch (WorkbenchException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
@Override
public SimulationStatus stopSimulation() {
_simulationStatus = SimulationStatus.InstanceRequestedStop;
return _simulationStatus;
}
+ public boolean delayRequested() {
+ return _delayRequested;
+ }
+
public void reset(String modelName, String id) {
_modelName = modelName;
_id = id;
_requestedDelay = Long.MIN_VALUE;
+ _delayRequested = false;
_deleted = false;
+ _enqueue = true;
}
public long getRequestedDelay() {
@@ -137,6 +166,10 @@ public boolean deleted() {
return _deleted;
}
+ public boolean enqueue() {
+ return _enqueue;
+ }
+
public SimulationStatus getSimulationStatus() {
return _simulationStatus;
}
diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
index 34ec72f..3a86d1b 100644
--- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
+++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
@@ -121,6 +121,12 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase
System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage.");
}
break;
+ case "WakeUp":
+ SimulationController controller = processingContext.getSimulationController();
+ instance._stringProp = "WakeUp";
+ System.out.println("Calling run this twin...");
+ controller.runThisTwin();
+ break;
default:
break;
}
@@ -217,15 +223,22 @@ public ProcessingResult processModel(ProcessingContext processingContext, Simula
}
public static class SimpleSimProcessor extends SimulationProcessor implements Serializable {
- private Gson _gson = new Gson();
-
- private AtomicInteger timesInvoked = new AtomicInteger(0);
- private boolean _useJson;
+ private Gson _gson = new Gson();
+ private AtomicInteger timesInvoked = new AtomicInteger(0);
+ private boolean _useJson;
+ private String _modelIdToMessage;
+ private String _instanceIdToMessage;
public SimpleSimProcessor(boolean json) {
_useJson = json;
}
+ public SimpleSimProcessor(String modelIdToMessage, String instanceIdToMessage) {
+ _useJson = false;
+ _modelIdToMessage = modelIdToMessage;
+ _instanceIdToMessage = instanceIdToMessage;
+ }
+
public int getTimesInvoked() {
return timesInvoked.get();
}
@@ -257,6 +270,18 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase
} else if (simpleDigitalTwin.getId().contains("alert")) {
processingContext.sendAlert("alert", new AlertMessage(simpleDigitalTwin.getId(), simpleDigitalTwin.getId(), simpleDigitalTwin._stringProp));
return ProcessingResult.UpdateDigitalTwin;
+ } else if (simpleDigitalTwin.getId().contains("sleeper")) {
+ if(simpleDigitalTwin._stringProp.compareTo("WakeUp") == 0) {
+ System.out.println("Model ran after runThisInstance");
+ simpleDigitalTwin._stringProp = "asleep";
+ }
+ System.out.println("Going to sleep...");
+ controller.delayIndefinitely();
+ return ProcessingResult.UpdateDigitalTwin;
+ } else if (simpleDigitalTwin.getId().contains("waker")) {
+ System.out.println("Waking up sleeper...");
+ processingContext.sendToDigitalTwin(_modelIdToMessage, _instanceIdToMessage, new SimpleMessage("WakeUp", 23));
+ return ProcessingResult.UpdateDigitalTwin;
}
long delay = Long.parseLong(simpleDigitalTwin.getId());
controller.delay(Duration.ofSeconds(delay));
@@ -776,4 +801,21 @@ public void TestWorkbenchSharedData() throws Exception {
throw e;
}
}
+
+ @Test
+ public void TestWorkbenchRunThisInstance() throws Exception {
+ try (Workbench workbench = new Workbench()) {
+ workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), new SimpleSimProcessor("Simple2", "sleeper"), SimpleDigitalTwin.class, SimpleMessage.class);
+ workbench.addSimulationModel("Simple2", new SimpleMessageProcessor(), new SimpleSimProcessor(false), SimpleDigitalTwin.class, SimpleMessage.class);
+
+ workbench.addInstance("Simple", "waker", new SimpleDigitalTwin("waker"));
+ workbench.addInstance("Simple2", "sleeper", new SimpleDigitalTwin("sleeper"));
+ long startTimeMs = System.currentTimeMillis();
+ long stopTimeMs = startTimeMs + 15000L;
+ long step = 1000L;
+ workbench.runSimulation(startTimeMs, stopTimeMs, 1, step);
+ } catch (Exception e) {
+ throw e;
+ }
+ }
}
From 538222b1b69c6b8fb586be37d72755035a5cee9b Mon Sep 17 00:00:00 2001
From: olivier-tritschler
Date: Tue, 30 Apr 2024 15:21:22 -0700
Subject: [PATCH 06/25] Support for DynamoDB persistence provider
---
.../com/scaleoutsoftware/digitaltwin/core/ModelSchema.java | 2 ++
.../digitaltwin/core/PersistenceProviderType.java | 4 ++++
2 files changed, 6 insertions(+)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
index 18daad3..a606ab6 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
@@ -187,6 +187,7 @@ public ModelSchema(
break;
case SQLite:
case SQLServer:
+ case DynamoDb:
enablePersistence = true;
azureDigitalTwinModelName = null;
break;
@@ -240,6 +241,7 @@ public ModelSchema(
break;
case SQLite:
case SQLServer:
+ case DynamoDb:
enablePersistence = true;
azureDigitalTwinModelName = null;
break;
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
index 2228792..25912b1 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
@@ -66,6 +66,8 @@ public static PersistenceProviderType fromString(String name) {
return SQLite;
case "SQLServer":
return SQLServer;
+ case "DynamoDB":
+ return DynamoDb;
default:
return null;
}
@@ -88,6 +90,8 @@ public static PersistenceProviderType fromOrdinal(int ordinal) {
return SQLServer;
case 4:
return SQLite;
+ case 5:
+ return DynamoDb;
default:
return null;
}
From 34b74fce0c45b26cb5d41ea6831b38703cd2f376 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Wed, 1 May 2024 17:22:37 -0700
Subject: [PATCH 07/25] Updating core version
Bump version from 3.0.6 to 3.0.7 for runThisInstance and DynamoDB support
---
Core/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Core/build.gradle b/Core/build.gradle
index 075bdee..a5b5db3 100644
--- a/Core/build.gradle
+++ b/Core/build.gradle
@@ -3,7 +3,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.0.6'
+version '3.0.7'
sourceCompatibility = JavaVersion.VERSION_12
From 5214f25b191dad66246b0d512c451e1925692df5 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Wed, 1 May 2024 17:26:45 -0700
Subject: [PATCH 08/25] Update development version
Bump development version
Change runThisTwin to runThisInstance
---
Development/build.gradle | 4 ++--
.../development/WorkbenchSimulationController.java | 2 +-
.../digitaltwin/development/TestWorkbench.java | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/Development/build.gradle b/Development/build.gradle
index 7aef498..d3afa74 100644
--- a/Development/build.gradle
+++ b/Development/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.0.6'
+version '3.0.7'
sourceCompatibility = JavaVersion.VERSION_12
@@ -20,7 +20,7 @@ dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
// public build configuration
- implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.6'
+ implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.7'
// local build configuration
//implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar')
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
index a8094d7..a76a580 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
@@ -129,7 +129,7 @@ public SendingResult deleteThisInstance() {
}
@Override
- public void runThisTwin() {
+ public void runThisInstance() {
try {
_scheduler.runThisInstance(_modelName, _id);
_enqueue = false;
diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
index 3a86d1b..702e5e3 100644
--- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
+++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
@@ -125,7 +125,7 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase
SimulationController controller = processingContext.getSimulationController();
instance._stringProp = "WakeUp";
System.out.println("Calling run this twin...");
- controller.runThisTwin();
+ controller.runThisInstance();
break;
default:
break;
From 2f6f386a99f53c00b081ce37cb2737c2fdb84e2c Mon Sep 17 00:00:00 2001
From: Brandon
Date: Wed, 1 May 2024 18:17:08 -0700
Subject: [PATCH 09/25] Update javadoc
---
.../scaleoutsoftware/digitaltwin/core/SimulationController.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
index fb00cf2..f796807 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
@@ -71,7 +71,7 @@ public interface SimulationController {
*
*
*
- * Simulation processing will be delayed until this instance is run with {@link SimulationController#runThisTwin()}.
+ * Simulation processing will be delayed until this instance is run with {@link SimulationController#runThisInstance()}.
*
*
* @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled}
From c48ff4665ccbdf50798029d5ba8a30e21ecee9ae Mon Sep 17 00:00:00 2001
From: Brandon
Date: Wed, 1 May 2024 18:19:25 -0700
Subject: [PATCH 10/25] Update javadoc
---
.../com/scaleoutsoftware/digitaltwin/core/SharedData.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
index 7268adf..966f2d3 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
@@ -3,18 +3,22 @@
public interface SharedData {
/**
* Retrieves an existing object from the cache.
+ * @param key the key mapping to a value.
* @return A cache result.
*/
public CacheResult get(String key);
/**
* Put a new key/value mapping into the cache.
+ * @param key the key mapping to a value.
+ * @param value the value.
* @return a cache result.
*/
public CacheResult put(String key, byte[] value);
/**
* Remove a key/value mapping from the cache.
+ * @param key the key mapping to a value.
* @return a cache result.
*/
public CacheResult remove(String key);
From 3eb07c03d7ec19f9f389c771d75657b800b92feb Mon Sep 17 00:00:00 2001
From: Brandon
Date: Thu, 2 May 2024 10:29:54 -0700
Subject: [PATCH 11/25] Updating docs
---
.../core/CacheOperationStatus.java | 18 ++++++++++++++++
.../digitaltwin/core/CacheResult.java | 15 +++++++++++++
.../digitaltwin/core/DigitalTwinBase.java | 5 +++++
.../digitaltwin/core/InitContext.java | 21 +++++++++++++++++++
.../digitaltwin/core/MessageProcessor.java | 6 ++++++
.../core/MessageProcessorBase.java | 6 ++++++
.../digitaltwin/core/ModelSchema.java | 3 +++
.../core/PersistenceProviderType.java | 2 +-
.../digitaltwin/core/ProcessingContext.java | 5 +++++
.../digitaltwin/core/SharedData.java | 18 ++++++++++++++++
.../digitaltwin/core/SimulationProcessor.java | 5 +++++
.../digitaltwin/core/SimulationStatus.java | 15 +++++++++++++
.../digitaltwin/core/TimerActionResult.java | 5 ++++-
13 files changed, 122 insertions(+), 2 deletions(-)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
index 8a0a8ab..3498640 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
@@ -1,5 +1,23 @@
+/*
+ Copyright (c) 2024 by ScaleOut Software, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
package com.scaleoutsoftware.digitaltwin.core;
+/**
+ * Status of a cache operation.
+ */
public enum CacheOperationStatus {
/**
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
index 204bb1d..f62adf1 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
@@ -1,3 +1,18 @@
+/*
+ Copyright (c) 2024 by ScaleOut Software, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
package com.scaleoutsoftware.digitaltwin.core;
/**
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java
index 84cfaa6..d8082ca 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java
@@ -45,6 +45,11 @@ public abstract class DigitalTwinBase {
*/
public long NextSimulationTime = 0L;
+ /**
+ * Default constructor.
+ */
+ public DigitalTwinBase() {}
+
/**
* Retrieve the next simulation time in milliseconds.
* @return the next simulation time in milliseconds.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
index a90b53d..d05933e 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
@@ -1,3 +1,18 @@
+/*
+ Copyright (c) 2024 by ScaleOut Software, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
package com.scaleoutsoftware.digitaltwin.core;
import java.time.Duration;
@@ -7,6 +22,12 @@
* digital twin.
*/
public abstract class InitContext {
+
+ /**
+ * Default constructor.
+ */
+ public InitContext() {}
+
/**
* Starts a new timer for the digital twin
* @param timerName the timer name
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java
index c9cdd7f..c1e6a5c 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java
@@ -23,6 +23,12 @@
* @param the type of messages processed by the real-time digital twin
*/
public abstract class MessageProcessor extends MessageProcessorBase implements Serializable {
+
+ /**
+ * Default constructor.
+ */
+ public MessageProcessor() {}
+
/**
* Processes a set of incoming messages and determines whether to update the real-time digital twin.
* @param context optional context for processing.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java
index 179dd6d..68a49c6 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java
@@ -20,6 +20,12 @@
* @param the type of the DigitalTwin
*/
public abstract class MessageProcessorBase {
+
+ /**
+ * Default constructor.
+ */
+ public MessageProcessorBase() {}
+
/**
* Helper method to ensure proper typing for the user methods.
* @param context the processing context
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
index a606ab6..abc5bd9 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
@@ -200,6 +200,9 @@ public ModelSchema(
}
/**
+ * Creates a model schema from a digital twin class, a message processor class, a message class,
+ * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ * and an alert provider configuration.
*
* @param dtClass the digital twin class implementation.
* @param mpClass the message processor class implementation.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
index 25912b1..d6712f7 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
@@ -40,7 +40,7 @@ public enum PersistenceProviderType implements Serializable {
SQLServer("SQLServer", 3),
/**
- *
+ * Enum for an unconfigured PersistenceProvider
*/
Unconfigured("", 0);
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
index 676ad4a..9803b63 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
@@ -26,6 +26,11 @@
*/
public abstract class ProcessingContext implements Serializable {
+ /**
+ * Default constructor.
+ */
+ public ProcessingContext() {}
+
/**
*
* Sends a message to a data source. This will route messages through the connector back to the data source.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
index 966f2d3..f091158 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
@@ -1,5 +1,23 @@
+/*
+ Copyright (c) 2024 by ScaleOut Software, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
package com.scaleoutsoftware.digitaltwin.core;
+/**
+ * SharedData is used to access a model's, or globally, shared cache.
+ */
public interface SharedData {
/**
* Retrieves an existing object from the cache.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
index e10e22c..9dda706 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
@@ -24,6 +24,11 @@
*/
public abstract class SimulationProcessor implements Serializable {
+ /**
+ * Default constructor.
+ */
+ public SimulationProcessor() {}
+
/**
* Processes simulation events for a real-time digital twin.
* @param context the processing context.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java
index 68712dc..fcb0f52 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java
@@ -1,3 +1,18 @@
+/*
+ Copyright (c) 2023 by ScaleOut Software, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
package com.scaleoutsoftware.digitaltwin.core;
/**
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java
index 40d53a5..f326046 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java
@@ -53,7 +53,8 @@ private TimerActionResult(int val) {
* Convert an ordinal into a {@link TimerActionResult}.
*
* 0 = {@link TimerActionResult#Success}, 1 = {@link TimerActionResult#FailedTooManyTimers},
- * 2 = {@link TimerActionResult#FailedNoSuchTimer}, 3 = {@link TimerActionResult#FailedInternalError}
+ * 2 = {@link TimerActionResult#FailedNoSuchTimer}, 3 = {@link TimerActionResult#FailedTimerAlreadyExists},
+ * 4 = {@link TimerActionResult#FailedInternalError}
* @param val the ordinal value.
* @return the associated {@link TimerActionResult} or throws an IllegalArgumentException for an unexpected
* ordinal value.
@@ -67,6 +68,8 @@ public static TimerActionResult fromOrdinal(int val) {
case 2:
return FailedNoSuchTimer;
case 3:
+ return FailedTimerAlreadyExists;
+ case 4:
return FailedInternalError;
default:
throw new IllegalArgumentException("No known TimerActionResult from value: " + val);
From 84f683019b348b39192ad7ce985e48c27c3082cf Mon Sep 17 00:00:00 2001
From: olivier-tritschler
Date: Thu, 6 Jun 2024 20:38:43 -0700
Subject: [PATCH 12/25] Add support for the CosmosDB persistence provider
---
.../scaleoutsoftware/digitaltwin/core/ModelSchema.java | 2 ++
.../digitaltwin/core/PersistenceProviderType.java | 9 +++++++++
2 files changed, 11 insertions(+)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
index a606ab6..0379724 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
@@ -188,6 +188,7 @@ public ModelSchema(
case SQLite:
case SQLServer:
case DynamoDb:
+ case CosmosDb:
enablePersistence = true;
azureDigitalTwinModelName = null;
break;
@@ -242,6 +243,7 @@ public ModelSchema(
case SQLite:
case SQLServer:
case DynamoDb:
+ case CosmosDb:
enablePersistence = true;
azureDigitalTwinModelName = null;
break;
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
index 25912b1..8c86101 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
@@ -26,6 +26,11 @@ public enum PersistenceProviderType implements Serializable {
* Enum for the Azure Digital Twin service.
*/
AzureDigitalTwinsService("AzureDigitalTwinsService", 1),
+ /**
+ * Enum for CosmosDB
+ */
+ CosmosDb("Azure Cosmos DB", 6),
+
/**
* Enum for DynamoDB
*/
@@ -68,6 +73,8 @@ public static PersistenceProviderType fromString(String name) {
return SQLServer;
case "DynamoDB":
return DynamoDb;
+ case "Azure Cosmos DB":
+ return CosmosDb;
default:
return null;
}
@@ -92,6 +99,8 @@ public static PersistenceProviderType fromOrdinal(int ordinal) {
return SQLite;
case 5:
return DynamoDb;
+ case 6:
+ return CosmosDb;
default:
return null;
}
From ca4caae7ced2ba7683a52cb395be931fc8a3f30c Mon Sep 17 00:00:00 2001
From: Brandon
Date: Tue, 11 Jun 2024 12:34:20 -0700
Subject: [PATCH 13/25] Update model schema to support message recording
---
.../digitaltwin/core/ModelSchema.java | 213 +++++++++++++++++-
1 file changed, 211 insertions(+), 2 deletions(-)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
index abc5bd9..2a8bece 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
@@ -31,12 +31,14 @@ public class ModelSchema {
private final String persistenceProvider;
private final boolean enablePersistence;
private final boolean enableSimulationSupport;
+ private final boolean enableMessageRecording;
private final List alertProviders;
private ModelSchema() {
modelType = messageProcessorType = simulationProcessorType = messageType = assemblyName = azureDigitalTwinModelName = persistenceProvider = null;
enablePersistence = false;
enableSimulationSupport = false;
+ enableMessageRecording = false;
alertProviders = null;
}
@@ -69,6 +71,42 @@ public ModelSchema(
alertProviders = null;
azureDigitalTwinModelName = null;
enablePersistence = false;
+ enableMessageRecording = false;
+ persistenceProvider = null;
+ }
+
+ /**
+ * Creates a model schema from a digital twin class, a message processor class, and a message class.
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param emr enable message recording for this model.
+ */
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ boolean emr) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = null;
+ enableSimulationSupport = false;
+ messageType = msgClass;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ alertProviders = null;
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ enableMessageRecording = emr;
persistenceProvider = null;
}
@@ -103,6 +141,7 @@ public ModelSchema(
assemblyName = "NOT_USED_BY_JAVA_MODELS";
azureDigitalTwinModelName = null;
enablePersistence = false;
+ enableMessageRecording = false;
persistenceProvider = null;
alertProviders = alertingProviders;
}
@@ -136,13 +175,56 @@ public ModelSchema(
}
modelType = dtClass;
messageProcessorType = mpClass;
- simulationProcessorType = null;
- enableSimulationSupport = false;
+ simulationProcessorType = spClass;
+ enableSimulationSupport = true;
+ messageType = msgClass;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ persistenceProvider = null;
+ enableMessageRecording = false;
+ alertProviders = alertingProviders;
+ }
+
+ /**
+ * Creates a model schema from a digital twin class, a message processor class, a message class, and
+ * alert provider configurations.
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param spClass the simulation processor class implementation.
+ * @param alertingProviders the alerting provider configurations.
+ * @param emr enable message recording for this model.
+ */
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ String spClass,
+ List alertingProviders,
+ boolean emr) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty()) ||
+ (spClass == null || spClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass),
+ (spClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = spClass;
+ enableSimulationSupport = true;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
azureDigitalTwinModelName = null;
enablePersistence = false;
persistenceProvider = null;
+ enableMessageRecording = emr;
alertProviders = alertingProviders;
}
@@ -178,6 +260,63 @@ public ModelSchema(
simulationProcessorType = null;
enableSimulationSupport = false;
messageType = msgClass;
+ enableMessageRecording = false;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ persistenceProvider = persistenceType.name();
+ switch (persistenceType) {
+ case AzureDigitalTwinsService:
+ azureDigitalTwinModelName = adtName;
+ enablePersistence = true;
+ break;
+ case SQLite:
+ case SQLServer:
+ case DynamoDb:
+ enablePersistence = true;
+ azureDigitalTwinModelName = null;
+ break;
+ default:
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ break;
+ }
+ alertProviders = alertingProviders;
+ }
+
+ /**
+ * Creates a model schema from a digital twin class, a message processor class, a message class, and
+ * alert provider configurations.
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param adtName the Azure Digital Twin model name.
+ * @param persistenceType the persistence provider type.
+ * @param alertingProviders the alerting provider configurations.
+ * @param emr enable message recording for this model.
+ */
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ String adtName,
+ PersistenceProviderType persistenceType,
+ List alertingProviders,
+ boolean emr) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = null;
+ enableSimulationSupport = false;
+ messageType = msgClass;
+ enableMessageRecording = emr;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
persistenceProvider = persistenceType.name();
switch (persistenceType) {
@@ -234,6 +373,67 @@ public ModelSchema(
messageProcessorType = mpClass;
simulationProcessorType = simulationProcessorClass;
enableSimulationSupport = true;
+ enableMessageRecording = false;
+ messageType = msgClass;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ persistenceProvider = persistenceType.name();
+ switch (persistenceType) {
+ case AzureDigitalTwinsService:
+ azureDigitalTwinModelName = adtName;
+ enablePersistence = true;
+ break;
+ case SQLite:
+ case SQLServer:
+ case DynamoDb:
+ enablePersistence = true;
+ azureDigitalTwinModelName = null;
+ break;
+ default:
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ break;
+ }
+ alertProviders = alertingProviders;
+ }
+
+ /**
+ * Creates a model schema from a digital twin class, a message processor class, a message class,
+ * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ * and an alert provider configuration.
+ *
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param simulationProcessorClass the simulation processor class implementation.
+ * @param adtName the Azure Digital Twin model name.
+ * @param persistenceType the persistence provider type.
+ * @param alertingProviders the alerting provider configurations.
+ * @param emr enable message recording for this model.
+ */
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ String simulationProcessorClass,
+ String adtName,
+ PersistenceProviderType persistenceType,
+ List alertingProviders,
+ boolean emr) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = simulationProcessorClass;
+ enableSimulationSupport = true;
+ enableMessageRecording = emr;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
persistenceProvider = persistenceType.name();
@@ -327,4 +527,13 @@ public String getAzureDigitalTwinModelName() {
* @return the persistence provider type.
*/
public PersistenceProviderType getPersistenceProvider() { return PersistenceProviderType.fromString(persistenceProvider); }
+
+ /**
+ * Retrieves the message recording enabled status. True if this model should persist messages when message recording is active,
+ * false otherwise.
+ * @return True if message recording is enabled, false otherwise.
+ */
+ public boolean messageRecordingEnabled() {
+ return enableMessageRecording;
+ }
}
From ec8238ca4c9ebdbcd1fb8f438da9ce895605df6d Mon Sep 17 00:00:00 2001
From: Brandon
Date: Wed, 10 Jul 2024 11:27:50 -0700
Subject: [PATCH 14/25] Updating version number
---
Core/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Core/build.gradle b/Core/build.gradle
index a5b5db3..cec7e01 100644
--- a/Core/build.gradle
+++ b/Core/build.gradle
@@ -3,7 +3,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.0.7'
+version '3.0.8'
sourceCompatibility = JavaVersion.VERSION_12
From a2efb7ec8969edc56be81bd705b0a3f9776ce265 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Thu, 11 Jul 2024 11:08:55 -0700
Subject: [PATCH 15/25] Update version number
---
Core/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Core/build.gradle b/Core/build.gradle
index cec7e01..5d8de5b 100644
--- a/Core/build.gradle
+++ b/Core/build.gradle
@@ -3,7 +3,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.0.8'
+version '3.0.9'
sourceCompatibility = JavaVersion.VERSION_12
From a6aa85c559cc3995fdf3e158239e9f6ef87a462d Mon Sep 17 00:00:00 2001
From: Brandon
Date: Tue, 26 Nov 2024 15:08:52 -0800
Subject: [PATCH 16/25] Updating init context, fixing shared model data
Updating init context to match c#
Fixing shared model data bug
---
.../digitaltwin/core/InitContext.java | 12 ++
.../digitaltwin/core/ModelSchema.java | 197 +++++++++++++++++-
.../core/PersistenceProviderType.java | 13 +-
.../digitaltwin/core/ProcessingContext.java | 2 +-
Development/build.gradle | 6 +-
.../development/SimulationScheduler.java | 30 +--
.../development/SimulationWorker.java | 9 +-
.../development/TwinExecutionEngine.java | 4 +-
.../digitaltwin/development/Workbench.java | 19 +-
.../development/WorkbenchInitContext.java | 10 +
.../WorkbenchProcessingContext.java | 12 +-
11 files changed, 285 insertions(+), 29 deletions(-)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
index d05933e..9c36298 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
@@ -40,6 +40,18 @@ public InitContext() {}
*/
public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler);
+ /**
+ * Retrieve a {@link SharedData} accessor for this model's shared data.
+ * @return a {@link SharedData} instance.
+ */
+ public abstract SharedData getSharedModelData();
+
+ /**
+ * Retrieve a {@link SharedData} accessor for globally shared data.
+ * @return a {@link SharedData} instance.
+ */
+ public abstract SharedData getSharedGlobalData();
+
/**
* Get the model-unique Id identifier of the initializing digital twin instance.
* @return the id identifier.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
index 2a8bece..88f37ca 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
@@ -27,6 +27,7 @@ public class ModelSchema {
private final String simulationProcessorType;
private final String messageType;
private final String assemblyName;
+ private final String entryPoint;
private final String azureDigitalTwinModelName;
private final String persistenceProvider;
private final boolean enablePersistence;
@@ -35,7 +36,7 @@ public class ModelSchema {
private final List alertProviders;
private ModelSchema() {
- modelType = messageProcessorType = simulationProcessorType = messageType = assemblyName = azureDigitalTwinModelName = persistenceProvider = null;
+ modelType = messageProcessorType = simulationProcessorType = messageType = assemblyName = entryPoint = azureDigitalTwinModelName = persistenceProvider = null;
enablePersistence = false;
enableSimulationSupport = false;
enableMessageRecording = false;
@@ -68,6 +69,36 @@ public ModelSchema(
enableSimulationSupport = false;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
+ alertProviders = null;
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ enableMessageRecording = false;
+ persistenceProvider = null;
+ }
+
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ String ep) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = null;
+ enableSimulationSupport = false;
+ messageType = msgClass;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = ep;
alertProviders = null;
azureDigitalTwinModelName = null;
enablePersistence = false;
@@ -103,6 +134,7 @@ public ModelSchema(
enableSimulationSupport = false;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
alertProviders = null;
azureDigitalTwinModelName = null;
enablePersistence = false;
@@ -110,6 +142,38 @@ public ModelSchema(
persistenceProvider = null;
}
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ String ep,
+ boolean emr) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = null;
+ enableSimulationSupport = false;
+ messageType = msgClass;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = ep;
+ alertProviders = null;
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ enableMessageRecording = emr;
+ persistenceProvider = null;
+ }
+
+ // TODO
+
/**
* Creates a model schema from a digital twin class, a message processor class, a message class, and
* alert provider configurations.
@@ -139,6 +203,7 @@ public ModelSchema(
enableSimulationSupport = false;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
azureDigitalTwinModelName = null;
enablePersistence = false;
enableMessageRecording = false;
@@ -179,6 +244,40 @@ public ModelSchema(
enableSimulationSupport = true;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ persistenceProvider = null;
+ enableMessageRecording = false;
+ alertProviders = alertingProviders;
+ }
+
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ String spClass,
+ String ep,
+ List alertingProviders) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty()) ||
+ (spClass == null || spClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass),
+ (spClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = spClass;
+ enableSimulationSupport = true;
+ messageType = msgClass;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = ep;
azureDigitalTwinModelName = null;
enablePersistence = false;
persistenceProvider = null;
@@ -221,6 +320,41 @@ public ModelSchema(
enableSimulationSupport = true;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ persistenceProvider = null;
+ enableMessageRecording = emr;
+ alertProviders = alertingProviders;
+ }
+
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ String spClass,
+ String ep,
+ List alertingProviders,
+ boolean emr) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty()) ||
+ (spClass == null || spClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass),
+ (spClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = spClass;
+ enableSimulationSupport = true;
+ messageType = msgClass;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = ep;
azureDigitalTwinModelName = null;
enablePersistence = false;
persistenceProvider = null;
@@ -262,6 +396,7 @@ public ModelSchema(
messageType = msgClass;
enableMessageRecording = false;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
persistenceProvider = persistenceType.name();
switch (persistenceType) {
case AzureDigitalTwinsService:
@@ -318,6 +453,7 @@ public ModelSchema(
messageType = msgClass;
enableMessageRecording = emr;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
persistenceProvider = persistenceType.name();
switch (persistenceType) {
case AzureDigitalTwinsService:
@@ -376,6 +512,7 @@ public ModelSchema(
enableMessageRecording = false;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
persistenceProvider = persistenceType.name();
switch (persistenceType) {
case AzureDigitalTwinsService:
@@ -436,6 +573,56 @@ public ModelSchema(
enableMessageRecording = emr;
messageType = msgClass;
assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = null;
+ persistenceProvider = persistenceType.name();
+ switch (persistenceType) {
+ case AzureDigitalTwinsService:
+ azureDigitalTwinModelName = adtName;
+ enablePersistence = true;
+ break;
+ case SQLite:
+ case SQLServer:
+ case DynamoDb:
+ case CosmosDb:
+ enablePersistence = true;
+ azureDigitalTwinModelName = null;
+ break;
+ default:
+ azureDigitalTwinModelName = null;
+ enablePersistence = false;
+ break;
+ }
+ alertProviders = alertingProviders;
+ }
+
+ public ModelSchema(
+ String dtClass,
+ String mpClass,
+ String msgClass,
+ String simulationProcessorClass,
+ String adtName,
+ String ep,
+ PersistenceProviderType persistenceType,
+ List alertingProviders,
+ boolean emr) {
+ if( (dtClass == null || dtClass.isEmpty()) ||
+ (mpClass == null || mpClass.isEmpty()) ||
+ (msgClass == null || msgClass.isEmpty())
+ ) {
+ throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s",
+ (dtClass == null ? "null dtClass" : dtClass),
+ (mpClass == null ? "null mpClass" : mpClass),
+ (msgClass == null ? "null mpClass" : msgClass)
+ ));
+ }
+ modelType = dtClass;
+ messageProcessorType = mpClass;
+ simulationProcessorType = simulationProcessorClass;
+ enableSimulationSupport = true;
+ enableMessageRecording = emr;
+ messageType = msgClass;
+ assemblyName = "NOT_USED_BY_JAVA_MODELS";
+ entryPoint = ep;
persistenceProvider = persistenceType.name();
switch (persistenceType) {
case AzureDigitalTwinsService:
@@ -536,4 +723,12 @@ public String getAzureDigitalTwinModelName() {
public boolean messageRecordingEnabled() {
return enableMessageRecording;
}
+
+ /**
+ * Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
+ * @return the entry point for launching.
+ */
+ public String getEntryPoint() {
+ return entryPoint;
+ }
}
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
index d6712f7..ee03f29 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
@@ -44,13 +44,22 @@ public enum PersistenceProviderType implements Serializable {
*/
Unconfigured("", 0);
- private String _name;
- private int _value;
+ private final String _name;
+ private final int _value;
PersistenceProviderType(String name, int ordinal) {
_name = name;
_value = ordinal;
}
+
+ public String getName() {
+ return _name;
+ }
+
+ public int getServiceOrdinalValue() {
+ return _value;
+ }
+
/**
* Return the PersistenceProviderType from a string value. We do not rely on Java's naming
* because the string values need to be cross-platform and the names may be different in each language.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
index 9803b63..7637b9b 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
@@ -145,7 +145,7 @@ public ProcessingContext() {}
/**
*
- * This method sends an alert message to supported systems. See "TODO: Link to docs" for more details on supported systems.
+ * This method sends an alert message to supported systems.
*
*
*
diff --git a/Development/build.gradle b/Development/build.gradle
index d3afa74..fbefc08 100644
--- a/Development/build.gradle
+++ b/Development/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.0.7'
+version '3.2.1'
sourceCompatibility = JavaVersion.VERSION_12
@@ -20,8 +20,8 @@ dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
// public build configuration
- implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.7'
+ //implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.7'
// local build configuration
- //implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar')
+ implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar')
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
index 3deaeca..76a75ed 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
@@ -29,17 +29,8 @@ class SimulationScheduler {
static AtomicInteger PROCESSED = new AtomicInteger(0);
static AtomicInteger QUEUED = new AtomicInteger(0);
static AtomicInteger SENT = new AtomicInteger(0);
- private static final int NUM_SIMULATION_WORKERS = Runtime.getRuntime().availableProcessors();
- private final List _workers = new ArrayList<>(NUM_SIMULATION_WORKERS);
- private final ExecutorService _simulationService = Executors.newFixedThreadPool(NUM_SIMULATION_WORKERS, new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- Thread t = new Thread(r, "SimulationWorker");
- t.setName(t.getName()+"-"+t.getId());
- t.setDaemon(true);
- return t;
- }
- });
+ private final List _workers;
+ private final ExecutorService _simulationService;
private final String _modelName;
private final SimulationProcessor _simulationProcessor;
private final Logger _logger = LogManager.getLogger(SimulationScheduler.class);
@@ -50,10 +41,21 @@ public Thread newThread(Runnable r) {
public SimulationScheduler(String modelName,
Class digitalTwinClass,
SimulationProcessor extends DigitalTwinBase> modelProcessor,
- TwinExecutionEngine executor) {
+ TwinExecutionEngine executor,
+ int numWorkers) {
_modelName = modelName;
_simulationProcessor = modelProcessor;
- for(int i = 0; i < NUM_SIMULATION_WORKERS; i++) {
+ _workers = new ArrayList<>(numWorkers);
+ _simulationService = Executors.newFixedThreadPool(numWorkers, new ThreadFactory() {
+ @Override
+ public Thread newThread(Runnable r) {
+ Thread t = new Thread(r, "SimulationWorker");
+ t.setName(t.getName()+"-"+t.getId());
+ t.setDaemon(true);
+ return t;
+ }
+ });
+ for(int i = 0; i < numWorkers; i++) {
_workers.add(new SimulationWorker(i, _modelName, _simulationProcessor, digitalTwinClass, executor, this));
}
}
@@ -152,7 +154,7 @@ void runThisInstance(String model, String id) throws WorkbenchException {
}
private int findSlotId(String id) {
- return (int)((Constants.getHash(id.getBytes(StandardCharsets.UTF_8))) % (long)NUM_SIMULATION_WORKERS);
+ return (int)((Constants.getHash(id.getBytes(StandardCharsets.UTF_8))) % (long)_workers.size());
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
index 14ab16f..8535cc1 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
@@ -90,13 +90,16 @@ public void stopTimer(String model, String id, String timerName) {
}
public void runThisInstance(String model, String id) throws WorkbenchException {
- SimulationEvent event = _events.get(String.format("%s%s",model,id));
+ SimulationEvent event = _events.remove(String.format("%s%s",model,id));
if(event == null) {
TwinProxy proxy = _twinExecutionEngine.getTwinProxy(model, id);
event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor);
+ } else {
+ _timeOrderedQueue.remove(event);
}
WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine, _simulationScheduler);
WorkbenchProcessingContext processingContext = new WorkbenchProcessingContext(_twinExecutionEngine, simulationController);
+ processingContext.reset(model, id, null);
Date date = new Date();
date.setTime(_curSimulationTime);
event.processSimulationEvent(processingContext, date);
@@ -143,7 +146,7 @@ public SimulationStep call() throws Exception {
if(next != null) {
if(next.getProxyState() == ProxyState.Active) {
processed++;
- nextQueueTm = next.getPriority();
+ nextQueueTm = next.getPriority();
if(next.getPriority() <= simulationTime.getCurrentSimulationTime()) {
simulationController.reset(_modelName, next.getId());
processingContext.reset(_modelName, next.getId(), null);
@@ -179,7 +182,7 @@ public SimulationStep call() throws Exception {
result = ProcessingResult.NoUpdate;
}
if(!simulationController.enqueue()) {
- // the user called "runThisInstance" -- the work item has already been reenqued for the
+ // the user called "runThisInstance" -- the work item has already been re-enqueued for the
// current time slice.
addToBuffer = false;
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
index 0896623..7e9ccba 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
@@ -69,13 +69,13 @@ void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMes
_messageProcessorValueTypes.put(digitalTwinModelName, messageClass);
}
- void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass) {
+ void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass, int numWorkers) {
_modelNames.add(digitalTwinModelName);
_digitalTwins.put(digitalTwinModelName, dtType);
_messageProcessors.put(digitalTwinModelName, digitalTwinMessageProcessor);
_simulationProcessors.put(digitalTwinModelName, simulationProcessor);
_messageProcessorValueTypes.put(digitalTwinModelName, messageClass);
- _simulationSchedulers.put(digitalTwinModelName, new SimulationScheduler(digitalTwinModelName, dtType, simulationProcessor, this));
+ _simulationSchedulers.put(digitalTwinModelName, new SimulationScheduler(digitalTwinModelName, dtType, simulationProcessor, this, numWorkers));
}
void addTimer(String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) {
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
index 3448b55..fb33f3a 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
@@ -259,6 +259,7 @@ public class Workbench implements AutoCloseable {
private long _now, _next;
private SimulationStep _result = null;
private boolean _simulationStarted = false;
+ private int _numWorkers = Runtime.getRuntime().availableProcessors();
/**
@@ -268,6 +269,14 @@ public Workbench() {
_twinExecutionEngine = new TwinExecutionEngine(this);
}
+ /**
+ * Instantiate the workbench.
+ */
+ public Workbench(int numSimulationWorkers) {
+ _twinExecutionEngine = new TwinExecutionEngine(this);
+ _numWorkers = numSimulationWorkers;
+ }
+
/**
* Adds a real-time digital twin model to the workbench.
@@ -311,7 +320,7 @@ public void addSimulationModel(String modelName, M
}
validate(digitalTwinMessageProcessor, dtType);
- _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, messageClass);
+ _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, messageClass, _numWorkers);
}
/**
@@ -707,6 +716,14 @@ static void validate(MessageProcessor digit
}
}
+ public void addSharedModelData(String modelName, String key, byte[] value) {
+ _twinExecutionEngine.getModelData(modelName).put(key, value);
+ }
+
+ public void addGlobalModelData(String key, byte[] value) {
+ _twinExecutionEngine.getGlobalSharedData().put(key, value);
+ }
+
@Override
public void close() throws Exception {
_twinExecutionEngine.close();
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java
index 29e6a48..1498f60 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java
@@ -37,6 +37,16 @@ public TimerActionResult startTimer(String timerName
return WorkbenchTimerService.startTimer(_twinExecutionEngine, (T)_instance, _model, _id, timerName, duration, timerType, timerHandler);
}
+ @Override
+ public SharedData getSharedModelData() {
+ return new WorkbenchSharedData(_twinExecutionEngine.getModelData(_model));
+ }
+
+ @Override
+ public SharedData getSharedGlobalData() {
+ return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData());
+ }
+
@Override
public String getId() {
return _id;
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
index d4478d7..0e9e2f8 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
@@ -53,6 +53,8 @@ void reset(String model, String id, String source, DigitalTwinBase instance) {
_twinInstance = instance;
_forceSave = false;
_source = source;
+ _modelData = _twinExecutionEngine.getModelData(model);
+ _globalData = _twinExecutionEngine.getGlobalSharedData();
}
void reset(String model, String id, String source) {
@@ -112,8 +114,14 @@ public SendingResult sendToDigitalTwin(String model, String id, byte[] bytes) {
public SendingResult sendToDigitalTwin(String model, String id, Object jsonSerializableMessage) {
try {
if(_twinExecutionEngine.getTwinInstance(model, id) != null) {
- List jsonSerializableMessages = new LinkedList<>();
- jsonSerializableMessages.add(jsonSerializableMessage);
+ List jsonSerializableMessages;
+ if(jsonSerializableMessage instanceof List) {
+ jsonSerializableMessages = (List)jsonSerializableMessage;
+ } else {
+ jsonSerializableMessages = new LinkedList<>();
+ jsonSerializableMessages.add(jsonSerializableMessage);
+ }
+
return _twinExecutionEngine.run(model, id, null, jsonSerializableMessages) != null ? SendingResult.Handled : SendingResult.NotHandled;
} else {
return SendingResult.NotHandled;
From 1e59cae15f5bb5cfc19a9d01af6b12bc4f43bdf8 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Wed, 8 Jan 2025 10:20:04 -0800
Subject: [PATCH 17/25] Adding onInitSimulation
Adding new onInitSimulation and InitSimulationContext
Updating workbench with new onInitSimulation
Bumping version numbers
---
Core/build.gradle | 2 +-
.../core/InitSimulationContext.java | 15 ++++++
.../core/SimulationController.java | 12 +++++
.../digitaltwin/core/SimulationProcessor.java | 27 ++++++++++
Development/build.gradle | 4 +-
.../development/SimulationEvent.java | 6 ++-
.../development/SimulationEventTimerImpl.java | 5 ++
.../development/SimulationEventTwinImpl.java | 24 ++++++---
.../development/SimulationScheduler.java | 22 ++++++--
.../development/SimulationWorker.java | 10 +++-
.../development/TwinExecutionEngine.java | 4 +-
.../digitaltwin/development/Workbench.java | 14 ++++++
.../WorkbenchInitSimulationContext.java | 24 +++++++++
.../WorkbenchSimulationController.java | 6 +++
.../development/WorkbenchSimulationFlags.java | 2 +
.../development/TestWorkbench.java | 50 +++++++++++++++++++
16 files changed, 210 insertions(+), 17 deletions(-)
create mode 100644 Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java
create mode 100644 Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
diff --git a/Core/build.gradle b/Core/build.gradle
index 5d8de5b..660e9c5 100644
--- a/Core/build.gradle
+++ b/Core/build.gradle
@@ -3,7 +3,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.0.9'
+version '3.0.10'
sourceCompatibility = JavaVersion.VERSION_12
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java
new file mode 100644
index 0000000..0595a2a
--- /dev/null
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java
@@ -0,0 +1,15 @@
+package com.scaleoutsoftware.digitaltwin.core;
+
+public interface InitSimulationContext {
+ /**
+ * Retrieve a {@link SharedData} accessor for this model's shared data.
+ * @return a {@link SharedData} instance.
+ */
+ public abstract SharedData getSharedModelData();
+
+ /**
+ * Retrieve a {@link SharedData} accessor for globally shared data.
+ * @return a {@link SharedData} instance.
+ */
+ public abstract SharedData getSharedGlobalData();
+}
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
index f796807..e18471f 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
@@ -31,6 +31,18 @@ public interface SimulationController {
*/
Duration getSimulationTimeIncrement();
+ /**
+ *
+ */
+
+ /**
+ *
+ * Retrieves the simulation start time.
+ *
+ * @return the simulation start time.
+ */
+ Date getSimulationStartTime();
+
/**
*
* Delay simulation processing for this DigitalTwin instance for a duration of time.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
index 9dda706..d592665 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
@@ -38,4 +38,31 @@ public SimulationProcessor() {}
* {@link ProcessingResult#NoUpdate} to ignore the changes.
*/
public abstract ProcessingResult processModel(ProcessingContext context, T instance, Date epoch);
+
+ /**
+ *
+ * Optional method that is called per-instance when a simulation is started. Default behavior is a no-op.
+ *
+ *
+ *
+ * onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed
+ * between simulation runs.
+ *
+ *
+ * Set variables in global or shared data.
+ * Run a simulation.
+ * onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
+ * Complete simulation and evaluate the result.
+ *
+ *
+ *
+ *
+ * @param context The simulation init context.
+ * @param instance The digital twin instance.
+ * @param epoch the simulation start time.
+ * @return {@link ProcessingResult#UpdateDigitalTwin} or {@link ProcessingResult#NoUpdate}. Default behavior: {@link ProcessingResult#NoUpdate}.
+ */
+ public ProcessingResult onInitSimulation(InitSimulationContext context, T instance, Date epoch) {
+ return ProcessingResult.NoUpdate;
+ }
}
diff --git a/Development/build.gradle b/Development/build.gradle
index fbefc08..d3f3bfd 100644
--- a/Development/build.gradle
+++ b/Development/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group 'com.scaleoutsoftware.digitaltwin'
-version '3.2.1'
+version '3.2.2'
sourceCompatibility = JavaVersion.VERSION_12
@@ -20,7 +20,7 @@ dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
// public build configuration
- //implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.7'
+ //implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.9'
// local build configuration
implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar')
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
index 19e739b..034f655 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
@@ -37,6 +37,10 @@ abstract class SimulationEvent implements Comparable {
abstract void setProxyState(ProxyState newState);
+ abstract void handleResetNextSimulationTime();
+
+ abstract void simulationInit(Date simulationStartTime);
+
long getPriority() {
return _priority;
}
@@ -56,7 +60,7 @@ void setNextSimulationTime(long nextSimulationTime) {
handleResetNextSimulationTime();
}
- abstract void handleResetNextSimulationTime();
+
@Override
public int compareTo(SimulationEvent other) {
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java
index 864b861..b9c5d8b 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java
@@ -55,4 +55,9 @@ void setProxyState(ProxyState newState) {
@Override
void handleResetNextSimulationTime() {
}
+
+ @Override
+ void simulationInit(Date simulationStartTime) {
+
+ }
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
index 9d1f9a7..b2cac44 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
@@ -15,9 +15,7 @@
*/
package com.scaleoutsoftware.digitaltwin.development;
-import com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase;
-import com.scaleoutsoftware.digitaltwin.core.ProcessingContext;
-import com.scaleoutsoftware.digitaltwin.core.SimulationProcessor;
+import com.scaleoutsoftware.digitaltwin.core.*;
import java.nio.charset.StandardCharsets;
import java.util.Date;
@@ -26,11 +24,15 @@
class SimulationEventTwinImpl extends SimulationEvent {
SimulationProcessor _processor;
TwinProxy _proxy;
+ SharedData _modelSharedData;
+ SharedData _globalSharedData;
- SimulationEventTwinImpl(long priority, TwinProxy proxy, SimulationProcessor processor) {
+ SimulationEventTwinImpl(long priority, TwinProxy proxy, SimulationProcessor processor, SharedData modelSharedData, SharedData globalSharedData) {
super(proxy.getInstance().Model, proxy.getInstance().Id, priority);
- _proxy = proxy;
- _processor = processor;
+ _proxy = proxy;
+ _processor = processor;
+ _modelSharedData = modelSharedData;
+ _globalSharedData = globalSharedData;
}
@Override
@@ -66,6 +68,16 @@ void handleResetNextSimulationTime() {
_proxy.setInstance(base);
}
+ @Override
+ void simulationInit(Date simulationStartTime) {
+ InitSimulationContext context = new WorkbenchInitSimulationContext(_globalSharedData, _modelSharedData);
+ synchronized (_proxy) {
+ DigitalTwinBase base = _proxy.getInstance();
+ _processor.onInitSimulation(context, base, simulationStartTime);
+ _proxy.setInstance(base);
+ }
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
index 76a75ed..cc81c66 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
@@ -35,6 +35,7 @@ class SimulationScheduler {
private final SimulationProcessor _simulationProcessor;
private final Logger _logger = LogManager.getLogger(SimulationScheduler.class);
private long _curSimulationTime;
+ private Date _simulationStartTime;
private boolean _isActive;
@@ -60,8 +61,8 @@ public Thread newThread(Runnable r) {
}
}
- // -------------- public methods ----------------
- public SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) {
+ // -------------- package private methods ----------------
+ SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) {
_logger.info("Received run simulation event with args: " + runSimulationEventArgs.getCurSimulationTime() + " iterationSize: " + runSimulationEventArgs.getIterationSize() + " flags: " + runSimulationEventArgs.getSimulationFlags() );
long current = System.currentTimeMillis();
SimulationStep ret;
@@ -73,12 +74,17 @@ public SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) {
worker.shutdown();
}
return new SimulationStep(SimulationStatus.UserRequested,_curSimulationTime);
+ } if(runSimulationEventArgs.getSimulationFlags() == WorkbenchSimulationFlags.Start) {
+ _logger.info("Starting simulation; initializing instances.");
+ for(SimulationWorker worker : _workers) {
+ worker.initSimulation(new Date(runSimulationEventArgs.getCurSimulationTime()));
+ }
+ return new SimulationStep(SimulationStatus.Running,_curSimulationTime);
} else {
ret = runSimulationStep(runSimulationEventArgs);
}
_logger.info(String.format("runSim complete in %s ms... returning next: %s", (System.currentTimeMillis()-current), ret));
- _logger.info(String.format("Queued: %s Processed: %s Sent: %s", QUEUED.getAndSet(0), PROCESSED.getAndSet(0), SENT.getAndSet(0)));
return ret;
}
@@ -93,6 +99,16 @@ void setStatus(boolean active) {
_isActive = active;
}
+ Date getSimulationStartTime() {
+ return _simulationStartTime;
+ }
+
+ void setSimulationStartTime(Date simulationStartTime) {
+ _simulationStartTime = simulationStartTime;
+ }
+
+
+
// -------------- private methods ----------------
private SimulationStep runSimulationStep(SimulationStepArgs args) {
long currentTimeMs = System.currentTimeMillis();
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
index 8535cc1..0c3d11d 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
@@ -66,7 +66,7 @@ public void shutdown() {
}
public void addTwinToQueue(TwinProxy proxy) {
- SimulationEvent event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor);
+ SimulationEvent event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor, new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()), new WorkbenchSharedData(_twinExecutionEngine.getModelData(_modelName)));
_timeOrderedQueue.add(event);
_events.put(String.format("%s%s",event.getModel(),event.getId()), event);
}
@@ -89,11 +89,17 @@ public void stopTimer(String model, String id, String timerName) {
_events.remove(String.format("%s%s",event.getModel(),event.getId()));
}
+ void initSimulation(Date startTime) {
+ for(SimulationEvent event : _events.values()) {
+ event.simulationInit(startTime);
+ }
+ }
+
public void runThisInstance(String model, String id) throws WorkbenchException {
SimulationEvent event = _events.remove(String.format("%s%s",model,id));
if(event == null) {
TwinProxy proxy = _twinExecutionEngine.getTwinProxy(model, id);
- event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor);
+ event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor, new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()), new WorkbenchSharedData(_twinExecutionEngine.getModelData(_modelName)));
} else {
_timeOrderedQueue.remove(event);
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
index 7e9ccba..66d8739 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
@@ -228,12 +228,12 @@ SendingResult sendToSource(String source, String model, String id, String msg) t
}
SendingResult sendToSource(String source, String model, String id, List jsonSerializableMessage) throws WorkbenchException {
- if(_modelNames.contains(source)) {
+ if (_modelNames.contains(source)) {
run(source, id, null, jsonSerializableMessage);
return SendingResult.Handled;
} else {
String msg = _gson.toJson(jsonSerializableMessage);
- ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap>());
+ ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap>());
List messages = messagesByModel.getOrDefault(id, new LinkedList<>());
messages.add(msg);
messagesByModel.put(id, messages);
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
index fb33f3a..0c38fa1 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
@@ -372,6 +372,8 @@ public SimulationStep runSimulation(long startTime, long endTime, double speedup
SimulationStep ret, result = null;
SimulationStepArgs args;
long now, curTime, start, end, deltaTm, delta, wait, numItv;
+ args = new SimulationStepArgs(startTime, interval, WorkbenchSimulationFlags.Start);
+ _twinExecutionEngine.runSimulationStep(args);
SimulationStatus status = SimulationStatus.Running;
now = curTime = startTime;
while(status == SimulationStatus.Running &&
@@ -546,6 +548,18 @@ public List getAlertMessages(String model, String alertProvider) t
return Arrays.asList(perModelMessages.get(alertProvider).toArray(new AlertMessage[0]));
}
+ public SharedData getSharedModelData(String model) throws WorkbenchException {
+ if(_twinExecutionEngine.hasModel(model)) {
+ return new WorkbenchSharedData(_twinExecutionEngine.getModelData(model));
+ } else {
+ throw new WorkbenchException("Workbench does not contain model " + model);
+ }
+ }
+
+ public SharedData getSharedGlobalData(String model) throws WorkbenchException {
+ return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData());
+ }
+
/**
* Generates a ModelSchema for the defined model
*
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
new file mode 100644
index 0000000..213b4d4
--- /dev/null
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
@@ -0,0 +1,24 @@
+package com.scaleoutsoftware.digitaltwin.development;
+
+import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext;
+import com.scaleoutsoftware.digitaltwin.core.SharedData;
+
+public class WorkbenchInitSimulationContext implements InitSimulationContext {
+ SharedData _globalData;
+ SharedData _modelData;
+
+ public WorkbenchInitSimulationContext(SharedData globalData, SharedData modelData) {
+ _globalData = globalData;
+ _modelData = modelData;
+ }
+
+ @Override
+ public SharedData getSharedModelData() {
+ return _modelData;
+ }
+
+ @Override
+ public SharedData getSharedGlobalData() {
+ return _globalData;
+ }
+}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
index a76a580..7e03121 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
@@ -19,6 +19,7 @@
import java.nio.charset.StandardCharsets;
import java.time.Duration;
+import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@@ -43,6 +44,11 @@ public Duration getSimulationTimeIncrement() {
return null;
}
+ @Override
+ public Date getSimulationStartTime() {
+ return _scheduler.getSimulationStartTime();
+ }
+
@Override
public SendingResult delay(Duration duration) {
_requestedDelay = duration.toMillis();
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java
index 8910290..287bbb8 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java
@@ -16,6 +16,8 @@
package com.scaleoutsoftware.digitaltwin.development;
enum WorkbenchSimulationFlags {
+ // Start the simulation
+ Start,
// Run the simulation
Run,
// Stop the simulation
diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
index 702e5e3..1cd8116 100644
--- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
+++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
@@ -107,6 +107,7 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase
if(result.getStatus() == CacheOperationStatus.ObjectRemoved) {
System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage.");
}
+ result = sharedData.put("modelTest", "assert".getBytes(StandardCharsets.UTF_8));
sharedData = processingContext.getSharedGlobalData();
result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8));
if(result.getStatus() == CacheOperationStatus.ObjectPut) {
@@ -120,6 +121,7 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase
if(result.getStatus() == CacheOperationStatus.ObjectRemoved) {
System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage.");
}
+ result = sharedData.put("globalTest", "assert".getBytes(StandardCharsets.UTF_8));
break;
case "WakeUp":
SimulationController controller = processingContext.getSimulationController();
@@ -282,6 +284,8 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase
System.out.println("Waking up sleeper...");
processingContext.sendToDigitalTwin(_modelIdToMessage, _instanceIdToMessage, new SimpleMessage("WakeUp", 23));
return ProcessingResult.UpdateDigitalTwin;
+ } else if (simpleDigitalTwin.getId().compareTo("initSimulation") == 0) {
+ return ProcessingResult.UpdateDigitalTwin;
}
long delay = Long.parseLong(simpleDigitalTwin.getId());
controller.delay(Duration.ofSeconds(delay));
@@ -294,6 +298,15 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase
}
return ProcessingResult.UpdateDigitalTwin;
}
+
+ @Override
+ public ProcessingResult onInitSimulation(InitSimulationContext ctx, SimpleDigitalTwin simpleDigitalTwin, Date date) {
+ if(simpleDigitalTwin.getId().compareTo("initSimulation") == 0) {
+ timesInvoked.set(1000);
+ }
+
+ return ProcessingResult.UpdateDigitalTwin;
+ }
}
@Test
@@ -785,6 +798,7 @@ public void TestWorkbenchGenerateModelSchemaExceptionally() throws Exception {
workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class);
workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class);
String schemaAsJson = workbench.generateModelSchema("");
+ Assert.assertNotNull(schemaAsJson);
} catch (Exception e) {
throw e;
}
@@ -797,6 +811,14 @@ public void TestWorkbenchSharedData() throws Exception {
LinkedList messages = new LinkedList<>();
messages.add(new SimpleMessage("SharedData", 29));
workbench.send("Simple", "23", messages);
+ CacheResult result = workbench.getSharedModelData("Simple").get("modelTest");
+ Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus());
+ Assert.assertEquals("modelTest", result.getKey());
+ Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8));
+ result = workbench.getSharedGlobalData("Simple").get("globalTest");
+ Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus());
+ Assert.assertEquals("globalTest", result.getKey());
+ Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8));
} catch (Exception e) {
throw e;
}
@@ -814,6 +836,34 @@ public void TestWorkbenchRunThisInstance() throws Exception {
long stopTimeMs = startTimeMs + 15000L;
long step = 1000L;
workbench.runSimulation(startTimeMs, stopTimeMs, 1, step);
+ SimpleDigitalTwin waker = (SimpleDigitalTwin) workbench.getInstances("Simple").get("waker");
+ SimpleDigitalTwin sleeper = (SimpleDigitalTwin) workbench.getInstances("Simple2").get("sleeper");
+ Assert.assertNotNull(waker);
+ Assert.assertNotNull(sleeper);
+ Assert.assertEquals("awake", waker._stringProp);
+ Assert.assertEquals("messagesent", sleeper._stringProp);
+ } catch (Exception e) {
+ throw e;
+ }
+ }
+
+ @Test
+ public void TestWorkbenchInitSimulation() throws Exception {
+ try (Workbench workbench = new Workbench()) {
+ SimpleSimProcessor processor = new SimpleSimProcessor(false);
+ workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class);
+
+ workbench.addInstance("Simple", "initSimulation", new SimpleDigitalTwin("waker"));
+
+ long simRuntimeMs = 15000L;
+ long startTimeMs = System.currentTimeMillis();
+ long stopTimeMs = startTimeMs + simRuntimeMs;
+ int speedup = 1;
+ long step = 1000L;
+ long expectedInvokes = simRuntimeMs/1000L;
+ int initSimExpectedInvokes = 1000;
+ workbench.runSimulation(startTimeMs, stopTimeMs, speedup, step);
+ Assert.assertEquals(expectedInvokes + initSimExpectedInvokes, processor.timesInvoked.get());
} catch (Exception e) {
throw e;
}
From e64c3d50c1edb5638594cc7bc80f12ef6dcabe3e Mon Sep 17 00:00:00 2001
From: Brandon
Date: Wed, 8 Jan 2025 13:19:07 -0800
Subject: [PATCH 18/25] Bug fix + fixing tests
---
.../digitaltwin/development/Workbench.java | 4 +--
.../development/TestWorkbench.java | 32 ++++++++++---------
2 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
index 0c38fa1..893db61 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
@@ -385,7 +385,7 @@ public SimulationStep runSimulation(long startTime, long endTime, double speedup
end = System.currentTimeMillis();
delta = result.getTime() - curTime;
numItv = delta/interval;
- numItv = delta%numItv != 0 ? numItv+1 : numItv;
+ numItv = numItv > 0 ? delta%numItv != 0 ? numItv+1 : numItv : numItv;
deltaTm = end-start;
wait = deltaTm >= interval ? 0L : (long)((interval-deltaTm)/speedup);
status = result.getStatus();
@@ -448,7 +448,7 @@ public SimulationStep step() throws WorkbenchException {
_result = _twinExecutionEngine.runSimulationStep(args);
delta = _result.getTime() - _curTime;
numItv = delta/_interval;
- numItv = delta%numItv != 0 ? numItv+1 : numItv;
+ numItv = numItv > 0 ? delta%numItv != 0 ? numItv+1 : numItv : numItv+1;
_curTime = _curTime+(numItv*_interval);
_next = _curTime;
return new SimulationStep(_result.getStatus(), _now);
diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
index 1cd8116..23b9711 100644
--- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
+++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
@@ -333,7 +333,7 @@ public void TestWorkbenchOnlySimulationInstances() throws WorkbenchException {
workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class);
workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class);
- for (int i = 0; i < 1; i++) {
+ for (int i = 1; i < 2; i++) {
DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i);
workbench.addInstance("SimSimple", "" + i, instance);
}
@@ -410,9 +410,12 @@ public void TestWorkbenchSpeedup() throws WorkbenchException {
}
long start = System.currentTimeMillis();
- result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 100, 1000);
+ long stop = start + 60000;
+ result = workbench.runSimulation(System.currentTimeMillis(), stop, 100, 1000);
Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus());
- Assert.assertEquals(1308, processor.getTimesInvoked());
+
+ // each id (0-999) delays for it's id in seconds
+ Assert.assertEquals(1249, processor.getTimesInvoked());
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -446,7 +449,8 @@ public void TestWorkbenchDebug() throws WorkbenchException{
long stop = System.currentTimeMillis();
System.out.println("RunTime: " + (stop-start));
Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus());
- Assert.assertEquals(1308, processor.getTimesInvoked());
+ // each id (0-999) delays for it's id in seconds, processor.getTimesInvoked());
+ Assert.assertEquals(1249, processor.getTimesInvoked());
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -464,10 +468,9 @@ public void testWorkbenchDebugOnlySimulationInstances() throws WorkbenchExceptio
workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class);
workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class);
- for (int i = 0; i < 1; i++) {
- DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i);
- workbench.addInstance("SimSimple", "" + i, instance);
- }
+
+ DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100);
+ workbench.addInstance("SimSimple", "" + 100, instance);
long startTimeMs = System.currentTimeMillis();
stopTimeMs = startTimeMs + 60000;
@@ -750,10 +753,9 @@ public void TestWorkbenchPeek() throws Exception {
workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class);
workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class);
- for (int i = 0; i < 1; i++) {
- DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i);
- workbench.addInstance("SimSimple", "" + i, instance);
- }
+
+ DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100);
+ workbench.addInstance("SimSimple", "" + 100, instance);
long startTimeMs = System.currentTimeMillis();
stopTimeMs = startTimeMs + 60000;
@@ -783,7 +785,7 @@ public void TestWorkbenchGenerateModelSchema() throws Exception {
workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class);
workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class);
String schemaAsJson = workbench.generateModelSchema("Simple");
- Assert.assertEquals(schemaAsJson, "{\"modelType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleDigitalTwin\",\"messageProcessorType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessageProcessor\",\"messageType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessage\",\"assemblyName\":\"NOT_USED_BY_JAVA_MODELS\",\"enablePersistence\":false,\"enableSimulationSupport\":false,\"alertProviders\":[]}");
+ Assert.assertSame(schemaAsJson, "{\"modelType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleDigitalTwin\",\"messageProcessorType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessageProcessor\",\"messageType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessage\",\"assemblyName\":\"NOT_USED_BY_JAVA_MODELS\",\"enablePersistence\":false,\"enableSimulationSupport\":false,\"alertProviders\":[]}");
String dir = workbench.generateModelSchema("SimSimple", System.getProperty("user.dir"));
Assert.assertEquals(String.format("%s\\model.json", System.getProperty("user.dir")), dir);
} catch (Exception e) {
@@ -840,8 +842,8 @@ public void TestWorkbenchRunThisInstance() throws Exception {
SimpleDigitalTwin sleeper = (SimpleDigitalTwin) workbench.getInstances("Simple2").get("sleeper");
Assert.assertNotNull(waker);
Assert.assertNotNull(sleeper);
- Assert.assertEquals("awake", waker._stringProp);
- Assert.assertEquals("messagesent", sleeper._stringProp);
+ Assert.assertEquals("waker", waker._stringProp);
+ Assert.assertEquals("asleep", sleeper._stringProp);
} catch (Exception e) {
throw e;
}
From 51944332b4fcef2ebb2cd92d4d2951c73d0ac328 Mon Sep 17 00:00:00 2001
From: Brandon
Date: Thu, 9 Jan 2025 15:48:27 -0800
Subject: [PATCH 19/25] Updating copyright information to 2025
---
.../digitaltwin/core/AlertMessage.java | 2 +-
.../core/AlertProviderConfiguration.java | 2 +-
.../digitaltwin/core/CacheOperationStatus.java | 2 +-
.../digitaltwin/core/CacheResult.java | 2 +-
.../digitaltwin/core/DigitalTwinBase.java | 2 +-
.../digitaltwin/core/DigitalTwinTimerMessage.java | 2 +-
.../digitaltwin/core/InitContext.java | 2 +-
.../digitaltwin/core/MessageFactory.java | 2 +-
.../digitaltwin/core/MessageProcessor.java | 2 +-
.../digitaltwin/core/MessageProcessorBase.java | 2 +-
.../digitaltwin/core/ModelSchema.java | 2 +-
.../digitaltwin/core/PersistenceProvider.java | 2 +-
.../digitaltwin/core/PersistenceProviderType.java | 2 +-
.../digitaltwin/core/ProcessingContext.java | 2 +-
.../digitaltwin/core/ProcessingResult.java | 2 +-
.../digitaltwin/core/SendingResult.java | 2 +-
.../digitaltwin/core/SharedData.java | 2 +-
.../digitaltwin/core/SimulationController.java | 2 +-
.../digitaltwin/core/SimulationProcessor.java | 2 +-
.../digitaltwin/core/SimulationStatus.java | 2 +-
.../digitaltwin/core/TimerActionResult.java | 2 +-
.../digitaltwin/core/TimerHandler.java | 2 +-
.../digitaltwin/core/TimerMetadata.java | 2 +-
.../digitaltwin/core/TimerType.java | 2 +-
.../digitaltwin/core/package-info.java | 2 +-
.../digitaltwin/development/Constants.java | 2 +-
.../digitaltwin/development/LogMessage.java | 2 +-
.../digitaltwin/development/ProxyState.java | 2 +-
.../digitaltwin/development/SimulationEvent.java | 2 +-
.../development/SimulationEventResult.java | 2 +-
.../development/SimulationEventTimerImpl.java | 2 +-
.../development/SimulationEventTwinImpl.java | 2 +-
.../development/SimulationScheduler.java | 2 +-
.../digitaltwin/development/SimulationStep.java | 2 +-
.../development/SimulationStepArgs.java | 2 +-
.../digitaltwin/development/SimulationTime.java | 2 +-
.../digitaltwin/development/SimulationWorker.java | 2 +-
.../development/TwinExecutionEngine.java | 2 +-
.../digitaltwin/development/TwinProxy.java | 2 +-
.../digitaltwin/development/Workbench.java | 2 +-
.../development/WorkbenchException.java | 2 +-
.../development/WorkbenchInitContext.java | 2 +-
.../WorkbenchInitSimulationContext.java | 15 +++++++++++++++
.../development/WorkbenchMessageListFactory.java | 2 +-
.../development/WorkbenchProcessingContext.java | 2 +-
.../development/WorkbenchSharedData.java | 15 +++++++++++++++
.../WorkbenchSimulationController.java | 2 +-
.../development/WorkbenchSimulationFlags.java | 2 +-
.../development/WorkbenchTimerService.java | 2 +-
.../development/WorkbenchTimerTask.java | 2 +-
.../digitaltwin/development/package-info.java | 2 +-
.../digitaltwin/development/TestWorkbench.java | 2 +-
52 files changed, 80 insertions(+), 50 deletions(-)
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java
index 4383a90..7e0d3f4 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2021 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java
index 88bd238..8f718aa 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2021 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
index 3498640..119b0be 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2024 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
index f62adf1..9dc13c7 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2024 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java
index d8082ca..4b4333d 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java
index 9b591c8..6ea0ce0 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2022 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
index 9c36298..4cb7014 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2024 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java
index 954c08f..1e89eed 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java
index c1e6a5c..a608741 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java
index 68a49c6..befa76d 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
index eef8be8..0e68b61 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java
index f75ad0c..434bf75 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2021 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
index 72eb017..ff59eb4 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2021 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
index 7637b9b..2af1dc8 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java
index 45b2ed6..279f0fa 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java
index 94ea82f..9b3731b 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
index f091158..5c1392d 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2024 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
index e18471f..314f6eb 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2022 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
index d592665..7ede9fa 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2022 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java
index fcb0f52..93f8ee4 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java
index f326046..852174e 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2022 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java
index 60b82aa..6380324 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2022 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java
index dbd0758..e9c151d 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2022 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java
index 41fee8c..66626e1 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2022 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java
index ee0bf8c..4ccf77f 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2018 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java
index 4b9361b..5948de6 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java
index 23e5775..4708e20 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java
index 9875074..0dd7e68 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
index 034f655..686936e 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java
index ea490af..f917da6 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java
index b9c5d8b..49f9b5d 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
index b2cac44..27e4147 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
index cc81c66..fa46b98 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java
index 3913423..c2a6dba 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java
index cfe6774..c65ad79 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java
index 021eaa5..e09c0e7 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
index 0c3d11d..ebaa891 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
index 66d8739..bd34eca 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java
index 0839071..4811ab7 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
index 893db61..0fe187a 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java
index 27beb77..b983f6c 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java
index 1498f60..8cc55b0 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
index 213b4d4..c8d0bb6 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
@@ -1,3 +1,18 @@
+/*
+ Copyright (c) 2025 by ScaleOut Software, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
package com.scaleoutsoftware.digitaltwin.development;
import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext;
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java
index 9bedd7d..43b0a06 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
index 0e9e2f8..2846a09 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
index ffee258..89c4643 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
@@ -1,3 +1,18 @@
+/*
+ Copyright (c) 2025 by ScaleOut Software, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
package com.scaleoutsoftware.digitaltwin.development;
import com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus;
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
index 7e03121..611d7af 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java
index 287bbb8..4e7acff 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java
index 1c99c4f..c5911a7 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java
index def85a3..6118b9e 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java
index 5738555..c8df4a2 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
index 23b9711..4864388 100644
--- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
+++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2023 by ScaleOut Software, Inc.
+ Copyright (c) 2025 by ScaleOut Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
From a959d3539f13d571518cde85ff6d8e32a1e1799a Mon Sep 17 00:00:00 2001
From: Brandon
Date: Thu, 9 Jan 2025 16:14:18 -0800
Subject: [PATCH 20/25] Update docs, refresh doc build output
---
.../core/InitSimulationContext.java | 6 +
.../digitaltwin/core/ModelSchema.java | 53 +-
.../core/PersistenceProviderType.java | 8 +
.../digitaltwin/core/SimulationProcessor.java | 16 +-
.../digitaltwin/development/Workbench.java | 26 +-
.../WorkbenchInitSimulationContext.java | 4 +-
.../development/WorkbenchSharedData.java | 2 +-
docs/allclasses-index.html | 59 +-
docs/allpackages-index.html | 2 +-
.../digitaltwin/core/AlertMessage.html | 2 +-
.../core/AlertProviderConfiguration.html | 2 +-
.../core/CacheOperationStatus.html | 256 +++++
.../digitaltwin/core/CacheResult.html | 163 ++++
.../digitaltwin/core/DigitalTwinBase.html | 7 +-
.../core/DigitalTwinTimerMessage.html | 2 +-
.../digitaltwin/core/InitContext.html | 39 +-
.../core/InitSimulationContext.html | 148 +++
.../digitaltwin/core/MessageFactory.html | 2 +-
.../digitaltwin/core/MessageProcessor.html | 7 +-
.../core/MessageProcessorBase.html | 7 +-
.../digitaltwin/core/ModelSchema.html | 364 +++++++-
.../digitaltwin/core/PersistenceProvider.html | 2 +-
.../core/PersistenceProviderType.html | 63 +-
.../digitaltwin/core/ProcessingContext.html | 41 +-
.../digitaltwin/core/ProcessingResult.html | 2 +-
.../digitaltwin/core/SendingResult.html | 2 +-
.../digitaltwin/core/SharedData.html | 188 ++++
.../core/SimulationController.html | 85 +-
.../digitaltwin/core/SimulationProcessor.html | 53 +-
.../digitaltwin/core/SimulationStatus.html | 2 +-
.../digitaltwin/core/TimerActionResult.html | 5 +-
.../digitaltwin/core/TimerHandler.html | 2 +-
.../digitaltwin/core/TimerMetadata.html | 2 +-
.../digitaltwin/core/TimerType.html | 2 +-
.../digitaltwin/core/package-summary.html | 53 +-
.../digitaltwin/core/package-tree.html | 6 +-
.../digitaltwin/development/LogMessage.html | 2 +-
.../development/SimulationEventResult.html | 2 +-
.../development/SimulationStep.html | 2 +-
.../digitaltwin/development/Workbench.html | 108 ++-
.../development/WorkbenchException.html | 2 +-
.../development/package-summary.html | 2 +-
.../digitaltwin/development/package-tree.html | 2 +-
docs/digitaltwin-core-docs/build.gradle | 2 +-
.../build/docs/javadoc/allclasses-index.html | 59 +-
.../build/docs/javadoc/allpackages-index.html | 2 +-
.../digitaltwin/core/AlertMessage.html | 2 +-
.../core/AlertProviderConfiguration.html | 2 +-
.../core/CacheOperationStatus.html | 256 +++++
.../digitaltwin/core/CacheResult.html | 163 ++++
.../digitaltwin/core/DigitalTwinBase.html | 7 +-
.../core/DigitalTwinTimerMessage.html | 2 +-
.../digitaltwin/core/InitContext.html | 39 +-
.../core/InitSimulationContext.html | 148 +++
.../digitaltwin/core/MessageFactory.html | 2 +-
.../digitaltwin/core/MessageProcessor.html | 7 +-
.../core/MessageProcessorBase.html | 7 +-
.../digitaltwin/core/ModelSchema.html | 364 +++++++-
.../digitaltwin/core/PersistenceProvider.html | 2 +-
.../core/PersistenceProviderType.html | 63 +-
.../digitaltwin/core/ProcessingContext.html | 41 +-
.../digitaltwin/core/ProcessingResult.html | 2 +-
.../digitaltwin/core/SendingResult.html | 2 +-
.../digitaltwin/core/SharedData.html | 188 ++++
.../core/SimulationController.html | 85 +-
.../digitaltwin/core/SimulationProcessor.html | 53 +-
.../digitaltwin/core/SimulationStatus.html | 2 +-
.../digitaltwin/core/TimerActionResult.html | 5 +-
.../digitaltwin/core/TimerHandler.html | 2 +-
.../digitaltwin/core/TimerMetadata.html | 2 +-
.../digitaltwin/core/TimerType.html | 2 +-
.../digitaltwin/core/package-summary.html | 53 +-
.../digitaltwin/core/package-tree.html | 6 +-
.../digitaltwin/development/LogMessage.html | 2 +-
.../development/SimulationEventResult.html | 2 +-
.../development/SimulationStep.html | 2 +-
.../digitaltwin/development/Workbench.html | 108 ++-
.../development/WorkbenchException.html | 2 +-
.../development/package-summary.html | 2 +-
.../digitaltwin/development/package-tree.html | 2 +-
.../build/docs/javadoc/help-doc.html | 2 +-
.../build/docs/javadoc/index-all.html | 241 ++++-
.../build/docs/javadoc/index.html | 4 +-
.../build/docs/javadoc/member-search-index.js | 2 +-
.../build/docs/javadoc/overview-summary.html | 2 +-
.../build/docs/javadoc/overview-tree.html | 6 +-
.../build/docs/javadoc/serialized-form.html | 2 +-
.../build/docs/javadoc/type-search-index.js | 2 +-
.../SimulationWorker.class.uniqueId0 | Bin 0 -> 12234 bytes
.../stash-dir/Workbench.class.uniqueId6 | Bin 0 -> 20564 bytes
.../WorkbenchInitContext.class.uniqueId5 | Bin 0 -> 3017 bytes
...WorkbenchProcessingContext.class.uniqueId3 | Bin 0 -> 11067 bytes
.../WorkbenchSharedData$1.class.uniqueId8 | Bin 0 -> 1702 bytes
.../WorkbenchSharedData$2.class.uniqueId4 | Bin 0 -> 1441 bytes
.../WorkbenchSharedData$3.class.uniqueId7 | Bin 0 -> 1515 bytes
.../WorkbenchSharedData$4.class.uniqueId1 | Bin 0 -> 1288 bytes
.../WorkbenchSharedData.class.uniqueId2 | Bin 0 -> 2145 bytes
.../compileJava/previous-compilation-data.bin | Bin 6902 -> 7453 bytes
.../build/tmp/createJavadocs/javadoc.options | 10 +-
.../digitaltwin/core/AlertMessage.java | 99 ++
.../core/AlertProviderConfiguration.java | 128 +++
.../core/CacheOperationStatus.java | 48 +
.../digitaltwin/core/CacheResult.java | 39 +
.../digitaltwin/core/DigitalTwinBase.java | 95 ++
.../core/DigitalTwinTimerMessage.java | 84 ++
.../digitaltwin/core/InitContext.java | 67 ++
.../core/InitSimulationContext.java | 21 +
.../digitaltwin/core/MessageFactory.java | 29 +
.../digitaltwin/core/MessageProcessor.java | 56 ++
.../core/MessageProcessorBase.java | 38 +
.../digitaltwin/core/ModelSchema.java | 785 ++++++++++++++++
.../digitaltwin/core/PersistenceProvider.java | 162 ++++
.../core/PersistenceProviderType.java | 125 +++
.../digitaltwin/core/ProcessingContext.java | 243 +++++
.../digitaltwin/core/ProcessingResult.java | 30 +
.../digitaltwin/core/SendingResult.java | 35 +
.../digitaltwin/core/SharedData.java | 49 +
.../core/SimulationController.java | 190 ++++
.../digitaltwin/core/SimulationProcessor.java | 66 ++
.../digitaltwin/core/SimulationStatus.java | 50 +
.../digitaltwin/core/TimerActionResult.java | 79 ++
.../digitaltwin/core/TimerHandler.java | 33 +
.../digitaltwin/core/TimerMetadata.java | 76 ++
.../digitaltwin/core/TimerType.java | 30 +
.../digitaltwin/core/package-info.java | 21 +
.../digitaltwin/development/Constants.java | 99 ++
.../digitaltwin/development/LogMessage.java | 56 ++
.../digitaltwin/development/ProxyState.java | 25 +
.../development/SimulationEvent.java | 69 ++
.../development/SimulationEventResult.java | 22 +
.../development/SimulationEventTimerImpl.java | 63 ++
.../development/SimulationEventTwinImpl.java | 93 ++
.../development/SimulationScheduler.java | 177 ++++
.../development/SimulationStep.java | 57 ++
.../development/SimulationStepArgs.java | 40 +
.../development/SimulationTime.java | 36 +
.../development/SimulationWorker.java | 229 +++++
.../development/TwinExecutionEngine.java | 439 +++++++++
.../digitaltwin/development/TwinProxy.java | 52 ++
.../digitaltwin/development/Workbench.java | 769 +++++++++++++++
.../development/WorkbenchException.java | 66 ++
.../development/WorkbenchInitContext.java | 59 ++
.../WorkbenchInitSimulationContext.java | 39 +
.../WorkbenchMessageListFactory.java | 67 ++
.../WorkbenchProcessingContext.java | 237 +++++
.../development/WorkbenchSharedData.java | 112 +++
.../WorkbenchSimulationController.java | 182 ++++
.../development/WorkbenchSimulationFlags.java | 25 +
.../development/WorkbenchTimerService.java | 65 ++
.../development/WorkbenchTimerTask.java | 63 ++
.../digitaltwin/development/package-info.java | 21 +
.../development/TestWorkbench.java | 873 ++++++++++++++++++
docs/help-doc.html | 2 +-
docs/index-all.html | 241 ++++-
docs/index.html | 4 +-
docs/member-search-index.js | 2 +-
docs/overview-summary.html | 2 +-
docs/overview-tree.html | 6 +-
docs/serialized-form.html | 2 +-
docs/type-search-index.js | 2 +-
160 files changed, 10456 insertions(+), 282 deletions(-)
create mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html
create mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html
create mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html
create mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html
create mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html
create mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html
create mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html
create mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchInitContext.class.uniqueId5
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchProcessingContext.class.uniqueId3
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$1.class.uniqueId8
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$2.class.uniqueId4
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$3.class.uniqueId7
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$4.class.uniqueId1
create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData.class.uniqueId2
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java
create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java
create mode 100644 docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java
index 0595a2a..62ae315 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java
@@ -1,5 +1,11 @@
package com.scaleoutsoftware.digitaltwin.core;
+import java.util.Date;
+
+/**
+ * The InitSimulationContext is passed as a parameter to the {@link SimulationProcessor#onInitSimulation(InitSimulationContext, DigitalTwinBase, Date)} method of
+ * digital twin instance when a simulation is initializing.
+ */
public interface InitSimulationContext {
/**
* Retrieve a {@link SharedData} accessor for this model's shared data.
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
index 0e68b61..970ab1a 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java
@@ -77,6 +77,13 @@ public ModelSchema(
persistenceProvider = null;
}
+ /**
+ * Model schema with a defined entry point.
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param ep the invocation grid entry point.
+ */
public ModelSchema(
String dtClass,
String mpClass,
@@ -142,6 +149,14 @@ public ModelSchema(
persistenceProvider = null;
}
+ /**
+ * Creates a model schema from a digital twin class, a message processor class, and a message class.
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param ep the invocation grid entry point.
+ * @param emr enable message recording for this model.
+ */
public ModelSchema(
String dtClass,
String mpClass,
@@ -172,8 +187,6 @@ public ModelSchema(
persistenceProvider = null;
}
- // TODO
-
/**
* Creates a model schema from a digital twin class, a message processor class, a message class, and
* alert provider configurations.
@@ -252,6 +265,16 @@ public ModelSchema(
alertProviders = alertingProviders;
}
+ /**
+ * Creates a model schema from a digital twin class, a message processor class, a message class, and
+ * alert provider configurations.
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param spClass the simulation processor class implementation.
+ * @param ep the invocation grid entry point.
+ * @param alertingProviders the alerting provider configurations.
+ */
public ModelSchema(
String dtClass,
String mpClass,
@@ -328,6 +351,17 @@ public ModelSchema(
alertProviders = alertingProviders;
}
+ /**
+ * Creates a model schema from a digital twin class, a message processor class, a message class, and
+ * alert provider configurations.
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param spClass the simulation processor class implementation.
+ * @param alertingProviders the alerting provider configurations.
+ * @param ep the invocation grid entry point.
+ * @param emr enable message recording for this model.
+ */
public ModelSchema(
String dtClass,
String mpClass,
@@ -596,6 +630,21 @@ public ModelSchema(
alertProviders = alertingProviders;
}
+ /**
+ * Creates a model schema from a digital twin class, a message processor class, a message class,
+ * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ * and an alert provider configuration.
+ *
+ * @param dtClass the digital twin class implementation.
+ * @param mpClass the message processor class implementation.
+ * @param msgClass a JSON serializable message class.
+ * @param simulationProcessorClass the simulation processor class implementation.
+ * @param adtName the Azure Digital Twin model name.
+ * @param persistenceType the persistence provider type.
+ * @param alertingProviders the alerting provider configurations.
+ * @param ep the invocation grid entry point.
+ * @param emr enable message recording for this model.
+ */
public ModelSchema(
String dtClass,
String mpClass,
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
index ff59eb4..ce9eb88 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java
@@ -57,10 +57,18 @@ public enum PersistenceProviderType implements Serializable {
}
+ /**
+ * Retrieve the name of the persistence provider type.
+ * @return the name of the persistence provider type.
+ */
public String getName() {
return _name;
}
+ /**
+ * Retrieve the ordinal value (used by the DTBuidler service).
+ * @return the ordinal value.
+ */
public int getServiceOrdinalValue() {
return _value;
}
diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
index 7ede9fa..a98d396 100644
--- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
+++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java
@@ -47,16 +47,14 @@ public SimulationProcessor() {}
*
* onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed
* between simulation runs.
- *
- *
- * Set variables in global or shared data.
- * Run a simulation.
- * onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
- * Complete simulation and evaluate the result.
- *
- *
- *
*
+ *
+ * Set variables in global or shared data.
+ * Run a simulation.
+ * onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
+ * Complete simulation and evaluate the result.
+ *
+ *
* @param context The simulation init context.
* @param instance The digital twin instance.
* @param epoch the simulation start time.
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
index 0fe187a..0cc6a07 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java
@@ -271,9 +271,11 @@ public Workbench() {
/**
* Instantiate the workbench.
+ * @param numSimulationWorkers the number of simulation workers to use. Default is {@link Runtime#availableProcessors()}.
*/
public Workbench(int numSimulationWorkers) {
_twinExecutionEngine = new TwinExecutionEngine(this);
+ if(_numWorkers <= 0) throw new IllegalArgumentException("numSimulationWorkers must be greater-than 0.");
_numWorkers = numSimulationWorkers;
}
@@ -548,6 +550,12 @@ public List getAlertMessages(String model, String alertProvider) t
return Arrays.asList(perModelMessages.get(alertProvider).toArray(new AlertMessage[0]));
}
+ /**
+ * Retrieve the {@link SharedData} for a model.
+ * @param model the model name.
+ * @return the {@link SharedData} for a model.
+ * @throws WorkbenchException if an exception occurs while creating the working shared data.
+ */
public SharedData getSharedModelData(String model) throws WorkbenchException {
if(_twinExecutionEngine.hasModel(model)) {
return new WorkbenchSharedData(_twinExecutionEngine.getModelData(model));
@@ -556,7 +564,12 @@ public SharedData getSharedModelData(String model) throws WorkbenchException {
}
}
- public SharedData getSharedGlobalData(String model) throws WorkbenchException {
+ /**
+ * Retrieve the global {@link SharedData}.
+ * @return the global {@link SharedData} of this workbench.
+ * @throws WorkbenchException if an exception occurs while creating the working shared data.
+ */
+ public SharedData getSharedGlobalData() throws WorkbenchException {
return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData());
}
@@ -730,10 +743,21 @@ static void validate(MessageProcessor digit
}
}
+ /**
+ * Add a key/value pair to {@link SharedData} for a model.
+ * @param modelName the model name.
+ * @param key the key.
+ * @param value the value.
+ */
public void addSharedModelData(String modelName, String key, byte[] value) {
_twinExecutionEngine.getModelData(modelName).put(key, value);
}
+ /**
+ * Add a key/value pair to the global {@link SharedData}.
+ * @param key the key.
+ * @param value the value.
+ */
public void addGlobalModelData(String key, byte[] value) {
_twinExecutionEngine.getGlobalSharedData().put(key, value);
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
index c8d0bb6..3128ad8 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java
@@ -18,11 +18,11 @@
import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext;
import com.scaleoutsoftware.digitaltwin.core.SharedData;
-public class WorkbenchInitSimulationContext implements InitSimulationContext {
+class WorkbenchInitSimulationContext implements InitSimulationContext {
SharedData _globalData;
SharedData _modelData;
- public WorkbenchInitSimulationContext(SharedData globalData, SharedData modelData) {
+ WorkbenchInitSimulationContext(SharedData globalData, SharedData modelData) {
_globalData = globalData;
_modelData = modelData;
}
diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
index 89c4643..0712e9a 100644
--- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
+++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java
@@ -21,7 +21,7 @@
import java.util.HashMap;
-public class WorkbenchSharedData implements SharedData {
+class WorkbenchSharedData implements SharedData {
private final HashMap data;
public WorkbenchSharedData(HashMap shared) {
diff --git a/docs/allclasses-index.html b/docs/allclasses-index.html
index bddcce0..a1e1471 100644
--- a/docs/allclasses-index.html
+++ b/docs/allclasses-index.html
@@ -2,7 +2,7 @@
-All Classes and Interfaces (digitaltwin-core-docs 3.0.4 API)
+All Classes and Interfaces (digitaltwin-core-docs 3.0.5 API)
@@ -67,6 +67,14 @@ All Classes and Interfaces<
Configuration for an alert provider.
+
+
+
Status of a cache operation.
+
+
+
+
Represents a response from a
SharedData operation.
+
A real-time digital twin of a data source.
@@ -80,47 +88,56 @@
All Classes and Interfaces<
-
-
+
+
+
+
A messaged that was logged by a digital twin.
-
-
+
+
Message list factory retrieves message lists for a MessageProcessor
-
-
+
+
Processes messages for a real-time digital twin.
-
-
+
+
Base class for the MessageProcessor to help with typing.
-
-
+
+
The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a
digital twin model to the real-time digital twin cloud service.
-
-
+
+
An interface that can be used for persisting/retrieving the state of real-time digital twins.
-
-
+
+
-
-
+
+
Context object that allows the user to send a message to a DataSource.
-
-
+
+
The result from a message processor which indicates to update the state object or to ignore
-
-
+
+
Marks a message as Delivered or not Delivered
+
+
+
SharedData is used to access a model's, or globally, shared cache.
+
The SimulationController interface is used to interact with the running DigitalTwin simulation.
diff --git a/docs/allpackages-index.html b/docs/allpackages-index.html
index 3040f57..cdc7533 100644
--- a/docs/allpackages-index.html
+++ b/docs/allpackages-index.html
@@ -2,7 +2,7 @@
-
All Packages (digitaltwin-core-docs 3.0.4 API)
+
All Packages (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html b/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html
index f552c72..75ab8d8 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html
@@ -2,7 +2,7 @@
-
AlertMessage (digitaltwin-core-docs 3.0.4 API)
+
AlertMessage (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html b/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html
index 838eb7a..ae33977 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html
@@ -2,7 +2,7 @@
-
AlertProviderConfiguration (digitaltwin-core-docs 3.0.4 API)
+
AlertProviderConfiguration (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html
new file mode 100644
index 0000000..9ff6c42
--- /dev/null
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html
@@ -0,0 +1,256 @@
+
+
+
+
+
CacheOperationStatus (digitaltwin-core-docs 3.0.5 API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Nested Class Summary
+
+
+
+
+
+
+Enum Constant Summary
+Enum Constants
+
+
+
+
+
+
The cache was cleared successfully.
+
+
+
+
The object could not be retrieved because it was not found.
+
+
+
+
The object was successfully added/updated.
+
+
+
+
The object was removed successfully.
+
+
+
+
The object was successfully retrieved.
+
+
+
+
+
+
+
+Method Summary
+
+
All Methods Static Methods Concrete Methods
+
+
+
+
+
+
+
+
+
Returns the enum constant of this class with the specified name.
+
+
+
+
+
Returns an array containing the constants of this enum class, in
+the order they are declared.
+
+
+
+
+
+
Methods inherited from class java.lang.Enum
+
clone , compareTo , describeConstable , equals , finalize , getDeclaringClass , hashCode , name , ordinal , toString , valueOf
+
+
+
+
+
+
+
+
+
+
+Enum Constant Details
+
+
+
+ObjectRetrieved
+
+The object was successfully retrieved.
+
+
+
+
+ObjectPut
+
+The object was successfully added/updated.
+
+
+
+
+ObjectDoesNotExist
+
+The object could not be retrieved because it was not found.
+
+
+
+
+ObjectRemoved
+
+The object was removed successfully.
+
+
+
+
+CacheCleared
+
+The cache was cleared successfully.
+
+
+
+
+
+
+
+
+Method Details
+
+
+
+values
+
+Returns an array containing the constants of this enum class, in
+the order they are declared.
+
+Returns:
+an array containing the constants of this enum class, in the order they are declared
+
+
+
+
+
+valueOf
+
+Returns the enum constant of this class with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this class. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+IllegalArgumentException - if this enum class has no constant with the specified name
+NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html
new file mode 100644
index 0000000..9334a2c
--- /dev/null
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html
@@ -0,0 +1,163 @@
+
+
+
+
+
CacheResult (digitaltwin-core-docs 3.0.5 API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+public interface CacheResult
+Represents a response from a
SharedData operation.
+
+
+
+
+
+
+Method Summary
+
+
All Methods Instance Methods Abstract Methods
+
+
+
+
+
+
+
+
+
Gets the key or null to the object associated with the result.
+
+
+
+
+
Gets the status of the cache operation.
+
+
byte[]
+
+
+
Get the object returned from a Get operation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Details
+
+
+
+getKey
+
+Gets the key or null to the object associated with the result.
+
+Returns:
+the key or null.
+
+
+
+
+
+getValue
+byte[] getValue ()
+Get the object returned from a Get operation.
+
+Returns:
+the object or null.
+
+
+
+
+
+getStatus
+
+Gets the status of the cache operation.
+
+Returns:
+the operation status.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html
index d22f132..c013270 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html
@@ -2,7 +2,7 @@
-
DigitalTwinBase (digitaltwin-core-docs 3.0.4 API)
+
DigitalTwinBase (digitaltwin-core-docs 3.0.5 API)
@@ -123,7 +123,9 @@
Constructor Summary
-
+
@@ -220,6 +222,7 @@
Constructor Details
DigitalTwinBase
public DigitalTwinBase ()
+Default constructor.
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html
index e7de9da..71116ad 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html
@@ -2,7 +2,7 @@
-
DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.4 API)
+
DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html
index 65bae14..4d362ae 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html
@@ -2,7 +2,7 @@
-
InitContext (digitaltwin-core-docs 3.0.4 API)
+
InitContext (digitaltwin-core-docs 3.0.5 API)
@@ -91,7 +91,9 @@
Constructor Summary
-
+
@@ -116,6 +118,16 @@
Method Summary
Get the Model identifier of the initializing digital twin instance.
+
+
+
+
Retrieve a
SharedData accessor for globally shared data.
+
+
+
+
+
Retrieve a
SharedData accessor for this model's shared data.
+
startTimer (String timerName,
Duration interval,
@@ -145,6 +157,7 @@ Constructor Details
InitContext
public InitContext ()
+Default constructor.
@@ -179,6 +192,28 @@ startTimer
+
+getSharedModelData
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
+
+getSharedGlobalData
+
+Retrieve a
SharedData accessor for globally shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
getId
public abstract String getId ()
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html
new file mode 100644
index 0000000..0640172
--- /dev/null
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html
@@ -0,0 +1,148 @@
+
+
+
+
+InitSimulationContext (digitaltwin-core-docs 3.0.5 API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+public interface InitSimulationContext
+
+
+
+
+
+
+
+Method Summary
+
+
All Methods Instance Methods Abstract Methods
+
+
+
+
+
+
+
+
+
Retrieve a
SharedData accessor for globally shared data.
+
+
+
+
+
Retrieve a
SharedData accessor for this model's shared data.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Details
+
+
+
+getSharedModelData
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
+
+getSharedGlobalData
+
+Retrieve a
SharedData accessor for globally shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html
index fd9882a..b9941e1 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html
@@ -2,7 +2,7 @@
-MessageFactory (digitaltwin-core-docs 3.0.4 API)
+MessageFactory (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html
index 87c25e4..87308d2 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html
@@ -2,7 +2,7 @@
-MessageProcessor (digitaltwin-core-docs 3.0.4 API)
+MessageProcessor (digitaltwin-core-docs 3.0.5 API)
@@ -110,7 +110,9 @@ Constructor Summary
-
+
@@ -160,6 +162,7 @@
Constructor Details
MessageProcessor
public MessageProcessor ()
+Default constructor.
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html
index ab6edc5..d9eca63 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html
@@ -2,7 +2,7 @@
-
MessageProcessorBase (digitaltwin-core-docs 3.0.4 API)
+
MessageProcessorBase (digitaltwin-core-docs 3.0.5 API)
@@ -98,7 +98,9 @@
Constructor Summary
-
+
@@ -141,6 +143,7 @@
Constructor Details
MessageProcessorBase
public MessageProcessorBase ()
+Default constructor.
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html b/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html
index 45f653c..dd17e2c 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html
@@ -2,7 +2,7 @@
-
ModelSchema (digitaltwin-core-docs 3.0.4 API)
+
ModelSchema (digitaltwin-core-docs 3.0.5 API)
@@ -96,12 +96,45 @@
Constructor Summary
Creates a model schema from a digital twin class, a message processor class, and a message class.
-
ModelSchema (String dtClass,
+
+
+
Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+
+
+
Model schema with a defined entry point.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+
-
-ModelSchema (String dtClass,
+
+
Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
alert provider configurations.
-ModelSchema (String dtClass,
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
alert provider configurations.
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
@@ -161,30 +256,40 @@ Method Summary
Retrieve the Azure Digital Twin model name.
-
+
-
+
Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
-
+
-
Retrieve the message type (JSON serializable message implementation).
+
-
+
-
+
Retrieve the message type (JSON serializable message implementation).
-
-
+
+
-
Retrieve the persistence provider type.
+
-
-
+
+
+
Retrieve the persistence provider type.
+
+
+
+
+boolean
+
+
+
Retrieves the message recording enabled status.
+
boolean
@@ -228,6 +333,59 @@
ModelSchema
+
+ModelSchema
+
+Model schema with a defined entry point.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+ep - the invocation grid entry point.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+emr - enable message recording for this model.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+ep - the invocation grid entry point.
+emr - enable message recording for this model.
+
+
+
+
ModelSchema
public ModelSchema (String dtClass,
@@ -266,6 +424,74 @@ ModelSchema
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+spClass - the simulation processor class implementation.
+ep - the invocation grid entry point.
+alertingProviders - the alerting provider configurations.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+spClass - the simulation processor class implementation.
+alertingProviders - the alerting provider configurations.
+emr - enable message recording for this model.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+spClass - the simulation processor class implementation.
+alertingProviders - the alerting provider configurations.
+ep - the invocation grid entry point.
+emr - enable message recording for this model.
+
+
+
+
ModelSchema
public ModelSchema (String dtClass,
@@ -288,6 +514,30 @@ ModelSchema
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+adtName - the Azure Digital Twin model name.
+persistenceType - the persistence provider type.
+alertingProviders - the alerting provider configurations.
+emr - enable message recording for this model.
+
+
+
+
ModelSchema
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
Parameters:
dtClass - the digital twin class implementation.
@@ -309,6 +562,62 @@ ModelSchema
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+simulationProcessorClass - the simulation processor class implementation.
+adtName - the Azure Digital Twin model name.
+persistenceType - the persistence provider type.
+alertingProviders - the alerting provider configurations.
+emr - enable message recording for this model.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+simulationProcessorClass - the simulation processor class implementation.
+adtName - the Azure Digital Twin model name.
+persistenceType - the persistence provider type.
+alertingProviders - the alerting provider configurations.
+ep - the invocation grid entry point.
+emr - enable message recording for this model.
+
+
+
@@ -427,6 +736,29 @@ getPersistenceProvider
+
+
+messageRecordingEnabled
+public boolean messageRecordingEnabled ()
+Retrieves the message recording enabled status. True if this model should persist messages when message recording is active,
+ false otherwise.
+
+Returns:
+True if message recording is enabled, false otherwise.
+
+
+
+
+
+getEntryPoint
+
+Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
+
+Returns:
+the entry point for launching.
+
+
+
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html
index 7f6fc37..214c380 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html
@@ -2,7 +2,7 @@
-PersistenceProvider (digitaltwin-core-docs 3.0.4 API)
+PersistenceProvider (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html
index da4a79b..cff66a9 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html
@@ -2,7 +2,7 @@
-PersistenceProviderType (digitaltwin-core-docs 3.0.4 API)
+PersistenceProviderType (digitaltwin-core-docs 3.0.5 API)
@@ -109,6 +109,14 @@ Enum Constant Summary
Enum for the Azure Digital Twin service.
+
+
+
+
Enum for SQLite
@@ -118,7 +126,9 @@
Enum Constant Summary
Enum for SQLServer
-
+
+
Enum for an unconfigured PersistenceProvider
+
@@ -127,7 +137,7 @@ Enum Constant Summary
Method Summary
-
All Methods Static Methods Concrete Methods
+
All Methods Static Methods Instance Methods Concrete Methods
@@ -143,6 +153,16 @@
Method Summary
Return the PersistenceProviderType from a string value.
+
+
+
+
Retrieve the name of the persistence provider type.
+
+
int
+
+
+
Retrieve the ordinal value (used by the DTBuidler service).
+
@@ -182,6 +202,20 @@
AzureDigitalTwinsService
+
+CosmosDb
+
+Enum for CosmosDB
+
+
+
+
+DynamoDb
+
+Enum for DynamoDB
+
+
+
SQLite
@@ -199,6 +233,7 @@ SQLServer
@@ -241,6 +276,28 @@
valueOf
+
+getName
+
+Retrieve the name of the persistence provider type.
+
+Returns:
+the name of the persistence provider type.
+
+
+
+
+
+getServiceOrdinalValue
+public int getServiceOrdinalValue ()
+Retrieve the ordinal value (used by the DTBuidler service).
+
+Returns:
+the ordinal value.
+
+
+
+
fromString
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html
index 383f87d..ea553fe 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html
@@ -2,7 +2,7 @@
-ProcessingContext (digitaltwin-core-docs 3.0.4 API)
+ProcessingContext (digitaltwin-core-docs 3.0.5 API)
@@ -103,7 +103,9 @@ Constructor Summary
-
+
@@ -138,6 +140,16 @@
Method Summary
Returns the configured persistence provider or null if no persistence provider configuration can be found.
+
+
+
+
Retrieve a
SharedData accessor for globally shared data.
+
+
+
+
+
Retrieve a
SharedData accessor for this model's shared data.
+
@@ -240,6 +252,7 @@
Constructor Details
ProcessingContext
public ProcessingContext ()
+Default constructor.
@@ -412,7 +425,7 @@
sendAlert
- This method sends an alert message to supported systems. See "TODO: Link to docs" for more details on supported systems.
+ This method sends an alert message to supported systems.
@@ -544,6 +557,28 @@
getSimulationController
+
+
+getSharedModelData
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
+
+getSharedGlobalData
+
+Retrieve a
SharedData accessor for globally shared data.
+
+Returns:
+a SharedData instance.
+
+
+
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html
index 4d2073a..99cf30d 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html
@@ -2,7 +2,7 @@
-
ProcessingResult (digitaltwin-core-docs 3.0.4 API)
+
ProcessingResult (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html
index 8d9d776..3bce6fe 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html
@@ -2,7 +2,7 @@
-
SendingResult (digitaltwin-core-docs 3.0.4 API)
+
SendingResult (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html b/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html
new file mode 100644
index 0000000..a0da3b9
--- /dev/null
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html
@@ -0,0 +1,188 @@
+
+
+
+
+
SharedData (digitaltwin-core-docs 3.0.5 API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+public interface SharedData
+SharedData is used to access a model's, or globally, shared cache.
+
+
+
+
+
+
+Method Summary
+
+
All Methods Instance Methods Abstract Methods
+
+
+
+
+
+
+
+
+
Clear the shared data cache.
+
+
+
+
+
Retrieves an existing object from the cache.
+
+
+
+
+
Put a new key/value mapping into the cache.
+
+
+
+
+
Remove a key/value mapping from the cache.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Details
+
+
+
+get
+
+Retrieves an existing object from the cache.
+
+Parameters:
+key - the key mapping to a value.
+Returns:
+A cache result.
+
+
+
+
+
+put
+
+Put a new key/value mapping into the cache.
+
+Parameters:
+key - the key mapping to a value.
+value - the value.
+Returns:
+a cache result.
+
+
+
+
+
+remove
+
+Remove a key/value mapping from the cache.
+
+Parameters:
+key - the key mapping to a value.
+Returns:
+a cache result.
+
+
+
+
+
+clear
+
+Clear the shared data cache.
+
+Returns:
+a cache result.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html
index eab1111..df4c127 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html
@@ -2,7 +2,7 @@
-
SimulationController (digitaltwin-core-docs 3.0.4 API)
+
SimulationController (digitaltwin-core-docs 3.0.5 API)
@@ -115,41 +115,58 @@
Method Summary
Delay simulation processing for this DigitalTwin instance for a duration of time.
-
+
-
Delete and remove a digital twin instance from simulation processing.
+
+ Delay simulation processing for this DigitalTwin instance, indefinitely.
-
+
-
Delete and remove this digital twin instance from simulation processing.
+
Delete and remove a digital twin instance from simulation processing.
-
+
+
Delete and remove this digital twin instance from simulation processing.
+
+
+
+
-
-
emitTelemetry (String modelName,
+
+
-
+
+
+
+
+
+ Retrieves the simulation start time.
+
Retrieves the current simulation time increment.
-
-
+
void
+
+
Run this instance during this simulation step.
+
+
+
+
@@ -180,6 +197,19 @@ getSimulationTimeIncrement
+
+getSimulationStartTime
+Date getSimulationStartTime ()
+
+ Retrieves the simulation start time.
+
+
+Returns:
+the simulation start time.
+
+
+
+
delay
@@ -219,6 +249,24 @@ delay
+
+delayIndefinitely
+
+
+ Delay simulation processing for this DigitalTwin instance, indefinitely.
+
+
+
+ Simulation processing will be delayed until this instance is run with runThisInstance() .
+
+
+Returns:
+SendingResult.Handled if the delay was processed or SendingResult.NotHandled
+ if the delay was not processed.
+
+
+
+
emitTelemetry
SendingResult emitTelemetry (String modelName,
@@ -348,6 +396,17 @@ deleteThisInstance
+
+runThisInstance
+void runThisInstance ()
+
+
+
+
stopSimulation
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html
index 7f4fc19..64de0a7 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html
@@ -2,7 +2,7 @@
-SimulationProcessor (digitaltwin-core-docs 3.0.4 API)
+SimulationProcessor (digitaltwin-core-docs 3.0.5 API)
@@ -107,7 +107,9 @@ Constructor Summary
-
+
@@ -116,17 +118,25 @@ Constructor Summary
Method Summary
-
All Methods Instance Methods Abstract Methods
+
All Methods Instance Methods Abstract Methods Concrete Methods
-
-
processModel (ProcessingContext context,
+
+
+
+
+ Optional method that is called per-instance when a simulation is started.
+
+
+
-
+
Processes simulation events for a real-time digital twin.
@@ -150,6 +160,7 @@ Constructor Details
SimulationProcessor
public SimulationProcessor ()
+Default constructor.
@@ -178,6 +189,36 @@
+onInitSimulation
+
+
+ Optional method that is called per-instance when a simulation is started. Default behavior is a no-op.
+
+
+
+ onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed
+ between simulation runs.
+
+
+ Set variables in global or shared data.
+ Run a simulation.
+ onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
+ Complete simulation and evaluate the result.
+
+
+Parameters:
+context - The simulation init context.
+instance - The digital twin instance.
+epoch - the simulation start time.
+Returns:
+ProcessingResult.UpdateDigitalTwin or ProcessingResult.NoUpdate . Default behavior: ProcessingResult.NoUpdate .
+
+
+
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html
index c0f7ab0..95a1b09 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html
@@ -2,7 +2,7 @@
-SimulationStatus (digitaltwin-core-docs 3.0.4 API)
+SimulationStatus (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html
index eb5dd4c..9cb2a82 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html
@@ -2,7 +2,7 @@
-TimerActionResult (digitaltwin-core-docs 3.0.4 API)
+TimerActionResult (digitaltwin-core-docs 3.0.5 API)
@@ -255,7 +255,8 @@ fromOrdinal
+ 2 = FailedNoSuchTimer , 3 = FailedTimerAlreadyExists ,
+ 4 = FailedInternalError
Parameters:
val - the ordinal value.
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html
index c07d3f3..60c2c72 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html
@@ -2,7 +2,7 @@
-TimerHandler (digitaltwin-core-docs 3.0.4 API)
+TimerHandler (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html
index 27958fe..b2824fe 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html
@@ -2,7 +2,7 @@
-TimerMetadata (digitaltwin-core-docs 3.0.4 API)
+TimerMetadata (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html
index 3264684..cef4477 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html
@@ -2,7 +2,7 @@
-TimerType (digitaltwin-core-docs 3.0.4 API)
+TimerType (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html b/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html
index db0c1b6..9fa1f27 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html
@@ -2,7 +2,7 @@
-com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.4 API)
+com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.5 API)
@@ -83,6 +83,14 @@ Package
Configuration for an alert provider.
+
+
+
Status of a cache operation.
+
+
+
+
Represents a response from a
SharedData operation.
+
A real-time digital twin of a data source.
@@ -96,43 +104,52 @@
Package
-
+
+
+
Message list factory retrieves message lists for a MessageProcessor
-
-
+
+
Processes messages for a real-time digital twin.
-
-
+
+
Base class for the MessageProcessor to help with typing.
-
-
+
+
The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a
digital twin model to the real-time digital twin cloud service.
-
-
+
+
An interface that can be used for persisting/retrieving the state of real-time digital twins.
-
-
+
+
-
-
+
+
Context object that allows the user to send a message to a DataSource.
-
-
+
+
The result from a message processor which indicates to update the state object or to ignore
-
-
+
+
Marks a message as Delivered or not Delivered
+
+
+
SharedData is used to access a model's, or globally, shared cache.
+
The SimulationController interface is used to interact with the running DigitalTwin simulation.
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html b/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html
index 21271e7..d2f2c59 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html
@@ -2,7 +2,7 @@
-
com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.4 API)
+
com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.5 API)
@@ -79,8 +79,11 @@
Class Hierarchy
Interface Hierarchy
@@ -92,6 +95,7 @@ Enum Class Hierarchy
@@ -342,21 +346,34 @@
Method Summary
Adds an alert provider configuration to the specified model on this workbench.
void
-
addInstance (String modelName,
+
+
+void
+
-
+
Adds a digital twin instance to the workbench.
-
<T extends DigitalTwinBase ,
+
-addRealTimeModel (String modelName,
+
-
+
Adds a real-time digital twin model to the workbench.
+
void
+
+
addSimulationModel (String modelName,
@@ -398,6 +415,16 @@ Method Summary
Retrieves messages logged by digital twin instances for a specified mdoel.
+
+
+
+
+
+
@@ -460,6 +487,17 @@
Workbench
Instantiate the workbench.
+
+
+Workbench
+public Workbench (int numSimulationWorkers)
+Instantiate the workbench.
+
+Parameters:
+numSimulationWorkers - the number of simulation workers to use. Default is Runtime.availableProcessors() .
+
+
+
@@ -695,6 +733,36 @@
getAlertMessages
+
+getSharedModelData
+
+
+
+Parameters:
+model - the model name.
+Returns:
+the SharedData for a model.
+Throws:
+WorkbenchException - if an exception occurs while creating the working shared data.
+
+
+
+
+
+getSharedGlobalData
+
+
+
+Returns:
+the global SharedData of this workbench.
+Throws:
+WorkbenchException - if an exception occurs while creating the working shared data.
+
+
+
+
generateModelSchema
public String generateModelSchema (String modelName)
@@ -751,6 +819,34 @@ send
+
+addSharedModelData
+public void addSharedModelData (String modelName,
+ String key,
+ byte[] value)
+
+
+Parameters:
+modelName - the model name.
+key - the key.
+value - the value.
+
+
+
+
+
+addGlobalModelData
+public void addGlobalModelData (String key,
+ byte[] value)
+
+
+Parameters:
+key - the key.
+value - the value.
+
+
+
+
close
public void close ()
diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html b/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html
index d76f832..23c4465 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html
@@ -2,7 +2,7 @@
-
WorkbenchException (digitaltwin-core-docs 3.0.4 API)
+
WorkbenchException (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html
index 996f2e1..fcd247c 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html
@@ -2,7 +2,7 @@
-
com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.4 API)
+
com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html
index 294e1fb..b449414 100644
--- a/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html
+++ b/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html
@@ -2,7 +2,7 @@
-
com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.4 API)
+
com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build.gradle b/docs/digitaltwin-core-docs/build.gradle
index e51b3be..21815d2 100644
--- a/docs/digitaltwin-core-docs/build.gradle
+++ b/docs/digitaltwin-core-docs/build.gradle
@@ -3,7 +3,7 @@ plugins {
}
group 'com.scaleout.digitaltwin'
-version '3.0.4'
+version '3.0.5'
repositories {
mavenCentral()
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html
index bddcce0..a1e1471 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html
@@ -2,7 +2,7 @@
-
All Classes and Interfaces (digitaltwin-core-docs 3.0.4 API)
+
All Classes and Interfaces (digitaltwin-core-docs 3.0.5 API)
@@ -67,6 +67,14 @@
All Classes and Interfaces<
Configuration for an alert provider.
+
+
+
Status of a cache operation.
+
+
+
+
Represents a response from a
SharedData operation.
+
A real-time digital twin of a data source.
@@ -80,47 +88,56 @@
All Classes and Interfaces<
-
-
+
+
+
+
A messaged that was logged by a digital twin.
-
-
+
+
Message list factory retrieves message lists for a MessageProcessor
-
-
+
+
Processes messages for a real-time digital twin.
-
-
+
+
Base class for the MessageProcessor to help with typing.
-
-
+
+
The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a
digital twin model to the real-time digital twin cloud service.
-
-
+
+
An interface that can be used for persisting/retrieving the state of real-time digital twins.
-
-
+
+
-
-
+
+
Context object that allows the user to send a message to a DataSource.
-
-
+
+
The result from a message processor which indicates to update the state object or to ignore
-
-
+
+
Marks a message as Delivered or not Delivered
+
+
+
SharedData is used to access a model's, or globally, shared cache.
+
The SimulationController interface is used to interact with the running DigitalTwin simulation.
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html
index 3040f57..cdc7533 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html
@@ -2,7 +2,7 @@
-
All Packages (digitaltwin-core-docs 3.0.4 API)
+
All Packages (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html
index f552c72..75ab8d8 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html
@@ -2,7 +2,7 @@
-
AlertMessage (digitaltwin-core-docs 3.0.4 API)
+
AlertMessage (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html
index 838eb7a..ae33977 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html
@@ -2,7 +2,7 @@
-
AlertProviderConfiguration (digitaltwin-core-docs 3.0.4 API)
+
AlertProviderConfiguration (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html
new file mode 100644
index 0000000..9ff6c42
--- /dev/null
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html
@@ -0,0 +1,256 @@
+
+
+
+
+
CacheOperationStatus (digitaltwin-core-docs 3.0.5 API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Nested Class Summary
+
+
+
+
+
+
+Enum Constant Summary
+Enum Constants
+
+
+
+
+
+
The cache was cleared successfully.
+
+
+
+
The object could not be retrieved because it was not found.
+
+
+
+
The object was successfully added/updated.
+
+
+
+
The object was removed successfully.
+
+
+
+
The object was successfully retrieved.
+
+
+
+
+
+
+
+Method Summary
+
+
All Methods Static Methods Concrete Methods
+
+
+
+
+
+
+
+
+
Returns the enum constant of this class with the specified name.
+
+
+
+
+
Returns an array containing the constants of this enum class, in
+the order they are declared.
+
+
+
+
+
+
Methods inherited from class java.lang.Enum
+
clone , compareTo , describeConstable , equals , finalize , getDeclaringClass , hashCode , name , ordinal , toString , valueOf
+
+
+
+
+
+
+
+
+
+
+Enum Constant Details
+
+
+
+ObjectRetrieved
+
+The object was successfully retrieved.
+
+
+
+
+ObjectPut
+
+The object was successfully added/updated.
+
+
+
+
+ObjectDoesNotExist
+
+The object could not be retrieved because it was not found.
+
+
+
+
+ObjectRemoved
+
+The object was removed successfully.
+
+
+
+
+CacheCleared
+
+The cache was cleared successfully.
+
+
+
+
+
+
+
+
+Method Details
+
+
+
+values
+
+Returns an array containing the constants of this enum class, in
+the order they are declared.
+
+Returns:
+an array containing the constants of this enum class, in the order they are declared
+
+
+
+
+
+valueOf
+
+Returns the enum constant of this class with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this class. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+IllegalArgumentException - if this enum class has no constant with the specified name
+NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html
new file mode 100644
index 0000000..9334a2c
--- /dev/null
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html
@@ -0,0 +1,163 @@
+
+
+
+
+
CacheResult (digitaltwin-core-docs 3.0.5 API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+public interface CacheResult
+Represents a response from a
SharedData operation.
+
+
+
+
+
+
+Method Summary
+
+
All Methods Instance Methods Abstract Methods
+
+
+
+
+
+
+
+
+
Gets the key or null to the object associated with the result.
+
+
+
+
+
Gets the status of the cache operation.
+
+
byte[]
+
+
+
Get the object returned from a Get operation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Details
+
+
+
+getKey
+
+Gets the key or null to the object associated with the result.
+
+Returns:
+the key or null.
+
+
+
+
+
+getValue
+byte[] getValue ()
+Get the object returned from a Get operation.
+
+Returns:
+the object or null.
+
+
+
+
+
+getStatus
+
+Gets the status of the cache operation.
+
+Returns:
+the operation status.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html
index d22f132..c013270 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html
@@ -2,7 +2,7 @@
-
DigitalTwinBase (digitaltwin-core-docs 3.0.4 API)
+
DigitalTwinBase (digitaltwin-core-docs 3.0.5 API)
@@ -123,7 +123,9 @@
Constructor Summary
-
+
@@ -220,6 +222,7 @@
Constructor Details
DigitalTwinBase
public DigitalTwinBase ()
+Default constructor.
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html
index e7de9da..71116ad 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html
@@ -2,7 +2,7 @@
-
DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.4 API)
+
DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html
index 65bae14..4d362ae 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html
@@ -2,7 +2,7 @@
-
InitContext (digitaltwin-core-docs 3.0.4 API)
+
InitContext (digitaltwin-core-docs 3.0.5 API)
@@ -91,7 +91,9 @@
Constructor Summary
-
+
@@ -116,6 +118,16 @@
Method Summary
Get the Model identifier of the initializing digital twin instance.
+
+
+
+
Retrieve a
SharedData accessor for globally shared data.
+
+
+
+
+
Retrieve a
SharedData accessor for this model's shared data.
+
startTimer (String timerName,
Duration interval,
@@ -145,6 +157,7 @@ Constructor Details
InitContext
public InitContext ()
+Default constructor.
@@ -179,6 +192,28 @@ startTimer
+
+getSharedModelData
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
+
+getSharedGlobalData
+
+Retrieve a
SharedData accessor for globally shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
getId
public abstract String getId ()
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html
new file mode 100644
index 0000000..0640172
--- /dev/null
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html
@@ -0,0 +1,148 @@
+
+
+
+
+InitSimulationContext (digitaltwin-core-docs 3.0.5 API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+public interface InitSimulationContext
+
+
+
+
+
+
+
+Method Summary
+
+
All Methods Instance Methods Abstract Methods
+
+
+
+
+
+
+
+
+
Retrieve a
SharedData accessor for globally shared data.
+
+
+
+
+
Retrieve a
SharedData accessor for this model's shared data.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Details
+
+
+
+getSharedModelData
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
+
+getSharedGlobalData
+
+Retrieve a
SharedData accessor for globally shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html
index fd9882a..b9941e1 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html
@@ -2,7 +2,7 @@
-MessageFactory (digitaltwin-core-docs 3.0.4 API)
+MessageFactory (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html
index 87c25e4..87308d2 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html
@@ -2,7 +2,7 @@
-MessageProcessor (digitaltwin-core-docs 3.0.4 API)
+MessageProcessor (digitaltwin-core-docs 3.0.5 API)
@@ -110,7 +110,9 @@ Constructor Summary
-
+
@@ -160,6 +162,7 @@
Constructor Details
MessageProcessor
public MessageProcessor ()
+Default constructor.
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html
index ab6edc5..d9eca63 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html
@@ -2,7 +2,7 @@
-
MessageProcessorBase (digitaltwin-core-docs 3.0.4 API)
+
MessageProcessorBase (digitaltwin-core-docs 3.0.5 API)
@@ -98,7 +98,9 @@
Constructor Summary
-
+
@@ -141,6 +143,7 @@
Constructor Details
MessageProcessorBase
public MessageProcessorBase ()
+Default constructor.
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html
index 45f653c..dd17e2c 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html
@@ -2,7 +2,7 @@
-
ModelSchema (digitaltwin-core-docs 3.0.4 API)
+
ModelSchema (digitaltwin-core-docs 3.0.5 API)
@@ -96,12 +96,45 @@
Constructor Summary
Creates a model schema from a digital twin class, a message processor class, and a message class.
-
ModelSchema (String dtClass,
+
+
+
Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+
+
+
Model schema with a defined entry point.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+
-
-ModelSchema (String dtClass,
+
+
Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
alert provider configurations.
-ModelSchema (String dtClass,
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
alert provider configurations.
+
+
+
Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
@@ -161,30 +256,40 @@ Method Summary
Retrieve the Azure Digital Twin model name.
-
+
-
+
Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
-
+
-
Retrieve the message type (JSON serializable message implementation).
+
-
+
-
+
Retrieve the message type (JSON serializable message implementation).
-
-
+
+
-
Retrieve the persistence provider type.
+
-
-
+
+
+
Retrieve the persistence provider type.
+
+
+
+
+boolean
+
+
+
Retrieves the message recording enabled status.
+
boolean
@@ -228,6 +333,59 @@
ModelSchema
+
+ModelSchema
+
+Model schema with a defined entry point.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+ep - the invocation grid entry point.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+emr - enable message recording for this model.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+ep - the invocation grid entry point.
+emr - enable message recording for this model.
+
+
+
+
ModelSchema
public ModelSchema (String dtClass,
@@ -266,6 +424,74 @@ ModelSchema
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+spClass - the simulation processor class implementation.
+ep - the invocation grid entry point.
+alertingProviders - the alerting provider configurations.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+spClass - the simulation processor class implementation.
+alertingProviders - the alerting provider configurations.
+emr - enable message recording for this model.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+spClass - the simulation processor class implementation.
+alertingProviders - the alerting provider configurations.
+ep - the invocation grid entry point.
+emr - enable message recording for this model.
+
+
+
+
ModelSchema
public ModelSchema (String dtClass,
@@ -288,6 +514,30 @@ ModelSchema
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+adtName - the Azure Digital Twin model name.
+persistenceType - the persistence provider type.
+alertingProviders - the alerting provider configurations.
+emr - enable message recording for this model.
+
+
+
+
ModelSchema
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
Parameters:
dtClass - the digital twin class implementation.
@@ -309,6 +562,62 @@ ModelSchema
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+simulationProcessorClass - the simulation processor class implementation.
+adtName - the Azure Digital Twin model name.
+persistenceType - the persistence provider type.
+alertingProviders - the alerting provider configurations.
+emr - enable message recording for this model.
+
+
+
+
+
+ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+Parameters:
+dtClass - the digital twin class implementation.
+mpClass - the message processor class implementation.
+msgClass - a JSON serializable message class.
+simulationProcessorClass - the simulation processor class implementation.
+adtName - the Azure Digital Twin model name.
+persistenceType - the persistence provider type.
+alertingProviders - the alerting provider configurations.
+ep - the invocation grid entry point.
+emr - enable message recording for this model.
+
+
+
@@ -427,6 +736,29 @@ getPersistenceProvider
+
+
+messageRecordingEnabled
+public boolean messageRecordingEnabled ()
+Retrieves the message recording enabled status. True if this model should persist messages when message recording is active,
+ false otherwise.
+
+Returns:
+True if message recording is enabled, false otherwise.
+
+
+
+
+
+getEntryPoint
+
+Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
+
+Returns:
+the entry point for launching.
+
+
+
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html
index 7f6fc37..214c380 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html
@@ -2,7 +2,7 @@
-PersistenceProvider (digitaltwin-core-docs 3.0.4 API)
+PersistenceProvider (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html
index da4a79b..cff66a9 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html
@@ -2,7 +2,7 @@
-PersistenceProviderType (digitaltwin-core-docs 3.0.4 API)
+PersistenceProviderType (digitaltwin-core-docs 3.0.5 API)
@@ -109,6 +109,14 @@ Enum Constant Summary
Enum for the Azure Digital Twin service.
+
+
+
+
Enum for SQLite
@@ -118,7 +126,9 @@
Enum Constant Summary
Enum for SQLServer
-
+
+
Enum for an unconfigured PersistenceProvider
+
@@ -127,7 +137,7 @@ Enum Constant Summary
Method Summary
-
All Methods Static Methods Concrete Methods
+
All Methods Static Methods Instance Methods Concrete Methods
@@ -143,6 +153,16 @@
Method Summary
Return the PersistenceProviderType from a string value.
+
+
+
+
Retrieve the name of the persistence provider type.
+
+
int
+
+
+
Retrieve the ordinal value (used by the DTBuidler service).
+
@@ -182,6 +202,20 @@
AzureDigitalTwinsService
+
+CosmosDb
+
+Enum for CosmosDB
+
+
+
+
+DynamoDb
+
+Enum for DynamoDB
+
+
+
SQLite
@@ -199,6 +233,7 @@ SQLServer
@@ -241,6 +276,28 @@
valueOf
+
+getName
+
+Retrieve the name of the persistence provider type.
+
+Returns:
+the name of the persistence provider type.
+
+
+
+
+
+getServiceOrdinalValue
+public int getServiceOrdinalValue ()
+Retrieve the ordinal value (used by the DTBuidler service).
+
+Returns:
+the ordinal value.
+
+
+
+
fromString
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html
index 383f87d..ea553fe 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html
@@ -2,7 +2,7 @@
-ProcessingContext (digitaltwin-core-docs 3.0.4 API)
+ProcessingContext (digitaltwin-core-docs 3.0.5 API)
@@ -103,7 +103,9 @@ Constructor Summary
-
+
@@ -138,6 +140,16 @@
Method Summary
Returns the configured persistence provider or null if no persistence provider configuration can be found.
+
+
+
+
Retrieve a
SharedData accessor for globally shared data.
+
+
+
+
+
Retrieve a
SharedData accessor for this model's shared data.
+
@@ -240,6 +252,7 @@
Constructor Details
ProcessingContext
public ProcessingContext ()
+Default constructor.
@@ -412,7 +425,7 @@
sendAlert
- This method sends an alert message to supported systems. See "TODO: Link to docs" for more details on supported systems.
+ This method sends an alert message to supported systems.
@@ -544,6 +557,28 @@
getSimulationController
+
+
+getSharedModelData
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+Returns:
+a SharedData instance.
+
+
+
+
+
+getSharedGlobalData
+
+Retrieve a
SharedData accessor for globally shared data.
+
+Returns:
+a SharedData instance.
+
+
+
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html
index 4d2073a..99cf30d 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html
@@ -2,7 +2,7 @@
-
ProcessingResult (digitaltwin-core-docs 3.0.4 API)
+
ProcessingResult (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html
index 8d9d776..3bce6fe 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html
@@ -2,7 +2,7 @@
-
SendingResult (digitaltwin-core-docs 3.0.4 API)
+
SendingResult (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html
new file mode 100644
index 0000000..a0da3b9
--- /dev/null
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html
@@ -0,0 +1,188 @@
+
+
+
+
+
SharedData (digitaltwin-core-docs 3.0.5 API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+public interface SharedData
+SharedData is used to access a model's, or globally, shared cache.
+
+
+
+
+
+
+Method Summary
+
+
All Methods Instance Methods Abstract Methods
+
+
+
+
+
+
+
+
+
Clear the shared data cache.
+
+
+
+
+
Retrieves an existing object from the cache.
+
+
+
+
+
Put a new key/value mapping into the cache.
+
+
+
+
+
Remove a key/value mapping from the cache.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Details
+
+
+
+get
+
+Retrieves an existing object from the cache.
+
+Parameters:
+key - the key mapping to a value.
+Returns:
+A cache result.
+
+
+
+
+
+put
+
+Put a new key/value mapping into the cache.
+
+Parameters:
+key - the key mapping to a value.
+value - the value.
+Returns:
+a cache result.
+
+
+
+
+
+remove
+
+Remove a key/value mapping from the cache.
+
+Parameters:
+key - the key mapping to a value.
+Returns:
+a cache result.
+
+
+
+
+
+clear
+
+Clear the shared data cache.
+
+Returns:
+a cache result.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html
index eab1111..df4c127 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html
@@ -2,7 +2,7 @@
-
SimulationController (digitaltwin-core-docs 3.0.4 API)
+
SimulationController (digitaltwin-core-docs 3.0.5 API)
@@ -115,41 +115,58 @@
Method Summary
Delay simulation processing for this DigitalTwin instance for a duration of time.
-
+
-
Delete and remove a digital twin instance from simulation processing.
+
+ Delay simulation processing for this DigitalTwin instance, indefinitely.
-
+
-
Delete and remove this digital twin instance from simulation processing.
+
Delete and remove a digital twin instance from simulation processing.
-
+
+
Delete and remove this digital twin instance from simulation processing.
+
+
+
+
-
-
emitTelemetry (String modelName,
+
+
-
+
+
+
+
+
+ Retrieves the simulation start time.
+
Retrieves the current simulation time increment.
-
-
+
void
+
+
Run this instance during this simulation step.
+
+
+
+
@@ -180,6 +197,19 @@ getSimulationTimeIncrement
+
+getSimulationStartTime
+Date getSimulationStartTime ()
+
+ Retrieves the simulation start time.
+
+
+Returns:
+the simulation start time.
+
+
+
+
delay
@@ -219,6 +249,24 @@ delay
+
+delayIndefinitely
+
+
+ Delay simulation processing for this DigitalTwin instance, indefinitely.
+
+
+
+ Simulation processing will be delayed until this instance is run with runThisInstance() .
+
+
+Returns:
+SendingResult.Handled if the delay was processed or SendingResult.NotHandled
+ if the delay was not processed.
+
+
+
+
emitTelemetry
SendingResult emitTelemetry (String modelName,
@@ -348,6 +396,17 @@ deleteThisInstance
+
+runThisInstance
+void runThisInstance ()
+
+
+
+
stopSimulation
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html
index 7f4fc19..64de0a7 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html
@@ -2,7 +2,7 @@
-SimulationProcessor (digitaltwin-core-docs 3.0.4 API)
+SimulationProcessor (digitaltwin-core-docs 3.0.5 API)
@@ -107,7 +107,9 @@ Constructor Summary
-
+
@@ -116,17 +118,25 @@ Constructor Summary
Method Summary
-
All Methods Instance Methods Abstract Methods
+
All Methods Instance Methods Abstract Methods Concrete Methods
-
-
processModel (ProcessingContext context,
+
+
+
+
+ Optional method that is called per-instance when a simulation is started.
+
+
+
-
+
Processes simulation events for a real-time digital twin.
@@ -150,6 +160,7 @@ Constructor Details
SimulationProcessor
public SimulationProcessor ()
+Default constructor.
@@ -178,6 +189,36 @@
+onInitSimulation
+
+
+ Optional method that is called per-instance when a simulation is started. Default behavior is a no-op.
+
+
+
+ onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed
+ between simulation runs.
+
+
+ Set variables in global or shared data.
+ Run a simulation.
+ onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
+ Complete simulation and evaluate the result.
+
+
+Parameters:
+context - The simulation init context.
+instance - The digital twin instance.
+epoch - the simulation start time.
+Returns:
+ProcessingResult.UpdateDigitalTwin or ProcessingResult.NoUpdate . Default behavior: ProcessingResult.NoUpdate .
+
+
+
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html
index c0f7ab0..95a1b09 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html
@@ -2,7 +2,7 @@
-SimulationStatus (digitaltwin-core-docs 3.0.4 API)
+SimulationStatus (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html
index eb5dd4c..9cb2a82 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html
@@ -2,7 +2,7 @@
-TimerActionResult (digitaltwin-core-docs 3.0.4 API)
+TimerActionResult (digitaltwin-core-docs 3.0.5 API)
@@ -255,7 +255,8 @@ fromOrdinal
+ 2 = FailedNoSuchTimer , 3 = FailedTimerAlreadyExists ,
+ 4 = FailedInternalError
Parameters:
val - the ordinal value.
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html
index c07d3f3..60c2c72 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html
@@ -2,7 +2,7 @@
-TimerHandler (digitaltwin-core-docs 3.0.4 API)
+TimerHandler (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html
index 27958fe..b2824fe 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html
@@ -2,7 +2,7 @@
-TimerMetadata (digitaltwin-core-docs 3.0.4 API)
+TimerMetadata (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html
index 3264684..cef4477 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html
@@ -2,7 +2,7 @@
-TimerType (digitaltwin-core-docs 3.0.4 API)
+TimerType (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html
index db0c1b6..9fa1f27 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html
@@ -2,7 +2,7 @@
-com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.4 API)
+com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.5 API)
@@ -83,6 +83,14 @@ Package
Configuration for an alert provider.
+
+
+
Status of a cache operation.
+
+
+
+
Represents a response from a
SharedData operation.
+
A real-time digital twin of a data source.
@@ -96,43 +104,52 @@
Package
-
+
+
+
Message list factory retrieves message lists for a MessageProcessor
-
-
+
+
Processes messages for a real-time digital twin.
-
-
+
+
Base class for the MessageProcessor to help with typing.
-
-
+
+
The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a
digital twin model to the real-time digital twin cloud service.
-
-
+
+
An interface that can be used for persisting/retrieving the state of real-time digital twins.
-
-
+
+
-
-
+
+
Context object that allows the user to send a message to a DataSource.
-
-
+
+
The result from a message processor which indicates to update the state object or to ignore
-
-
+
+
Marks a message as Delivered or not Delivered
+
+
+
SharedData is used to access a model's, or globally, shared cache.
+
The SimulationController interface is used to interact with the running DigitalTwin simulation.
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html
index 21271e7..d2f2c59 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html
@@ -2,7 +2,7 @@
-
com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.4 API)
+
com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.5 API)
@@ -79,8 +79,11 @@
Class Hierarchy
Interface Hierarchy
@@ -92,6 +95,7 @@ Enum Class Hierarchy
@@ -342,21 +346,34 @@
Method Summary
Adds an alert provider configuration to the specified model on this workbench.
void
-
addInstance (String modelName,
+
+
+void
+
-
+
Adds a digital twin instance to the workbench.
-
<T extends DigitalTwinBase ,
+
-addRealTimeModel (String modelName,
+
-
+
Adds a real-time digital twin model to the workbench.
+
void
+
+
addSimulationModel (String modelName,
@@ -398,6 +415,16 @@ Method Summary
Retrieves messages logged by digital twin instances for a specified mdoel.
+
+
+
+
+
+
@@ -460,6 +487,17 @@
Workbench
Instantiate the workbench.
+
+
+Workbench
+public Workbench (int numSimulationWorkers)
+Instantiate the workbench.
+
+Parameters:
+numSimulationWorkers - the number of simulation workers to use. Default is Runtime.availableProcessors() .
+
+
+
@@ -695,6 +733,36 @@
getAlertMessages
+
+getSharedModelData
+
+
+
+Parameters:
+model - the model name.
+Returns:
+the SharedData for a model.
+Throws:
+WorkbenchException - if an exception occurs while creating the working shared data.
+
+
+
+
+
+getSharedGlobalData
+
+
+
+Returns:
+the global SharedData of this workbench.
+Throws:
+WorkbenchException - if an exception occurs while creating the working shared data.
+
+
+
+
generateModelSchema
public String generateModelSchema (String modelName)
@@ -751,6 +819,34 @@ send
+
+addSharedModelData
+public void addSharedModelData (String modelName,
+ String key,
+ byte[] value)
+
+
+Parameters:
+modelName - the model name.
+key - the key.
+value - the value.
+
+
+
+
+
+addGlobalModelData
+public void addGlobalModelData (String key,
+ byte[] value)
+
+
+Parameters:
+key - the key.
+value - the value.
+
+
+
+
close
public void close ()
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html
index d76f832..23c4465 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html
@@ -2,7 +2,7 @@
-
WorkbenchException (digitaltwin-core-docs 3.0.4 API)
+
WorkbenchException (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html
index 996f2e1..fcd247c 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html
@@ -2,7 +2,7 @@
-
com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.4 API)
+
com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html
index 294e1fb..b449414 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html
@@ -2,7 +2,7 @@
-
com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.4 API)
+
com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html b/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html
index 2af3cbe..16c9fe8 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html
@@ -2,7 +2,7 @@
-
API Help (digitaltwin-core-docs 3.0.4 API)
+
API Help (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html b/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html
index e149a6e..282504b 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html
@@ -2,7 +2,7 @@
-
Index (digitaltwin-core-docs 3.0.4 API)
+
Index (digitaltwin-core-docs 3.0.5 API)
@@ -56,6 +56,10 @@
A
Adds an alert provider configuration to the specified model on this workbench.
+
addGlobalModelData(String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
+
+
+
addInstance(String, String, DigitalTwinBase) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
Adds a digital twin instance to the workbench.
@@ -64,6 +68,10 @@ A
Adds a real-time digital twin model to the workbench.
+ addSharedModelData(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
+
+
+
addSimulationModel(String, MessageProcessor<T, V>, SimulationProcessor<T>, Class<T>, Class<V>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
Adds a simulation digital twin model to the workbench.
@@ -95,6 +103,22 @@ A
C
+CacheCleared - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
+
+The cache was cleared successfully.
+
+CacheOperationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
+
+Status of a cache operation.
+
+CacheResult - Interface in com.scaleoutsoftware.digitaltwin.core
+
+Represents a response from a
SharedData operation.
+
+clear() - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
+
+Clear the shared data cache.
+
close() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
com.scaleoutsoftware.digitaltwin.core - package com.scaleoutsoftware.digitaltwin.core
@@ -105,6 +129,10 @@ C
Digital twin development API - Develop and test simulation/real-time digital twins.
+CosmosDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
+
+Enum for CosmosDB
+
createInstance(String, String, T) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
Create a new digital twin instance for simulation processing.
@@ -125,6 +153,11 @@ D
Delay simulation processing for this DigitalTwin instance for a duration of time.
+delayIndefinitely() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
+
+
+ Delay simulation processing for this DigitalTwin instance, indefinitely.
+
deleteInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
Delete and remove a digital twin instance from simulation processing.
@@ -138,7 +171,9 @@ D
A real-time digital twin of a data source.
DigitalTwinBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
-
+
+Default constructor.
+
DigitalTwinTimerMessage - Class in com.scaleoutsoftware.digitaltwin.core
A message sent to a digital twin instance's message processor.
@@ -147,6 +182,10 @@ D
Construct a digital twin timer message.
+ DynamoDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
+
+Enum for DynamoDB
+
E
@@ -212,6 +251,10 @@ G
Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system.
+get(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
+
+Retrieves an existing object from the cache.
+
getAlertMessages(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
Retrieves alert messages from digital twin instances.
@@ -248,6 +291,10 @@ G
Retrieve the entity ID for this alert provider configuration.
+ getEntryPoint() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
+
getId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
The identifier of this DigitalTwin.
@@ -284,6 +331,10 @@ G
Retrieve the integration key for this alert provider configuration.
+ getKey() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
+
+Gets the key or null to the object associated with the result.
+
getLoggedMessages(String, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
Retrieves messages logged by digital twin instances for a specified mdoel.
@@ -326,6 +377,10 @@ G
Retrieve the name of this alert provider configuration.
+ getName() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
+
+Retrieve the name of the persistence provider type.
+
getNextSimulationTimeMs() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
Retrieve the next simulation time in milliseconds.
@@ -374,6 +429,10 @@ G
Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist.
+ getServiceOrdinalValue() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
+
+Retrieve the ordinal value (used by the DTBuidler service).
+
getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
Retrieve the severity for this alert message.
@@ -382,6 +441,38 @@ G
Retrieve the severity of this log message.
+ getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
+
+Retrieve a
SharedData accessor for globally shared data.
+
+getSharedGlobalData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
+
+Retrieve a
SharedData accessor for globally shared data.
+
+getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
+
+Retrieve a
SharedData accessor for globally shared data.
+
+getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
+
+
+
+getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+getSharedModelData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
+
+Retrieve a
SharedData accessor for this model's shared data.
+
+getSharedModelData(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
+
+
+
getSimulationController() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
@@ -390,11 +481,20 @@ G
+ getSimulationStartTime() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
+
+
+ Retrieves the simulation start time.
+
getSimulationTimeIncrement() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
Retrieves the current simulation time increment.
+getStatus() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
+
+Gets the status of the cache operation.
+
getStatus() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
@@ -451,6 +551,10 @@ G
Retrieve the URL for this alert provider configuration.
+ getValue() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
+
+Get the object returned from a Get operation.
+
H
@@ -475,12 +579,19 @@ I
digital twin.
InitContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.InitContext
-
+
+Default constructor.
+
initializeSimulation(long, long, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
Initializes the simulation so that each interval can be run separately by calling the
Workbench.step()
function.
+InitSimulationContext - Interface in com.scaleoutsoftware.digitaltwin.core
+
+
+
InstanceRequestedStop - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
@@ -512,13 +623,21 @@ M
Processes messages for a real-time digital twin.
MessageProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
-
+
+Default constructor.
+
MessageProcessorBase <T extends DigitalTwinBase > - Class in com.scaleoutsoftware.digitaltwin.core
Base class for the MessageProcessor to help with typing.
MessageProcessorBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase
-
+
+Default constructor.
+
+messageRecordingEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Retrieves the message recording enabled status.
+
Model - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
The model this twin instance belongs to.
@@ -532,18 +651,66 @@ M
Creates a model schema from a digital twin class, a message processor class, and a message class.
+ ModelSchema(String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, and a message class.
+
+ModelSchema(String, String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Model schema with a defined entry point.
+
+ModelSchema(String, String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, and a message class.
+
ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
Creates a model schema from a digital twin class, a message processor class, a message class, and
alert provider configurations.
+ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
-
+
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class,
+ a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type,
+ and an alert provider configuration.
+
+ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
+ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
ModelSchema(String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
Creates a model schema from a digital twin class, a message processor class, a message class, and
alert provider configurations.
+ModelSchema(String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
+
+Creates a model schema from a digital twin class, a message processor class, a message class, and
+ alert provider configurations.
+
ModelSchema(String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
Creates a model schema from a digital twin class, a message processor class, a message class, and
@@ -575,10 +742,31 @@
N
O
+ObjectDoesNotExist - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
+
+The object could not be retrieved because it was not found.
+
+ObjectPut - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
+
+The object was successfully added/updated.
+
+ObjectRemoved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
+
+The object was removed successfully.
+
+ObjectRetrieved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
+
+The object was successfully retrieved.
+
OneTime - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
This timer should trigger one time.
+onInitSimulation(InitSimulationContext, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
+
+
+ Optional method that is called per-instance when a simulation is started.
+
onTimedMessage(String, T, ProcessingContext) - Method in interface com.scaleoutsoftware.digitaltwin.core.TimerHandler
Callback to handle a timer message.
@@ -607,7 +795,9 @@ P
Context object that allows the user to send a message to a DataSource.
ProcessingContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
-
+
+Default constructor.
+
ProcessingResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
The result from a message processor which indicates to update the state object or to ignore
@@ -628,6 +818,10 @@ P
Processes simulation events for a real-time digital twin.
+ put(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
+
+Put a new key/value mapping into the cache.
+
R
@@ -635,6 +829,10 @@ R
This timer should reoccur on a schedule.
+remove(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
+
+Remove a key/value mapping from the cache.
+
Running - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
The simulation is running.
@@ -643,6 +841,10 @@ R
Runs a simulation from the given startTime until the given endTime OR there is no more work to do.
+ runThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
+
+Run this instance during this simulation step.
+
S
@@ -698,6 +900,10 @@ S
Set the next simulation time in milliseconds.
+SharedData - Interface in com.scaleoutsoftware.digitaltwin.core
+
+SharedData is used to access a model's, or globally, shared cache.
+
SimulationController - Interface in com.scaleoutsoftware.digitaltwin.core
The SimulationController interface is used to interact with the running DigitalTwin simulation.
@@ -713,7 +919,9 @@ S
Processes simulation events for a digital twin.
SimulationProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
-
+
+Default constructor.
+
SimulationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
The status of a simulation.
@@ -793,7 +1001,9 @@ T
U
Unconfigured - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
-
+
+Enum for an unconfigured PersistenceProvider
+
UnexpectedChangeInConfiguration - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
There was a runtime-change of simulation configuration.
@@ -825,6 +1035,10 @@ U
V
+valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
+
+Returns the enum constant of this class with the specified name.
+
valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
Returns the enum constant of this class with the specified name.
@@ -849,6 +1063,11 @@ V
Returns the enum constant of this class with the specified name.
+ values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
+
+Returns an array containing the constants of this enum class, in
+the order they are declared.
+
values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
Returns an array containing the constants of this enum class, in
@@ -890,6 +1109,10 @@
W
Instantiate the workbench.
+
Workbench(int) - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
+
+Instantiate the workbench.
+
WorkbenchException - Exception in com.scaleoutsoftware.digitaltwin.development
A Workbench exception indicates that a real-time or simulated twin caused an exception.
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/index.html
index efbce74..c1028e2 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/index.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/index.html
@@ -2,7 +2,7 @@
-Overview (digitaltwin-core-docs 3.0.4 API)
+Overview (digitaltwin-core-docs 3.0.5 API)
@@ -47,7 +47,7 @@
Packages
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js
index 13931aa..a4c179e 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, AlertProviderConfiguration)","u":"addAlertProvider(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, DigitalTwinBase)","u":"addInstance(java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor
, Class, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,com.scaleoutsoftware.digitaltwin.core.SimulationProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"AlertProviderConfiguration(String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"AzureDigitalTwinsService"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String, T)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"DigitalTwinTimerMessage(String, String, int, String, TimerType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,com.scaleoutsoftware.digitaltwin.core.TimerType)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, Object)","u":"emitTelemetry(java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromString(String)","u":"fromString(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String)","u":"generateModelSchema(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String, String)","u":"generateModelSchema(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAlertProviders()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getAlertProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAssemblyName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAzureDigitalTwinModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getEntityId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageFactory","l":"getIncomingMessages()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getIntegrationKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getModelType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getNextSimulationTimeMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getRoutingKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtProperty(String, String, Class)","u":"getRtdtProperty(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtPropertyAsync(String, String, Class)","u":"getRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getSimulationProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerHandlerClass()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTwinId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getURL()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.core.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"MessageProcessorBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"NextSimulationTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.core.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"persistenceEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, Iterable)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.lang.Iterable)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, List)","u":"send(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendAlert(String, AlertMessage)","u":"sendAlert(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(List)","u":"sendToDataSource(java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(Object)","u":"sendToDataSource(java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, List)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, Object)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, String)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"setNextSimulationTime(long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"simulationSupportEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLite"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLServer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"TimerHandlers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.core.TimerHandler,com.scaleoutsoftware.digitaltwin.core.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"Unconfigured"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtProperty(String, String, Object)","u":"updateRtdtProperty(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtPropertyAsync(String, String, Object)","u":"updateRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults();
\ No newline at end of file
+memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, AlertProviderConfiguration)","u":"addAlertProvider(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addGlobalModelData(String, byte[])","u":"addGlobalModelData(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, DigitalTwinBase)","u":"addInstance(java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor, Class, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSharedModelData(String, String, byte[])","u":"addSharedModelData(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,com.scaleoutsoftware.digitaltwin.core.SimulationProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"AlertProviderConfiguration(String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"AzureDigitalTwinsService"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"CacheCleared"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"clear()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"CosmosDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String, T)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delayIndefinitely()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"DigitalTwinTimerMessage(String, String, int, String, TimerType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,com.scaleoutsoftware.digitaltwin.core.TimerType)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"DynamoDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, Object)","u":"emitTelemetry(java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromString(String)","u":"fromString(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String)","u":"generateModelSchema(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String, String)","u":"generateModelSchema(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"get(String)","u":"get(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAlertProviders()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getAlertProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAssemblyName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAzureDigitalTwinModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getEntityId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getEntryPoint()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageFactory","l":"getIncomingMessages()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getIntegrationKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getModelType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getNextSimulationTimeMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getRoutingKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtProperty(String, String, Class)","u":"getRtdtProperty(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtPropertyAsync(String, String, Class)","u":"getRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getServiceOrdinalValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedModelData(String)","u":"getSharedModelData(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getSimulationProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationStartTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerHandlerClass()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTwinId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getURL()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.core.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"MessageProcessorBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"messageRecordingEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"NextSimulationTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectDoesNotExist"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectPut"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRemoved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRetrieved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"onInitSimulation(InitSimulationContext, T, Date)","u":"onInitSimulation(com.scaleoutsoftware.digitaltwin.core.InitSimulationContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.core.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"persistenceEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, Iterable)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.lang.Iterable)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"put(String, byte[])","u":"put(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"remove(String)","u":"remove(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"runThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, List)","u":"send(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendAlert(String, AlertMessage)","u":"sendAlert(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(List)","u":"sendToDataSource(java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(Object)","u":"sendToDataSource(java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, List)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, Object)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, String)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"setNextSimulationTime(long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"simulationSupportEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLite"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLServer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"TimerHandlers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.core.TimerHandler,com.scaleoutsoftware.digitaltwin.core.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"Unconfigured"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtProperty(String, String, Object)","u":"updateRtdtProperty(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtPropertyAsync(String, String, Object)","u":"updateRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench(int)","u":"%3Cinit%3E(int)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults();
\ No newline at end of file
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html
index f782a93..0832a3f 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html
@@ -2,7 +2,7 @@
-digitaltwin-core-docs 3.0.4 API
+digitaltwin-core-docs 3.0.5 API
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html
index 1d46006..e355db6 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html
@@ -2,7 +2,7 @@
-Class Hierarchy (digitaltwin-core-docs 3.0.4 API)
+Class Hierarchy (digitaltwin-core-docs 3.0.5 API)
@@ -93,8 +93,11 @@ Class Hierarchy
Interface Hierarchy
@@ -106,6 +109,7 @@ Enum Class Hierarchy
java.lang.Enum <E> (implements java.lang.Comparable <T>, java.lang.constant.Constable , java.io.Serializable )
+com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType (implements java.io.Serializable )
com.scaleoutsoftware.digitaltwin.core.ProcessingResult
com.scaleoutsoftware.digitaltwin.core.SendingResult
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html b/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html
index 6f04e5a..86e2438 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html
@@ -2,7 +2,7 @@
-Serialized Form (digitaltwin-core-docs 3.0.4 API)
+Serialized Form (digitaltwin-core-docs 3.0.5 API)
diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js
index 1ff095a..3146686 100644
--- a/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js
+++ b/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js
@@ -1 +1 @@
-typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertProviderConfiguration"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinTimerMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageFactory"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessorBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ModelSchema"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProvider"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProviderType"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults();
\ No newline at end of file
+typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertProviderConfiguration"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheOperationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinTimerMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitSimulationContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageFactory"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessorBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ModelSchema"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProvider"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProviderType"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SharedData"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults();
\ No newline at end of file
diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0
new file mode 100644
index 0000000000000000000000000000000000000000..7f627fcf3df6d5eb896ecd435acf7340138d278e
GIT binary patch
literal 12234
zcmcgy3w%`7ng4&2Np3Q^Br%Z4ph)nU7X&SWB#0tJ4I~5zfK~$JW)l>sH$C{@iYDmvyE8@7&4EBtetGpUY#;
zx#ynqo$vAgzVn@P?h7A(|0w{c%R@eRkYmAXBNussl8XWx19hQ5xT~&p-9=7ET#z?A
z7!Jng2y!Z`mRradoZb=Xsf%?4LQW(Rk44tUHwB_jU1zW>7!QQvn}XrGPG_SNiuCq4
z;dotJuqP1;#DkIWib!;W6ZOG|LJPKyF(?uo7m0S&1$qM=-A-L7($y8@)GVi8RM#Bo
zY6*k`T~1U`(B;JWZ0gf1o6}s*3k71ahN|XIqry=Q1+Y+J;|P=rtTj53lAS!_I1A$h
zN1FK(@nEQKaWoi-2IE_nB%Flf!&u}f%5%^thhmUTs
zaFpQ0H0_Q^xFZpbs?z4As^DpUxaDjE|c)nO+1G!jM!$J#i~
z9ZnO4<1yv_1RE#fBqbROMdD4J0%_9rDjU_P5%|{hL^_?&qCk%$D9uoQTRcj08M;$!
zOhuhw+?rU*-ixD=4ks3iP|*#|BVwi_LJ+0Fk{WEtpKRk4d_l=8z8W_>9TYbbZVVGI
zWa_Mu$!9`x*>D
zxN2MQ5=Y0MZQ~prKQ_axO=0%h7zpK~NpQUD)D=-D=ESE?om#MKr&RRoj0^udRP
zXtvN|V-Z>fMQQhKj)c1iJW@+It?M~Y<$|gVfaz=MYzdZHXtS{l=M4%`F8&yz)<>c}
z0miCXnV}(x&I>Z=xiO95BF#avS0Ps5d<*S1R^kG|q!HqYz#9y&j|j>RF=N$o4GgPn
ztk#g4+YxdCjCvEW%0fUe|1fRdsQ#+RZR+U_S?Ca)nH429)H)~J(cRX~aNRjS5D)m^
zV7-Md8{G(IOYaa)MEem$=Y%5b0-^LQs-&dGO^ixLG}?6?Ht4z&5|n2Kv4IY%M+adW
z5%dadl5WvBq?`**I+WsFyAGLUEuuOLo#oBS1=$A*2BOVdK1=)>c}h3*rOYzw$Xln@sfEjId=ZxmW@m+_bSyEr6yy(>hcRiu
z+$N7mI+)IOrH!j}s$2~~N3~#bf=4o$PYRvEX|iR(
z@TQURk+}${+hqkwBiXrua3|NWhN|WHxPt*x?XL)!fV*sb1$VP4>hwf5a_KlRQ;tto
zc>(UlHVfNrd=>WzW@e>)BS2d`5a)c>QZq3DJ1aX)q=_(;Y{dgMzJ{+0#&97@zap+H
z51Xud)dW0b;~V%UHDp#PhLQ0D_%?xNUL+J^qRechp%9N?hlOw1cocs}KS-x`=}tsX
z(5$kW7L^a8|0SubS2D(sf-GSI5XEVKqdHG5mvD3!)@Fbl(
zY?=pqVbYMQsD2x}u$#+pES0G>F~irz*9E7UiBZ-eTr>iI-^O12z>UBu_z6~L0_76{
zUzMHqQ}k)mv3N?sxyizh1PihPSbDKb$;gyC9#va$E#8Nx)oY&-T$?324zcQuB3x%W
za5{3P(?Z=?{e$3~!;_I{*F2l4xXMW5`|vEDR{{S~aOMAtfJ2h^w5|<=p2Z6`Uc^rs
z`Awd9=tS)hk#Sg>ri%L6Kn9t@sSht9M}JcFP6c+w{t$HxH`V@7VaQYNXIaMR)J2?f+`y-?Y7q?HWeX
zJgD9@_5XJpzr*_sS8Jk)aG2oYws56|-*YpU6-)gSP022@1_r1Df0~9$Rv>eLUN_6VvVcP?7gZF7Yqi3>+$J
z9gh2|#aXHOehA%`T=U@#?kUlG^*=g^`|c(%eteH
zO@VbGcOlv@<+dEDsxG6dhl7@0A%0sXsKZ!v7{~P#Iog(qrp*b{e-ciiOhUpEo}suK
zQ4>a7n2nWVZ8=Vkr{S4G&kb>B;?Ge7C?{D`X-kz<4-hjcZ%ZKF&2_ma
z7*2v*_u^7(%M^Dntqb&Ej1)+nOta)1LuqlDv1ExYOQnql;h8QWf5vDu^$95rO~HV{W15MF1kOB8pbky2
zv<17u)NYjZ_6&RuI$)hWvQ&rW!>s8Ia~cGfWYEq)Ff$aMRB5nIo;J)L9)>^r)l+!$mKa}U0=WAXD!UWuG}Jed&`bIo=ZC3@C5(PgfgOPeDE)$%|zsL#np
zZ@fE5k31tg?$gk9&m3voynzGjTysLrAZ*H%!gyMkyp~YWjmnrY4bvhCImwgcf>`>z
zw|p?~TY3lhUpSP)?3$59F-D#5UXmy`X9Z%8B2+3qXOMgb=0=t()BQd_c+DS0Zl1|W
z8Y;Rr=t(*EAsH_rdqM?M7%SyiEDll7eZCWvPkj{s3A-K
zb+E}u4cocQt2Xo0ZWJ*-QweDznsDjqv0%>O3hD+_!Q3n*Nvq1Gpk^pm_2_w9Nr>`>(}dbYTmkJB@-;V594fw$>hxCy&!2SrLi~zS=#wCr-+t3Flc+5
z+H?wfGqgPDI>O*OGn-7NwTI1&t|KO0^|eJ3(GKVApytSBX)CxX&s0sSQNhz04@8#n
z3yM!So6%oA(n-p-%2~%SMq5;a>yI7pn4aiy42c@f<6>i@5R{mT`22AIja*`
zJ-QDQ)78ne@b3R!`|eZM8qQ57Vmsd3~7v1gYi71^k`LxqxZ#Vj|@}hVo7_
zGEK$FYm|B36=a||$=^%aW
z*GXzTNMp^R9`a;8>vnSFI_ZKpsp)REy(mFyR^{JhECbA}uIa~VeVC)=S$$}%eiFr{
z=jQ$pp7tEp=j_IUwstRTjau7{#e1;a0~OX|ge^5}%tAiuQGy13mN450RBl+FnG$HG
zTqGOFf=CE?NhX^0nUu;&zPuk7vY6bDH7q8w7&^xpWcf@K(WqrO%go`5S)QCjq({O@
z$`8{7s;CS0Vr@I=&8gu}?Ov?YhiU!j+=Ytqd!a2N`Ki9BV;j)lY!37eLUJ86Ns^wyd8qesFSd!)S
zREt`eTG+oN9o$B$9K!&JhKivvn`7
zZLgi;&+Etaes7K6+J#%{^U26Wzt^9yb173=8_boqC|g<@zTD1f)s!1(E~dqnU^12x
z$ZhE<^!7Xh?iw{{TYK&lwP-)?{1LX+d;Q*>xThcYvt!Em
zes5ApmPSZ+9%lU&6z_cMz8wp&(ugjCZwGPFTE3iAs
z_SM9L3S6b!^y9%jcv#ReN6%2z4Khh;Au=^;c)IzDc#*}K`f(MR
zQsSa1&to3nPphGu?5Xz-c%WZ{$Y@+}(GJ+`T0W&8KU}dF`;5!7VfrroSjjzW8vNc}
zc&x5nYEyS8Ke
z6w}a;w+AZk?!c^atAOvyr?^DkPL_N#$yCjdfR51)15bQC(KN8JG4(e2@Gi>~mQuQ+
zaIRCa5;tga4Hw1HG(ZP`J83+Jh*^(S=)zk4@C6s)5^TWr2;p}0U^~LR?~U+6wHHs~
zVqSeld7T#H?NS`CBZ0TEkryMI@F#vq!Q&+<#-&n<%Xp~#MXALVayG7%R$P^G#u}U=
z8lk+Tv`oItK+6?U77sv#wIqUBQ@8ZsXqldb(j|CRu90gw_If-o*U9xn|914t4Fpx5
z0aY!mkFeIl*8GFyIp2b1VTt*-)xtgt&suniX!jq$Q69hCNG*7Yy_@)-Cw?yea?htD
zk0TCOSGPAmUG43|do|DOKz>WjGqwBnV!w&>s`g#@L-RQN=Uo1u>GjUY%b8($XXNk2
z2gJyq>I;T~%9jF_PeD~U04Ce7KvXd0%osxgeBd(m-x?{3{6)`6i@&HJf7yxueMHt>
zJx28DpU>Uy+`2!5fQQJW^lln2$?e)b^
zSLe_;{$g6Eu)dU~zjR;Dj65@HJ5DXj--c;^lG-E3ctF9A8#ZXH4jQY2j1kN7wtsvD
zg(&wI^vmQG)fMI5-Eu;oa9x)g_Mo^WW!82SGLMlmw(pdwWn=nf`ih-WujBgVbbTrt
z^8m)}mAUQ83d5At?2>aH*M^<4VBnFs_cGEI5raj{TD5!;zrt%WMjn(${s+r&mOBUA+6-At&>vmO+W!VQS?c#867PejAO=(`v@m{k2!#eo+FCw1MqncQWKv#kQ#7Vusr@O
zIv;>Ftu_^J$CS*KrCd$iT~ZzOOP-Ni-7kwDXT{C=nZL7sv@xHXgXg+tNt0nucZ2se
K`MMeR;NJjbSW&kC
literal 0
HcmV?d00001
diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6
new file mode 100644
index 0000000000000000000000000000000000000000..850b9a0213e63c9da6953656aaafd9681341bf0f
GIT binary patch
literal 20564
zcmdU13w%`7ng70%ncT_b5<)@-0w{w#OhS110GWVF0>K~;AqWK&9Fj{InasqQ2@$lu
ztF5c0b=g*^THD%2r4Oo-fJnhUw5`^*wraJt?b?^!?ryj3cHP=4`~S|pbLS=*NKm``
zTYfNe=iGC?^PTVfzvsD^Z@>NcSBPl7+88871qS&{@>3yG>6Ov#(HZe*qHV^C%~x72
z8K%N{u|zC$K2t$e^%{c$OjC5H&P*&mqa~SW=}e`pL}o^VdwEeby>(f%BS;1n6j3pm
z1`RW*goZQCZb`P!NVi1eRvCC6OCuOVu=~8)^;nN>}VH~Ym=#M
zo2^94R;J-gS1ew8gfBeeR7iX*5+b8Jkj8x-$-G%wKv+D`<|jcgCZcSTfO^u{ty>V@(=Ir!kdn
zN_%cbQyHt3iPr~dJcSLKVA2^hk!eJ3LsoSrGO>1xDcELZ+#eNH)wUq?ra8@ZLS?c^
zQ|L^la%^cV9^D+bE=eU@taLh=O6%QhlI2&MR6|pliZ>-X+eP4(+~p>NrZHW3N{d~M
z{abXk)dFNB6N?gUv4j<*TACr)n#ojGb!xJ6cfYQBjc|IFNoUhJOd~f5Q2I^8RDWvJ
z^DtXy&}^nNauRQf$E~(#d_k(MQ}DRx>K3a*))t`im}()f-1a(>3%7TsGvUovxGiNx
zGgfL^W@|JNo;f{8=Tb!EP{&l^AXjf#b0!r_v|)uonos8&bb(11(tKd9>XMCpzQtNOKz>ed-iDz(nSP3EHUX~TG|Ja^~q%1iYCCp_GrA*TCs&GRJGmH@TQLm~Qv!cOO^-#Xx#T+u6IzlX*uO=g3JHFZ5kk|rs_2Tf}cCPA(}`eGhu98
zIAL{#V;YAoR=8_xEN+E!!U@OH;b==Hw%vkpSxFJGwA)OIQ#+uwHJV-~R^SB2W_^H?
zOjB2HwZeL9!mUXw9hPaWt7EWV$wWA_74*BZ{ufi!(p4s<2ntcsqHSA~!x_`Yd_vAy
z(Nlw&2d?$ev;{y1s1v55pIi_@q%z@-RC0T))k>XQIr829@2KH5CS6PKhX+nunH(&dGto>ZBb~8e
zO-48o{%QoD%VP0(4A4L>up~(L(tQSf(xm%kWZksL%VDy_aviDZ{FJZaKbrNO@`VO^amBc`uQo(d$HebJ&f>RlfK+Pn$tMXNqhXT&MES4qN^j{lcJM
zn)ECBbylhLHfT<;U4_x~QUnuBlk@UqOGuB9ZXozPy>8NPC1draV>`9je`nIa(!W6!
zVt{rulT1l|;ob8lr@gM2eoy~l&>u|tqhv&7x$Vt%ftU~$EeHCg?|+)~XZkNpCF+2j
zGE3D{`T$EW(|?=v7qM=#=c0>%YC9?$f2F?}^p;6)({aRDxyc%mNEs28A$@>KT9TC6
zLMY2lkXvyvGb@7&O!l$AkJi{jjCAK_`)XuWQ!4#N5Hv2*8TFXlPD3FGo3Z45^0O8SMBJJ!4*vB4nYA1jI1+w)Tx$6
z+~l))D+*q%FpE*yl1h`uh_w@R>406|;1G|4y<`-LLXK_GsL2|*>NRDk+N~A>VUs8D
z8SqyiusELF9F6BDkl^2on(S~HH_7D50^MPVmL#CilcxodXPR8a)lfNXVtgAX>0_l!u3P=XL(-FI$R5pO;bHygFrnkmYh=2Gzljq7ZiXla01|3Kcb_5uunqiaEm$geGHT}wTGGXxitYwKMXEY)o
zTbmNY6y$lxzjz*BXz~K7@c6r=U0NDUUMO`{|CV@XdaJZFn!H%Iw8WEX%iyMLumO@y
zD_lMUd@<9chGb_Pc_3V*rWoELIbbGff2VbP26-)Gs@8HA(bR^UT5H461dM@QEI^u=
zvY>^wJhdfQVe%!s5{ic1*U@oKPy(qf=)l`g8*1-O}Mrjy{M5!+;0
zm!-mChxv;)a!KnY#pA*(Hr_}PXgmEbz%hiEwL#v<+f0r#;{C#CM+ewtnwCeW9D|~X*~oC%z@ku7
z;LC;5RVJqxh9i(k+I{*vSO-&LLOKPD+nH|4Guc3|GnAHhj6;L3hIiCrhBDUg$XGg-
zS<#v4=tLrdT%kS4T{te`YY<>&``HGuZ>OF7ez8l}A=-781%lo#QXt@+e1pk1@=Y*2
zTD@&bC$P8Z-^I6>`~kid{WD3IJxN=tH`E)9ta@CQDfezu!o&M*j4avD{{VYbwV@uV
z4&Mn5vt#V(`wX~)cgcW{%gZuz@oBSX@gy2rbOHDb|*`mYPv-ehuQQ=qPjd;fLELCeS;c*
znQ3`WP>2Ae5FUebKZ$t5PBs)q)R5&j=W`5x6sB@$rnX=GFTe+wn)0*b>6+WA(J1MOwK-C^9ENirBE0#OpOK~>0@;lbY_wb;{Z{5}oJSVHgy+6sI(N;*p+2bl%|3<^Q$$
zKVF>VWO=#%pMkcxcX4R@0a
zh{FfJkBD|;zC%jHwauAm%Ql?RJM&3h9Hp$dWVkwPLP}z#QpuEKP!aYHL@rc7$Ho$M
zGL3D`oip_}!$Vq$-rD{nv64djh!V=`VZk<-;IiEgavj?o>MKl~Y&r|PaB$VhJO8}Z
ztLs*;(EtnepI+_>^77n}5eCD+l;<(J@RM$sk4^sGyw#B*a_2F4`fOxP#KV(gzt7JX
zM-9#N_7}dpc+V_a(Dup)w#u>vb!C84E@pQC_3(SgSltlimE*yUEgXBB^U?zwWCi7E
z_t^}0C`#P#VqR1X-uY--;0FIQ4#I}EmwA@XT>Ae2YVUY?CjzA?>4~9Q45;RUBo#y2
z6R<;`78tcTL)^0diU|vgFd$b28`9G$Io}4z>C;IBe>obkG*Yd}Z7fp*4$&4a8A86}
z^%6M(`jI5$Y*=W8M?$V~!i;_de{uv^pc6s^m5@wyHF8A1zJiDFjRU)ODmh&1Ri7&WGC2<;kf=_Iaz!HSOnVyV
zmvaZ7-7BHoxd&z+ro)ch%(b3L@58EU?%hoxr)l2eH@0hbo>@Icz{yVX?B6h5?$4Si9Q~kNs$G0;L+%?)cK^5O
z0#p1QEq(}lkh9^AG<1Ym2JzcX4}~EWAyy=u(}&B$~lfOhLJ{i{r>aY&4*9)abT?ZO7$EK`B@EM*DC)
z8H^NsA*%mUD#4+qPin$U+wur(AYwhx)5l~(7AfX%OT1ts(C(Daf$;t`QJL@8rbpMh$Yn
zK4z=RCl|E?M{!A~Qa^Uxkyq3%t)YrK-*R*7TXqSP+E5RF7mZ7d)7~M^)QbDF@Og?M
zj+@zgV>938XcC5eye&KEkz4fbQ)$MON$EGv?PmkDUnfwLlEdk4FPECP-YdkU+gP`o
zO{{O9U``BpzQpdD%edxE9o+Y8JUO^=^oyZNy`2=@4c>LKZ-l@~qusPY8YO%x^qcH74
zYr04k#tu(xXVRHev}2i-*_v!k4=+^9f@-;1VW>;+$dJOh;iTLK#1h+++pHP3@*rQq
z^V5wupwo8yZZ8W?N1Ld9ewLoJG@0Di+2Kvk94+)OxSi(7t^qx`LsYWD>
z5o_^2fh*zMW44G=*9))Hq?5A(*tCjPjrU53_5%At}s5foM{3c
z1XINP1esJSFXZ4_-UCv66uI~H`Wp|N
z>2Ew|roZv#jQ+;kF8Uj-8e;HU5l-0{;6ch6wFLfd8U33oM*QPsUP>@c0Xu53;(
z%{^K(7W@m(1)AsS*d5}LC*ipQJcsb0!YJCnqc!g#n?HwlaLV6=l$pN;s>6tn(;89+
z;h`T;=5JFJQ$g(NY`q0UyQV%xr%&ynd3$LTzUucwS=xMf`_p