make explicit reference to example directories for each quickstart.

This commit is contained in:
markpollack
2009-06-20 01:33:18 +00:00
parent 04ac4aec80
commit 8d5c858dde
10 changed files with 2748 additions and 2661 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -16,7 +16,13 @@
* limitations under the License.
*/
-->
<chapter xml:id="data-quickstart" xmlns="http://docbook.org/ns/docbook" version="5">
<chapter version="5" xml:id="data-quickstart"
xmlns="http://docbook.org/ns/docbook"
xmlns:ns6="http://www.w3.org/1999/xlink"
xmlns:ns5="http://www.w3.org/1999/xhtml"
xmlns:ns4="http://www.w3.org/2000/svg"
xmlns:ns3="http://www.w3.org/1998/Math/MathML"
xmlns:ns="http://docbook.org/ns/docbook">
<title>Data Access QuickStart</title>
<section>
@@ -72,6 +78,12 @@
namespace, collections of which are generally returned from the DAO
methods.</para>
<note>
<para>To follow this Data Access QuickStart load the solution file found
in the directory
<literal>&lt;spring-install-dir&gt;\examples\Spring\Spring.DataQuickStart</literal></para>
</note>
<section>
<title>Database configuration</title>
@@ -185,4 +197,4 @@
installation.</para>
</section>
</section>
</chapter>
</chapter>

View File

