- * 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
+ *
+ * @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 03/35] 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 04/35] 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 05/35] 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 @@
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.
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.
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,
+ 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.
+
+
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.
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
+
publicbooleanmessageRecordingEnabled()
+
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.
- 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.
+ 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.
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.
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.
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.
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,
+ 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.
+
+
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.
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
+
publicbooleanmessageRecordingEnabled()
+
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.
- 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.
+ 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.
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.
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.