<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cake Solutions Team Blog &#187; Service Orchestration</title>
	<atom:link href="http://www.cakesolutions.net/teamblogs/tag/service-orchestration/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cakesolutions.net/teamblogs</link>
	<description>void magic() { }</description>
	<lastBuildDate>Tue, 07 Feb 2012 12:02:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Service Orchestration</title>
		<link>http://www.cakesolutions.net/teamblogs/2008/03/26/service-orchestration/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=service-orchestration</link>
		<comments>http://www.cakesolutions.net/teamblogs/2008/03/26/service-orchestration/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 09:29:42 +0000</pubDate>
		<dc:creator>Jan Machacek</dc:creator>
				<category><![CDATA[Jan's Blog]]></category>
		<category><![CDATA[Service Orchestration]]></category>
		<category><![CDATA[Spring Modules]]></category>

		<guid isPermaLink="false">http://www.cakesolutions.net/teamblogs/2008/03/26/service-orchestration/</guid>
		<description><![CDATA[We have the first version of the SO module. We can define flows, states and transitions. If this were all we did, it would make it a vanilla (Cake-vanilla, if you&#8217;ll pardon the pun) workflow engine. We have taken an &#8230; <a href="http://www.cakesolutions.net/teamblogs/2008/03/26/service-orchestration/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We have the first version of the SO module. We can define flows, states and transitions. If this were all we did, it would make it a vanilla (Cake-vanilla, if you&#8217;ll pardon the pun) workflow engine.<br />
We have taken an innovative approach to the configuration of the flows. Just like any other workflow engine, we use the concept of <code>FlowDefinition</code>s with many <code>StateDefinition</code>s with many <code>TransitionDefinition</code>s. Using this structure, we can create a directed graph with cycles (flow) with states as its vertices and transitions as its edges. Simple, eh?<br />
You can obviously manually create the definition beans, but you can use annotation-based configuration. Take this code, for example:</p>
<pre><tt>
@Flow
public class MainFlow {
}

@State(start = true)
public class StartState {

    @Transition
    @Transactional
    public void one() {
    }

    @Transition(to = "end")
    public void end() {
    }
}

@State(end = true)
public class EndState {

    @Transition
    public void one() {
    }

    @Transition(to = "start")
    public void restart(@TransitionArgument int i) {
    }
}</tt></pre>
<p>Without giving a detailed explanation, you can follow the annotation and infer that we have a flow with two states (start and end); each state has two transitions. To use this flow, we can use the <code>FlowSession</code> like so:</p>
<pre><tt>
// instantiate flow with id "main"
FlowInstance instance = flowSession.instantiate("main"); 

// calls StartState.one() and stays in the start state
instance.performTransition("one"); 

// calls StartState.end() and transitions to end state
instance.performTransition("end"); 

// calls EndState.restart(5) and transitions to start state
instance.performTransition("restart", 5);
...
</tt></pre>
<p>Now, you can ask where we got the names &#8220;main&#8221;, &#8220;one&#8221;, &#8220;end&#8221; and others; I&#8217;m sure you can see that the <code>MainFlow</code> class would be the flow with id &#8220;main&#8221;, but we never said so explicitly in the code. The <code>BeanPostProcessor</code> uses naming strategies that take the ids explicitly set in the annotations or, if the annotation does not have the id set, it takes the class name or the bean name as the identity of the flow, state or transition.<br />
Also, you may notice that the states somehow get attached to the main flow, even though we never defined this. Again, there is a bit of &#8220;intelligence&#8221; in the module that automatically registers a state with a flow even if no flow id is set if there is only one flow. In more complex applications (ones that use more than one flow), you must explicitly set the <code>flowId</code> value in the <code>@State</code> annotation.<br />
We are going to put much more work into this module, but we can confidently state that the module is an exciting piece of code. The design of the module will allow us to use service orchestration language in the transitions (take a look at the <code>TransitionAction</code> interface and its implementations for a hint of possible solution).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cakesolutions.net/teamblogs/2008/03/26/service-orchestration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Modules</title>
		<link>http://www.cakesolutions.net/teamblogs/2008/03/19/spring-modules/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spring-modules</link>
		<comments>http://www.cakesolutions.net/teamblogs/2008/03/19/spring-modules/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 13:03:27 +0000</pubDate>
		<dc:creator>Jan Machacek</dc:creator>
				<category><![CDATA[Jan's Blog]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Service Orchestration]]></category>
		<category><![CDATA[Spring Modules]]></category>

		<guid isPermaLink="false">http://www.cakesolutions.net/teamblogs/2008/03/19/spring-modules/</guid>
		<description><![CDATA[In the transitions -- I'm sure you'll forgive me for the slightly non-technical description -- you will be able to call any number of services; naturally, the transition will be able to participate in a JTA transaction. 


...The handling code will work with  AjaxSession s and  JsonView s by default, but there will be nothing stopping you from creating much more complex AJAX handling structures. <a href="http://www.cakesolutions.net/teamblogs/2008/03/19/spring-modules/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We have begun implementation of two new exciting Spring Modules! The first one will be the Service Orchestration module and the second one will be Spring AJAX</p>
<h2>Service Orchestration</h2>
<p>The SO module will allow the developers to create a workflow-style structure, where the transitions carry business logic. In the transitions &#8212; I&#8217;m sure you&#8217;ll forgive me for the slightly non-technical description &#8212; you will be able to call any number of services; naturally, the transition will be able to participate in a JTA transaction.</p>
<h2>Spring AJAX</h2>
<p>This is a buzz-word like no other, but it is still very clumsy to create rich applications using the Spring Framework. We propose to create a module that will allow declarative AJAX handling code. The handling code will work with <tt>AjaxSession</tt>s and <tt>JsonView</tt>s by default, but there will be nothing stopping you from creating much more complex AJAX handling structures. Along with the Java-side support, we will give you JSP tag libraries to handle all mundane AJAX code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cakesolutions.net/teamblogs/2008/03/19/spring-modules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