@@ -16,7 +16,13 @@
* limitations under the License.
*/
-->
<chapter xml:id="msmq-quickstart" xmlns="http://docbook.org/ns/docbook" version="5">
<chapter version="5" xml:id="msmq-quickstart"
xmlns="http://docbook.org/ns/docbook"
xmlns:ns6="http://www.w3.org/1999/xlink"
xmlns:ns5="http://www.w3.org/1999/xhtml"
xmlns:ns4="http://www.w3.org/2000/svg"
xmlns:ns3="http://www.w3.org/1998/Math/MathML"
xmlns:ns="http://docbook.org/ns/docbook">
<title>MSMQ QuickStart</title>
<section>
@@ -27,11 +33,17 @@
follows the same basic approach as in the <link
linkend="nms-quickstart">NMS QuickStart</link> but is adapted as need for
use with MSMQ. Please read the introduction in that chapter to get an
overview of the system. </para>
overview of the system.</para>
<para>When there is direct overlap in functionality between the MSMQ and
NMS quickstart a reference to the appropriate section in the NMS
QuickStart documentation is given.</para>
<note>
<para>To follow this MSMQ QuickStart load the solution file found in the
directory
<literal>&lt;spring-install-dir&gt;\examples\Spring\Spring.MsmqQuickStart</literal></para>
</note>
</section>
<section>
@@ -39,20 +51,18 @@
<para>To communicate between th client and server a pair of queues will be
used. Messages sent from the client to the server will use the
transactional queue named
<literal>.\Private$\request.txqueue</literal>. Messages sent from the
server to the client will use the transactional queue
<literal>.\Private$\response.joe.txqueue</literal>. The queue for
transactional queue named <literal>.\Private$\request.txqueue</literal>.
Messages sent from the server to the client will use the transactional
queue <literal>.\Private$\response.joe.txqueue</literal>. The queue for
messages that cannot be processed, so called 'poison messages' will be
sent to the queue <literal>.\Private$\dead.queue</literal>. You can
create these queues using the computer management administration console.
Private queues are used to simplify the application setup
requirements.</para>
sent to the queue <literal>.\Private$\dead.queue</literal>. You can create
these queues using the computer management administration console. Private
queues are used to simplify the application setup requirements.</para>
<para>Since MSMQ does not natively support the publish-subscribe messaging
style as in other messaging systems, Apache MQ, IBM Websphere MQ, TIBCO
EMS, the market data information is sent on the same queue as the
responses from the server to the client for trade requests.. </para>
responses from the server to the client for trade requests..</para>
</section>
<section>
@@ -112,10 +122,10 @@
<title>Messaging Infrastructure</title>
<para>The implementations of the gateway interfaces inherit from Spring's
helper class <literal>MessageQueueGatewaySupport</literal> in order to
get easy access to a <literal>MessageQueueTemplate</literal> for
sending. The implementation of the <literal>IStockService</literal>
interface is shown below</para>
helper class <literal>MessageQueueGatewaySupport</literal> in order to get
easy access to a <literal>MessageQueueTemplate</literal> for sending. The
implementation of the <literal>IStockService</literal> interface is shown
below</para>
<programlisting language="csharp">public class <classname>MsmqStockServiceGateway</classname> : <classname>MessageQueueGatewaySupport</classname>, <classname>IStockService</classname>
{
@@ -145,17 +155,16 @@
}</programlisting>
<para>The <literal>Send</literal> method is using
MessageQueueTemplate's <literal>ConvertAndSend(object obj,
MessagePostProcessorDelegate messagePostProcessorDelegate)</literal>
method. The anonymous delegate allows you to modify the message
properties, such as ResponseQueue and AppSpecific after the message has
been converted from an object but before it has been sent. The use of an
anonymous delegate allows makes it very easy to apply any post processing
logic to the converted message.</para>
<para>The <literal>Send</literal> method is using MessageQueueTemplate's
<literal>ConvertAndSend(object obj, MessagePostProcessorDelegate
messagePostProcessorDelegate)</literal> method. The anonymous delegate
allows you to modify the message properties, such as ResponseQueue and
AppSpecific after the message has been converted from an object but before
it has been sent. The use of an anonymous delegate allows makes it very
easy to apply any post processing logic to the converted message.</para>
<para>The configuration for <literal>MsmqStockServiceGateway</literal>
and all its dependencies is shown below, highlighting important dependency
<para>The configuration for <literal>MsmqStockServiceGateway</literal> and
all its dependencies is shown below, highlighting important dependency
links.</para>
<programlisting language="myxml">&lt;object name="stockServiceGateway" type="Spring.MsmqQuickStart.Client.Gateways.MsmqStockServiceGateway, Spring.MsmqQuickStart.Client"&gt;
@@ -190,9 +199,9 @@
<para>Since the client also needs to listen to incoming messages on the
responseTxQueue, a
<literal>TransactionalMessageListenerContainer</literal> is
configured. The configuration for the message listener container and all
its dependencies is shown below, highlighting important dependency
<literal>TransactionalMessageListenerContainer</literal> is configured.
The configuration for the message listener container and all its
dependencies is shown below, highlighting important dependency
links.</para>
<programlisting language="myxml">&lt;!-- MSMQ Transaction Manager --&gt;
@@ -203,7 +212,8 @@
&lt;property name="MessageQueueObjectName" value="responseTxQueue"/&gt;
&lt;property name="PlatformTransactionManager" ref="messageQueueTransactionManager"/&gt;
&lt;property name="MessageListener" ref="<emphasis role="bold">messageListenerAdapter</emphasis>"/&gt;
&lt;property name="MessageTransactionExceptionHandler" ref="<emphasis role="bold">sendToQueueExceptionHandler</emphasis>"/&gt;
&lt;property name="MessageTransactionExceptionHandler" ref="<emphasis
role="bold">sendToQueueExceptionHandler</emphasis>"/&gt;
&lt;/object&gt;
@@ -226,12 +236,12 @@
<para>A similar configuration is used on the server to configure the class
<literal>Spring.MsmqQuickStart.Server.Gateways.MarketDataServiceGateway
</literal>that implements the <literal>IMarketDataService</literal>
interface and a
<literal>TransactionalMessageListenerContainer</literal> to process
messages on the requestTxQueue. You can increase the number of processing
thread in the <literal>TransactionalMessageListenerContainer</literal>
by setting the property <literal>MaxConcurrentListeners</literal>, the
default value is 1.</para>
interface and a <literal>TransactionalMessageListenerContainer</literal>
to process messages on the requestTxQueue. You can increase the number of
processing thread in the
<literal>TransactionalMessageListenerContainer</literal> by setting the
property <literal>MaxConcurrentListeners</literal>, the default value is
1.</para>
</section>
<section>
@@ -247,10 +257,10 @@
<mediaobject>
<imageobject>
<imagedata fileref="images/nms-quickstart-gui.png" />
<imagedata fileref="images/nms-quickstart-gui.png"></imagedata>
</imageobject>
</mediaobject>
<para></para>
</section>
</chapter>
</chapter>

