From 2e9f948ffd62914537806db407606392ebe65cf4 Mon Sep 17 00:00:00 2001 From: markpollack Date: Thu, 14 Aug 2008 08:09:02 +0000 Subject: [PATCH] finish nms quickstart docs add minimal wcf quickstart docs --- .../src/images/nms-quickstart-gui.png | Bin 0 -> 14067 bytes .../nms-quickstart-msg-destinations.jpg | Bin 0 -> 16537 bytes doc/reference/src/images/nms-quickstart.jpg | Bin 0 -> 23853 bytes doc/reference/src/images/nms-quickstart.pptx | Bin 0 -> 32884 bytes doc/reference/src/index.xml | 7 +- doc/reference/src/messaging.xml | 81 +++--- doc/reference/src/nms-quickstart.xml | 230 ++++++++++++++++-- doc/reference/src/quartz-quickstart.xml | 17 +- doc/reference/src/scheduling.xml | 6 +- doc/reference/src/wcf.xml | 25 +- doc/reference/src/xsd-configuration.xml | 2 +- 11 files changed, 299 insertions(+), 69 deletions(-) create mode 100644 doc/reference/src/images/nms-quickstart-gui.png create mode 100644 doc/reference/src/images/nms-quickstart-msg-destinations.jpg create mode 100644 doc/reference/src/images/nms-quickstart.jpg create mode 100644 doc/reference/src/images/nms-quickstart.pptx diff --git a/doc/reference/src/images/nms-quickstart-gui.png b/doc/reference/src/images/nms-quickstart-gui.png new file mode 100644 index 0000000000000000000000000000000000000000..801837831ce2a0922386ff42694d62a13c32e8a0 GIT binary patch literal 14067 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 literal 0 HcmV?d00001 diff --git a/doc/reference/src/images/nms-quickstart-msg-destinations.jpg b/doc/reference/src/images/nms-quickstart-msg-destinations.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5131b90cde1d2e4656ad5b91792fcbe972f6d4b GIT binary patch literal 16537 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 literal 0 HcmV?d00001 diff --git a/doc/reference/src/images/nms-quickstart.jpg b/doc/reference/src/images/nms-quickstart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37369023762d8f7e1de4161bced88af78c0d4691 GIT binary patch literal 23853 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 hG`WJ;k>vk) + @@ -59,7 +60,7 @@ The Spring.NET Framework Reference Documentation Version 1.2.0 M1 - Last Updated July 16, 2008 + Last Updated August 15,2008 Mark @@ -375,6 +376,9 @@ + + + &quickstarts; @@ -386,6 +390,7 @@ &tx-quickstart; &quartz-quickstart; &nms-quickstart; + &wcf-quickstart; Spring.NET for Java developers diff --git a/doc/reference/src/messaging.xml b/doc/reference/src/messaging.xml index d810bc6a..e13176e9 100644 --- a/doc/reference/src/messaging.xml +++ b/doc/reference/src/messaging.xml @@ -189,13 +189,12 @@ higher level than the traditional messaging APIs such as JMS and NMS since you are programing to a service interface and use metadata (either XML or attributes) to configure the messaging behavior. If you prefer to - use this service-oriented, RPC style approach, to messaging middleware - then look to see if a vendor provides a WCF binding for your messaging - provider. Note that even with the option of using WCF, many people - prefer to sit 'closer to the metal' when using messaging middleware, to - access specific features and functionality not available in WCF, or - simply because they are more comfortable with that programming - model. + use this service-oriented, RPC style approach, then look to see if a + vendor provides a WCF binding for your messaging provider. Note that + even with the option of using WCF, many people prefer to sit 'closer to + the metal' when using messaging middleware, to access specific features + and functionality not available in WCF, or simply because they are more + comfortable with that programming model. @@ -1156,6 +1155,15 @@ namespace MyApp An optional message selector for this listener. + + + pubsub-domain + + An optional boolean value. Set to true for the publish-subscribe domain + (Topics) or false (the default) for point-to-point domain (Queues). This is useful + when using the default implementation for destination resolvers. + + @@ -1294,28 +1302,43 @@ namespace MyApp
TIBCO EMS Specific Details - Caching of messaging resources is usually done by a wrapping the - 'raw provider' provider implementation with an implementation that will - cache messaging resources. The resources that are candidates for caching - are the Connection, Session, and MessageProducer. The JMS specification - requires that the Connection be thread safe. The Session and - MessageProducer are not required to be thread safe but they are in TIBCO's - implementation. The most important resource to cache is the JMS Connection - since the flow of events in the message template class (EmsTemplate) is to - create/close a connection on each operation and this is an expensive - operation. + This section covers functionality and behavior that is different + than described previously and is specific to TIBCO EMS. - Spring provides a convenience class, SingleConnectionFactory, in - which the same Connection is returned on calls to CreateConnection() and - all calls to .Close() on the returned Connection are ignored. Since - TIBCO's Connection class does not have an interface nor virtual methods - this strategy is not possible. An alternative strategy used is to - 'hard-code' the caching of these resources within EmsTemplate and - SimpleMessageContainer. This functionality is controlled by the property - CacheJmsResources and is set to true by default, - resulting in caching of Connection, Session, and MessageProducer. When - using the TIBCO EMS binding for the NMS APIs you do not need to set this - property and can instead use one of the wrapper implementations in Spring - based on the NMS API that performs caching of messaging resources. +
+ Resource Management + + Caching of messaging resources is usually done by a wrapping the + 'raw provider' provider implementation with an implementation that will + cache messaging resources. The resources that are candidates for caching + are the Connection, Session, and MessageProducer. The JMS specification + requires that the Connection be thread safe. The Session and + MessageProducer are not required to be thread safe but they are in + TIBCO's implementation. The most important resource to cache is the EMS + Connection since the flow of events in the message template class + (EmsTemplate) is to create/close a connection on each operation and this + is an expensive operation. + + Spring provides a convenience class, SingleConnectionFactory, in + which the same Connection is returned on calls to CreateConnection() and + all calls to .Close() on the returned Connection are ignored. Since + TIBCO's Connection class does not have an interface nor virtual methods + this strategy is not possible. An alternative strategy used is to + 'hard-code' the caching of these resources within EmsTemplate and + SimpleMessageContainer. This functionality is controlled by the property + CacheJmsResources and is set to true by default, + resulting in caching of Connection, Session, and MessageProducer. When + using the TIBCO EMS binding for the NMS APIs you do not need to set this + property and can instead use one of the wrapper implementations in + Spring based on the NMS API that performs caching of messaging + resources. +
+ +
+ Queue browsing in EmsTemplate + + The following queue browsing operations are available on + EmsTemplate +
\ No newline at end of file diff --git a/doc/reference/src/nms-quickstart.xml b/doc/reference/src/nms-quickstart.xml index eb0619a4..b31ad002 100644 --- a/doc/reference/src/nms-quickstart.xml +++ b/doc/reference/src/nms-quickstart.xml @@ -9,19 +9,22 @@ messaging to implement a system for purchasing a stock. To purchase a stock, a client application will send a stock request message containing the information about the stock, i.e. ticker symbol, quantity, etc. The - client request message will be recieved by the server where it will - perform business processing on the requst, for example to determine if the - user has sufficient credit to purchase the stock or if the user is even - allowed to make the purchase due to existing account restrictions. Usually - the server application will persist state about the request and forward it - on to an execute venue where the actual execution of the stock request is - peformed. In addition, market data for the stock will be sent from the - server process to the client. The high level messaging flow is shown - below. + client request message will be received by the server where it will + perform business processing on the request, for example to determine if + the user has sufficient credit to purchase the stock or if the user is + even allowed to make the purchase due to existing account restrictions. + These are typically external processes as well. Usually the server + application will persist state about the request and forward it on to an + execute venue where the actual execution of the stock request is + performed. In addition, market data for the stock will be sent from the + server process to the client. The high level exchange of information is + shown below. - - - + + + + +
@@ -42,9 +45,14 @@ one based on messaging or another middleware technology. The messaging flow showing the queues and topics used is shown below. - + + + + + - + Queues are shown in red and topics in green.
@@ -52,7 +60,7 @@ Gateways represent the service operation to send a message. The client will send a stock request to the server based on the contract - defined by the IStockService interface . + defined by the IStockService interface . public interface IStockService { @@ -61,7 +69,7 @@ The server will send market data to the clients based on the contract defined by the IMarketDataService - interface. + interface. public interface IMarketDataService { @@ -78,7 +86,7 @@ created. Implementations that use messaging to communicate will be based on the Spring's NmsGateway class and will be discussed later. stub or mock implementations can be used for testing - purposes. + purposes.
@@ -113,7 +121,7 @@ Running xsd.exe on this schema will result in a class that contains - properties for each of the element names. A parital code listing of the + properties for each of the element names. A partial code listing of the TradeRequest class is shown below // This code was generated by a tool. @@ -148,7 +156,7 @@ When sending a response back to the client the type TradeResponse will be used. The schema for the - TradeResponse is shown below + TradeResponse is shown below <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.springframework.net/nms/common/2008-08-05"> @@ -202,10 +210,10 @@
- Mesage Handlers + Message Handlers When the TradeRequest message is received by - the server, it wll be handled by the class + the server, it will be handled by the class Spring.NmsQuickStart.Server.Handlers.StockAppHandler shown below @@ -236,6 +244,186 @@ } } + The stub implementations of the services, located in the namespace + Spring.NmsQuickStart.Server.Services.Stubs, will result + in always sending back a error-free trade response message. A realistic + implementation would likely have the execution venue and trading service + be remote services and the trading service could be implemented as a local + transactional service layer that uses spring's declarative transaction + management features. + + The client will receive a TradeResponse message as well as a + Hashtable of data representing the market data. The message handle for the + client is the class Spring.NmsQuickStart.Client.Handlers.StockAppHandler + and is shown below. + + public class StockAppHandler + { + + // definition of stockController omitted for brevity. + + public void Handle(Hashtable data) + { + // forward to controller to update view + stockController.UpdateMarketData(data); + } + + public void Handle(TradeResponse tradeResponse) + { + // forward to controller to update view + stockController.UpdateTrade(tradeResponse); + } + } + + What is important to note about these handlers is that they contain + no messaging API artifacts. As such you can write unit and integration + tests against these classes independent of the middleware. The missing + link between the messaging world and the objects processed by the message + handlers are message converters. Spring's messaging helper classes, i.e. + SimpleMessageListenerContainer and NmsTemplate use message converters to + pass data to the handlers and to send data via messaging for gateway + implementations +
+ +
+ Message Converters + + The implementation of IMessageConverter used is + Spring.NmsQuickStart.Common.Converters.XmlMessageConverter. + This converter adds the ability to marshal and unmarshal objects to and + from XML strings. It also uses Spring's + SimpleMessageConverter 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 + + <object name="XmlMessageConverter" type="Spring.NmsQuickStart.Common.Converters.XmlMessageConverter, Spring.NmsQuickStart.Common"> + <property name="TypeMapper" ref="TypeMapper"/> + </object> + + <object name="TypeMapper" type="Spring.NmsQuickStart.Common.Converters.TypeMapper, Spring.NmsQuickStart.Common"> + <!-- use simple configuation style --> + <property name="DefaultNamespace" value="Spring.NmsQuickStart.Common.Data"/> + <property name="DefaultAssemblyName" value="Spring.NmsQuickStart.Common"/> + </object> + + This configuration is common between the server and the + client. +
+ +
+ Messaging Infrastructure + + The implementations of the gateway interfaces inherit from Spring's + helper class NmsGatewaySupport in order to get easy + access to a NmsTemplate for sending. The implementation of the + IStockService interface is shown below + + public class NmsStockServiceGateway : NmsGatewaySupport, IStockService + { + private IDestination defaultReplyToQueue; + + public IDestination DefaultReplyToQueue + { + set { defaultReplyToQueue = value; } + } + + public void Send(TradeRequest tradeRequest) + { // post process message + NmsTemplate.ConvertAndSendWithDelegate(tradeRequest, delegate(IMessage message) + { + message.NMSReplyTo = defaultReplyToQueue; + message.NMSCorrelationID = new Guid().ToString(); + return message; + }); + } + } + + The use of an anonymous delegate allows makes it very easy to apply + any post processing logic to the converted message. + + The object definition for the + NmsStockServiceGateway is shown below along with + its dependent object definitions of NmsTemplate and the + ConnectionFactory. + + <object name="StockServiceGateway" type="Spring.NmsQuickStart.Client.Gateways.NmsStockServiceGateway, Spring.NmsQuickStart.Client"> + <property name="NmsTemplate" ref="NmsTemplate"/> + <property name="DefaultReplyToQueue"> + <object type="Apache.NMS.ActiveMQ.Commands.ActiveMQQueue, Apache.NMS.ActiveMQ"> + <constructor-arg value="APP.STOCK.JOE"/> + </object> + </property> + </object> + + <object name="NmsTemplate" type="Spring.Messaging.Nms.Core.NmsTemplate, Spring.Messaging.Nms"> + <property name="ConnectionFactory" ref="ConnectionFactory"/> + <property name="DefaultDestinationName" value="APP.STOCK.REQUEST"/> + <property name="MessageConverter" ref="XmlMessageConverter"/> + </object> + + <object id="ConnectionFactory" type="Apache.NMS.ActiveMQ.ConnectionFactory, Apache.NMS.ActiveMQ"> + <constructor-arg index="0" value="tcp://localhost:61616"/> + </object>In this example the 'raw' + Apache.NMS.ActiveMQ.ConnectionFactory connection + factory was used. It would be more efficient resource wise to use Spring's + CachingConnectionFactory wrapper class so that + connections will not be open and closed for each message send as well as + allowing for the caching of other intermediate NMS API objects such as + sessions and message producers. + + A similar configuration is used on the server to configure the class + Spring.NmsQuickStart.Server.Gateways.MarketDataServiceGateway + that implements the IMarketDataService + interface. + + Since the client is also a consumer of messages, on the topic + APP.STOCK.MARKETDATA and the queue APP.STOCK.JOE (for Trader Joe!), two + message listener containers are defined as shown below. + + <nms:listener-container connection-factory="ConnectionFactory"> + <nms:listener ref="MessageListenerAdapter" destination="APP.STOCK.JOE" /> + <nms:listener ref="MessageListenerAdapter" destination="APP.STOCK.MARKETDATA" pubsub-domain="true"/> + </nms:listener-container> + + Refer to the messages reference + docs for all the available attributes to configure the container + and also the section on registering the NMS schema + with Spring.. + + On the server we define a message listener container for the queue + APP.STOCK.REQUEST but set the concurrency property to 10 so that 10 + threads will be consuming messages from the queue. + + <nms:listener-container connection-factory="ConnectionFactory" concurrency="10"> + <nms:listener ref="MessageListenerAdapter" destination="APP.STOCK.REQUEST" /> + </nms:listener-container> +
+ +
+ Running the application + + To run both the client and server make sure that you select + 'Multiple Startup Projects' within VS.NET. The GUI has a button to make a + hardcoded trade request and show confirmation in a text box. A text area + is used to display the market data. There is a 'Get Portfolio' button that + is not implemented at the moment. A picture of the GUI after it has been + running for a while and trade has been sent and responded to is shown + below + + + + + + +
\ No newline at end of file diff --git a/doc/reference/src/quartz-quickstart.xml b/doc/reference/src/quartz-quickstart.xml index 757872c0..71f94e66 100644 --- a/doc/reference/src/quartz-quickstart.xml +++ b/doc/reference/src/quartz-quickstart.xml @@ -24,9 +24,9 @@ IJob interface represents the task you would like to execute. You either directly implement Quartz's IJob interface or a convenience base class. The - Quartz ITrigger controls when a job is executed, - for example in the wee hours of the morning every weekday (This would be - done using Quartz's CronTrigger implementation.) + Quartz Trigger controls when a job is executed, for + example in the wee hours of the morning every weekday . This would be done + using Quartz's CronTrigger 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 @@ -90,7 +90,7 @@ <object name="exampleJob" type="Spring.Scheduling.Quartz.JobDetailObject, Spring.Scheduling.Quartz"> <property name="JobType" value="Spring.Scheduling.Quartz.Example.ExampleJob, Spring.Scheduling.Quartz.Example" /> - <!-- We can inject values throgh JobDataMap --> + <!-- We can inject values through JobDataMap --> <property name="JobDataAsMap"> <dictionary> <entry key="UserName" value="Alexandre" /> @@ -103,7 +103,7 @@ JobDataAsMap, 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 - first time the trigger fires. + first time the trigger fires. We then will schedule this job to be executed on 20 second increments of every minute as shown below using Spring's @@ -174,9 +174,12 @@ </object> - Note that AdminSerivce object is configured + Note that AdminService object is configured using Spring as you would do normally, without consideration for Quartz. - The trigger associated with the jobDetail object is listed below + 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. <object id="simpleTrigger" type="Spring.Scheduling.Quartz.SimpleTriggerObject, Spring.Scheduling.Quartz"> <!-- see the example of method invoking job above --> diff --git a/doc/reference/src/scheduling.xml b/doc/reference/src/scheduling.xml index d722472d..fcff4090 100644 --- a/doc/reference/src/scheduling.xml +++ b/doc/reference/src/scheduling.xml @@ -140,7 +140,11 @@ public class ExampleJob extends QuartzJobObject { - By default, jobs will run in a concurrent fashion. + By default, jobs will run in a concurrent fashion. + + Also note that when using MethodInvokingJobDetailFactoryObject + you can't use database persistence for Jobs. See the class + documentation for additional details. diff --git a/doc/reference/src/wcf.xml b/doc/reference/src/wcf.xml index e067ac72..3dc02212 100644 --- a/doc/reference/src/wcf.xml +++ b/doc/reference/src/wcf.xml @@ -7,7 +7,7 @@ Spring's WCF support allows you to configure your WCF services via dependency injection and add additional behavior to them using - Aspect-Oriented programming (AOP). + Aspect-Oriented programming (AOP). There are two approaches in the 1.2 M1 release for configuring your services with DI which are discussed in the following sections. One @@ -26,7 +26,7 @@ the WcfQuickStart application in the examples directory. -
+
Configuring WCF services via Dependency Injection In this approach the container will creates an implementation of @@ -34,7 +34,7 @@ instance of your service type from the Spring container. This dynamic proxy is then the final service type that is hosted. -
+
Dependency Injection using dynamic proxies In this approach you develop your WCF services as you would @@ -161,10 +161,13 @@ There are not many disadvantages to this approach other than the need to specify the service name as the name of the object definition in the Spring container and to ensure that singleton=false is used in the - object definition. + object definition. You can also use + Spring.ServiceModel.Activation.ServiceHostFactory + to host your service inside IIS but should still refer to the service by + the name of the object in the Spring container.
-
+
Dependency Injection using WCF extensibility points. The second approach uses the extensibility points in WCF itself to @@ -177,18 +180,18 @@ and System.ServiceModel.Description.IServiceBehavior are used to integrate Spring directly into the instancing of WCF - services. + services. Spring's implementation of IInstanceProvider is - Spring.ServiceModel.Dispatcher.SpringInstanceProvider. + Spring.ServiceModel.Support.SpringInstanceProvider. This implementation will look for an object by type in the Spring container and retrieve an instance configured using DI. If there is more than one object of the type registered with the container than an exception will be thrown. The SpringInstanceProvider is used by a custom service behavior class, - Spring.ServiceModel.Dispatcher.SpringServiceBehavior + Spring.ServiceModel.Support.SpringServiceBehavior where it is applied to all the service endpoints. This behavior is then added to the custom service host Spring.ServiceModel.Activation.SpringServiceHost @@ -196,7 +199,7 @@ The service type is used to locate the object in the container. In your .svc file you specify the custom service host type and also the type of the service. Here is an example taken from the WcfQuickStart - application that shows the use of this approach inside IIS. + application that shows the use of this approach inside IIS. <%@ ServiceHost Language="C#" Debug="true" Service="Spring.WcfQuickStart.CalculatorService" Factory="Spring.ServiceModel.Activation.ServiceHostFactory" %> @@ -282,5 +285,9 @@ This will be shortened using a custom namespce in the 1.2 RC1 release + + The value 'serverAppCalculatorEndpoint' refers to the name of an + enpoints in the <client> section of the standard WCF configuration + inside of App.config.
\ No newline at end of file diff --git a/doc/reference/src/xsd-configuration.xml b/doc/reference/src/xsd-configuration.xml index ae35b933..78f1624b 100644 --- a/doc/reference/src/xsd-configuration.xml +++ b/doc/reference/src/xsd-configuration.xml @@ -258,7 +258,7 @@ </configuration>
-
+
The <literal>nms</literal> messaging schema The nms tags are for use when you want to