Skip to content

Commit 2fecfc1

Browse files
authored
feat: added service implementation bindings (#43)
1 parent 022839f commit 2fecfc1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+288
-311
lines changed

.idea/runConfigurations/cirrina__run_.xml

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ pkl {
3636
register("pklGenJava") {
3737
sourceModules.addAll(
3838
"src/main/resources/pkl/csm/Csml.pkl",
39-
"src/main/resources/pkl/csm/HttpServiceImplementationDescription.pkl",
40-
"src/main/resources/pkl/csm/ServiceImplementationDescription.pkl",
39+
"src/main/resources/pkl/csm/ServiceImplementationBindings.pkl",
4140
)
4241
generateGetters.set(true)
4342
generateJavadoc.set(true)

src/main/java/at/ac/uibk/dps/cirrina/cirrina/Cirrina.kt

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import at.ac.uibk.dps.cirrina.execution.`object`.context.Context
44
import at.ac.uibk.dps.cirrina.execution.`object`.context.NatsContext
55
import at.ac.uibk.dps.cirrina.execution.`object`.event.EventHandler
66
import at.ac.uibk.dps.cirrina.execution.`object`.event.NatsEventHandler
7-
import at.ac.uibk.dps.cirrina.execution.service.OptimalServiceImplementationSelector
7+
import at.ac.uibk.dps.cirrina.execution.service.RandomServiceImplementationSelector
88
import at.ac.uibk.dps.cirrina.execution.service.ServiceImplementationBuilder
9+
import at.ac.uibk.dps.cirrina.io.parsing.CsmParser
910
import io.opentelemetry.api.OpenTelemetry
1011
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk
1112
import org.apache.logging.log4j.Level
@@ -55,16 +56,24 @@ class Cirrina {
5556
newPersistentContext().use { persistentContext ->
5657
val openTelemetry = getOpenTelemetry()
5758

58-
val services = ServiceImplementationBuilder.from(listOf()).build()
59-
val serviceImplementationSelector = OptimalServiceImplementationSelector(services)
60-
59+
// Create a service implementation selector based on the parsed service implementation
60+
// bindings
61+
val serviceImplementationSelector =
62+
RandomServiceImplementationSelector(
63+
ServiceImplementationBuilder.from(
64+
CsmParser.parseServiceImplementationBindings(
65+
EnvironmentVariables.serviceBindingsPath.get()
66+
)
67+
.bindings
68+
)
69+
.build()
70+
)
71+
72+
// Create and run the runtime
6173
val runtime =
6274
Runtime(openTelemetry, serviceImplementationSelector, eventHandler, persistentContext)
6375

64-
runtime.run(
65-
EnvironmentVariables.applicationPath.get(),
66-
EnvironmentVariables.instantiate.get(),
67-
)
76+
runtime.run(EnvironmentVariables.appPath.get(), EnvironmentVariables.instantiate.get())
6877

6978
logger.info("Done running")
7079
}
@@ -93,21 +102,21 @@ class Cirrina {
93102

94103
// Construct a new persistent context based as configured.
95104
private fun newPersistentContext(): Context =
96-
when (EnvironmentVariables.persistentContextProvider.get()) {
105+
when (EnvironmentVariables.contextProvider.get()) {
97106
PersistentContextProvider.NATS -> newNatsPersistentContext()
98107
else ->
99108
throw ConfigurationError.Unknown(
100109
"persistent context",
101-
EnvironmentVariables.persistentContextProvider.get(),
110+
EnvironmentVariables.contextProvider.get(),
102111
)
103112
}
104113

105114
// Construct a new NATS persistent context as configured.
106115
private fun newNatsPersistentContext(): NatsContext =
107116
NatsContext(
108117
false,
109-
EnvironmentVariables.natsPersistentContextUrl.get(),
110-
EnvironmentVariables.natsPersistentContextBucket.get(),
118+
EnvironmentVariables.natsContextUrl.get(),
119+
EnvironmentVariables.natsContextBucket.get(),
111120
)
112121

113122
// Construct a new OpenTelemetry instance as configured.

src/main/java/at/ac/uibk/dps/cirrina/cirrina/EnvironmentVariables.kt

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,17 @@ object EnvironmentVariables {
3838
/** The NATS event server URL. */
3939
val natsEventUrl = EnvironmentVariable("NATS_EVENT_URL", default = "nats://localhost:4222/")
4040

41-
/** The NATS persistent context server URL. */
42-
val natsPersistentContextUrl =
43-
EnvironmentVariable("NATS_PERSISTENT_CONTEXT_URL", default = "nats://localhost:4222")
41+
/** The NATS context server URL. */
42+
val natsContextUrl = EnvironmentVariable("NATS_CONTEXT_URL", default = "nats://localhost:4222")
4443

45-
/** The NATS persistent context bucket. */
46-
val natsPersistentContextBucket =
47-
EnvironmentVariable("NATS_PERSISTENT_CONTEXT_BUCKET", default = "persistent")
44+
/** The NATS context bucket. */
45+
val natsContextBucket = EnvironmentVariable("NATS_CONTEXT_BUCKET", default = "persistent")
4846

4947
/** The path to the CSML application. */
50-
val applicationPath = EnvironmentVariable<String>("APPLICATION_PATH", required = true)
48+
val appPath = EnvironmentVariable<String>("APP_PATH", required = true)
49+
50+
/** The path to the service implementation bindings. */
51+
val serviceBindingsPath = EnvironmentVariable<String>("SERVICE_BINDINGS_PATH", required = true)
5152

5253
/** The state machine names to instantiate. */
5354
val instantiate =
@@ -75,17 +76,17 @@ object EnvironmentVariables {
7576
},
7677
)
7778

78-
/** The persistent context provider to use. */
79-
val persistentContextProvider =
79+
/** The context provider to use. */
80+
val contextProvider =
8081
EnvironmentVariable(
81-
name = "PERSISTENT_CONTEXT_PROVIDER",
82+
name = "CONTEXT_PROVIDER",
8283
default = PersistentContextProvider.NATS,
8384
mapper = { value ->
8485
try {
8586
PersistentContextProvider.valueOf(value.uppercase())
8687
} catch (_: IllegalArgumentException) {
8788
throw EnvironmentVariableError.Invalid(
88-
"PERSISTENT_CONTEXT_PROVIDER",
89+
"CONTEXT_PROVIDER",
8990
value,
9091
PersistentContextProvider.entries.toString(),
9192
)

src/main/java/at/ac/uibk/dps/cirrina/cirrina/Runtime.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import at.ac.uibk.dps.cirrina.execution.`object`.context.Extent
77
import at.ac.uibk.dps.cirrina.execution.`object`.event.EventHandler
88
import at.ac.uibk.dps.cirrina.execution.`object`.statemachine.StateMachine
99
import at.ac.uibk.dps.cirrina.execution.service.ServiceImplementationSelector
10-
import at.ac.uibk.dps.cirrina.io.description.CsmlParser
10+
import at.ac.uibk.dps.cirrina.io.parsing.CsmParser
1111
import at.ac.uibk.dps.cirrina.utils.Id
1212
import io.opentelemetry.api.OpenTelemetry
1313
import java.io.IOException
@@ -66,7 +66,7 @@ class Runtime(
6666
val collaborativeStateMachineClass =
6767
CollaborativeStateMachineClassBuilder.from(
6868
// A main.pkl file is required in the CSML project
69-
CsmlParser.parse(Path(path).pathString)
69+
CsmParser.parseCsml(Path(path).pathString)
7070
)
7171
.build()
7272

src/main/java/at/ac/uibk/dps/cirrina/classes/collaborativestatemachine/CollaborativeStateMachineClassBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import at.ac.uibk.dps.cirrina.classes.statemachine.StateMachineClass;
44
import at.ac.uibk.dps.cirrina.classes.statemachine.StateMachineClassBuilder;
5-
import at.ac.uibk.dps.cirrina.csml.description.Csml;
6-
import at.ac.uibk.dps.cirrina.csml.description.Csml.EventChannel;
5+
import at.ac.uibk.dps.cirrina.csm.Csml;
6+
import at.ac.uibk.dps.cirrina.csm.Csml.EventChannel;
77
import at.ac.uibk.dps.cirrina.execution.object.context.Context;
88
import at.ac.uibk.dps.cirrina.execution.object.context.ContextBuilder;
99
import at.ac.uibk.dps.cirrina.execution.object.event.Event;

src/main/java/at/ac/uibk/dps/cirrina/classes/state/StateClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package at.ac.uibk.dps.cirrina.classes.state;
22

3-
import at.ac.uibk.dps.cirrina.csml.description.Csml.ContextDescription;
3+
import at.ac.uibk.dps.cirrina.csm.Csml.ContextDescription;
44
import at.ac.uibk.dps.cirrina.execution.object.action.Action;
55
import at.ac.uibk.dps.cirrina.execution.object.action.ActionGraph;
66
import at.ac.uibk.dps.cirrina.execution.object.action.ActionGraphBuilder;

src/main/java/at/ac/uibk/dps/cirrina/classes/state/StateClassBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package at.ac.uibk.dps.cirrina.classes.state;
22

3-
import at.ac.uibk.dps.cirrina.csml.description.Csml.ActionDescription;
4-
import at.ac.uibk.dps.cirrina.csml.description.Csml.StateDescription;
3+
import at.ac.uibk.dps.cirrina.csm.Csml.ActionDescription;
4+
import at.ac.uibk.dps.cirrina.csm.Csml.StateDescription;
55
import at.ac.uibk.dps.cirrina.execution.object.action.Action;
66
import at.ac.uibk.dps.cirrina.execution.object.action.ActionBuilder;
77
import at.ac.uibk.dps.cirrina.execution.object.action.TimeoutAction;

src/main/java/at/ac/uibk/dps/cirrina/classes/statemachine/StateMachineClass.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import at.ac.uibk.dps.cirrina.classes.state.StateClass;
44
import at.ac.uibk.dps.cirrina.classes.transition.OnTransitionClass;
55
import at.ac.uibk.dps.cirrina.classes.transition.TransitionClass;
6-
import at.ac.uibk.dps.cirrina.csml.description.Csml.ContextDescription;
6+
import at.ac.uibk.dps.cirrina.csm.Csml.ContextDescription;
77
import at.ac.uibk.dps.cirrina.execution.object.action.EventRaisingAction;
88
import at.ac.uibk.dps.cirrina.execution.object.event.Event;
99
import at.ac.uibk.dps.cirrina.io.plantuml.Exportable;

src/main/java/at/ac/uibk/dps/cirrina/classes/statemachine/StateMachineClassBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import at.ac.uibk.dps.cirrina.classes.state.StateClassBuilder;
44
import at.ac.uibk.dps.cirrina.classes.transition.TransitionClassBuilder;
5-
import at.ac.uibk.dps.cirrina.csml.description.Csml.StateDescription;
6-
import at.ac.uibk.dps.cirrina.csml.description.Csml.StateMachineDescription;
7-
import at.ac.uibk.dps.cirrina.csml.description.Csml.TransitionDescription;
5+
import at.ac.uibk.dps.cirrina.csm.Csml.StateDescription;
6+
import at.ac.uibk.dps.cirrina.csm.Csml.StateMachineDescription;
7+
import at.ac.uibk.dps.cirrina.csm.Csml.TransitionDescription;
88
import java.util.List;
99
import java.util.Optional;
1010
import java.util.function.Consumer;

0 commit comments

Comments
 (0)