View File

@@ -34,19 +34,17 @@
has a simple service layer that simulated a fullillment process. See the
integration tests as well for insight into how it works. The application
uses Spring's declarative transaction management features,
HibernateTemplate helper class, and Open Session In View module. <note>The
example will be updated to not use HibernateTemplate and instead use the
standard NHibernate API in a future release. All functionality is still
present when using the standard NHibernate API, as Spring transaction
managment is integrated into NHibernate extension points and exception
translation is provided by AOP advice. See the section titled Implementing
DAOs based on plain Hibernate 1.2/2.0 API" in the hibernate orm section of
the reference docs for more information.</note>To run the application
make the Web application
the project that starts and set Default.aspx as the start page. You will
see a list of customers. If you select 'edit' then you can edit some
customer info and save it by pressing the save button. Note that you will
need to explicitly navigate back to the Default.aspx page and reload it in
order to see the changes.</para>
HibernateTemplate helper class, and Open Session In View module. <note>
The example will be updated to not use HibernateTemplate and instead use the standard NHibernate API in a future release. All functionality is still present when using the standard NHibernate API, as Spring transaction managment is integrated into NHibernate extension points and exception translation is provided by AOP advice. See the section titled Implementing DAOs based on plain Hibernate 1.2/2.0 API" in the hibernate orm section of the reference docs for more information.
</note>To run the application make the Web application the project that
starts and set Default.aspx as the start page. You will see a list of
customers. If you select 'edit' then you can edit some customer info and
save it by pressing the save button. Note that you will need to explicitly
navigate back to the Default.aspx page and reload it in order to see the
changes.<note>
<para>To follow this NHibernate QuickStart load the solution file
found in the directory
<literal>&lt;spring-install-dir&gt;\examples\Spring\Spring.Data.NHibernate.Northwind</literal></para>
</note></para>
</section>
</chapter>

View File

