Various classes and interfaces use machineId
either as a variable or
parameter in a methods. This chapter takes a closer look how
machineId
relates to normal machine operation and instantiation.
During a runtime machineId
really don’t have any big operational
role except to distinguish machines from each other for example when
following logs or doing deeper debugging. Having a lot of different
machine instances quickly gets user lost in translation if there is
no easy way to identify these instances and option to set this
machineId
was given to a user.
Setting machineId
via JavaConfig as mymachine
then exposes that
for logs as shown above. This same machineId
is also available via
method StateMachine.getId()
.
@Override public void configure(StateMachineConfigurationConfigurer<String, String> config) throws Exception { config .withConfiguration() .machineId("mymachine"); }
11:23:54,509 INFO main support.LifecycleObjectSupport [main] - started S2 S1 / S1 / uuid=8fe53d34-8c85-49fd-a6ba-773da15fcaf1 / id=mymachine
Note | |
---|---|
Manual builder Section 12.2, “State Machine via Builder” uses same config interface meaning behaviour would be equivalent. |
You’ll see same machineId
getting configured if you use a
StateMachineFactory and request a new machine using id.
StateMachineFactory<String, String> factory = context.getBean(StateMachineFactory.class); StateMachine<String, String> machine = factory.getStateMachine("mymachine");
Behind a scenes all machine configurations are first translated into a StateMachineModel so that StateMachineFactory don’t need to know from where configuration originated as machine can be built from JavaConfig, UML or Repository. If user wants to go crazy a custom StateMachineModel can also be used which would be a lowest possible level to define configuration.
What all these has to do with a machineId
?
StateMachineModelFactory also have a method StateMachineModel<S, E>
build(String machineId)
which a StateMachineModelFactory
implementation may choose to use.
RepositoryStateMachineModelFactory Chapter 33, Repository Support uses
machineId
to support different configurations in a persistent
storage used via Spring Data Repository interfaces. For example both
StateRepository and TransitionRepository have a method List<T>
findByMachineId(String machineId)
order to build different states and
transitions by a machineId
. With
RepositoryStateMachineModelFactory if machineId
is used as empty
or NULL defaults to repository config(in a backing persistent model)
without known machine id.
Note | |
---|---|
UmlStateMachineModelFactory currently doesn’t distinguish between different machine id’s as uml source is always coming from a same file. Thought this may get changed in future releases. |