diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/IStockServiceGateway.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/IStockService.cs similarity index 91% rename from examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/IStockServiceGateway.cs rename to examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/IStockService.cs index e988ed5e..816f3c7d 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/IStockServiceGateway.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/IStockService.cs @@ -24,7 +24,7 @@ using Spring.NmsQuickStart.Common.Data; namespace Spring.NmsQuickStart.Client.Gateways { - public interface IStockServiceGateway + public interface IStockService { void Send(TradeRequest tradeRequest); } diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/NmsStockServiceGateway.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/NmsStockServiceGateway.cs index ebeaf821..b1d3c4fa 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/NmsStockServiceGateway.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Gateways/NmsStockServiceGateway.cs @@ -8,7 +8,7 @@ using Spring.Objects.Factory; namespace Spring.NmsQuickStart.Client.Gateways { - public class NmsStockServiceGateway : NmsGatewaySupport, IStockServiceGateway, IInitializingObject + public class NmsStockServiceGateway : NmsGatewaySupport, IStockService, IInitializingObject { private IDestination defaultReplyToQueue; diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Handlers/StockAppHandler.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Handlers/StockAppHandler.cs index efd32623..6fac7a06 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Handlers/StockAppHandler.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Handlers/StockAppHandler.cs @@ -34,10 +34,10 @@ namespace Spring.NmsQuickStart.Client.Handlers } - public void Handle(Trade trade) + public void Handle(TradeResponse tradeResponse) { - log.Info(string.Format("Received trade. Ticker = {0}, Price = {1}", trade.Ticker, trade.Price)); - stockController.UpdateTrade(trade); + log.Info(string.Format("Received trade resonse. Ticker = {0}, Price = {1}", tradeResponse.Ticker, tradeResponse.Price)); + stockController.UpdateTrade(tradeResponse); } public void Handle(object catchAllObject) diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Spring.NmsQuickStart.Client.csproj b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Spring.NmsQuickStart.Client.csproj index f4f47d6c..521f352b 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Spring.NmsQuickStart.Client.csproj +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/Spring.NmsQuickStart.Client.csproj @@ -48,7 +48,7 @@ - + diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/UI/StockController.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/UI/StockController.cs index 57cf3507..e91b978d 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/UI/StockController.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/UI/StockController.cs @@ -10,7 +10,7 @@ namespace Spring.NmsQuickStart.Client.UI { private StockForm stockForm; - private IStockServiceGateway stockServiceGateway; + private IStockService stockService; @@ -20,10 +20,10 @@ namespace Spring.NmsQuickStart.Client.UI set { stockForm = value; } } - public IStockServiceGateway StockServiceGateway + public IStockService StockService { - get { return stockServiceGateway; } - set { stockServiceGateway = value; } + get { return stockService; } + set { stockService = value; } } public void SendTradeRequest() @@ -37,7 +37,7 @@ namespace Spring.NmsQuickStart.Client.UI tradeRequest.Ticker = "CSCO"; tradeRequest.UserName = "Joe Trader"; - stockServiceGateway.Send(tradeRequest); + stockService.Send(tradeRequest); } @@ -46,9 +46,9 @@ namespace Spring.NmsQuickStart.Client.UI stockForm.UpdateMarketData(marketDataDict); } - public void UpdateTrade(Trade trade) + public void UpdateTrade(TradeResponse tradeResponse) { - stockForm.UpdateTrade(trade); + stockForm.UpdateTrade(tradeResponse); } } diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/UI/StockForm.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/UI/StockForm.cs index 42daf5d2..cced9c16 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/UI/StockForm.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Client/UI/StockForm.cs @@ -38,7 +38,7 @@ namespace Spring.NmsQuickStart.Client.UI log.Info("Sent trade request."); } - public void UpdateTrade(Trade trade) + public void UpdateTrade(TradeResponse trade) { Invoke(new MethodInvoker( delegate diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeRequest.xsx b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeRequest.xsx new file mode 100644 index 00000000..ff71343b --- /dev/null +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeRequest.xsx @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/Trade.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.cs similarity index 73% rename from examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/Trade.cs rename to examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.cs index ee8568f1..7fb013c6 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/Trade.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.cs @@ -22,16 +22,20 @@ namespace Spring.NmsQuickStart.Common.Data { [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.springframework.net/nms/common/2008-08-05")] [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.springframework.net/nms/common/2008-08-05", IsNullable=false)] - public partial class Trade { + public partial class TradeResponse { private string tickerField; - private string quantityField; + private long quantityField; private decimal priceField; private string orderTypeField; + private bool errorField; + + private string errorMessageField; + /// public string Ticker { get { @@ -43,8 +47,7 @@ namespace Spring.NmsQuickStart.Common.Data { } /// - [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] - public string Quantity { + public long Quantity { get { return this.quantityField; } @@ -72,5 +75,25 @@ namespace Spring.NmsQuickStart.Common.Data { this.orderTypeField = value; } } + + /// + public bool Error { + get { + return this.errorField; + } + set { + this.errorField = value; + } + } + + /// + public string ErrorMessage { + get { + return this.errorMessageField; + } + set { + this.errorMessageField = value; + } + } } } diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/Trade.xsd b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.xsd similarity index 68% rename from examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/Trade.xsd rename to examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.xsd index 4b486191..272c6826 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/Trade.xsd +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.xsd @@ -1,12 +1,14 @@ - + - + + + diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.xsx b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.xsx new file mode 100644 index 00000000..ff71343b --- /dev/null +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/TradeResponse.xsx @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/generate-classes.bat b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/generate-classes.bat index 3a327f9d..2a9c297b 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/generate-classes.bat +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Data/generate-classes.bat @@ -1,2 +1,2 @@ -xsd.exe -c -l:c# -n:Spring.NmsQuickStart.Common.Data Trade.xsd +xsd.exe -c -l:c# -n:Spring.NmsQuickStart.Common.Data TradeResponse.xsd xsd.exe -c -l:c# -n:Spring.NmsQuickStart.Common.Data TradeRequest.xsd \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Spring.NmsQuickStart.Common.csproj b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Spring.NmsQuickStart.Common.csproj index 7f01d947..03b0b6b9 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Spring.NmsQuickStart.Common.csproj +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Common/Spring.NmsQuickStart.Common.csproj @@ -44,8 +44,8 @@ - - Trade.xsd + + TradeResponse.xsd TradeRequest.xsd @@ -71,12 +71,18 @@ - + Designer + + TradeResponse.xsd + Designer + + TradeRequest.xsd + + + + + + + diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/IMarketDataService.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/IMarketDataService.cs new file mode 100644 index 00000000..3b4d4e04 --- /dev/null +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/IMarketDataService.cs @@ -0,0 +1,7 @@ +namespace Spring.NmsQuickStart.Server.Gateways +{ + public interface IMarketDataService + { + void SendMarketData(); + } +} \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/MarketDataGateway.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/MarketDataServiceGateway.cs similarity index 87% rename from examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/MarketDataGateway.cs rename to examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/MarketDataServiceGateway.cs index b8baf871..b3645eef 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/MarketDataGateway.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Gateways/MarketDataServiceGateway.cs @@ -6,15 +6,15 @@ using Spring.Messaging.Nms.Core; namespace Spring.NmsQuickStart.Server.Gateways { - public class MarketDataGateway : NmsGatewaySupport + public class MarketDataServiceGateway : NmsGatewaySupport, IMarketDataService { - private static readonly ILog log = LogManager.GetLogger(typeof (MarketDataGateway)); + private static readonly ILog log = LogManager.GetLogger(typeof (MarketDataServiceGateway)); private readonly Random random; private int sleepTimeInSeconds = 2; - public MarketDataGateway() + public MarketDataServiceGateway() { random = new Random(); } diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Handlers/LoggingExceptionListener.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Handlers/LoggingExceptionListener.cs new file mode 100644 index 00000000..e9e11d90 --- /dev/null +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Handlers/LoggingExceptionListener.cs @@ -0,0 +1,26 @@ + + +using System; +using Common.Logging; +using Spring.Messaging.Nms.Core; + +namespace Spring.NmsQuickStart.Server.Handlers +{ + public class LoggingExceptionListener : IExceptionListener + { + #region Logging + + private readonly ILog logger = LogManager.GetLogger(typeof(LoggingExceptionListener)); + + #endregion + + /// + /// Called when there is an exception in message processing. + /// + /// The exception. + public void OnException(Exception exception) + { + logger.Info("********* Caught exception *************", exception); + } + } +} \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Handlers/StockAppHandler.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Handlers/StockAppHandler.cs index 828e16a0..7d37cc9a 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Handlers/StockAppHandler.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Handlers/StockAppHandler.cs @@ -1,7 +1,9 @@ +using System.Collections; using Common.Logging; using Spring.NmsQuickStart.Common.Data; +using Spring.NmsQuickStart.Server.Services; namespace Spring.NmsQuickStart.Server.Handlers { @@ -10,11 +12,28 @@ namespace Spring.NmsQuickStart.Server.Handlers private static readonly ILog log = LogManager.GetLogger(typeof(StockAppHandler)); + private IExecutionVenueService executionVenueService; - public Trade Handle(TradeRequest tradeRequest) + private ICreditCheckService creditCheckService; + + private ITradingService tradingService; + + public TradeResponse Handle(TradeRequest tradeRequest) { - log.Info("Received TradeRequest"); - return new Trade(); + TradeResponse tradeResponse; + IList errors = new ArrayList(); + if (creditCheckService.CanExecute(tradeRequest, errors)) + { + tradeResponse = executionVenueService.ExecuteTradeRequest(tradeRequest); + tradingService.ProcessTrade(tradeRequest, tradeResponse); + } + else + { + tradeResponse = new TradeResponse(); + tradeResponse.Error = true; + tradeResponse.ErrorMessage = errors[0].ToString(); + } + return tradeResponse; } } } \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Program.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Program.cs index fbc00233..c27df0c8 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Program.cs +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Program.cs @@ -14,11 +14,11 @@ namespace Spring.NmsQuickStart.Server // Using Spring's IoC container ContextRegistry.GetContext(); // Force Spring to load configuration Console.Out.WriteLine("Server listening..."); - MarketDataGateway marketDataGateway = - ContextRegistry.GetContext().GetObject("MarketDataGateway") as MarketDataGateway; - ThreadStart job = new ThreadStart(marketDataGateway.SendMarketData); + IMarketDataService marketDataService = + ContextRegistry.GetContext().GetObject("MarketDataGateway") as MarketDataServiceGateway; + ThreadStart job = new ThreadStart(marketDataService.SendMarketData); Thread thread = new Thread(job); - thread.Start(); + //thread.Start(); Console.Out.WriteLine("--- Press to quit ---"); Console.ReadLine(); } diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/ICreditCheckService.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/ICreditCheckService.cs new file mode 100644 index 00000000..a8b007d4 --- /dev/null +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/ICreditCheckService.cs @@ -0,0 +1,33 @@ + + +#region License + +/* + * 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. + */ + +#endregion + +using System.Collections; +using Spring.NmsQuickStart.Common.Data; + +namespace Spring.NmsQuickStart.Server.Services +{ + + public interface ICreditCheckService + { + bool CanExecute(TradeRequest tradeRequest, IList errors); + } +} \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/IExecutionVenueService.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/IExecutionVenueService.cs new file mode 100644 index 00000000..71519efb --- /dev/null +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/IExecutionVenueService.cs @@ -0,0 +1,31 @@ + + +#region License + +/* + * 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. + */ + +#endregion + +using Spring.NmsQuickStart.Common.Data; + +namespace Spring.NmsQuickStart.Server.Services +{ + public interface IExecutionVenueService + { + TradeResponse ExecuteTradeRequest(TradeRequest request); + } +} \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/ITradingService.cs b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/ITradingService.cs new file mode 100644 index 00000000..6cfb914a --- /dev/null +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Services/ITradingService.cs @@ -0,0 +1,31 @@ + + +#region License + +/* + * 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. + */ + +#endregion + +using Spring.NmsQuickStart.Common.Data; + +namespace Spring.NmsQuickStart.Server.Services +{ + public interface ITradingService + { + void ProcessTrade(TradeRequest request, TradeResponse response); + } +} \ No newline at end of file diff --git a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Spring.NmsQuickStart.Server.csproj b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Spring.NmsQuickStart.Server.csproj index c4d1fc6e..f31d3782 100644 --- a/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Spring.NmsQuickStart.Server.csproj +++ b/examples/Spring/Spring.NmsQuickStart/src/Spring/Spring.NmsQuickStart.Server/Spring.NmsQuickStart.Server.csproj @@ -45,10 +45,15 @@ - + + + + + +