@@ -16,7 +16,13 @@
* limitations under the License.
*/
-->
<chapter xml:id="nms-quickstart" xmlns="http://docbook.org/ns/docbook" version="5">
<chapter version="5" xml:id="nms-quickstart"
xmlns="http://docbook.org/ns/docbook"
xmlns:ns6="http://www.w3.org/1999/xlink"
xmlns:ns5="http://www.w3.org/1999/xhtml"
xmlns:ns4="http://www.w3.org/2000/svg"
xmlns:ns3="http://www.w3.org/1998/Math/MathML"
xmlns:ns="http://docbook.org/ns/docbook">
<title>NMS QuickStart</title>
<section>
@@ -39,12 +45,15 @@
<mediaobject>
<imageobject>
<imagedata fileref="images/nms-quickstart.jpg" scale="75" />
<imagedata fileref="images/nms-quickstart.jpg" scale="75"></imagedata>
</imageobject>
</mediaobject>
<para>This example was developed with ActiveMQ 5.1 and the ActiveMQ NMS
library with subversion repository number 685750.</para>
<note>
<para>To follow this NMS QuickStart load the solution file found in the
directory
<literal>&lt;spring-install-dir&gt;\examples\Spring\Spring.NmsQuickStart</literal></para>
</note>
</section>
<section>
@@ -68,7 +77,7 @@
<mediaobject>
<imageobject>
<imagedata fileref="images/nms-quickstart-msg-destinations.jpg"
role="" scale="75" />
role="" scale="75"></imagedata>
</imageobject>
</mediaobject>
@@ -104,16 +113,16 @@
<para>The use of interfaces allows for multiple implementations to be
created. Implementations that use messaging to communicate will be based
on the Spring's <literal>NmsGateway</literal> class and will be
discussed later. stub or mock implementations can be used for testing
on the Spring's <literal>NmsGateway</literal> class and will be discussed
later. stub or mock implementations can be used for testing
purposes.</para>
</section>
<section xml:id="nms-messagedata">
<title>Message Data</title>
<para>The <literal>TradeRequest</literal> object shown above contains
all the information required to process a stock order. To promote the
<para>The <literal>TradeRequest</literal> object shown above contains all
the information required to process a stock order. To promote the
interoperability of this data across different platforms the
<literal>TradeRequest</literal> class is generated from an XML Schema
using Microsoft's Schema Definition Tool (xsd.exe). The schema for trade
@@ -169,9 +178,9 @@
}</programlisting>
<para>The schema and the <literal>TradeRequest</literal> class are
located in the project <literal>Spring.NmsQuickStart.Common</literal>.
This common project will be shared between the server and client for
<para>The schema and the <literal>TradeRequest</literal> class are located
in the project <literal>Spring.NmsQuickStart.Common</literal>. This common
project will be shared between the server and client for
convenience.</para>
<para>When sending a response back to the client the type
@@ -232,8 +241,8 @@
<section xml:id="nms-handlers">
<title>Message Handlers</title>
<para>When the <literal>TradeRequest</literal> message is received by
the server, it will be handled by the class
<para>When the <literal>TradeRequest</literal> message is received by the
server, it will be handled by the class
<literal>Spring.NmsQuickStart.Server.Handlers.StockAppHandler
</literal>shown below</para>
@@ -312,15 +321,14 @@
<literal>Spring.NmsQuickStart.Common.Converters.XmlMessageConverter</literal>.
This converter adds the ability to marshal and unmarshal objects to and
from XML strings. It also uses Spring's
<literal>SimpleMessageConverter</literal> to convert Hashtables,
strings, and byte arrays. In order to pass information about the
serialized type, type information is put in the message properties. The
type information can be either the class name or an integer value
identifying the type. In systems where the client and server are deployed
together and are tightly coupled, sharing the class name is a convenient
shortcut. The alternative is to register a type for a given integer value.
The XML configuration used to configure these objects is shown
below</para>
<literal>SimpleMessageConverter</literal> to convert Hashtables, strings,
and byte arrays. In order to pass information about the serialized type,
type information is put in the message properties. The type information
can be either the class name or an integer value identifying the type. In
systems where the client and server are deployed together and are tightly
coupled, sharing the class name is a convenient shortcut. The alternative
is to register a type for a given integer value. The XML configuration
used to configure these objects is shown below</para>
<programlisting language="myxml"> &lt;object name="XmlMessageConverter" type="Spring.NmsQuickStart.Common.Converters.XmlMessageConverter, Spring.NmsQuickStart.Common"&gt;
&lt;property name="TypeMapper" ref="TypeMapper"/&gt;
@@ -374,12 +382,11 @@
logic to the converted message.</para>
<para>The object definition for the
<literal>NmsStockServiceGateway</literal> is shown below along with
its dependent object definitions of NmsTemplate and the
<literal>NmsStockServiceGateway</literal> is shown below along with its
dependent object definitions of NmsTemplate and the
ConnectionFactory.</para>
<para>
<programlisting language="myxml"> &lt;object name="StockServiceGateway" type="Spring.NmsQuickStart.Client.Gateways.NmsStockServiceGateway, Spring.NmsQuickStart.Client"&gt;
<para><programlisting language="myxml"> &lt;object name="StockServiceGateway" type="Spring.NmsQuickStart.Client.Gateways.NmsStockServiceGateway, Spring.NmsQuickStart.Client"&gt;
&lt;property name="NmsTemplate" ref="NmsTemplate"/&gt;
&lt;property name="DefaultReplyToQueue"&gt;
&lt;object type="Apache.NMS.ActiveMQ.Commands.ActiveMQQueue, Apache.NMS.ActiveMQ"&gt;
@@ -447,10 +454,10 @@
<mediaobject>
<imageobject>
<imagedata fileref="images/nms-quickstart-gui.png" />
<imagedata fileref="images/nms-quickstart-gui.png"></imagedata>
</imageobject>
</mediaobject>
<para></para>
</section>
</chapter>
</chapter>

