Thursday 13 July 2017

Bond Trading System Architektur


Trading Systems: Entwerfen Ihres Systems - Teil 1 13 Der vorangehende Abschnitt dieses Tutorials befasste sich mit den Elementen, aus denen sich ein Handelssystem zusammensetzte, und erörterten die Vor - und Nachteile der Verwendung eines solchen Systems in einem Live-Trading-Umfeld. In diesem Abschnitt bauen wir dieses Wissen auf, indem wir untersuchen, welche Märkte für den Systemhandel besonders gut geeignet sind. Wir werden dann einen tieferen Einblick in die verschiedenen Gattungen der Handelssysteme nehmen. Handel auf verschiedenen Märkten Aktienmärkte Der Aktienmarkt ist wahrscheinlich der häufigste Markt für den Handel, vor allem bei Anfängern. In dieser Arena, große Spieler wie Warren Buffett und Merrill Lynch dominieren, und traditionelle Wert und Wachstum investierende Strategien sind bei weitem die häufigste. Dennoch haben viele Institutionen erheblich in die Konzeption, Entwicklung und Umsetzung von Handelssystemen investiert. Einzelne Investoren treten diesem Trend, wenn auch langsam, bei. Hier sind einige wesentliche Faktoren zu berücksichtigen, wenn Handelssysteme in Aktienmärkten: 13 Die große Menge an verfügbaren Aktien ermöglicht es Händlern, Systeme auf vielen verschiedenen Arten von Aktien - alles von extrem volatilen over-the-counter (OTC) Aktien zu testen Nicht-flüchtigen blauen Chips. Die Wirksamkeit der Handelssysteme kann durch die geringe Liquidität einiger Aktien, insbesondere OTC - und Pink Sheet-Probleme, begrenzt werden. Provisionen können in Gewinne von erfolgreichen Trades zu essen, und können Verluste zu erhöhen. OTC - und Pink Sheet Equities verursachen oft zusätzliche Provisionsgebühren. Die wichtigsten Handelssysteme sind diejenigen, die Wert suchen - das heißt, Systeme, die verschiedene Parameter verwenden, um festzustellen, ob ein Wert unterbewertet ist im Vergleich zu seiner bisherigen Leistung, seine Kollegen oder den Markt im Allgemeinen. Devisenmarkt Der Devisenmarkt oder Forex. Ist der größte und liquideste Markt der Welt. Die Weltregierungen, Banken und andere große Institutionen Handel Trillionen von Dollar auf dem Forex-Markt jeden Tag. Die Mehrheit der institutionellen Händler auf der Forex beruht auf Handelssystemen. Das gleiche gilt für Einzelpersonen auf dem Forex, aber einige Handel auf Wirtschaftsberichte oder Zinsauszahlungen basiert. Hier sind einige wichtige Faktoren im Auge zu behalten, wenn Handelssysteme im Forex-Markt: Die Liquidität in diesem Markt - aufgrund der riesigen Menge - Macht Handelssysteme genauer und effektiver. Es gibt keine Provisionen in diesem Markt, nur Spreads. Daher ist es viel einfacher, viele Transaktionen ohne Erhöhung der Kosten zu machen. Im Vergleich zur Menge der verfügbaren Aktien oder Rohstoffe ist die Anzahl der Währungen zum Handel begrenzt. Aufgrund der Verfügbarkeit von exotischen Währungspaaren - also Währungen aus kleineren Ländern - ist das Spektrum der Volatilität nicht unbedingt begrenzt. Die wichtigsten Handelssysteme in Forex verwendet werden, die folgen Trends (ein beliebtes Sprichwort auf dem Markt ist der Trend ist Ihr Freund), oder Systeme, die kaufen oder verkaufen auf Breakouts. Dies liegt daran, wirtschaftliche Indikatoren oft große Preisbewegungen auf einmal verursachen. Futures Equity, Forex und Rohstoffmärkte alle bieten Futures-Handel. Dies ist ein beliebtes Fahrzeug für den Systemhandel aufgrund der höheren Menge an Leverage zur Verfügung und die erhöhte Liquidität und Volatilität. Allerdings können diese Faktoren schneiden in beide Richtungen: sie können entweder verstärken Sie Ihre Gewinne oder verstärken Sie Ihre Verluste. Aus diesem Grund ist der Einsatz von Futures in der Regel für fortgeschrittene individuelle und institutionelle Systemhändler vorbehalten. Dies liegt daran, Trading-Systeme in der Lage, Kapitalisierung auf dem Futures-Markt erfordern viel mehr Anpassung, Verwendung fortgeschrittener Indikatoren und viel länger dauern, um zu entwickeln. Also, Welches Bestes ist es bis zu den einzelnen Investoren zu entscheiden, welcher Markt am besten für den Systemhandel geeignet ist - jeder hat seine eigenen Vor-und Nachteile. Die meisten Menschen sind mehr vertraut mit den Aktienmärkten, und diese Vertrautheit macht die Entwicklung eines Handelssystems einfacher. Allerdings ist Forex häufig als die überlegene Plattform, um Handelssysteme laufen - vor allem unter erfahrenen Händlern. Darüber hinaus, wenn ein Händler beschließt, auf erhöhte Hebelwirkung und Volatilität zu nutzen, ist die Futures-Alternative immer offen. Letztlich liegt die Wahl in den Händen des Systementwicklers. Typen von Trading-Systemen Trend-Following Systems Die häufigste Methode des System-Trading ist die Trend-folgendes System. In seiner grundlegendsten Form, wartet dieses System einfach für eine signifikante Preisbewegung, dann kauft oder verkauft in diese Richtung. Diese Art von Systembanken auf die Hoffnung, dass diese Preisbewegungen den Trend beibehalten werden. Moving Average Systems Häufig in der technischen Analyse verwendet. Ein gleitender Durchschnitt ist ein Indikator, der einfach den Durchschnittspreis einer Aktie über einen bestimmten Zeitraum anzeigt. Das Wesen der Trends wird aus dieser Messung abgeleitet. Der häufigste Weg, um Ein-und Ausfahrt zu bestimmen, ist ein Crossover. Die Logik dahinter ist einfach: Ein neuer Trend wird festgestellt, wenn der Preis unter oder über dem historischen Durchschnittspreis liegt (Trend). Hier ist ein Diagramm, das sowohl den Preis (blaue Linie) als auch die 20-Tage-MA (rote Linie) von IBM darstellt: Breakout Systems Das grundlegende Konzept hinter dieser Art von System ist ähnlich dem eines gleitenden Durchschnittssystems. Die Idee ist, dass, wenn ein neues hoch oder niedrig ist, die Preisbewegung höchstwahrscheinlich in Richtung des Ausbruchs fortsetzen wird. Ein Indikator, der bei der Bestimmung von Ausbrüchen verwendet werden kann, ist ein einfaches Bollinger-Band-Overlay. Bollinger Bands zeigen Mittelwerte von hohen und niedrigen Preisen, und Breakouts auftreten, wenn der Preis die Kanten der Bands. Hier ist ein Diagramm, das Preis (blaue Linie) und Bollinger Bands (graue Linien) von Microsoft: Nachteile von Trendfolgesystemen: Empirische Entscheidungsfindung erforderlich - Bei der Bestimmung von Trends gibt es immer ein empirisches Element zu beachten: die Dauer von Der historische Trend. Zum Beispiel könnte der gleitende Durchschnitt für die letzten 20 Tage oder für die letzten fünf Jahre sein, so muss der Entwickler bestimmen, welche am besten für das System ist. Weitere Faktoren, die zu bestimmen sind, sind die durchschnittlichen Höhen und Tiefs in Breakout-Systemen. Lagging Nature - Gleitende Mittelwerte und Breakout-Systeme werden immer rückläufig sein. Mit anderen Worten, sie können nie den genauen oberen oder unteren Rand eines Trends. Dies führt zwangsläufig zu einem Verlust der potenziellen Gewinne, die manchmal erheblich sein kann. Whipsaw Effect - Unter den Marktkräften, die für den Erfolg der Trendfolgesysteme schädlich sind, ist dies einer der häufigsten. Der Peitscheneffekt tritt auf, wenn der gleitende Durchschnitt ein falsches Signal erzeugt, dh wenn der Mittelwert nur in den Bereich fällt, kehrt die Richtung plötzlich um. Dies kann zu massiven Verlusten führen, sofern nicht wirksame Stop-Loss - und Risikomanagementtechniken eingesetzt werden. Sideways Markets - Trendfolgesysteme sind naturgemäß in der Lage, nur in Märkten Geld zu verdienen, die tatsächlich Trend treiben. Aber auch die Märkte bewegen sich seitwärts. Innerhalb eines bestimmten Bereichs für einen längeren Zeitraum. Extreme Volatilität kann auftreten - Gelegentlich können Trendfolgesysteme eine extreme Volatilität aufweisen, aber der Trader muss mit seinem System bleiben. Die Unfähigkeit, dies zu tun, wird zu einem versicherten Ausfall führen. Countertrend Systems Grundsätzlich ist das Ziel mit dem countertrend-System, auf dem niedrigsten Tief zu kaufen und an der höchsten Höhe zu verkaufen. Der Hauptunterschied zwischen diesem und dem Trendfolgesystem besteht darin, dass das Gegenströmungssystem nicht selbstkorrigiert wird. Mit anderen Worten, es gibt keine festgelegte Zeit, um Positionen zu verlassen, und dies ergibt ein unbegrenztes Abwärtspotenzial. Arten von Countertrend-Systemen Viele verschiedene Arten von Systemen werden als Countertrend-Systeme betrachtet. Die Idee hier ist zu kaufen, wenn Schwung in eine Richtung beginnt zu verblassen. Dies wird am häufigsten mit Oszillatoren berechnet. Zum Beispiel kann ein Signal erzeugt werden, wenn Stochastik oder andere relative Stärkeindikatoren unter bestimmte Punkte fallen. Es gibt andere Arten von Countertrend Handelssysteme, aber alle von ihnen teilen das gleiche grundlegende Ziel - zu kaufen niedrig und hoch verkaufen. Nachteile von Countertrend Folgende Systeme: E mpirische Entscheidungsfindung erforderlich - Einer der Faktoren, über die der Systementwickler entscheiden muss, sind die Punkte, an denen die relativen Stärkeindikatoren verblassen. Extreme Volatilität kann auftreten - Diese Systeme können auch eine extreme Volatilität aufweisen, und eine Unfähigkeit, mit dem System trotz dieser Volatilität zu bleiben, wird zu einem gesicherten Ausfall führen. Unlimited Downside - Wie bereits erwähnt, gibt es unbegrenztes Downside-Potential, da das System nicht selbstkorrigiert (es gibt keine eingestellte Zeit, um Positionen zu verlassen). Fazit Die wichtigsten Märkte, für die Handelssysteme geeignet sind, sind die Aktien-, Devisen - und Futures-Märkte. Jeder dieser Märkte hat seine Vor - und Nachteile. Die beiden wichtigsten Gattungen der Handelssysteme sind die Trendfolger und die Gegen-Trendsysteme. Trotz ihrer Unterschiede bedürfen beide Arten von Systemen in ihren Entwicklungsstadien einer empirischen Entscheidungsfindung seitens des Entwicklers. Auch diese Systeme unterliegen extremer Volatilität und dies kann verlangen, einige Ausdauer - es ist wichtig, dass der System-Trader mit seinem System während dieser Zeiten bleiben. In der folgenden Tranche nehmen Sie einen genaueren Blick auf, wie man ein Handelssystem entwerfen und etwas von der Software sprechen, die Systemhändler verwenden, um ihr Leben zu erleichtern. Trading Systems: Entwerfen Ihres Systems - Teil 2Messaging Patterns 187 Integration Patterns in der Praxis 187 Fallstudie: Bond Trading System (von Jonathan Simon) Es ist leicht, sich von einer großen Sammlung von Mustern oder einer Mustersprache zu distanzieren. Muster sind die Abstraktion einer Idee in einer wiederverwendbaren Form. Oft macht die sehr generische Natur der Muster, die sie so nützlich macht auch sie schwer zu begreifen. Manchmal ist die beste Sache, um zu verstehen, Muster ist eine reale Welt Beispiel. Nicht ein erfundenes Szenario, was passieren könnte, sondern was tatsächlich passiert und was passieren wird. Dieses Kapitel verwendet Muster, um Probleme mit einem Ermittlungsprozess zu lösen. Das System, das wir diskutieren, ist ein Anleihehandelssystem, mit dem ich zwei Jahre lang von der ersten Planung bis zur Fertigung gearbeitet habe. Wir untersuchen Szenarien und Probleme, die angetroffen wurden und wie man sie mit Mustern lösen kann. Dies beinhaltet den Entscheidungsprozess der Auswahl eines Musters sowie die Kombination und Anpassung von Mustern an die Bedürfnisse des Systems. Und das alles unter Berücksichtigung der Kräfte, die in realen Systemen einschließlich Geschäftsanforderungen, Kundenentscheidungen, architektonische und technische Anforderungen, sowie Legacy-System-Integration. Die Absicht dieses Ansatzes besteht darin, ein klareres Verständnis der Muster selbst durch praktische Anwendung zu schaffen. Aufbau eines Systems Eine große Investmentbank der Wall Street setzt sich für die Schaffung eines Anleihepreissystems ein, um den Workflow ihrer Anleihenhandelsplattform zu rationalisieren. Derzeit müssen die Anleihenhändler die Preise für eine große Anzahl von Anleihen an mehrere verschiedene Handelsplätze senden, jeweils mit einer eigenen Benutzeroberfläche. Das Ziel des Systems ist die Minimierung der Minutien der Preisbildung aller ihrer Anleihen kombiniert mit fortschrittlichen analytischen Funktionalität spezifisch für den Anleihemarkt in einer einzigen gekapselte Benutzeroberfläche. Das bedeutet Integration und Kommunikation mit mehreren Komponenten über verschiedene Kommunikationsprotokolle. Der High Level Flow des Systems sieht so aus: Zuerst kommen Marktdaten ins System. Marktdaten sind Daten über den Preis und andere Eigenschaften der Anleihe, die repräsentieren, was die Leute bereit sind, die Anleihe für den freien Markt zu kaufen und zu verkaufen. Die Marktdaten werden sofort an die Analytik-Engine gesendet, die die Daten verändert. Analytics bezieht sich auf mathematische Funktionen für Finanzanwendungen, die die Preise und andere Attribute von Anleihen verändern. Dies sind generische Funktionen, die Eingangsvariablen verwenden, um die Ergebnisse der Funktion an eine bestimmte Bindung anzupassen. Die Client-Anwendung, die auf jedem Trader-Desktop ausgeführt wird konfigurieren die Analytics-Engine auf einer pro Trader-Basis, die Kontrolle der Besonderheiten der Analytics für jede Bindung der Händler ist Preisgestaltung. Sobald die Analytik auf die Marktdaten angewendet wird, werden die geänderten Daten an verschiedene Handelsplätze verschickt, in denen Händler von anderen Firmen die Anleihen kaufen oder verkaufen können. Architektur mit Patterns Mit diesem Überblick über den Workflow des Systems können wir auf einige der architektonischen Probleme eingehen, denen wir während des Designprozesses begegnen. Werfen wir einen Blick auf was wir bis jetzt wissen. Händler benötigen eine sehr ansprechende Anwendung auf Windows NT - und Solaris-Workstations. Daher haben wir uns entschlossen, die Client-Anwendung als Java-Dick-Client zu implementieren, weil es unabhängig von seiner Plattform ist und schnell auf User-Input - und Marktdaten reagieren kann. Auf der Serverseite sind wir erben Legacy-C-Komponenten, die unser System nutzen wird. Die Marktdatenkomponenten kommunizieren mit der TIB-Messaging-Infrastruktur. Wir erben die folgenden Komponenten: Market Data Price Feed Server. Publiziert eingehende Marktdaten an die TIB. Analytics Engine. Führt Analysen zu eingehenden Marktdaten durch und überträgt die geänderten Marktdaten an die TIB. Beitragsserver. Führt alle Kommunikation mit Handelsplätzen durch. Die Handelsplätze sind Drittkomponenten, die nicht von der Bank kontrolliert werden. Legacy Market Data Subsystem Legacy Contribution Subsystem Wir müssen entscheiden, wie die einzelnen Subsysteme (Java dicken Client, Marktdaten und Beitrag) zu kommunizieren. Wir könnten den dicken Client direkt mit den Legacy-Servern kommunizieren, aber das würde zu viel Business-Logik auf dem Client erfordern. Stattdessen bauen Sie gut ein Paar Java-Gateways, um mit den Legacy-Servern zu kommunizieren. Das Pricing Gateway für Marktdaten ist ein Contribution Gateway zum Senden von Preisen an Handelsplätze. Dies wird eine gute Kapselung der Geschäftslogik in Bezug auf diese Bereiche zu erreichen. Die aktuellen Komponenten im System sind unten dargestellt. Die Verbindungen, die als gekennzeichnet sind. Zeigen, dass wir noch nicht sicher sind, wie einige der Komponenten kommunizieren werden. Das System und seine Komponenten Die erste Frage der Kommunikation ist, wie der Java-Dick-Client und die beiden Java-Server-Komponenten zu integrieren, um Daten auszutauschen. Lets Blick auf die vier Integrationsarten, die in diesem Buch vorgeschlagen werden: File Transfer. Gemeinsame Datenbank. Remoteprozeduraufruf. Und Messaging. Wir können Shared Database sofort ausschließen, weil wir eine Schicht der Abstraktion zwischen dem Client und der Datenbank erstellen möchten und keinen Datenbankzugriffscode im Client haben möchten. File Transfer kann ähnlich ausgeschlossen werden, da minimale Latenzzeiten erforderlich sind, um sicherzustellen, dass aktuelle Preise an die Handelsplätze verschickt werden. So haben Sie die Wahl zwischen Remote Procedure Invocation oder Messaging. Die Java-Plattform bietet integrierte Unterstützung für Remote Procedure Invocation und Messaging. RPC-Stil Integration kann mit Remote Method Invocation (RMI), CORBA oder Enterprise Java Beans (EJB) erreicht werden. Der Java Messaging Service (JMS) ist die gemeinsame API für die Integration von Messaging-Stilen. So sind beide Integrationsstile in Java einfach zu implementieren. Also, die besser für dieses Projekt arbeiten, Remote Procedure Invocation oder Messaging. Es gibt nur eine Instanz des Pricing Gateways und eine Instanz des Contribution Gateways im System, aber meistens verbinden sich viele Thick Clients mit diesen Services (eine für jeden Bondhändler, der zu einem bestimmten Zeitpunkt eingeloggt ist). Des Weiteren wäre die Bank ein generisches Preissystem, das in anderen Anwendungen genutzt werden kann. Neben einer unbekannten Anzahl von Think-Clients kann es eine unbekannte Anzahl anderer Anwendungen geben, die die aus den Gateways kommenden Preisdaten verwenden. Ein Thick-Client (oder eine andere Anwendung, die die Kalkulationsdaten verwendet) kann RPC ziemlich einfach verwenden, um Anrufe an die Gateways zu tätigen, um Preisdaten zu erhalten und die Verarbeitung aufzurufen. Allerdings werden die Preisdaten ständig veröffentlicht, und bestimmte Kunden sind nur an bestimmten Daten interessiert, so dass die relevanten Daten an die richtigen Kunden in einer fristgerechten Weise könnte schwierig sein. Die Clients könnten die Gateways abfragen, aber das wird eine Menge Overhead verursachen. Es wäre besser für die Gateways, die Daten den Kunden zur Verfügung zu stellen, sobald sie verfügbar sind. Dies erfordert jedoch jedes Gateway, um zu verfolgen, welche Clients momentan aktiv sind, und welche bestimmte Daten dann wünschen, wenn ein neues Datenelement verfügbar wird (was mehrmals pro Sekunde passieren wird), muss das Gateway machen Ein RPC an jeden interessierten Client, um die Daten an den Client zu übergeben. Idealerweise sollten alle Clients gleichzeitig benachrichtigt werden, so dass jeder RPC in einem eigenen gleichzeitigen Thread erstellt werden muss. Dies kann funktionieren, wird aber sehr schnell sehr kompliziert. Messaging vereinfacht dieses Problem erheblich. Mit Messaging. Können wir für die verschiedenen Arten von Preisdaten separate Kanäle definieren. Wenn dann ein Gateway ein neues Datenpaket erhält, fügt es eine Nachricht hinzu, die diese Daten dem Publish-Subscribe-Kanal für diesen Datentyp enthält. Unterdessen hören alle Klienten, die an einer bestimmten Art von Daten interessiert sind, auf dem Kanal für diesen Typ. Auf diese Weise können die Gateways problemlos neue Daten an jeden senden, der interessiert ist, ohne zu wissen, wie viele Höreranwendungen es gibt oder was sie sind. Die Clients müssen weiterhin in der Lage sein, Verhalten in den Gateways aufzurufen. Da es immer nur zwei Gateways gibt und der Client wahrscheinlich blockieren kann, während die Methode synchron aufgerufen wird, können diese Client-to-Gateway-Aufrufe ziemlich einfach mit RPC implementiert werden. Da wir jedoch bereits Messaging für die Gateway-to-Client-Kommunikation verwenden, sind Nachrichten wahrscheinlich genauso gut für die Implementierung von Client-zu-Gateway-Kommunikation. Daher wird die gesamte Kommunikation zwischen den Gateways und den Clients durch Messaging erreicht. Da alle Komponenten in Java geschrieben sind, bietet JMS eine einfache Auswahl für das Messaging-System. Dies schafft effektiv einen Message Bus oder eine Architektur, die es möglich macht, dass zukünftige Systeme mit dem aktuellen System mit wenig oder keiner Änderung an der Messaging-Infrastruktur integriert werden können. Auf diese Weise kann die Geschäftsfunktionalität der Anwendung leicht von anderen Anwendungen genutzt werden, die die Bank entwickelt. Java-Komponenten Die Kommunikation mit JMS JMS ist einfach eine Spezifikation und wir müssen uns für ein JMS-konformes Messaging-System entscheiden. Wir beschlossen, IBM MQSeries JMS zu verwenden, da die Bank ein IBM-Shop mit WebSphere-Anwendungsservern und vielen anderen IBM Produkten ist. Daher verwenden wir MQSeries, da wir bereits über eine Support-Infrastruktur verfügen und eine Site-Lizenz des Produkts besitzen. Die nächste Frage ist, wie das MQSeries-Messaging-System mit dem eigenständigen C-Contribution-Server und den TIBCO-basierten Market Data - und Analytics Engine-Servern verbunden wird. Wir brauchen eine Möglichkeit für die MQSeries-Konsumenten, Zugriff auf die TIB-Nachrichten zu haben. Aber wie könnten wir das Message Translator-Muster verwenden, um TIB-Nachrichten in MQSeries-Nachrichten zu übersetzen. Obwohl der C-Client für MQSeries als Message Translator dient. Mit es würde JMS Server Unabhängigkeit zu opfern. Und obwohl TIBCO eine Java API hat, haben der Kunde Architekt und Manager sie abgelehnt. Als Ergebnis muss der Message Translator Ansatz aufgegeben werden. Die Brücke vom TIB-Server zum MQSeries-Server benötigt die Kommunikation zwischen C und Java. Wir könnten CORBA verwenden, aber dann was über das Messaging Ein genauerer Blick auf das Message Translator-Muster zeigt, dass es mit dem Channel-Adapter in seiner Verwendung von Kommunikationsprotokollen verwandt ist. Das Herzstück eines Channel-Adapters besteht darin, Nicht-Messaging-Systeme mit Messaging-Systemen zu verbinden. Ein Paar von Kanaladaptern, die zwei Messaging-Systeme verbindet, ist eine Messaging Bridge. Der Zweck einer Messaging Bridge besteht darin, Nachrichten von einem Messagingsystem zu einem anderen zu übertragen. Genau das machen wir mit der zusätzlichen Komplexität der intra-sprachigen Java-to-C-Kommunikation. Wir können die Cross Language Messaging Bridge mit einer Kombination aus Channel Adapter und CORBA implementieren. Wir werden zwei leichte Channel-Adapter-Server aufbauen, einen in C, der die Kommunikation mit dem TIB verwaltet, und einen in Java, der die Kommunikation mit JMS verwaltet. Diese beiden Kanaladapter. Die Message Endpoint selbst sind, kommunizieren miteinander über CORBA. Wie unsere Wahl für MQSeries, verwenden wir CORBA anstatt JNI, da es ein Unternehmensstandard ist. Die Messaging-Bridge implementiert die effektiv simulierte Nachrichtenübersetzung zwischen scheinbar inkompatiblen Messaging-Systemen und verschiedenen Sprachen. Message Translator using Channel Adapters Das nächste Diagramm zeigt das aktuelle Systemdesign einschließlich der Gateways und anderer Komponenten. Dies ist ein gutes Beispiel für eine Musteranwendung. Wir kombinierten zwei Kanaladapter mit einem Nicht-Messaging-Protokoll, um das Message Translator-Muster zu implementieren, wobei effektiv ein Muster verwendet wurde, um ein anderes Muster zu implementieren. Darüber hinaus haben wir den Channel-Adapter-Kontext geändert, um zwei Messaging-Systeme mit einem Nicht-Messaging-Cross-Language-Übersetzungsprotokoll zu verknüpfen, anstatt ein Messaging-System mit einem Nicht-Messaging-System zu verbinden. Das aktuelle System mit den Kanaladaptern Strukturierung von Kanälen Ein Schlüssel zur Arbeit mit Mustern ist nicht nur zu wissen, wann, welches Muster zu verwenden, sondern auch, wie man am effektivsten verwenden. Bei jeder Musterimplementierung sind sowohl die Besonderheiten der Technologieplattform als auch andere Gestaltungskriterien zu berücksichtigen. Dieser Abschnitt wendet denselben Entdeckungsprozess an, um die effizienteste Verwendung des Publish-Subscribe-Kanals im Kontext des Marktdatenservers, der mit der Analytik-Engine kommuniziert, zu finden. Echtzeit-Marktdaten stammen aus dem Marktdaten-Feed, einem C-Server, der Marktdaten auf der TIB überträgt. Der Marktdaten-Feed verwendet für jede Anleihe, für die er die Preise veröffentlicht, einen eigenen Publish-Subscribe-Kanal. Dies mag ein wenig extremer erscheinen, da jede neue Bindung einen eigenen neuen Kanal braucht. Aber das ist nicht so schwer, da man eigentlich keine Kanäle in TIBCO erstellen muss. Vielmehr werden Kanäle durch einen hierarchischen Satz von Themennamen, die als Subjekte bezeichnet werden, referenziert. Der TIBCO-Server filtert dann einen einzelnen Nachrichtenfluss durch das Subjekt und sendet jedes einzelne Objekt einem einzigen virtuellen Kanal zu. Das Ergebnis ist ein sehr leichter Nachrichtenkanal. Wir könnten ein System erstellen, das auf wenigen Kanälen veröffentlicht wird, und Abonnenten können nur auf Preise zugreifen, für die sie interessiert sind. Dies würde es erforderlich machen, dass Abonnenten einen Message Filter oder Selective Consumer verwenden, um den gesamten Datenfluss auf interessante Anleihenpreise zu filtern Sollte so verarbeitet werden, wie sie eingegangen ist. Da die Marktdaten auf Bond-dedizierten Kanälen veröffentlicht werden, können sich Abonnenten für Updates auf einer Reihe von Anleihen registrieren. Dies ermöglicht es effektiv den Teilnehmern zu filtern, indem sie selektiv Kanäle abonniert und nur Aktualisierungen von Interesse empfängt, anstatt zu entscheiden, nachdem die Nachricht empfangen wurde. Es ist wichtig zu beachten, dass die Verwendung mehrerer Kanäle, um eine Filterung zu vermeiden, eine nicht standardmäßige Verwendung von Messaging-Kanälen ist. Im Kontext der TIBCO-Technologie entscheiden wir aber, ob wir Filter oder die in TIBCO eingebaute Kanalfilterung implementieren oder eigene Filter einsetzen müssen - und nicht, ob wir so viele Kanäle verwenden. Die nächste Komponente, die wir entwerfen müssen, ist die Analytik-Engine, ein weiterer CTIB-Server, der die Marktdaten modifiziert und an die TIB weitergibt. Obwohl es außerhalb des Bereichs unserer JavaJMS-Entwicklung liegt, arbeiten wir eng mit dem C-Team zusammen, um es zu entwerfen, da wir die primären Kunden der Analytics-Engine sind. Das Problem besteht darin, die Kanalstruktur zu finden, die die neu modifizierten Marktdaten am effizientesten wiedergibt. Da wir bereits einen dedizierten Message Channel pro Bindung aus dem Marktdaten-Preis-Feed geerbt haben, wäre es logisch, die Marktdaten zu modifizieren und die geänderten Marktdaten auf dem dedizierten Message Channel zu übertragen. Aber dies wird nicht funktionieren, da die Analytik Modifikation der Anleihen Preise sind Händler-spezifisch. Wenn wir die geänderten Daten auf dem Bond Message Channel erneut senden. Werden wir die Datenintegrität zerstören, indem wir generische Marktdaten durch handelspezifische Daten ersetzen. Auf der anderen Seite könnten wir einen anderen Nachrichtentyp für traderspezifische Marktdaten haben, die wir auf demselben Kanal veröffentlichen, sodass die Teilnehmer entscheiden können, an welche Nachricht sie interessiert sind, um die Datenintegrität nicht zu zerstören. Aber dann müssen Kunden ihre eigenen Filter implementieren, um Nachrichten für andere Händler zu trennen. Zusätzlich wird es eine erhebliche Zunahme der von den Teilnehmern empfangenen Nachrichten geben, was eine unnötige Belastung für sie bedeutet. Es gibt zwei Möglichkeiten: Ein Kanal pro Trader: Jeder Trader hat einen bestimmten Kanal für die geänderten Marktdaten. Auf diese Weise bleiben die ursprünglichen Marktdaten intakt und jede Traderanwendung kann auf ihre spezifischen Händler Nachrichtenkanal für die geänderten Preisaktualisierungen zu hören. Ein Channel pro Trader pro Bond: Erstellen Sie einen Message Channel pro Trader pro Bindung ausschließlich für die geänderten Marktdaten dieser Bonds. Zum Beispiel würden die Marktdaten für Anleihe ABC auf dem Channel Bond ABC veröffentlicht, während die geänderten Marktdaten für Trader A auf Message Channel Trader A, Bond ABC, geänderte Marktdaten für Trader B auf Trader B, Bond ABC und veröffentlicht werden würden bald. Ein Kanal pro Trader Ein Kanal pro Bond pro Trader Es gibt Vor-und Nachteile für jeden Ansatz. Der Pro-Bond-Ansatz verwendet beispielsweise viel mehr Nachrichtenkanal. Im schlimmsten Fall ist die Anzahl der Meldungskanäle die Anzahl der Anleihen insgesamt multipliziert mit der Anzahl der Händler. Wir können obere Schranken setzen auf die Anzahl der Kanäle, die erstellt werden, da wir wissen, dass es nur etwa 20 Händler und sie nie mehr als ein paar hundert Bonds. Damit liegt die obere Grenze unter dem 10.000er Bereich, der nicht so aussergewöhnlich ist, verglichen mit dem fast 100.000 Nachrichtenkanal, den der Marktdatenpreis-Feed verwendet. Auch, da wir die TIB und Message Channel sind ziemlich billig, die Anzahl der Message Channel s ist nicht ein schweres Problem. Andererseits könnte die schiere Anzahl von Nachrichtenkanälen ein Problem aus einer Managementperspektive sein. Jedes Mal, wenn eine Anleihe hinzugefügt wird, muss ein Kanal für jeden Trader gepflegt werden. Dies könnte in einem sehr dynamischen System schwerwiegend sein. Unser System ist jedoch im wesentlichen statisch. Es verfügt außerdem über eine Infrastruktur zur automatischen Verwaltung des Nachrichtenkanals. Dies kombiniert mit der ererbten Architektur einer Legacykomponente unter Verwendung eines ähnlichen Ansatzes minimiert den Nachteil. Dies ist nicht zu sagen, wir sollten eine unnötig übermäßige Anzahl von Message Channel s. Vielmehr können wir einen architektonischen Ansatz implementieren, der eine große Anzahl von Nachrichtenkanälen verwendet, wenn es einen Grund gibt. Und es gibt einen Grund, in diesem Fall kommt auf die Lage der Logik. Wenn wir den pro-Trader-Ansatz implementieren, benötigt die Analytics-Engine eine Logik, um Eingangs - und Ausgangskanäle zu gruppieren. Dies liegt daran, dass die Eingangskanäle der Analytics Engine pro Bond und der Output Message Channel s pro Trader sind und die Analytics Engine alle Analytics-Inputs von mehreren Bonds für einen bestimmten Trader an einen traderspezifischen Output Message Channel leiten muss. Dadurch wird die Analytik-Engine effektiv zu einem Content-Based Router, der eine benutzerdefinierte Routing-Logik für unsere Anwendung implementiert. Im Anschluss an die Message Bus Struktur ist die Analytics Engine ein generischer Server, der von mehreren anderen Systemen in der. Also wollen wir es nicht mit System-spezifische Funktionalität zu bewölken. Auf der anderen Seite, die Per-Bond-Ansatz funktioniert, da die Idee eines Händlers, die die Analytik Ausgabe der Anleihen Preise ist ein Unternehmen akzeptiert Praxis. Der Per-Bond-Ansatz hält die Nachrichtenkanal-Trennung des Marktdaten-Feeds intakt, während der Hinzufügen mehrerer Nachrichten-Kanal s. Bevor wir den Client erreichen, wollen wir einen Content-basierten Router, um diese verschiedenen Kanäle zu einer überschaubaren Anzahl von Kanälen zu kombinieren. Wir möchten nicht, dass die Clientanwendung auf dem Trader-Desktop auf Tausende oder Zehntausende von Nachrichtenkanälen zu hören ist. Nun wird die Frage, wo die Content-Based Router setzen. Wir könnten einfach haben, dass der CTIB-Kanaladapter alle Nachrichten an das Pricing Gateway auf einem einzelnen Message Channel weiterleitet. Dies ist aus zwei Gründen schlecht, weil wir die Geschäftslogik zwischen C und Java aufteilen würden, und wir würden den Vorteil des separaten Nachrichtenkanals auf der TIB-Seite verlieren, was es uns ermöglicht, die Filterung später im Datenfluss zu vermeiden. Wenn wir unsere Java-Komponenten betrachten, können wir sie entweder im Pricing Gateway platzieren oder eine Zwischenkomponente zwischen dem Pricing Gateway und dem Client erstellen. In der Theorie, wenn wir die Bond-basierte Trennung von Message Channel s bis hin zum Client bestanden, würde das Pricing Gateway Pricing-Informationen mit derselben Kanalstruktur wie das Pricing Gateway und die Analytics Engine erneut senden. Dies bedeutet eine Duplizierung aller Bond-TIB-Kanäle in JMS. Selbst wenn wir eine Zwischenkomponente zwischen dem Pricing Gateway und dem Client erstellen, muss das Pricing Gateway immer noch alle Kanäle in JMS duplizieren. Auf der anderen Seite erlaubt die Implementierung der Logik direkt im Pricing Gateway die Vermeidung von Duplizierung der großen Anzahl von Kanälen in JMS, was uns ermöglicht, eine viel kleinere Anzahl von Kanälen in der Grßenordnung von einem pro Trader zu schaffen. Das Pricing Gateway registriert sich durch den CTIB Channel Adapter als Verbraucher für jede Bindung jedes Traders im System. Dann wird das Pricing Gateway jedem bestimmten Client nur die Nachrichten zu diesem bestimmten Händler weiterleiten. Auf diese Weise verwenden wir nur eine kleine Anzahl von Nachrichtenkanälen am JMS-Ende, während wir den Nutzen der Trennung am TIB-Ende maximieren. Der komplette Market Data Flow zum Client Die Message Channel Layout Diskussion ist ein gutes Beispiel dafür, wie die Integration von Patterns wichtig ist. Das Ziel hier war, herauszufinden, wie man effektiv den Nachrichten-Kanal s verwenden. Sagen Sie verwenden ein Muster ist nicht genug. Sie müssen herausfinden, wie man am besten implementieren und integrieren in Ihr System, um die Probleme zu lösen. Darüber hinaus zeigt dieses Beispiel Geschäftskräfte in Aktion. Wenn wir die Geschäftslogik in irgendeiner unserer Komponenten implementieren könnten, hätten wir mit dem pro-Trader-Ansatz gegangen und einen insgesamt einfacheren Ansatz mit vielen weniger Kanälen implementiert. Auswählen eines Nachrichtenkanals Nachdem wir nun die Mechanismen der Kommunikation zwischen den JavaJMS-Komponenten und den C-TIBCO-Komponenten kennen und wir einige Nachrichtenkanalstrukturierungen gesehen haben, müssen wir entscheiden, welchen JMS-Nachrichtenkanal die Java-Komponenten zur Kommunikation verwenden sollen . Bevor wir zwischen den verschiedenen Nachrichtenkanälen auswählen können, die in JMS verfügbar sind, können wir uns den hohen Nachrichtenfluss des Systems ansehen. Wir haben zwei Gateways (Pricing and Contribution), die mit dem Kunden kommunizieren. Marktdaten fließen zum Client vom Pricing Gateway, der es an das Contribution Gateway sendet. Die Clientanwendung sendet eine Nachricht an das Pricing Gateway, um die auf jede Anleihe angewendeten Analysen zu ändern. Das Contribution Gateway sendet auch Nachrichten an die Client-Anwendung, die den Status der Preisaktualisierungen an die verschiedenen Handelsplätze weiterleitet. Der Systemnachrichtenfluss Die JMS-Spezifikation beschreibt zwei Message-Channel-Typen, Point-to-Point-Kanal (JMS Queue) und Publish-Subscribe Channel (JMS-Topic). Recall that the case for using publish-subscribe is to enable all interested consumers to receive a message while the case for using point-to-point is to ensure that only one eligible consumer receives a particular message. Many systems would simply broadcast messages to all client applications, leaving each individual client application to decide for itself whether or not to process a particular message. This will not work for our application since there are a large number of market data messages being sent to each client application. If we broadcast market data updates to uninterested trader, we will be unnecessarily wasting client processor cycles deciding whether or not to process a market data update. Point-to-Point Channel s initially sound like a good choice since the clients are sending messages to unique servers and visa versa. But it was a business requirement that traders may be logged in to multiple machines at the same time. If we have a trader logged in at two workstations simultaneously and a point-to-point price update is sent, only one of the two client applications will get the message. This is because only one consumer on a Point-to-Point Channel can receive a particular message. Notice that only the first of each group of a traders client applications receives the message. Point-to-Point Messaging for Price Updates We could solve this using the Recipient List pattern, which publishes messages to a list of intended recipients, guaranteeing that only clients in the recipient list will receive messages. Using this pattern, the system could create recipient lists with all client application instances related to each trader. Sending a message related to a particular trader would in turn send the message to each application in the recipient list. This guarantees all client application instances related to a particular trader would receive the message. The downside of this approach is that it requires quite a bit of implementation logic to manage the recipients and dispatch messages. Recipient List for Price Updates Even though point-to-point could be made to work, lets see if there is a better way. Using Publish-Subscribe Channel s, the system could broadcast messages on trader specific channels rather than client application specific channels. This way, all client applications processing messages for a single trader would receive and process the message. Publish-Subscribe Messaging for Price Updates The downside of using Publish-Subscribe Channel s is that unique message processing is not guaranteed with the server components. It would be possible for multiple instances of a server component to be instantiated and each instance process the same message, possibly sending out invalid prices. Recalling the system message flow, only a single communication direction is satisfactory with each Message Channel . Server-to-client communication with publish-subscribe is satisfactory while client-to-server communication is not and client-server communication with point-to-point is satisfactory while server-client is not. Since there is no need to use the same Message Channel in both directions, we can use each Message Channel only one direction. Client-to-server communication will be implemented with point-to-point while server-to-client communication will be implemented with publish-subscribe. Using this combination of Message Channel s, the system benefits from direct communication with the server components using point-to-point messaging and the multicast nature of publish-subscribe without either of the drawbacks. Message flow with Channel Types Problem Solving With Patterns Patterns are tools and collections of patterns are toolboxes. They help solve problems. Some think that patterns are only useful during design. Following the toolbox analogy, this is like saying that tools are only useful when you build a house, not when you fix it. The fact is that patterns are a useful tool throughout a project when applied well. In the following sections we will use the same pattern exploration process we used in the previous section to solve problems in our now working system. Flashing Market Data Updates Traders want table cells to flash when new market data is received for a bond, clearly indicating changes. The Java client receives messages with new data which triggers a client data cache update and eventually flashing in the table. The problem is that updates come quite frequently. The GUI thread stack is becoming overloaded and eventually freezing the client since it cant respond to user interaction. We will assume that the flashing is optimized and concentrate on the data flow of messages through the updating process. An examination of performance data shows the client application is receiving several updates a second some updates occurred less than a millisecond apart. Two patterns that seem like they could help slow down the message flow are Aggregator and Message Filter. A first thought is to implement a Message Filter to control the speed of the message flow by throwing out updates received a small amount of time after the reference message. As an example, lets say that we are going to ignore messages within 5 milliseconds of each other. The Message Filter could cache the time of the last acceptable message and throw out anything received within the next 5 milliseconds. While other applications may not be able to withstand data loss to such an extent, this is perfectly acceptable in our system due to the frequency of price updates. Time based Message Filter The problem with this approach is that not all data fields are updated at the same time. Each bond has approximately 50 data fields displayed to the user including price. We realize that not every field is updated in every message. If the system ignores consecutive messages, it may very well be throwing out important data. The other pattern of interest is the Aggregator . The Aggregator is used to manage the reconciliation of multiple, related messages into a single message, potentially reducing the message flow. The Aggregator could keep a copy of the bond data from the first aggregated message, then update only new or changed fields successive messages. Eventually the aggregated bond data will be passed in a message to the client. For now, lets assume that the Aggregator will send a message every 5 milliseconds like the Message Filter . Later, well explore another alternative. Aggregator with partial successive updates The Aggregator . like any other pattern, is not a silver bullet it has its pluses and minuses that need to be explored. One potential minus is that implementing an Aggregator would reduce the message traffic by a great amount in our case only if many messages are coming in within a relatively short time regarding the same bond. On the other hand, we would accomplish nothing if the Java client only receives updates for one field across all of the traders bonds. For example, if we receive 1000 messages in a specified timeframe with 4 bonds of interest, we would reduce the message flow from 1000 to 4 messages over that timeframe. Alternatively, if we receive 1000 messages in the same timeframe with 750 bonds of interest, we will have reduced the message flow from 1000 to 750 messages relatively little gain for the amount of effort. A quick analysis of the message updates proves that the Java client receives many messages updating fields of the same bond, and therefore related messages. So, Aggregator is in fact a good decision. Whats left is to determine how the Aggregator will know when to send a message it has been aggregating. The pattern describes a few algorithms for the Aggregator to know when to send the message. These include algorithms to cause the aggregator to send out its contents after a certain amount of time has elapsed, after all required fields in a data set have been completed, and others. The problem with all of these approaches is that the aggregator is controlling the message flow, not the client. And the client is the major bottleneck in this case, not the message flow. This is because the Aggregator is assuming the consumers of its purged messages (the client application in this case) are Event-Driven Consumer s, or consumers that rely on events from an external source. We need to turn the client into a Polling Consumer . or a consumer that continuously checks for messages, so the client application can control the message flow. We can do this by creating a background thread that continuously cycles through the set of bonds and updates and flashes any changes that have occurred since the last iteration. This way, the client controls when messages are received and as a result, guarantees that it will never become overloaded with messages during high update periods. We can easily implement this by sending a Command Message to the Aggregator initiating an update. The Aggregator will respond with a Document Message containing the set of updated fields that the client will process. The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system. Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity. Major Production Crash With the performance of the flashing fixed, we are now in production. One day the entire system goes down. MQSeries crashes, bringing several components down with it. We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue (an implementation of the Dead Letter Channel ). The queue grows so large that it brings down the entire server. After exploring the messages in the dead letter queue we find they are all expired market data messages. This is caused by slow consumers, or consumers that do not process messages fast enough. While messages are waiting to be processed, they time out (see the Message Expiration pattern) and are sent to the Dead Letter Channel . The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great messages expire before the target application can consume them. We need to fix the message flow and we turn to patterns for help slowing down the message flow. A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem. The system design relies on the client application to immediately forward market data update messages to the trading venues. This means the system cannot wait to collect messages and aggregate them. So the Aggregator must be abandoned. There are two other patterns that deal with the problem of consuming messages concurrently: Competing Consumers and Message Dispatcher . Starting with Competing Consumers . the benefit of this pattern is the parallel processing of incoming messages. This is accomplished using several consumers on the same channel. Only one consumer processes each incoming message leaving the others to process successive messages. Competing Consumers . however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication. Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message. This results in more work without any gain and completely misses the goal of the pattern. This approach also has to be abandoned. On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a pool. Each consumer can run its own execution thread. One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel . This achieves the parallel processing benefit of Competing Consumers . but works on Publish-Subscribe Channel s. The Message Dispatcher in context Implementing this in our system is simple. We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers. When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message. The result of which is a Message Listener (the Dispatcher) that always returns immediately. This guarantees a steady flow of message processing regardless of the message flow rate. Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s. With this infrastructure, messages can be received by the client application at almost any rate. If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel . The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns. We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel. This greatly improved the problem, but did not completely fix it. This is because the real problem was the client becoming a bottleneck. This couldnt be fixed with a thousand patterns. We later addressed this problem by refactoring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway. So patterns can help design and maintain a system, but dont necessarily make up for poor upfront design. Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns. We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems. Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems. Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems. Want to keep up-to-date Follow My Blog . Want to read more in depth Check out My Articles . Want to see me live See where I am speaking next . Find the full description of this pattern in: Enterprise Integration Patterns Gregor Hohpe and Bobby Woolf ISBN 0321200683 650 pages Addison-Wesley From Enterprise Integration to Enterprise Transformation: My new book describes how architects can play a critical role in IT transformation by applying their technical, communication, and organizational skills with 37 episodes from large-scale enterprise IT. Parts of this page are made available under the Creative Commons Attribution license. You can reuse the pattern icon, the pattern name, the problem and solution statements (in bold), and the sketch under this license. Other portions of the text, such as text chapters or the full pattern text, are protected by copyright. Messaging Patterns 187 Integration Patterns in Practice 187 Case Study: Bond Trading SystemChapdelaine 038 Co. Modernizes Municipal 038 Corporate Bond Trading System to the Web with Nexaweb BURLINGTON, Mass. July 12, 2011 PRNewswire -- Nexaweb Technologies, Inc. a leading provider of IT application modernization software solutions. today announced that Chapdelaine amp Co. has selected Nexaweb to help transform its terminal-based municipal bond trading system into a rich Internet application that provides real-time market data and trading services to traders over the web. Established in 1966, Chapdelaine amp Co. is an inter-dealer broker that provides dealer-to-dealer services for fixed-income bond executions for municipal and corporate bonds. At the core of the firms service is its custom, fixed-income trading platform. The terminal-based system was originally designed to support Chapdelaine amp Co. traders fielding orders from clients over the phone. In order to make the system easier to learn and more productive to use for employees, and to provide self-service e-trading to clients over the web, Chapdelaine amp Co selected Nexaweb to help modernize their trading platform. In order for the next-generation trading platform to meet the firms business objectives, it needed to have a rich Internet user interface (UI) that pushes market data to users in real time it also required a modular architecture that would make it easier to maintain and extend in the future. Chapdelaine amp Co. selected Nexaweb to support the initiative in large part, because Nexawebs application modernization software aligned with their objectives so well: - Nexaweb Studio - visually create rich Internet application UIs for traders - Nexaweb Internet Message Bus - provides secure, two-way data transfer between the server and web browsers for real-time market data delivery, order status reporting and trade capture - Nexaweb Reference Framework - reduces project time, cost and risk by providing a ready-to-use, modular J2EE architecture that ties new and legacy application components together and includes pre-built code for handling security, user interface interactions, workflow, SOA access, etc. In order to deliver a revolutionary user experience to our clients we had very ambitious application requirements to meet, said Ken Torres, senior vice president of IT at Chapdelaine amp Co. We turned to Nexaweb because they not only possess a great modernization customer track record they also integrated nicely into our infrastructure, which gave us a huge head start and eliminated a lot of delivery risk. Chapdelaine amp Co. is using the Nexaweb Enterprise Web Suite to make additional enhancements to their trading platform, including real-time Municipal Securities Rulemaking Board (MSRB) data feeds, market indicators, market news and analysis tickers delivered via RSS, and user preferences configuration. Were excited to be working with Chapdelaine amp Co. to support the modernization of their bond trading platform, said Nexaweb CEO, Chris Heidelberger. Seeing the transformational effect that application modernization has on our customers businesses is the most rewarding part of the field were in. Nexaweb Technologies, Inc. is the leader in clientserver and legacy application modernization using cloud computing. Nexaweb has modernized more than 450 applications to date -- and is the only company offering a fixed-time, fixed-price guarantee. More than 200 customers, including Aflac, DHL, EMC, Nokia Siemens Networks, Pepsico, Rabobank and US Air Force have leveraged Nexaweb software and services to modernize their applications and transform their businesses. For the latest news and information, follow Nexaweb on Twitter at twitterNexaweb and visit nexaweb . Media Contact: Andrew Ellicott Andyellicott(at)nexaweb(dot)com 603-205-2804

No comments:

Post a Comment