Modified: zest/site/content/java/develop/tut-composites.html URL: http://svn.apache.org/viewvc/zest/site/content/java/develop/tut-composites.html?rev=1689843&r1=1689842&r2=1689843&view=diff ============================================================================== --- zest/site/content/java/develop/tut-composites.html (original) +++ zest/site/content/java/develop/tut-composites.html Wed Jul 8 11:08:41 2015 @@ -66,13 +66,13 @@ })(); </script> - </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Qi4j</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.html">Glo ssary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Qi4j in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Qi4j in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Qi4j in 30 minutes</a></span></dt><dt><span class="section"><a href="two-hours-intro.html">Qi4j in 2 hours</a></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Qi4j in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><span xmlns="" href="tut-composites.html">Transient Composites Tutorial</span></span></dt><dt><span class="section"><a href="tut-services .html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a href="build-system.html">Build System</ a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Qi4j Documentation</a></span></dt></dl></div></div><div class="section" title="Transient Composites Tutorial"><div class="titlepage"><div><div><h3 class="title"><a id="tut-composites"></a>Transient Composites Tutorial</h3></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Theses tutorials are based on actual code found in the <code class="literal">tutorials/</code> directory of the -<a class="ulink" href="http://qi4j.org/downloads.html" target="_top">Qi4j SDK sources</a>. You should start your favorite editor and find the code related to + </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Zestâ¢</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.htm l">Glossary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Zest⢠in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Zest⢠in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Zest⢠in 30 minutes</a></span></dt><dt><span class="section"><a href="two-hours-intro.html">Zest⢠in 2 hours</a></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Zest⢠in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><span xmlns="" href="tut-composites.html">Transient Composites Tutorial</span></span></dt><dt><span c lass="section"><a href="tut-services.html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a hre f="build-system.html">Build System</a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Zest⢠Documentation</a></span></dt></dl></div></div><div class="section" title="Transient Composites Tutorial"><div class="titlepage"><div><div><h3 class="title"><a id="tut-composites"></a>Transient Composites Tutorial</h3></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Theses tutorials are based on actual code found in the <code class="literal">tutorials/</code> directory of the +<a class="ulink" href="http://qi4j.org/downloads.html" target="_top">Zest⢠SDK sources</a>. You should start your favorite editor and find the code related to this tutorial, run it and play with it.</p></div><p>Throughout this set of tutorials it will be shown how to create and work with Composites, which -is the basic element in Qi4j. We will refactor one HelloWorld class to take advantage of the various -features in Qi4j. These refactorings will make it easier to reuse parts of the class, +is the basic element in Zestâ¢. We will refactor one HelloWorld class to take advantage of the various +features in Zestâ¢. These refactorings will make it easier to reuse parts of the class, and introduce new features without having to change existing code. We will also look -at some of the existing classes, or Fragments, available in Qi4j that you can reuse +at some of the existing classes, or Fragments, available in Zest⢠that you can reuse so that you donât have to write everything yourself.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> <a class="xref" href="tut-composites.html#tut-composites-step1" title="Step 1 - Interface Refactoring">Step 1 - Interface Refactoring</a> </li><li class="listitem"> @@ -94,7 +94,7 @@ so that you donât have to write eve </li></ul></div><p>Each tutorial step in this series starts with the result from the previous tutorial, so you can always look at the next tutorial step for guidance on what to do.</p><p>At the bottom of each tutorial step, the is Solutions section, which list the files you should have come to if you have followed the instructions.</p><p>If you want to reproduce whatâs explained in this tutorial, remember to depend on the Core Runtime artifact that depends -on Core API, Core SPI, Core Bootstrap and Core Functional & I/O APIs:</p><div class="table"><a id="idm78349097200"></a><p class="title"><strong>Table 5. Artifact</strong></p><div class="table-contents"><table summary="Artifact" border="1"><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th align="left" valign="top">Group ID</th><th align="left" valign="top">Artifact ID</th><th align="left" valign="top">Version</th></tr></thead><tbody><tr><td align="left" valign="top"><p>org.qi4j.core</p></td><td align="left" valign="top"><p>org.qi4j.core.runtime</p></td><td align="left" valign="top"><p>0</p></td></tr></tbody></table></div></div><br class="table-break" /><p>See the <a class="xref" href="howto-depend-on-qi4j.html" title="Depend on Qi4j in your build">Depend on Qi4j in your build</a> tutorial for details.</p><div class="section" title="Step 1 - Interface Refactoring"><div class="titlepage"><div><div><h4 class="title"><a id="tut-c omposites-step1"></a>Step 1 - Interface Refactoring</h4></div></div></div><div class="section" title="Initial Hello World"><div class="titlepage"><div><div><h5 class="title"><a id="_initial_hello_world"></a>Initial Hello World</h5></div></div></div><p>This whole tutorial describes how to step-by-step modify a typical HelloWorld "application" into a full-fledged Qi4j +on Core API, Core SPI, Core Bootstrap and Core Functional & I/O APIs:</p><div class="table"><a id="idm415579078816"></a><p class="title"><strong>Table 5. Artifact</strong></p><div class="table-contents"><table summary="Artifact" border="1"><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th align="left" valign="top">Group ID</th><th align="left" valign="top">Artifact ID</th><th align="left" valign="top">Version</th></tr></thead><tbody><tr><td align="left" valign="top"><p>org.qi4j.core</p></td><td align="left" valign="top"><p>org.qi4j.core.runtime</p></td><td align="left" valign="top"><p>0</p></td></tr></tbody></table></div></div><br class="table-break" /><p>See the <a class="xref" href="howto-depend-on-qi4j.html" title="Depend on Zest⢠in your build">Depend on Zest⢠in your build</a> tutorial for details.</p><div class="section" title="Step 1 - Interface Refactoring"><div class="titlepage"><div><div><h4 class="title" ><a id="tut-composites-step1"></a>Step 1 - Interface >Refactoring</h4></div></div></div><div class="section" title="Initial Hello >World"><div class="titlepage"><div><div><h5 class="title"><a >id="_initial_hello_world"></a>Initial Hello >World</h5></div></div></div><p>This whole tutorial describes how to >step-by-step modify a typical HelloWorld "application" into a full-fledged >Zest⢠Composite Oriented application. Here is the initial code of HelloWorld.</p><pre class="programlisting brush: java"> /** * Initial HelloWorld implementation. Everything is mixed up @@ -143,7 +143,7 @@ public class HelloWorld } } </pre></div><div class="section" title="Interface refactoring"><div class="titlepage"><div><div><h5 class="title"><a id="_interface_refactoring"></a>Interface refactoring</h5></div></div></div><p>In this step we start with a basic Java class, which when invoked will concatenate the two properties "phrase" -and "name". If invoked with the properties set to "Hello" and "World" respectively it will hence return "Hello World".</p><p>Qi4j relies heavily on the use of interfaces. This makes it possible for an object to externally implement a number of +and "name". If invoked with the properties set to "Hello" and "World" respectively it will hence return "Hello World".</p><p>Zest⢠relies heavily on the use of interfaces. This makes it possible for an object to externally implement a number of interfaces which internally is backed by a number of Mixins, some of which you may have written yourself, and some of which may have been reused. This also makes it easy to introduce Modifiers (aka "interceptors", aka "advice"), which are Fragments which execute before and/or after the method on the Mixin is invoked.</p><p>The first task is therefore to refactor the code so that the method is implemented from an interface instead. We should @@ -251,8 +251,8 @@ interface is a regular Java interface wh uses various annotations to declare what Fragments to include. Fragments include Mixins, Concerns, SideEffects and Constraints. In this tutorial we will only use Mixins. When a TransientComposite is instantiated at runtime the framework will inspect the interface to determine what the TransientComposite instance should look like in terms of -used Fragments.</p><p>In Qi4j all method parameters are considered mandatory unless marked as @Optional. Therefore you can remove the null -checks in the Mixin. If a null value is passed in an exception will be thrown by Qi4j.</p><p>Steps for this tutorial:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +used Fragments.</p><p>In Zest⢠all method parameters are considered mandatory unless marked as @Optional. Therefore you can remove the null +checks in the Mixin. If a null value is passed in an exception will be thrown by Zestâ¢.</p><p>Steps for this tutorial:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> Create an interface that extends the domain interface HelloWorld and org.qi4j.api.composite.TransientComposite. </li><li class="listitem"> Add a @Mixins annotation to it with the name of the Mixin as argument. @@ -511,12 +511,12 @@ public class HelloWorldBehaviourConcern </pre><p>Next step is <a class="xref" href="tut-composites.html#tut-composites-step5" title="Step 5 - Constraints">Step 5 - Constraints</a></p></div></div><div class="section" title="Step 5 - Constraints"><div class="titlepage"><div><div><h4 class="title"><a id="tut-composites-step5"></a>Step 5 - Constraints</h4></div></div></div><p>Previous step was <a class="xref" href="tut-composites.html#tut-composites-step4" title="Step 4 - Concerns">Step 4 - Concerns</a>.</p><p>In this step we will look at how to use Constraints. When we pass parameters to methods in regular Java code the only restriction we can make is to denote a type. Any other constraints on the input value, such as whether the parameter is optional, integer ranges, string regular expressions, and so on, cannot be expressed, and so we have to put this into -Javadoc, and then manually add these checks in the implementation class.</p><p>In Qi4j there is the option to use Constraints, which are further restrictions on the parameters. This is implemented +Javadoc, and then manually add these checks in the implementation class.</p><p>In Zest⢠there is the option to use Constraints, which are further restrictions on the parameters. This is implemented by having an annotation that describes what the Constraint does, and then an implementation class that checks whether a specific value fulfills the Constraint or not.</p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>The previous steps had a dependency to the <a class="xref" href="core-api.html" title="Core API"> Core API</a> only. The constraints youâve used in this step, introduce a new dependency to the <a class="xref" href="library-constraints.html" title="Constraints">Constraints Library</a>, where all the constraint related classes reside. So -update your classpath settings accordingly.</p></div><p>There are a number of pre-written constraints in Qi4j which you can use. The null check of the original HelloWorld -version is already handled by default since Qi4j considers method parameters to be mandatory if not explicitly marked +update your classpath settings accordingly.</p></div><p>There are a number of pre-written constraints in Zest⢠which you can use. The null check of the original HelloWorld +version is already handled by default since Zest⢠considers method parameters to be mandatory if not explicitly marked with the @Optional annotation. So, instead of doing that check we will add other checks that are useful to make, such as ensuring that the passed in string is not empty.</p><p>The only thing you have to do is add the annotation @NotEmpty to the method parameters you want to constrain in this way. The annotation has a default implementation declared in it by using the @Constraints annotation. You can either @@ -691,15 +691,15 @@ public interface HelloWorldState String getName(); } -</pre><p>Next step is <a class="xref" href="tut-composites.html#tut-composites-step7" title="Step 7 - Properties">Step 7 - Properties</a></p></div></div><div class="section" title="Step 7 - Properties"><div class="titlepage"><div><div><h4 class="title"><a id="tut-composites-step7"></a>Step 7 - Properties</h4></div></div></div><p>Previous step was <a class="xref" href="tut-composites.html#tut-composites-step6" title="Step 6 - SideEffects">Step 6 - SideEffects</a>.</p><p>One of the goals of Qi4j is to give you domain modeling tools that allow you to more concisely use domain concepts in +</pre><p>Next step is <a class="xref" href="tut-composites.html#tut-composites-step7" title="Step 7 - Properties">Step 7 - Properties</a></p></div></div><div class="section" title="Step 7 - Properties"><div class="titlepage"><div><div><h4 class="title"><a id="tut-composites-step7"></a>Step 7 - Properties</h4></div></div></div><p>Previous step was <a class="xref" href="tut-composites.html#tut-composites-step6" title="Step 6 - SideEffects">Step 6 - SideEffects</a>.</p><p>One of the goals of Zest⢠is to give you domain modeling tools that allow you to more concisely use domain concepts in code. One of the things we do rather often is model Properties of objects as getters and setters. But this is a very weak model, and does not give you any access to metadata about the property, and also makes common tasks like UI binding non-trivial. There is also a lot of repetition of code, which is unnecessary. Using JavaBeans conventions one typically -have to have code in five places for one property, whereas in Qi4j the same thing can be achieved with one line of code.</p><p>But lets start out easy. To declare a property you have to make a method in a mixin type that returns a value of the +have to have code in five places for one property, whereas in Zest⢠the same thing can be achieved with one line of code.</p><p>But lets start out easy. To declare a property you have to make a method in a mixin type that returns a value of the type Property, and which does not take any parameters. Hereâs a simple example:</p><pre class="programlisting brush: java">Property<String> name();</pre><p>This declares a Property of type String with the name "name". The Property interface has methods "get" and "set" to access and mutate the value, respectively.</p><p>For now you will be responsible for implementing these methods, but later on these will be handled automatically, thus reducing Properties to one-liners!</p><p>In the Mixin implementation of the interface with the Property declaration you should have an injection of the Property, -which is created for you by Qi4j. The injection can be done in a field like this:</p><pre class="programlisting brush: java">@State Property<String> name;</pre><p>The State dependency injection annotation means that Qi4j will inject the Property for you. The field has the name +which is created for you by Zestâ¢. The injection can be done in a field like this:</p><pre class="programlisting brush: java">@State Property<String> name;</pre><p>The State dependency injection annotation means that Zest⢠will inject the Property for you. The field has the name "name", which matches the name in the interface, and therefore that Property is injected. You can then implement the method trivially by just returning the "name" field.</p><p>Properties can have Constraints just like method parameters. Simply set them on the Property method instead, and they will be applied just as before when you call "set".</p><p>Steps for this tutorial:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> @@ -797,14 +797,14 @@ and the old version used the JavaBean ru invocations of such methods automatically for us by storing the properties in a map and use the methods to look them up.</p><p>Implementing a generic Fragment is done by creating a class that implements the interface java.lang.proxy.InvocationHandler. This has a single "invoke" method which is passed the object that was invoked (the TransientComposite in this case), the method, and the arguments. The Fragment is then allowed to implement the method -any way it wants.</p><p>Since interfaces with only Properties is such a common case Qi4j already has a generic Mixin that implements the +any way it wants.</p><p>Since interfaces with only Properties is such a common case Zest⢠already has a generic Mixin that implements the Properties management described above, but for the builtin Property type instead of the getter/setter variant. The class is aptly named PropertyMixin.</p><p>While we could use it, for now we will implement it ourselves to get a feel for how generic Mixins work.</p><p>Steps for this tutorial:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> Remove the HelloWorldStateMixin </li><li class="listitem"> Add a GenericPropertyMixin, and have it implement InvocationHandler </li><li class="listitem"> -Inject "@State StateHolder state" in the mixin. The StateHolder interface will give you access to the Properties for the TransientComposite which Qi4j manages for you +Inject "@State StateHolder state" in the mixin. The StateHolder interface will give you access to the Properties for the TransientComposite which Zest⢠manages for you </li><li class="listitem"> On call to invoke(), delegate to the StateHolder interface to get the Property for the invoked method </li><li class="listitem"> @@ -878,13 +878,13 @@ This forces the mixin to implement the T implement all methods, including those found in the TransientComposite interface. However, since we are only really interested in implementing the say() method we will mark this by declaring that the Mixin "implements" the TransientComposite type, but is also "abstract". This, using pure Java semantics, makes it possible to avoid having to -implement all methods. Qi4j will during the initialization phase detect that the Mixin only handles the say() method, +implement all methods. Zest⢠will during the initialization phase detect that the Mixin only handles the say() method, and therefore only map it to that specific method. In order to instantiate the Mixin it will generate a subclass which implements the remaining methods in the TransientComposite type, as no-ops. These will never be called however, and is there purely for the purpose of being able to instantiate the Mixin. The Mixin is considered to be an Abstract Fragment.</p><p>To hide the state from the client we need to use what is called Private Mixins. A Private Mixin is any mixin that is referenced by another Mixin by using the @This injection, but which is not included in the TransientComposite type. As long as there is a Mixin implementation declared for the interface specified by the @This injection it will work, since -Qi4j can know how to implement the interface. But since it is not extended by the TransientComposite type there is no +Zest⢠can know how to implement the interface. But since it is not extended by the TransientComposite type there is no way for a user of the TransientComposite to access it. That Mixin becomes an implementation detail. This can be used either for encapsulation purposes, or for referencing utility mixins that help the rest of the code implement some interface, but which itself should not be exposed.</p><p>Since the state is now hidden the initialization of the TransientComposite is a bit more tricky. Instead of just
Modified: zest/site/content/java/develop/tut-services.html URL: http://svn.apache.org/viewvc/zest/site/content/java/develop/tut-services.html?rev=1689843&r1=1689842&r2=1689843&view=diff ============================================================================== --- zest/site/content/java/develop/tut-services.html (original) +++ zest/site/content/java/develop/tut-services.html Wed Jul 8 11:08:41 2015 @@ -66,11 +66,11 @@ })(); </script> - </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Qi4j</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.html">Glo ssary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Qi4j in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Qi4j in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Qi4j in 30 minutes</a></span></dt><dt><span class="section"><a href="two-hours-intro.html">Qi4j in 2 hours</a></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Qi4j in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span class="section"><span xmlns="" href="tut-services.ht ml">Services Composites Tutorial</span></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a href="build-system.html">Build System</ a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Qi4j Documentation</a></span></dt></dl></div></div><div class="section" title="Services Composites Tutorial"><div class="titlepage"><div><div><h3 class="title"><a id="tut-services"></a>Services Composites Tutorial</h3></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Theses tutorials are based on actual code found in the <code class="literal">tutorials/</code> directory of the -<a class="ulink" href="http://qi4j.org/downloads.html" target="_top">Qi4j SDK sources</a>. You should start your favorite editor and find the code related to + </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Zestâ¢</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.htm l">Glossary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Zest⢠in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Zest⢠in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Zest⢠in 30 minutes</a></span></dt><dt><span class="section"><a href="two-hours-intro.html">Zest⢠in 2 hours</a></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Zest⢠in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span class="section"> <span xmlns="" href="tut-services.html">Services Composites Tutorial</span></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a hre f="build-system.html">Build System</a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Zest⢠Documentation</a></span></dt></dl></div></div><div class="section" title="Services Composites Tutorial"><div class="titlepage"><div><div><h3 class="title"><a id="tut-services"></a>Services Composites Tutorial</h3></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Theses tutorials are based on actual code found in the <code class="literal">tutorials/</code> directory of the +<a class="ulink" href="http://zest.apache.org/download.html" target="_top">Zest⢠SDK sources</a>. You should start your favorite editor and find the code related to this tutorial, run it and play with it.</p></div><p>In this other set of tutorials it will be shown how to create and work with Service Composites, which are composites that extends from the ServiceComposite class. We will refactor one a very simple Library where you can borrow and -return books to take advantage of the various features in Qi4j. These refactorings will benefit from automatic Service +return books to take advantage of the various features in Zestâ¢. These refactorings will benefit from automatic Service activation and Configuration Entities management.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> <a class="xref" href="tut-services.html#tut-services-step1" title="Step 1 - Creating a ServiceComposite">Step 1 - Creating a ServiceComposite</a> </li><li class="listitem"> @@ -80,12 +80,12 @@ activation and Configuration Entities ma </li></ul></div><p>Each tutorial step in this series starts with the result from the previous tutorial, so you can always look at the next tutorial step for guidance on what to do.</p><p>At the bottom of each tutorial step, the is Solutions section, which list the files you should have come to if you have followed the instructions.</p><p>If you want to reproduce whatâs explained in this tutorial, remember to depend on the Core Runtime artifact that depends -on Core API, Core SPI, Core Bootstrap and Core Functional & I/O APIs:</p><div class="table"><a id="idm78348888832"></a><p class="title"><strong>Table 6. Artifact</strong></p><div class="table-contents"><table summary="Artifact" border="1"><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th align="left" valign="top">Group ID</th><th align="left" valign="top">Artifact ID</th><th align="left" valign="top">Version</th></tr></thead><tbody><tr><td align="left" valign="top"><p>org.qi4j.core</p></td><td align="left" valign="top"><p>org.qi4j.core.runtime</p></td><td align="left" valign="top"><p>0</p></td></tr></tbody></table></div></div><br class="table-break" /><p>See the <a class="xref" href="howto-depend-on-qi4j.html" title="Depend on Qi4j in your build">Depend on Qi4j in your build</a> tutorial for details.</p><div class="section" title="Step 1 - Creating a ServiceComposite"><div class="titlepage"><div><div><h4 class="title"><a id= "tut-services-step1"></a>Step 1 - Creating a ServiceComposite</h4></div></div></div><p>In this tutorial we start with basic Java classes, to simulate a very simple Library where you can borrow -and return books.</p><p>Qi4j relies heavily on the use of interfaces. This makes it possible for an object +on Core API, Core SPI, Core Bootstrap and Core Functional & I/O APIs:</p><div class="table"><a id="idm415578835952"></a><p class="title"><strong>Table 6. Artifact</strong></p><div class="table-contents"><table summary="Artifact" border="1"><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th align="left" valign="top">Group ID</th><th align="left" valign="top">Artifact ID</th><th align="left" valign="top">Version</th></tr></thead><tbody><tr><td align="left" valign="top"><p>org.qi4j.core</p></td><td align="left" valign="top"><p>org.qi4j.core.runtime</p></td><td align="left" valign="top"><p>0</p></td></tr></tbody></table></div></div><br class="table-break" /><p>See the <a class="xref" href="howto-depend-on-qi4j.html" title="Depend on Zest⢠in your build">Depend on Zest⢠in your build</a> tutorial for details.</p><div class="section" title="Step 1 - Creating a ServiceComposite"><div class="titlepage"><div><div><h4 class=" title"><a id="tut-services-step1"></a>Step 1 - Creating a ServiceComposite</h4></div></div></div><p>In this tutorial we start with basic Java classes, to simulate a very simple Library where you can borrow +and return books.</p><p>Zest⢠relies heavily on the use of interfaces. This makes it possible for an object to externally implement a number of interfaces which internally is backed by a number of Mixins, some of which you may have written yourself, and some of which may have been reused. This is also true for services, which we are to cover in this tutorial.</p><p>The first task is therefore to refactor the code so that the methods are implemented from an -interface instead, and to essentially make the identical "application" into a Qi4j application. +interface instead, and to essentially make the identical "application" into a Zest⢠application. We also want the Book to be a ValueComposite.</p><p>Steps for this tutorial:</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> Make the Book into a ValueComposite. </li><li class="listitem"> @@ -97,7 +97,7 @@ Create a LibraryService that binds the L </li><li class="listitem"> The LibraryMixin will need to be injected with the ValueBuilderFactory in the @Structure scope. </li></ul></div></div><div class="section" title="Step 2 - Hooking into the Service Activation"><div class="titlepage"><div><div><h4 class="title"><a id="tut-services-step2"></a>Step 2 - Hooking into the Service Activation</h4></div></div></div><p>Services can be "activated" and "passivated". Applications can be notified of this occurring -by Qi4j runtime by assembling them with an Activator.</p><p>Activators methods are called around "activation" and "passivation": beforeActivation, +by Zest⢠runtime by assembling them with an Activator.</p><p>Activators methods are called around "activation" and "passivation": beforeActivation, afterActivation, beforeActivation, afterPassivation. The ActivatorAdapter class help you keeping your code short when you only need one or two hooks.</p><p>To showcase how this works, we refactor the code to create a number of copies of the books, to be lend out upon call to the borrowBook method, which will return null if no copy is available. The book @@ -111,11 +111,11 @@ Write an Activator<ServiceReference&l Override the afterActivation method, use the ServiceReference to get a handle on the Library and call its createInitialData method. </li><li class="listitem"> Add the @Activators annotation to the LibraryService declaring the new LibraryActivator. -</li></ul></div></div><div class="section" title="Step 3 - Reading the Service Configuration"><div class="titlepage"><div><div><h4 class="title"><a id="tut-services-step3"></a>Step 3 - Reading the Service Configuration</h4></div></div></div><p>Services typically have configuration. Configurations are directly supported in Qi4j. A +</li></ul></div></div><div class="section" title="Step 3 - Reading the Service Configuration"><div class="titlepage"><div><div><h4 class="title"><a id="tut-services-step3"></a>Step 3 - Reading the Service Configuration</h4></div></div></div><p>Services typically have configuration. Configurations are directly supported in Zestâ¢. A ConfigurationComposite is a subtype of EntityComposite. That is because configurations are stored in EntityStores, can be modified in runtime by client code and has -the same semantics as regular entities.</p><p>Qi4j also handles the bootstrapping of configuration for the services. If the ConfigurationComposite is -not found in the configured entity store, then Qi4j will automatically locate a properties file for each +the same semantics as regular entities.</p><p>Zest⢠also handles the bootstrapping of configuration for the services. If the ConfigurationComposite is +not found in the configured entity store, then Zest⢠will automatically locate a properties file for each service instance, read those properties into a ConfigurationComposite instance, save that to the entity store and provide the values to the service. The properties file must be with the same name as the service instance with the extension "properties" in the same package as the service.</p><p>For this exercise, create a LibraryConfiguration that contains "titles", "authors" and "copies". Modified: zest/site/content/java/develop/tutorials.html URL: http://svn.apache.org/viewvc/zest/site/content/java/develop/tutorials.html?rev=1689843&r1=1689842&r2=1689843&view=diff ============================================================================== --- zest/site/content/java/develop/tutorials.html (original) +++ zest/site/content/java/develop/tutorials.html Wed Jul 8 11:08:41 2015 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Tutorials</title><link rel="stylesheet" type="text/css" href="css/style.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index.html" title="" /><link rel="up" href="index.html" title="" /><link rel="prev" href="related.html" title="Related publications & projects" /><link rel="next" href="two-minutes-intro.html" title="Qi4j in 2 minutes" /> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Tutorials</title><link rel="stylesheet" type="text/css" href="css/style.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index.html" title="" /><link rel="up" href="index.html" title="" /><link rel="prev" href="related.html" title="Related publications & projects" /><link rel="next" href="two-minutes-intro.html" title="Zest⢠in 2 minutes" /> <!-- favicon --> @@ -66,22 +66,22 @@ })(); </script> - </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Qi4j</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.html">Glo ssary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><span xmlns="" href="tutorials.html#_overview">Overview</span></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Qi4j in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Qi4j in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Qi4j in 30 minutes</a></span></dt><dt><span class="section"><a href="two-hours-intro.html">Qi4j in 2 hours</a></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Qi4j in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span class="section"><a href="tut-services .html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a href="build-system.html">Build System</ a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Qi4j Documentation</a></span></dt></dl></div></div><div class="section" title="Tutorials"><div class="titlepage"><div><div><h2 class="title"><a id="tutorials"></a>Tutorials</h2></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h3 class="title"><a id="_overview"></a>Overview</h3></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Theses tutorials are based on actual code found in the <code class="literal">tutorials/</code> directory of the -<a class="ulink" href="http://qi4j.org/downloads.html" target="_top">Qi4j SDK sources</a>. You should start your favorite editor and find the code related to -this tutorial, run it and play with it.</p></div><p>In this section you will find a comprehensive set of tutorials about Composite Oriented Programming using Qi4j.</p><div class="section" title="Qi4j in 2 hours 42 minutes"><div class="titlepage"><div><div><h4 class="title"><a id="tutorials-intro"></a>Qi4j in 2 hours 42 minutes</h4></div></div></div><p>This quite long introduction to Qi4j will start by brushing up an overview of the problems Qi4j solve, teach you what + </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Zestâ¢</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.htm l">Glossary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><span xmlns="" href="tutorials.html#_overview">Overview</span></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Zest⢠in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Zest⢠in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Zest⢠in 30 minutes</a></span></dt><dt><span class="section"><a href="two-hours-intro.html">Zest⢠in 2 hours</a></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Zest⢠in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span c lass="section"><a href="tut-services.html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a hre f="build-system.html">Build System</a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Zest⢠Documentation</a></span></dt></dl></div></div><div class="section" title="Tutorials"><div class="titlepage"><div><div><h2 class="title"><a id="tutorials"></a>Tutorials</h2></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h3 class="title"><a id="_overview"></a>Overview</h3></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Theses tutorials are based on actual code found in the <code class="literal">tutorials/</code> directory of the +<a class="ulink" href="http://qi4j.org/downloads.html" target="_top">Zest⢠SDK sources</a>. You should start your favorite editor and find the code related to +this tutorial, run it and play with it.</p></div><p>In this section you will find a comprehensive set of tutorials about Composite Oriented Programming using Zestâ¢.</p><div class="section" title="Zest⢠in 2 hours 42 minutes"><div class="titlepage"><div><div><h4 class="title"><a id="tutorials-intro"></a>Zest⢠in 2 hours 42 minutes</h4></div></div></div><p>This quite long introduction to Zest⢠will start by brushing up an overview of the problems Zest⢠solve, teach you what Composite Oriented Programming is and guide you through the process of writing a complete Application around an adapted Hello World example.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> -<a class="xref" href="two-minutes-intro.html" title="Qi4j in 2 minutes">Qi4j in 2 minutes</a> +<a class="xref" href="two-minutes-intro.html" title="Zest⢠in 2 minutes">Zest⢠in 2 minutes</a> </li><li class="listitem"> -<a class="xref" href="ten-minutes-intro.html" title="Qi4j in 10 minutes">Qi4j in 10 minutes</a> +<a class="xref" href="ten-minutes-intro.html" title="Zest⢠in 10 minutes">Zest⢠in 10 minutes</a> </li><li class="listitem"> -<a class="xref" href="thirty-minutes-intro.html" title="Qi4j in 30 minutes">Qi4j in 30 minutes</a> +<a class="xref" href="thirty-minutes-intro.html" title="Zest⢠in 30 minutes">Zest⢠in 30 minutes</a> </li><li class="listitem"> -<a class="xref" href="two-hours-intro.html" title="Qi4j in 2 hours">Qi4j in 2 hours</a> -</li></ul></div></div><div class="section" title="Getting real with Qi4j"><div class="titlepage"><div><div><h4 class="title"><a id="_getting_real_with_qi4j"></a>Getting real with Qi4j</h4></div></div></div><p>Throughout this set of tutorials it will be shown how to depend on Qi4j in your build, how to assemble a complete +<a class="xref" href="two-hours-intro.html" title="Zest⢠in 2 hours">Zest⢠in 2 hours</a> +</li></ul></div></div><div class="section" title="Getting real with Zestâ¢"><div class="titlepage"><div><div><h4 class="title"><a id="_getting_real_with_zest"></a>Getting real with Zestâ¢</h4></div></div></div><p>Throughout this set of tutorials it will be shown how to depend on Zest⢠in your build, how to assemble a complete application, how to create and work with Composites and Services, how to use contextual fragments and leverage properties.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> -<a class="xref" href="howto-depend-on-qi4j.html" title="Depend on Qi4j in your build">Depend on Qi4j in your build</a> +<a class="xref" href="howto-depend-on-qi4j.html" title="Depend on Zest⢠in your build">Depend on Zest⢠in your build</a> </li><li class="listitem"> <a class="xref" href="howto-assemble-application.html" title="Assemble an Application">Assemble an Application</a> </li><li class="listitem"> @@ -105,11 +105,11 @@ typical application.</p><div class="item <a class="xref" href="howto-configure-service.html" title="Configure a Service">Configure a Service</a> </li><li class="listitem"> <a class="xref" href="howto-use-io.html" title="Use I/O API">Use I/O API</a> -</li></ul></div></div><div class="section" title="Qi4j Development"><div class="titlepage"><div><div><h4 class="title"><a id="_qi4j_development"></a>Qi4j Development</h4></div></div></div><p>This last set of tutorials youâll learn how to build the Qi4j SDK from sources including this very documentation website -, the Qi4j manual, binaries and sources distributions.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> +</li></ul></div></div><div class="section" title="Zest⢠Development"><div class="titlepage"><div><div><h4 class="title"><a id="_zest_development"></a>Zest⢠Development</h4></div></div></div><p>This last set of tutorials youâll learn how to build the Zest⢠SDK from sources including this very documentation website +, the Zest⢠manual, binaries and sources distributions.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> <a class="xref" href="build-system.html" title="Build System">Build System</a> </li><li class="listitem"> -<a class="xref" href="community-docs.html" title="Writing Qi4j Documentation">Writing Documentation</a> +<a class="xref" href="community-docs.html" title="Writing Zest⢠Documentation">Writing Documentation</a> </li></ul></div></div></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="footer"><p> Copyright © 2015 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/" target="_blank">Apache License, Version 2.0</a>. <br /><small> Modified: zest/site/content/java/develop/two-hours-intro.html URL: http://svn.apache.org/viewvc/zest/site/content/java/develop/two-hours-intro.html?rev=1689843&r1=1689842&r2=1689843&view=diff ============================================================================== --- zest/site/content/java/develop/two-hours-intro.html (original) +++ zest/site/content/java/develop/two-hours-intro.html Wed Jul 8 11:08:41 2015 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Qi4j in 2 hours</title><link rel="stylesheet" type="text/css" href="css/style.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index.html" title="" /><link rel="up" href="tutorials.html" title="Tutorials" /><link rel="prev" href="thirty-minutes-intro.html" title="Qi4j in 30 minutes" /><link rel="next" href="howto-depend-on-qi4j.html" title="Depend on Qi4j in your build" /> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Zest⢠in 2 hours</title><link rel="stylesheet" type="text/css" href="css/style.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index.html" title="" /><link rel="up" href="tutorials.html" title="Tutorials" /><link rel="prev" href="thirty-minutes-intro.html" title="Zest⢠in 30 minutes" /><link rel="next" href="howto-depend-on-qi4j.html" title="Depend on Zest⢠in your build" /> <!-- favicon --> @@ -66,14 +66,14 @@ })(); </script> - </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Qi4j</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.html">Glo ssary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Qi4j in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Qi4j in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Qi4j in 30 minutes</a></span></dt><dt><span class="section"><span xmlns="" href="two-hours-intro.html">Qi4j in 2 hours</span></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Qi4j in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span class="section"><a href="tut-services .html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a href="build-system.html">Build System</ a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Qi4j Documentation</a></span></dt></dl></div></div><div class="section" title="Qi4j in 2 hours"><div class="titlepage"><div><div><h3 class="title"><a id="two-hours-intro"></a>Qi4j in 2 hours</h3></div></div></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This tutorial is not written yet. Learn how to contribute in <a class="xref" href="community-docs.html" title="Writing Qi4j Documentation">Writing Documentation</a>.</p></div><p>This introduction assumes that the "Qi4j in 10 minutes" and "Qi4j in 30 minutes" introductions has been read and + </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Zestâ¢</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.htm l">Glossary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><a href="two-minutes-intro.html">Zest⢠in 2 minutes</a></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Zest⢠in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Zest⢠in 30 minutes</a></span></dt><dt><span class="section"><span xmlns="" href="two-hours-intro.html">Zest⢠in 2 hours</span></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Zest⢠in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span c lass="section"><a href="tut-services.html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a hre f="build-system.html">Build System</a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Zest⢠Documentation</a></span></dt></dl></div></div><div class="section" title="Zest⢠in 2 hours"><div class="titlepage"><div><div><h3 class="title"><a id="two-hours-intro"></a>Zest⢠in 2 hours</h3></div></div></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This tutorial is not written yet. Learn how to contribute in <a class="xref" href="community-docs.html" title="Writing Zest⢠Documentation">Writing Documentation</a>.</p></div><p>This introduction assumes that the "Zest⢠in 10 minutes" and "Zest⢠in 30 minutes" introductions has been read and understood.</p><p>In this introduction we will touch on the core concepts of UnitOfWork, Application structure and Bootstrap API.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> Persistence and UnitOfWork - </li></ul></div><p>We have previously seen that it is easy to declare that a Composite should be persisted, but not touched on how to interact with the underlying persistence system. This is done via EntitySessions.</p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"><p class="simpara"> Application Structure - </p><div class="itemizedlist"><ul class="itemizedlist"><li class="listitem"> -There are one Application per Qi4j instance. +There are one Application per Zest⢠instance. </li><li class="listitem"> An Application consists of one or more Layers. </li><li class="listitem"> Modified: zest/site/content/java/develop/two-minutes-intro.html URL: http://svn.apache.org/viewvc/zest/site/content/java/develop/two-minutes-intro.html?rev=1689843&r1=1689842&r2=1689843&view=diff ============================================================================== --- zest/site/content/java/develop/two-minutes-intro.html (original) +++ zest/site/content/java/develop/two-minutes-intro.html Wed Jul 8 11:08:41 2015 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Qi4j in 2 minutes</title><link rel="stylesheet" type="text/css" href="css/style.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index.html" title="" /><link rel="up" href="tutorials.html" title="Tutorials" /><link rel="prev" href="tutorials.html" title="Tutorials" /><link rel="next" href="ten-minutes-intro.html" title="Qi4j in 10 minutes" /> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Zest⢠in 2 minutes</title><link rel="stylesheet" type="text/css" href="css/style.css" /><meta name="generator" content="DocBook XSL Stylesheets V1.76.1" /><link rel="home" href="index.html" title="" /><link rel="up" href="tutorials.html" title="Tutorials" /><link rel="prev" href="tutorials.html" title="Tutorials" /><link rel="next" href="ten-minutes-intro.html" title="Zest⢠in 10 minutes" /> <!-- favicon --> @@ -66,11 +66,11 @@ })(); </script> - </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Qi4j</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.html">Glo ssary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><span xmlns="" href="two-minutes-intro.html">Qi4j in 2 minutes</span></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Qi4j in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Qi4j in 30 minutes</a></span></dt><dt><span class="section"><a href="two-hours-intro.html">Qi4j in 2 hours</a></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Qi4j in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span class="section"><a href="tut-services .html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a href="build-system.html">Build System</ a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Qi4j Documentation</a></span></dt></dl></div></div><div class="section" title="Qi4j in 2 minutes"><div class="titlepage"><div><div><h3 class="title"><a id="two-minutes-intro"></a>Qi4j in 2 minutes</h3></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Theses tutorials are based on actual code found in the <code class="literal">tutorials/</code> directory of the -<a class="ulink" href="http://qi4j.org/downloads.html" target="_top">Qi4j SDK sources</a>. You should start your favorite editor and find the code related to -this tutorial, run it and play with it.</p></div><p>To show that Qi4j is not necessarily complex, not hard to get going with and easy to deploy, we are first showing the + </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common" class="logo"><a href="index.html"><img src="images/logo-standard.png" /></a></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="top-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="index.html#home">Zestâ¢</a></span></dt><dt><span class="section"><a href="intro.html">Introduction</a></span></dt><dt><span class="section"><span xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span class="section"><a href="samples.html">Samples</a></span></dt><dt><span class="section"><a href="core.html">Core</a></span></dt><dt><span class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span class="section"><a href="tools.html">Tools</a></span></dt><dt><span class="section"><a href="glossary.htm l">Glossary </a></span></dt></dl></div></div><div xmlns="" xmlns:exsl="http://exslt.org/common" class="sub-nav"><div xmlns="http://www.w3.org/1999/xhtml" class="toc"><dl><dt><span class="section"><a href="tutorials.html#_overview">Overview</a></span></dt><dt><span class="section"><span xmlns="" href="two-minutes-intro.html">Zest⢠in 2 minutes</span></span></dt><dt><span class="section"><a href="ten-minutes-intro.html">Zest⢠in 10 minutes</a></span></dt><dt><span class="section"><a href="thirty-minutes-intro.html">Zest⢠in 30 minutes</a></span></dt><dt><span class="section"><a href="two-hours-intro.html">Zest⢠in 2 hours</a></span></dt><dt><span class="section"><a href="howto-depend-on-qi4j.html">Depend on Zest⢠in your build</a></span></dt><dt><span class="section"><a href="howto-assemble-application.html">Assemble an Application</a></span></dt><dt><span class="section"><a href="tut-composites.html">Transient Composites Tutorial</a></span></dt><dt><span c lass="section"><a href="tut-services.html">Services Composites Tutorial</a></span></dt><dt><span class="section"><a href="howto-contextual-fragments.html">Use contextual fragments</a></span></dt><dt><span class="section"><a href="howto-leverage-properties.html">Leverage Properties</a></span></dt><dt><span class="section"><a href="howto-create-constraint.html">Create a Constraint</a></span></dt><dt><span class="section"><a href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span class="section"><a href="howto-create-sideeffect.html">Create a SideEffect</a></span></dt><dt><span class="section"><a href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span class="section"><a href="howto-configure-service.html">Configure a Service</a></span></dt><dt><span class="section"><a href="howto-invocation-annotation.html">Use @Invocation</a></span></dt><dt><span class="section"><a href="howto-use-io.html">Use I/O API</a></span></dt><dt><span class="section"><a hre f="build-system.html">Build System</a></span></dt><dt><span class="section"><a href="community-docs.html">Writing Zest⢠Documentation</a></span></dt></dl></div></div><div class="section" title="Zest⢠in 2 minutes"><div class="titlepage"><div><div><h3 class="title"><a id="two-minutes-intro"></a>Zest⢠in 2 minutes</h3></div></div></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Theses tutorials are based on actual code found in the <code class="literal">tutorials/</code> directory of the +<a class="ulink" href="http://qi4j.org/downloads.html" target="_top">Zest⢠SDK sources</a>. You should start your favorite editor and find the code related to +this tutorial, run it and play with it.</p></div><p>To show that Zest⢠is not necessarily complex, not hard to get going with and easy to deploy, we are first showing the classic HelloWorld, as small as it can get and still be Composite Oriented Programming and not only standard OOP.</p><p>If you want to reproduce whatâs explained in this tutorial, remember to depend on the Core Runtime artifact that depends -on Core API, Core SPI, Core Bootstrap and Core Functional & I/O APIs:</p><div class="table"><a id="idm78349316320"></a><p class="title"><strong>Table 1. Artifact</strong></p><div class="table-contents"><table summary="Artifact" border="1"><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th align="left" valign="top">Group ID</th><th align="left" valign="top">Artifact ID</th><th align="left" valign="top">Version</th></tr></thead><tbody><tr><td align="left" valign="top"><p>org.qi4j.core</p></td><td align="left" valign="top"><p>org.qi4j.core.runtime</p></td><td align="left" valign="top"><p>0</p></td></tr></tbody></table></div></div><br class="table-break" /><p>See the <a class="xref" href="howto-depend-on-qi4j.html" title="Depend on Qi4j in your build">Depend on Qi4j in your build</a> tutorial for details.</p><p>Ready, Set, Go!</p><p>Letâs say we want to do the common HelloWorld example, but with a more domain-oriented settin g. +on Core API, Core SPI, Core Bootstrap and Core Functional & I/O APIs:</p><div class="table"><a id="idm415643313424"></a><p class="title"><strong>Table 1. Artifact</strong></p><div class="table-contents"><table summary="Artifact" border="1"><colgroup><col class="col_1" /><col class="col_2" /><col class="col_3" /></colgroup><thead><tr><th align="left" valign="top">Group ID</th><th align="left" valign="top">Artifact ID</th><th align="left" valign="top">Version</th></tr></thead><tbody><tr><td align="left" valign="top"><p>org.qi4j.core</p></td><td align="left" valign="top"><p>org.qi4j.core.runtime</p></td><td align="left" valign="top"><p>0</p></td></tr></tbody></table></div></div><br class="table-break" /><p>See the <a class="xref" href="howto-depend-on-qi4j.html" title="Depend on Zest⢠in your build">Depend on Zest⢠in your build</a> tutorial for details.</p><p>Ready, Set, Go!</p><p>Letâs say we want to do the common HelloWorld example, but with a more domain-or iented setting. We have a Speaker interface that does the talking. But we also need an implementation for Speaker, which we declare here via the <code class="literal">@Mixins( SpeakerMixin.class )</code>.</p><pre class="programlisting brush: java">@Mixins( SpeakerMixin.class ) public interface Speaker @@ -106,7 +106,7 @@ In this case, return a String with the c } } </pre><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> -The SingletonAssembler is a convenience class that creates a Qi4j Runtime instance and an application with one layer +The SingletonAssembler is a convenience class that creates a Zest⢠Runtime instance and an application with one layer and one module in it. </li><li class="listitem"> We declare a TransientComposite of type <code class="literal">Speaker</code>.