View File

@@ -16,7 +16,13 @@
* limitations under the License.
*/
-->
<chapter xml:id="quartz-quickstart" xmlns="http://docbook.org/ns/docbook" version="5">
<chapter version="5" xml:id="quartz-quickstart"
xmlns="http://docbook.org/ns/docbook"
xmlns:ns6="http://www.w3.org/1999/xlink"
xmlns:ns5="http://www.w3.org/1999/xhtml"
xmlns:ns4="http://www.w3.org/2000/svg"
xmlns:ns3="http://www.w3.org/1998/Math/MathML"
xmlns:ns="http://docbook.org/ns/docbook">
<title>Quartz QuickStart</title>
<section>
@@ -38,16 +44,16 @@
<para>The full details of Quartz are outside the scope of this quickstart
but here is 'quick tour for the impatient' of the main classes and
interfaces used in Quartz so you can get your sea legs. A Quartz
<literal>IJob</literal> interface represents the task you would like
to execute. You either directly implement Quartz's
<literal>IJob</literal> interface or a convenience base class. The
Quartz <literal>Trigger</literal> controls when a job is executed, for
example in the wee hours of the morning every weekday . This would be done
using Quartz's <literal>CronTrigger</literal> implementation.
Instances of your job are created every time the trigger fires. As such,
in order to pass information between different job instances you stash
data away in a hashtable that gets passed to the each Job instance upon
its creation. Quartz's <literal>JobDetail</literal> class combines the
<literal>IJob</literal> interface represents the task you would like to
execute. You either directly implement Quartz's <literal>IJob</literal>
interface or a convenience base class. The Quartz
<literal>Trigger</literal> controls when a job is executed, for example in
the wee hours of the morning every weekday . This would be done using
Quartz's <literal>CronTrigger</literal> implementation. Instances of your
job are created every time the trigger fires. As such, in order to pass
information between different job instances you stash data away in a
hashtable that gets passed to the each Job instance upon its creation.
Quartz's <literal>JobDetail</literal> class combines the
<literal>IJob</literal> and this hashtable of data. Instead of the
standard <literal>System.Collections.Hashtable</literal> the class
<literal>JobDataMap</literal> is used. Triggers are registered with a
@@ -55,6 +61,12 @@
overall execution of the triggers and jobs. The
<literal>StdSchedulerFactory</literal> implementation is generally
used.</para>
<note>
<para>To follow this Quarts QuickStart load the solution file found in
the directory
<literal>&lt;spring-install-dir&gt;\</literal><literal>examples\Spring\Spring.Scheduling.Quartz.Example</literal></para>
</note>
</section>
<section>
@@ -72,11 +84,11 @@
<section>
<title>Standard job scheduling</title>
<para>The Spring base class <literal>QuartzJobObject</literal>
implements <literal>IJob</literal> and allows for your object's
properties to be set via values that are stored inside Quartz's
<literal>JobDataMap</literal> that is passed along each time your job
is instantiated due a trigger firing. This class is shown below</para>
<para>The Spring base class <literal>QuartzJobObject</literal> implements
<literal>IJob</literal> and allows for your object's properties to be set
via values that are stored inside Quartz's <literal>JobDataMap</literal>
that is passed along each time your job is instantiated due a trigger
firing. This class is shown below</para>
<programlisting language="csharp"> public class ExampleJob : QuartzJobObject
{
@@ -98,12 +110,12 @@
<para>The method <literal>ExecuteInternal</literal> is called when the
trigger fires and is where you would put your business logic. The
<literal>JobExecutionContext</literal> passed in lets you access
various pieces of information about the current job execution, such as the
<literal>JobExecutionContext</literal> passed in lets you access various
pieces of information about the current job execution, such as the
JobDataMap or information on when the next time the trigger will fire. The
<literal>ExampleJob</literal> is configured by creating a
<literal>JobDetail</literal> object as shown below in the following
XML snippet taken from spring-objects.xml</para>
<literal>JobDetail</literal> object as shown below in the following XML
snippet taken from spring-objects.xml</para>
<programlisting language="myxml"> &lt;object name="exampleJob" type="Spring.Scheduling.Quartz.JobDetailObject, Spring.Scheduling.Quartz"&gt;
&lt;property name="JobType" value="Spring.Scheduling.Quartz.Example.ExampleJob, Spring.Scheduling.Quartz.Example" /&gt;
@@ -115,8 +127,7 @@
&lt;/property&gt;
&lt;/object&gt;</programlisting>
<para>The dictionary property of the
<literal>JobDetailObject</literal>,
<para>The dictionary property of the <literal>JobDetailObject</literal>,
<literal>JobDataAsMap</literal>, is used to set the values of the
ExampleJob's properties. This will result in the ExampleJob being
instantiated with it's UserName property value set to 'Alexandre' the
@@ -174,8 +185,8 @@
}</programlisting>
<para>Note that it does not inherit from any base class. To instruct
Spring to create a <literal>JobDetail</literal> object for this method
we use Spring's factory object class
Spring to create a <literal>JobDetail</literal> object for this method we
use Spring's factory object class
<literal>MethodInvokingJobDetailFactoryObject</literal> as shown
below</para>
@@ -191,10 +202,10 @@
&lt;/object&gt;
</programlisting>
<para>Note that <literal>AdminService</literal> object is configured
using Spring as you would do normally, without consideration for Quartz.
The trigger associated with the jobDetail object is listed below. Also
note that when using MethodInvokingJobDetailFactoryObject you can't use
<para>Note that <literal>AdminService</literal> object is configured using
Spring as you would do normally, without consideration for Quartz. The
trigger associated with the jobDetail object is listed below. Also note
that when using MethodInvokingJobDetailFactoryObject you can't use
database persistence for Jobs. See the class documentation for additional
details.</para>
@@ -245,4 +256,4 @@
8/8/2008 1:41:03 PM: DoAdminWork called, user name: Gabriel
</programlisting>
</section>
</chapter>
</chapter>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -42,6 +42,12 @@
client application is located in Sprng.WcfQuickStart.ClientApp.2008. To
run the solution make sure that all three projects are set to
startup.</para>
<note>
<para>To follow this Quarts QuickStart load the solution file found in
the directory
<literal>&lt;spring-install-dir&gt;\examples\Spring\Spring.WcfQuickStart</literal></para>
</note>
</section>
<section>

