Hi Francis, I think the best practices are to serialize either o.a.c.s.SCXMLExecutor [1] or o.a.c.s.model.SCXML instances. Both cases are well-maintained in test code. [2] In your case, you can probably (de)serialize SCXMLExecutor instance directly to store/load the execution context. Also, as far as I can see, SCXMLExecutor doesn't provide #(at|de)tachInstance() methods and I don't think it would do even later because SCInstance doesn't necessarily have full information about the current execution context. So, please (de)serialize the SCXMLExecutor instance instead.
Cheers, Woonsan [1] http://commons.apache.org/proper/commons-scxml/faq.html#serializability [2] http://svn.apache.org/repos/asf/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml2/SCXMLTestHelper.java On Wednesday, April 16, 2014 9:07 AM, "ten...@free.fr" <ten...@free.fr> wrote: Hi all, > >I would like to know the best practice to serialize/deserialize SCXML fsm. > >I do this during the creation of the SCXML executor, scInstace is the >serialized context: > > List<CustomAction> customActions = new ArrayList<CustomAction>(); > CustomAction ca = > new CustomAction("http://my.custom-actions.domain/CUSTOM1", > "hello", Hello.class); > customActions.add(ca); > > JexlEvaluator evaluator = new JexlEvaluator(); > > try { > scxml = SCXMLReader.read(StopWatch.class.getClassLoader(). > > } catch (Exception e) { > e.printStackTrace(); > throw e; > } > > > executor = null; > try { > executor = new SCXMLExecutor(evaluator, null, new >SimpleErrorReporter()); > > if (scInstance != null) { > // serialized context use it > executor.attachInstance(scInstance); > executor.registerInvokerClass("x-test", >DummyInvoker.class); > executor.setStateMachine(scxml); > executor.go(); > setInitialState(executor, "paused"); > } else { > // new context > Context rootContext = new JexlContext(); > rootContext.set("var1", "value1"); > executor.registerInvokerClass("x-test", >DummyInvoker.class); > executor.setStateMachine(scxml); > executor.setRootContext(rootContext); > executor.go(); > } > > } catch (ModelException me) { > // Executor initialization failed, because the > // state machine specified has inconsistencies > me.printStackTrace(); > } > >I serialize executor.detachInstance(). It's seem to work, but is it the right >way to restart a SCXML 'session' ? > >Thanks >Francis. > > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >For additional commands, e-mail: user-h...@commons.apache.org > > > >