View File

@@ -1,30 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
* Copyright 2002-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<chapter xml:id="web-quickstart" xmlns="http://docbook.org/ns/docbook" version="5">
<title>Web Quickstarts</title>
<section>
<title>Introduction</title>
<para>The Web Quickstart solution provides basic 'Hello World' examples
for using Spring.Web features. You can use this solution as a starting
point and then move on to the SpringAir application that uses a wider
range of Spring.Web features. </para>
</section>
</chapter>
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
* Copyright 2002-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<chapter version="5" xml:id="web-quickstart"
xmlns="http://docbook.org/ns/docbook"
xmlns:ns6="http://www.w3.org/1999/xlink"
xmlns:ns5="http://www.w3.org/1998/Math/MathML"
xmlns:ns4="http://www.w3.org/2000/svg"
xmlns:ns3="http://www.w3.org/1999/xhtml"
xmlns:ns="http://docbook.org/ns/docbook">
<title>Web Quickstarts</title>
<section>
<title>Introduction</title>
<para>The Web Quickstart solution provides basic 'Hello World' examples
for using Spring.Web features. You can use this solution as a starting
point and then move on to the SpringAir application that uses a wider
range of Spring.Web features. The documention inside the solution and web
application itself can help guide you through the functionality.</para>
<note>
<para>To follow this Quarts QuickStart load the solution file found in
the directory
<literal>&lt;spring-install-dir&gt;\examples\Spring\Spring.WebQuickStart</literal></para>
</note>
</section>
</chapter>