Trading system uml


AlgoTrader låter handelsföretag automatisera komplexa, kvantitativa handelsstrategier i forex, optioner, terminer, aktier, ETF och råvarumarknader. Till skillnad från andra algoritmiska handelsplattformar har den en robust, öppen källarkitektur som möjliggör anpassning för kundspecifika behov. AlgoTrader är den sofistikerade investeringsbanken, hedgefonder och proprietära handlare har väntat på. Automatiserad Varje kvantitativ handelsstrategi kan vara helt automatiserad. Snabba Höga volymer av marknadsdata bearbetas automatiskt, analyseras och ageras vid ultrahög hastighet. Anpassningsbar Open-source arkitektur kan anpassas för användarspecifika krav. Kostnadseffektiv Helt automatiserad handel och inbyggda funktioner minskar kostnaden. Pålitlig Byggd på den mest robusta arkitekturen och toppmodern teknik. Fullt stödd Omfattande vägledning tillgänglig för installation och anpassning. På plats och fjärrträning och rådgivning finns. AlgoTrader Hur det fungerar En regelbaserad handelsstrategi kan vara helt automatiserad: Elektroniska marknadsdata kommer fram. Data vidarebefordras till handelsstrategier som körs inom AlgoTrader. Handelsstrategier analyserar, filtrerar och bearbetar marknadsdata och skapar handelssignaler. Baserat på handelssignaler exekveras åtgärder (t ex att placera en order eller stänga en position). Beställningar skickas till respektive marknad. På plats och fjärrsamråd och utbildning: Automatisering och migrering av befintliga strategier Förbättring och optimering av befintliga strategier Prototypning och backtesting av nya strategier Utveckling av anpassad funktionalitet Omfattande dokumentation och användarhandböcker AlgoTrader 3.1 integrerar InfluxDB 20-20-2017 AlgoTrader integrerar InfluxDB för lagring av levande och historisk marknad data. Med InfluxDB kan miljarder ticks lagras och användas för backtestning. Introduktion till AlgoTrader 3.0 8211 Den kraftfullaste AlgoTrader Yet Apr-07-2016 AlgoTrader 3.0 har släppts. Den här utgåvan omfattar den nya HTML5 Frontend-utrustningen, ett klickutförande med Docker, tre nya exekveringsalgoritmer och en Excel-baserad backtestrapport. Introduktion till AlgoTrader One-Click Installation av Docker Mar-15-2016 AlgoTrader 3.0 introducerar enklicks handelsstrategisystem som drivs av Docker Clientrsquos Testimonials Vontobel uppskattar AlgoTraders öppna och utökbara arkitektur, liksom användningen av vanliga standardkällor för öppen källkod, som Esper och Spring. Benjamin Huber, chef för Algo Trading 038 Smart Order Routing, Bank Vontobel AG, Zrich Vi är mycket imponerade av AlgoTrader8217s förmåga när det gäller strategisk utveckling och teknisk flexibilitet. AlgoTrader är nyckeltekniken som tillåter oss att handla parallellt med flera VIX Future - och Options-baserade strategier. Raimond Schuster, styrelseledamot, ISP Securities AG, licensvillkor för Zrich AlgoTrader Villkoren för detta slutanvändarlicensavtal (8220AGREEMENT8221) STYRAR DIN ANVÄNDNING AV PROGRAMVARAN, OM DU OCH LICENSÖREN HAR UTFÖRT EN SEPARAT SKRIVT LICENSAVTAL ANVÄNDNING AV PROGRAMVARAN. Licensgivaren är villig att licensiera Programvaran till dig endast under förutsättning att du accepterar alla villkoren i denna Avtal. Genom att signera detta avtal eller genom att ladda ner, installera eller använda programvaran, har du angett att du förstår denna överenskommelse och accepterar alla dess villkor. Om du inte accepterar alla villkoren i detta avtal, är Licensgivaren ovillig att licensiera Programvaran till dig, och du får inte ladda ner, installera eller använda Programvaran. 1. LICENSAVTAL a. Utvärdering Användning och utveckling Använd licens. Med förbehåll för att du överensstämmer med villkoren i detta avtal, ger Licensgivaren dig en personlig, icke-exklusiv, icke-överförbar licens, utan rätt att underlicensiera, för avtalets löptid, att internt använda Programvaran enbart för Utvärdering Användning och utveckling Använd. Tredjeparts programvaruprodukter eller moduler som tillhandahålls av Licensgivaren, om några, får användas enbart med Programvaran och kan vara föremål för din godkännande av villkoren som tillhandahålls av sådana tredje parter. När licensen avslutas måste du sluta använda programvaran och avinstallera alla instanser. Alla rättigheter som inte specifikt tilldelats dig här behålls av Licensgivaren. Utvecklaren ska inte göra någon kommersiell användning av Programvaran eller något avledande arbete därav (inklusive för Developer8217s egna interna affärsändamål). Kopiering och omfördelning, i någon form, av programvaran eller utvecklarprogrammet till dina direkta eller indirekta kunder är förbjuden. b. Produktionslicens. Med förbehåll för att du överensstämmer med villkoren i detta avtal inklusive betalning av den tillämpliga licensavgiften, ger Licensgivaren dig en icke-exklusiv och icke-överförbar licens, utan rätt att underlicensiera, för avtalets löptid, till : (a) Använd och reproducera Programvaran enbart för egna interna affärsändamål (8220Produktion Använd8221) och (b) Skapa ett rimligt antal kopior av Programvaran enbart för säkerhetskopiering. Sådan licens är begränsad till det specifika antalet processorer (om licensieras av CPU) eller instanser av Java Virtual Machines (om licenser med virtuell maskin) som du har betalat licensavgift för. Användning av programvaran på ett större antal processorer eller instanser av Java Virtual Machines kräver betalning av ytterligare licensavgift. Tredjeparts programvaruprodukter eller moduler som tillhandahålls av Licensgivaren, om några, kan endast användas med Programvaran. c. Inga andra rättigheter. Dina rättigheter i och utnyttjande av programvaran är begränsade till de som uttryckligen beviljas i detta avsnitt 1. Du gör ingen annan användning av Programvaran. Med undantag för vad som uttryckligen licensieras i detta avsnitt ger Licensgivaren dig inga andra rättigheter eller licenser, implicit, estoppel eller på annat sätt. ALLA RÄTTIGHETER SOM INTE UTTRYCKLIGT TILLGÄNDS HÄR RESERVERAS AV LICENSÖREN ELLER DESS LEVERANTÖRER. 2. BEGRÄNSNINGAR Med undantag för vad som uttryckligen anges i avsnitt 1, kommer du inte att a) ändra, översätta, demontera, skapa derivat av Programvaran eller kopiera Programvaran (b) hyra, låna, överlåta, distribuera eller bevilja några rättigheter i Programvara i någon form till någon person (c) tillhandahålla, avslöja, avslöja eller tillhandahålla eller tillåta användning av Programvaran av någon tredje part (d) publicera några riktmärken eller prestanda tester som körs på Programvaran eller någon del därav eller ( e) ta bort eventuella proprietära meddelanden, etiketter eller märkningar på Programvaran. Du kommer inte att distribuera Programvaran till någon person på fristående basis eller på OEM-basis. 3. ÄGARSKAP Som mellan parterna är Programvaran och kommer att förbli den enda och exklusiva äganderätten till Licensgivaren, inklusive alla immateriella rättigheter däri. en. Om du använder Programvaran enligt licensen enligt avsnitt 1 a, gäller detta avtal under utvärderings - eller utvecklingsperioden. b. Om du använder Programvaran enligt licensen enligt avsnitt 1 b gäller detta avtal antingen (a) för en period om ett år om det köpts som en årlig prenumerationslicens eller (b) alltid om den köpts som en evig licens. En årlig prenumerationslicens kommer att förnyas automatiskt med ett år om det inte avslutas med en månad förhandsmeddelande. Avtalet upphör automatiskt utan föregående meddelande om du bryter mot någon avtals avtalsvillkor. Vid uppsägning måste du omedelbart sluta använda Programvaran och förstöra alla kopior av Programvaran som du äger eller kontrollerar. 5. STÖDSTJÄNSTER Om du har köpt denna licens, inklusive supporttjänster, inkluderar dessa underhållsutgåvor (uppdateringar och uppgraderingar), telefonsupport och e-post eller webbaserat support. en. Licensgivaren kommer att göra kommersiellt rimliga ansträngningar för att tillhandahålla en uppdatering som är utformad för att lösa eller kringgå ett rapporterat fel. Om ett sådant fel har korrigerats i en underhållsutgivare måste licensinnehavaren installera och genomföra den tillämpliga underhållsutgivningen, annars kan uppdateringen tillhandahållas i form av en tillfällig åtgärd, procedur eller rutin som ska användas tills en underhållsutgåva innehåller den permanenta uppdateringen är tillgänglig. b. Licensgivaren ska under licensavtalstiden göra underhållsutgåvor tillgängliga för Licenstagaren om, när Licensgivaren gör sådana underhållsutgivningar allmänt tillgängliga för sina kunder. Om en fråga uppstår om ett produktutbud är en Uppgradering eller en ny produkt eller funktion, kommer Licensor8217s yttrande att råda ut, förutsatt att Licenstagaren behandlar produktutbudet som en ny produkt eller funktion för sina slutanvändarkunder i allmänhet. c. Licensor8217s skyldighet att tillhandahålla supporttjänster är villkorad av följande: (a) Licenstagaren gör rimliga ansträngningar för att rätta till felet efter samråd med licenstagaren. (B) Licenstagaren ger Licensgivaren tillräcklig information och resurser för att rätta till felet antingen på Licensor8217s webbplats eller via fjärråtkomst till Licensee8217s webbplats, samt tillgång till personalen, hårdvaran och eventuell ytterligare programvara som är inblandad i att upptäcka felet. c) Licenstagaren installerar omedelbart alla underhållsutgåvor och (d) Licenstagaren upphandlar, installerar och underhåller all utrustning, kommunikation gränssnitt och annan hårdvara som är nödvändig för att använda produkten. d. Licensgivaren är inte skyldig att tillhandahålla supporttjänster i följande situationer: (a) Produkten har ändrats, ändrats eller skadats (utom om licensinnehavaren direkt övervakar det). Felet orsakas av Licensee8217s försummelse, maskinvarufel eller andra orsaker utöver licensens rimliga kontroll (c) felet orsakas av programvara från tredje part som inte är licensierad via licensgivaren (d) Licenstagaren har inte installerat och genomfört underhållslösningar så att produkten är en version som stöds av Licensgivare eller (e) Licenstagaren har inte betalat licensavgifter eller supporttjänster vid förfallodagen. Dessutom är licensgivaren inte skyldig att tillhandahålla supporttjänster för programkod som skrivits av kunden själv baserat på produkten. e. Licensgivaren förbehåller sig rätten att upphöra med supporttjänsterna om licensgivaren, efter eget gottfinnande, bestämmer att fortsatt stöd för någon produkt inte längre är ekonomiskt genomförbart. Licensgivaren kommer att ge Licenstagaren åtminstone tre (3) månader tidigare skriftligt meddelande om sådant upphörande av Support Services och kommer att återbetala eventuella upplupna Support Services-avgifter Licenstagaren kan ha förbetalt med avseende på den berörda produkten. Licensgivaren har ingen skyldighet att stödja eller behålla någon version av Produkten eller underliggande tredjepartsplattformar (inklusive men inte begränsat till programvara, JVM, operativsystem eller hårdvara) för vilken produkten stöds, med undantag för (i) den nuvarande versionen av Produkt och underliggande tredjepartsplattform, och (ii) de två omedelbart föregående versionerna av Produkt och operativsystem under en period av sex (6) månader efter det att den först ersattes. Licensgivaren förbehåller sig rätten att tillfälligt upphöra med utförandet av Supporttjänsten om Licenstagaren inte betalar något belopp som ska betalas till Licenstagaren enligt Avtalet inom trettio (30) dagar efter det att beloppet förfaller. 6. GARANTI a. Licensgivaren garanterar att Programvaran kommer att kunna utföra i alla väsentliga delar i enlighet med de funktionsspecifikationer som anges i den gällande dokumentationen under en period av 90 dagar efter det datum då du installerade Programvaran. I händelse av brott mot sådan garanti ska Licenstagaren, efter eget val, korrigera Programvaran eller ersätta den här Programvaran kostnadsfritt. Ovanstående är dina enda och exklusiva rättsmedel och Licensor8217s ensam ansvar för brott mot dessa garantier. De garantier som anges ovan är gjorda till och till gagn för dig. Garantierna gäller endast om (a) Programvaran har installerats korrekt och använts hela tiden och i enlighet med bruksanvisningen (c) De senaste uppdateringarna har tillämpats på programvaran och (c) Ingen ändring, ändring eller tillägg har gjorts till Programvaran av andra än Licensgivaren eller Licensgivaren8217s auktoriserade representant. 7. DISCLAIMER Bortsett från vad som kan tillhandahållas enligt avsnitt 6 a, upphäver licenstagaren helt och hållet alla garantier, uttryckligen eller underförstått, inklusive eventuella underförstådda garantier för försäljningsförmåga, lämplighet för ett visst syfte och upphovsrättsligt förbud och eventuella garantier som uppstår utanför handläggningen ELLER ANVÄNDNING AV HANDEL. INGEN RÅD ELLER INFORMATION, VID MUNTLIG ELLER SKRIFTLIG, SOM HÄR UTFÖRAS AV LICENSÖREN ELLER ANNAN, SKA INNEHÅLLA EN GARANTI SOM INTE UTTRYCKLIGT ANSTÄLLS I DETTA AVTAL. Licensgivaren ger ingen garanti för att programvaruprodukten uppfyller dina krav eller fungerar under dina specifika användningsvillkor. Licensgivaren ger ingen garanti att driften av programvaruprodukten är säker, felfri eller fri från avbrott. DU MÅSTE BESTÄMMA OM PROGRAMVARUPRODUKTEN KRAFTIGT ÄR DIN KRAV FÖR SÄKERHET OCH UNINTERBARHET. DU BÖRAR ENLIGT ANSVAR OCH ALLA ANSVAR FÖR NÅGOT FÖRSÄLJNING SOM FÖRSÖKAS AV PROGRAMVARUPRODUKTEN FÖR ATT MÖTE DIN KRAV. LICENSÖREN ÄR INTE UNDER NÅGOT OMSTÄNDIGHETER ANSVARIGA ELLER ANSVARIG FÖR DATABLAD PÅ ANVÄNDNINGSANVISNING FÖR EN DATOR eller INFORMATION. 8. BEGRÄNSNING AV ANSVAR LICENSOR8217S TOTALA ANSVAR FÖR DIG FRÅN ÅTGÄRDER FÖR ÅTGÄRDER OCH UNDER ALLA ÅTGÄRDER OM ANSVAR SKA BEGRÄNSAS TILL OCH SKALL INTE ÖVRIGA LICENSAVOSTET SOM DU BETALAR TILL LICENSÖREN FÖR PROGRAMVARAN. LICENSÖREN ÄR INTE HÄNDIGT FÖR DIG FÖR SÄRSKILDA SÄRSKILDA, INCIDENTLIGA, LÄMPLIGA, PUNITIVA ELLER FÖLJANDE SKADOR (INKLUSIVE TILL ANVÄNDNINGSÅTGÄRDER, DATA, FÖRETAG ELLER RESULTAT) ELLER FÖR KOSTNADEN FÖR ATT FÖRSÄLJA SUBSTITUTSPRODUKTER SOM SKALL UTFÖRAS ELLER I FÖRBINDELSE MED DETTA AVTAL ELLER ANVÄNDNING ELLER UTFÖRANDET AV PROGRAMVARAN, OM DENNA ÅTGÄRD FRÅN NÅGON KRAV BASERAT PÅ KONTRAKT, GARANTI, SKADOR (INKLUSIVE NÄRGÅRD), STRICT ANSVAR ELLER ANNAN, OCH VID LICENSÖREN HAR ANSVARS OM MÖJLIGHETEN FÖR DETTA TILLDELNING ELLER SKADA. Ovanstående begränsningar kommer att överväga och tillämpas även om någon begränsad ersättning som anges i det här avtalet är föremål för att ha misslyckats med sitt huvudsakliga syfte. I den utsträckning som den tillämpliga juridiska gränsen begränsar licensen8217s förmåga att upphäva några IMPLICERADE GARANTIER, SKALL DENNA ÅTGÄRDER EFFEKTIVA I DEN GEMENSAMMA ÅTGÄRDEN. 9. ALLMÄNNA Om någon bestämmelse i detta avtal skall anses vara ogiltig eller oförklarlig, ska återstoden av detta avtal förbli i kraft och i kraft. I den utsträckning inga uttryckliga eller underförstådda begränsningar är tillåtna enligt gällande lagar, ska dessa uttryckliga eller underförstådda begränsningar förbli i kraft och verkställa i den utsträckning som tillåts enligt sådana tillämpliga lagar. Detta avtal är det fullständiga och exklusiva avtalet mellan parterna i fråga om ämnet, vilket ersätter och ersätter alla tidigare avtal, meddelanden och överenskommelser (både skriftliga och muntliga) om sådant ämne. Parterna i detta avtal är oberoende entreprenörer och har varken befogenhet att binda den andra eller åta sig åtaganden på andra8217s vägnar. Om någon part inte bryr sig om att utöva eller verkställa någon av sina rättigheter enligt detta avtal kommer det att fungera som ett upphävande av sådana rättigheter. Eventuella villkor i någon inköpsorder eller annat beställningsdokument som är inkonsekvent med eller utöver villkoren i detta avtal avvisas härmed av Licensgivaren och anses vara null och utan effekt. Detta avtal tolkas och tolkas i enlighet med Schweiz lagar, utan hänsyn till principerna om lagkonflikt. Parterna samtycker härmed till den exklusiva jurisdiktion och platsen för domstolar i Zürich, Schweiz för att lösa eventuella tvister som uppstår eller är relaterade till detta avtal. 10. DEFINITIONER 8220Evaluering Använd8221 innebär användning av Programvaran enbart för utvärdering och provning av nya applikationer avsedda för din produktionsanvändning. 8220Produktion Use8221 innebär endast att använda programvaran för internt företagsändamål. Produktionsanvändning omfattar inte rätten att reproducera Programvaran för underlicensiering, återförsäljning eller distribution, inklusive, men inte begränsat, drift vid en tidsdelning eller distribution av Programvaran som en del av en ASP, VAR, OEM, distributör eller återförsäljare. 8220Software8221 betyder programvaran Licensor8217s och alla dess komponenter, dokumentation och exempel som ingår i Licensgivaren. 8220Error8221 innebär antingen (a) att Produkten inte uppfyller specifikationerna i dokumentationen, vilket leder till oförmåga att använda eller begränsar användningen av produkten, andor b) ett problem som kräver nya förfaranden, förtydliganden , ytterligare information och eller förfrågningar om produktförbättringar. 8220Medvetenhet Release8221 innebär Uppgraderingar och uppdateringar till produkten som görs tillgängliga för licensierade enligt de standardtjänster som definieras i avsnitt 5. 8220Update8221 betyder antingen en mjukvaruändring eller tillägg som korrigerar felet eller en procedur eller rutin som, när det observeras i produktens normala drift, eliminerar den praktiska negativa effekten av felet på Licenstagaren. 8220Upgrade8221 innebär en översyn av den produkt som Licensgivaren släpper ut till sina slutanvändarkunder, generellt under Supporttidsperioden, för att lägga till nya och olika funktioner eller för att öka produktens kapacitet. Uppgradering inkluderar inte frisläppandet av en ny produkt eller tilläggsfunktioner för vilka det kan finnas en separat laddning. Första intryck räknas. Var försiktig när du fyller i din ansökan. Vår antagningskommitté möts en gång i veckan för att bedöma sökande. Mest framgångsrika sökande skryter med en kombination av starka akademiker, extrautbildade intressen och en passion för att utmärka sig i sin framtida karriär. Platser på våra program fördelas på förstklassig basis. Tja, låt dig veta inom tio arbetsdagar om du lyckas. Lev, jobba, studera ambul resa utomlands. Kompromissa inte. Intern, lär dig, bly, växa förstärkare utforska i en global stad. Grip idag säkert i morgon. Kompromissa inte. Erfarenheten av en livstid förstärker kompetensen för att vara en livstid. Utforska förstärkare accelerera din karriär. Kompromissa inte. Upptäck din potentiella förstärkare på vägen för att förverkliga det. Vi är stolta medlemmar av följande föreningar: CI är en accelererad lärande leverantör. Vi erbjuder fördjupade erfarenhetsprogram för studenter, nyutexaminerade och tidiga karriärväxlare. Intressanta applikationer lever sällan i isolering. Om din försäljningsansökan måste kopplas till din inventeringsansökan, måste din inköpsansökan ansluta till en auktionswebbplats eller dina handdatorer som PIM måste synkronisera med företagskalendern servern, det verkar som om alla applikationer kan förbättras genom att integrera den med andra applikationer. Alla integrationslösningar måste hantera några grundläggande utmaningar: Nätverk är opålitliga. Integrationslösningar måste transportera data från en dator till en annan över nätverk. Jämfört med en process som körs på en enda dator måste distribuerad databas vara beredd att hantera en mycket större uppsättning möjliga problem. Ofta separeras två system som integreras av kontinenter och data mellan dem måste gå via telefonlinjer, LAN-segment, routrar, switchar, allmänna nätverk och satellitlänkar. Var och en av dessa steg kan orsaka förseningar eller avbrott. Nätverk är långsamma. Att skicka data över ett nätverk är flera ordningsorden långsammare än att göra ett lokalt metodsamtal. Att utforma en distribuerad lösning på samma sätt som du skulle kunna närma sig en enda applikation kan ha katastrofala prestationseffekter. Två tillämpningar är olika. Integrationslösningar måste överföra information mellan system som använder olika programmeringsspråk, operativplattformar och dataformat. En integrationslösning måste kunna kopplas till alla dessa olika teknologier. Ändring är oundviklig. Applikationer ändras över tiden. En integrationslösning måste hålla sig i takt med förändringar i de applikationer den ansluter till. Integrationslösningar kan enkelt fångas i en lavinverkan av förändringar om ett system ändras, alla andra system kan påverkas. En integrationslösning behöver minimera beroendet från ett system till ett annat genom att använda lös koppling mellan applikationer. Med tiden har utvecklare övervunnit dessa utmaningar med fyra huvudsakliga tillvägagångssätt: File Transfer En applikation skriver en fil som en annan senare läser. Applikationerna måste komma överens om filnamn och plats, formatet för filen, tidpunkten för när den ska skrivas och läsas och vem tar bort filen. Delad databas Flera program delar samma databasschema, som finns i en enda fysisk databas. Eftersom det inte finns någon duplicerad datalagring behöver ingen data överföras från en applikation till den andra. Remote Procedure Invocation En applikation exponerar en del av dess funktionalitet så att den kan nås på distans av andra applikationer som fjärrprocedur. Kommunikationen sker i realtid och synkront. Meddelanden En applikation publicerar ett meddelande till en gemensam meddelandekanal. Andra program kan läsa meddelandet från kanalen vid en senare tidpunkt. Applikationerna måste komma överens om en kanal och meddelandets format. Kommunikationen är asynkron. Medan alla fyra tillvägagångssätten löser i huvudsak samma problem har varje stil sina olika fördelar och nackdelar. Faktum är att applikationer kan integreras med flera stilar så att varje integrationspunkt utnyttjar den stil som passar bäst. Vad är meddelanden Den här boken handlar om hur man använder meddelandehantering för att integrera program. Ett enkelt sätt att förstå vad meddelandet gör är att överväga telefonsystemet. Ett telefonsamtal är en synkron form av kommunikation. Jag kan bara kommunicera med den andra parten om den andra parten är tillgänglig när jag lägger upp samtalet. Röstbrevlåda å andra sidan möjliggör asynkron kommunikation. Med röstbrevlåda, när mottagaren inte svarar, kan anroparen lämna ett meddelande senare när mottagaren (till sin bekvämlighet) kan lyssna på meddelandena i sin brevlåda. Röstbrevlådan låter uppringaren lämna ett meddelande nu så att mottagaren kan lyssna på det senare, vilket är mycket lättare än att försöka få uppringaren och mottagaren i telefon samtidigt. Röstbrevlådor (åtminstone en del av) ett telefonsamtal till ett meddelande och köar det för senare konsumtion är det i huvudsak hur meddelandet fungerar. Meddelanden är en teknik som möjliggör höghastighets, asynkron, program-till-program kommunikation med pålitlig leverans. Programmen kommunicerar genom att skicka paket med data som kallas meddelande s till varandra. Kanal s, även kända som köer, är logiska vägar som förbinder programmen och förmedlar meddelanden. En kanal beter sig som en samling eller en rad meddelanden, men en som delas magiskt över flera datorer och kan användas samtidigt av flera applikationer. En avsändare eller producent är ett program som skickar ett meddelande genom att skriva meddelandet till en kanal. En mottagare eller konsument är ett program som tar emot ett meddelande genom att läsa (och ta bort) det från en kanal. Meddelandet i sig är helt enkelt en slags datastrukturer som en sträng, en bytegrupp, en post eller ett objekt. Den kan tolkas helt enkelt som data, som beskrivningen av ett kommando som ska åberopas på mottagaren eller som en beskrivning av en händelse som inträffade i avsändaren. Ett meddelande innehåller faktiskt två delar, en rubrik och en kropp. Rubriken innehåller meta-information om meddelandet som skickade det, var det går etc. Denna information används av meddelandesystemet och ignoreras mest (men inte alltid) av applikationerna genom att använda meddelandena. Kroppen innehåller data som överförs och ignoreras av meddelandesystemet. När en applikationsutvecklare som använder meddelanden pratar om ett meddelande, hänvisar han vanligtvis till data i meddelandets kropp. Asynkrona meddelandearteritekturer är kraftfulla, men kräver att vi omprövar vår utvecklingsstrategi. Jämfört med de övriga tre integrationsmetoderna har relativt få utvecklare haft exponering för meddelandesystem och meddelandesystem. Som ett resultat är applikationsutvecklare i allmänhet inte så bekanta med idiom och särdrag hos denna kommunikationsplattform. Vad är en meddelandesystem Meddelandefunktioner tillhandahålls vanligtvis av ett separat mjukvarusystem som kallas ett meddelandesystem eller meddelandeorienterad middleware (MOM). Ett meddelandehanteringssystem hanterar meddelandet om hur ett databasystem hanterar datasistens. Precis som en administratör måste fylla i databasen med schemat för en applikationsdata måste en administratör konfigurera meddelandesystemet med de kanaler som definierar kommunikationsvägarna mellan programmen. Messagesystemet koordinerar och hanterar sedan sändning och mottagning av meddelanden. Det primära syftet med en databas är att se till att varje datapost är säkert kvarhållen, och det är också ett uppgiftssystems huvuduppgift att flytta meddelanden från avsändarens dator till mottagarens dator på ett tillförlitligt sätt. Anledningen till att ett meddelandesystem behövs för att flytta meddelanden från en dator till en annan är att datorer och de nätverk som ansluter dem är inneboende opålitliga. Bara för att en applikation är redo att skicka en kommunikation betyder det inte att den andra applikationen är redo att ta emot den. Även om båda programmen är klara, kan nätverket kanske inte fungera, eller kan misslyckas att skicka data korrekt. Ett meddelandesystem övervinner dessa begränsningar genom upprepade försök att sända meddelandet tills det lyckas. Under ideala omständigheter överförs meddelandet framgångsrikt vid första försöket, men omständigheterna är ofta inte idealiska. I huvudsak skickas ett meddelande i fem steg: Skapa Avsändaren skapar meddelandet och fyller det med data. Skicka Avsändaren lägger till meddelandet till en kanal. Lever Messagesystemet flyttar meddelandet från avsändarens dator till mottagarens dator, vilket gör det tillgängligt för mottagaren. Ta emot Mottagaren läser meddelandet från kanalen. Process Mottagaren extraherar data från meddelandet. Detta diagram illustrerar dessa fem överföringssteg, vilken dator som utför varje, och vilka steg som innefattar meddelandesystemet: Meddelandeöverföring Steg för steg Detta diagram illustrerar också två viktiga meddelandekoncept: Skicka och glöm I steg 2 skickar sändningsansökan meddelandet till meddelandekanalen. När sändningen är klar kan avsändaren fortsätta med annat arbete medan meddelandesystemet sänder meddelandet i bakgrunden. Avsändaren kan vara säker på att mottagaren så småningom kommer att få meddelandet och behöver inte vänta tills det händer. Spara och vidarebefordra I steg 2, när den sändande ansökan skickar meddelandet till meddelandekanalen, lagrar meddelandesystemet meddelandet på avsändarens dator, antingen i minnet eller på disken. I steg 3 levererar meddelandesystemet meddelandet genom att vidarebefordra det från avsändarens dator till mottagarens dator och sedan lagrar meddelandet återigen på mottagarens dator. Denna process för vidarebefordran kan upprepas många gånger, eftersom meddelandet flyttas från en dator till en annan tills den når mottagarens dator. Skapa, skicka, ta emot och bearbeta steg kan tyckas vara onödigt. Varför inte bara leverera data till mottagaren Genom att sätta in data som ett meddelande och lagra det i meddelandesystemet, delegerar applikationerna till meddelandesystemet ansvaret för att leverera data. Eftersom uppgifterna är inslagna som ett atommeddelande kan leveransen återställas tills den lyckas och mottagaren kan försäkra sig om att på ett tillförlitligt sätt mottaga exakt en kopia av data. Varför använda meddelanden Nu när vi vet vad meddelandet är, bör vi fråga: Varför använda meddelanden Som med någon sofistikerad lösning finns det inget enkelt svar. Det snabba svaret är att meddelandet är mer omedelbart än File Transfer. bättre inkapslad än Shared Database. och mer tillförlitlig än Remote Procedure Invocation. Men det är bara början på de fördelar som kan uppnås med hjälp av meddelanden. Speciella fördelar med meddelandet inkluderar: Fjärrkommunikation. Meddelanden möjliggör separata applikationer att kommunicera och överföra data. Två objekt som bor i samma process kan helt enkelt dela samma data i minnet. Att skicka data till en annan dator är mycket mer komplicerad och kräver att data kopieras från en dator till en annan. Det betyder att objekt måste serialiseras, dvs de kan konverteras till en enkel byte-ström som kan skickas över nätverket. Om fjärrkommunikation inte behövs behövs inte meddelanden en enklare lösning, t. ex. samtidiga samlingar eller delat minne är tillräckliga. PlatformLanguage Integration. Vid anslutning av flera datorsystem via fjärrkommunikation använder dessa system sannolikt olika språk, teknologier och plattformar, kanske för att de utvecklats över tiden av oberoende lag. Att integrera sådana divergerande applikationer kan kräva en demilitariserad zon av middleware för att förhandla mellan applikationerna, ofta med de lägsta gemensamma beteckningarna som platta datafiler med obskilda format. Under dessa omständigheter kan ett meddelandesystem vara en universell översättare mellan de program som arbetar med varje språk och plattform på sina egna villkor, men tillåter dem alla att kommunicera genom ett gemensamt meddelandeparametram. Denna universella anslutning är hjärtat i Message Bus-mönstret. Asynkron kommunikation. Meddelanden gör det möjligt att skicka och glömma kommunikationsåtgärder. Avsändaren behöver inte vänta på att mottagaren tar emot och bearbetar meddelandet, det behöver inte ens vänta på att meddelandesystemet ska leverera meddelandet. Avsändaren behöver bara vänta tills meddelandet skickas, t. ex. för att meddelandet ska sparas effektivt i kanalen av meddelandesystemet. När meddelandet är lagrat är avsändaren fritt att utföra annat arbete medan meddelandet överförs i bakgrunden. Mottagaren kanske vill skicka en bekräftelse eller återkomma till avsändaren, vilket kräver ett annat meddelande, vars leverans måste detekteras av en återkallningsmekanism på avsändaren. Variabel Timing. Med synkron kommunikation måste anroparen vänta på att mottagaren avslutar behandlingen av samtalet innan den som ringer kan få resultatet och fortsätta. På så sätt kan uppringaren bara ringa så snabbt som mottagaren kan utföra dem. Å andra sidan tillåter asynkron kommunikation att avsändaren skickar batchförfrågningar till mottagaren i sin egen takt och för mottagaren att konsumera förfrågningarna i sin egen olika takt. Detta gör det möjligt för båda programmen att köra med maximal genomströmning och inte slösa bort tid som väntar på varandra (åtminstone tills mottagaren går ur meddelanden för att bearbeta). Strypning. Ett problem med fjärrproceduren är att för många av dem på en enda mottagare samtidigt kan överbelasta mottagaren. Detta kan orsaka prestandadämpning och till och med för att mottagaren ska krascha. Asynkron kommunikation möjliggör för mottagaren att styra den hastighet vid vilken den förbrukar förfrågningar, för att inte bli överbelastad av för många samtidiga förfrågningar. Den negativa effekten på callers som orsakas av denna strypning minimeras eftersom kommunikationen är asynkron, så att uppringarna inte blockeras väntar på mottagaren. Tillförlitlig kommunikation. Meddelanden ger pålitlig leverans som ett fjärrproceduranrop (RPC) inte kan. Anledningen till att meddelandet är mer tillförlitligt än RPC är att meddelandet använder en butik och framåtriktat sätt att sända meddelanden. Uppgifterna förpackas som meddelanden, som är atomära, oberoende enheter. När avsändaren skickar ett meddelande lagrar meddelandesystemet meddelandet. Den levererar sedan meddelandet genom att vidarebefordra det till mottagarens dator, där det lagras igen. Lagring av meddelandet på avsändarens dator och mottagarens dator antas vara tillförlitlig. (För att göra det ännu mer tillförlitligt kan meddelandena lagras till disk i stället för minnet, se Garanterad leverans.) Det som är opålitligt är att vidarebefordra meddelandet från avsändarens dator till mottagarens dator, eftersom mottagaren eller nätverket kanske inte kör korrekt Meddelandesystemet övervinner detta genom att skicka meddelandet igen tills det lyckas. Med denna automatiska återgång kan meddelandesystemet övervinna problem med nätverket så att avsändaren och mottagaren inte behöver oroa sig för dessa detaljer. Avkopplad operation. Vissa program är speciellt utformade för att köra frånkopplat från nätverket, men ändå att synkronisera med servrar när en nätverksanslutning är tillgänglig. Sådana applikationer distribueras på plattformar som bärbara datorer, handdatorer och bilinstrument. Meddelanden är idealiska för att dessa synkroniserade data ska kunna synkroniseras, kan köras i samma takt som det skapas och väntar tills programmet återansluts till nätverket. Medling. Meddelandesystemet fungerar som en mediator i mediatormönstret GoF mellan alla program som kan skicka och ta emot meddelanden. En applikation kan använda den som en katalog över andra program eller tjänster som är tillgängliga för att integrera med. Om en applikation kopplas bort från de andra behöver den bara återansluta till meddelandesystemet, inte till alla andra meddelandeprogram. Meddelandesystemet kan användas för att tillhandahålla ett stort antal distribuerade anslutningar till en gemensam resurs, till exempel en databas. Meddelandesystemet kan använda överflödiga resurser för att tillhandahålla hög tillgänglighet, balansbelastning, omdirigera kring misslyckade nätverksanslutningar och stämma prestanda och kvaliteten på tjänsten. Trådhantering. Asynkron kommunikation betyder att en applikation inte behöver blockera medan man väntar på att en annan applikation ska utföra en uppgift, om inte den vill. Snarare än att blockera för att vänta på ett svar, kan den som ringer, använda en återuppringning som kommer att varna den som ringer när svaret kommer. (Se mönstret för begäran om svar.) Ett stort antal blockerade trådar eller trådar som blockerats under lång tid kan vara problematiska. För många blockerade trådar kan lämna programmet med för få tillgängliga trådar för att utföra verkligt arbete. Om en applikation med något dynamiskt antal blockerade trådar kraschar, när programmet startar om och återställer sitt tidigare tillstånd, kommer det att vara svårt att återställa dessa trådar. Med återuppringningar är de enda trådarna som blockerar ett litet, känt antal lyssnare som väntar på svar. Detta lämnar de flesta trådar tillgängliga för annat arbete och definierar ett känt antal lyssnartråden som lätt kan återupprättas efter en krasch. Så det finns ett antal olika anledningar att en ansökan eller ett företag kan dra nytta av meddelanden. Några av dessa är tekniska detaljer som applikationsutvecklare lättast hänför sig till, medan andra är strategiska beslut som resonerar bäst med företagsarkitekter. Vilka av dessa skäl är viktigast beror på aktuella krav för dina specifika applikationer. Det är alla bra skäl att använda meddelanden, så dra nytta av vilka skäl som ger dig mest nytta. Utmaningar för asynkrona meddelanden Asynkrona meddelandena är inte en integrationspanacea. Det löser många av utmaningarna för att integrera olika system på ett elegant sätt, men det introducerar också nya utmaningar. Några av dessa utmaningar är inneboende i den asynkrona modellen medan andra utmaningar varierar med den specifika implementeringen av ett meddelandesystem. Komplex programmeringsmodell. Asynkrona meddelanden kräver att utvecklare arbetar med en händelsestyrt programmeringsmodell. Applikationslogiken kan inte längre kodas i en enda metod som påkallar andra metoder, men logiken är nu uppdelad i ett antal händelsehanterare som svarar på inkommande meddelanden. Ett sådant system är mer komplext och svårare att utveckla och felsöka. Till exempel kan ekvivalenten för ett enkelt metodsamtal kräva ett förfrågningsmeddelande och en förfrågningskanal, ett svarmeddelande och en svarskanal, en korrelationsidentifierare och en ogiltig meddelandekö (som beskrivs i begäran-svar). Sekvensfrågor. Meddelandekanaler garanterar meddelandeleverans, men de garanterar inte när meddelandet kommer att levereras. Detta kan orsaka meddelanden som skickas i följd för att komma ur följd. I situationer där meddelandena beror på varandra måste särskild försiktighet vidtas för att återställa meddelandesekvensen. Synkrona scenarier. Inte alla applikationer kan fungera i skickat och glömt läge. Om en användare letar efter flygbiljetter kommer han eller hon att vilja se biljettpriset direkt, inte efter någon obestämd tid. Därför måste många meddelandesystem överbrygga klyftan mellan synkrona och asynkrona lösningar. (Se mönstret för begäran om svar.) Prestanda. Meddelandesystemen lägger till lite överhuvud för kommunikation. Det tar ansträngning att göra data till ett meddelande och skicka det och att ta emot ett meddelande och bearbeta det. Om du måste transportera en stor bit av data, kan det inte vara en smart idé att dela den i en liten bit av gazillion. Om en integrationslösning exempelvis behöver synkronisera information mellan två befintliga system, är det första steget vanligen att replikera all relevant information från ett system till det andra. För ett sådant massdatareplikationssteg är ETL (extrakt, transformera och ladda) verktyg mycket effektivare än meddelandetjänster. Meddelanden passar bäst för att systemen ska synkroniseras efter den första dataprofileringen. Begränsat plattformsstöd. Många proprietära meddelandesystem är inte tillgängliga på alla plattformar. Ofta är det lättare att FTP en fil till en annan plattform än att få tillgång till den via ett meddelandesystem. Leverantörslåsning. Många meddelandesystem implementeringar är beroende av proprietära protokoll. Även vanliga meddelandespecifikationer som JMS styr inte den fysiska implementeringen av lösningen. Till följd av detta förbinder olika meddelandesystem vanligtvis inte varandra. Detta kan leda till en helt ny integrationsutmaning: integrera flera integrationslösningar (se meddelandebroensmönstret.) Så, asynkrona meddelanden löser inte alla problem och kan även skapa några nya. Håll dessa konsekvenser i åtanke när du bestämmer vilka problem att lösa med hjälp av meddelanden. Tänkande Asynkront Meddelanden är en asynkron teknik, vilket möjliggör återgivning av leverans tills det lyckas. Däremot använder de flesta applikationer synkronfunktionssamtal till exempel: ett förfarande som kallar en delprocedur, en metod som kallar en annan metod eller ett förfarande som anropar en annan fjärr via ett fjärrproceduranrop (RPC) (t. ex. CORBA och DCOM). Synkrona samtal innebär att anropsprocessen stoppas medan underprocessen utför en funktion. Även i ett RPC-scenario, där det uppringda delproceduren körs i en annan process, blockerar den som ringer till delproceduren tillbaka kontrollen (och resultaten) till den som ringer. Vid användning av asynkrona meddelanden använder anroparen ett sändnings - och glömt tillvägagångssätt som låter det fortsätta att utföras efter att det skickat meddelandet. Som ett resultat fortsätter anropsproceduren att springa medan underproceduren åberopas. Synkron och asynkron samtal Semantik Asynkron kommunikation har ett antal konsekvenser. För det första har vi inte längre en enda tråd av körning. Flera trådar möjliggör delprocedurer att köras samtidigt, vilket kan förbättra prestanda och hjälpa till att se till att vissa delprocesser gör framsteg, även om andra delprocesser kan vänta på externa resultat. Samtidigt kan tråden också göra det svårare att felsöka. För det andra kommer resultaten (om några) via en återuppringning. Detta gör det möjligt för den som ringer att utföra andra uppgifter och meddelas när resultatet är tillgängligt, vilket kan förbättra prestanda. Men den som ringer måste kunna bearbeta resultatet även när det är mitt i andra uppgifter och det måste kunna använda resultatet för att komma ihåg det sammanhang där samtalet gjordes. För det tredje kan asynkrona delprocesser utföras i vilken ordning som helst. Återigen möjliggör detta ett delprocedur att göra framsteg, även om en annan inte kan. Men det innebär också att delprocesserna måste kunna köras oberoende i vilken ordning som helst, och den som ringer måste kunna avgöra vilket resultat som kommer från vilken delprocess och kombinera resultaten tillsammans. Så asynkron kommunikation har flera fördelar men kräver omprövning av hur ett förfarande använder sina delprocedurer. Distribuerade applikationer kontra integration Denna bok handlar om företagsintegration för att integrera oberoende applikationer så att de kan arbeta tillsammans. En företagsapplikation innehåller ofta en n-tierarkitektur (en mer sofistikerad version av en clienterverarkitektur) som gör det möjligt att distribuera det på flera datorer. Även om detta resulterar i processer på olika maskiner som kommunicerar med varandra, är detta applikationsfördelning, inte applikationsintegration. Varför betraktas en n-tierarkitektur som applikationsdistribution och inte applikationsintegration. För det första kopplar de kommunicerande delarna sig direkt till varandra, så att en nivå inte kan fungera utan de andra. För det andra tenderar kommunikationen mellan tier att vara synkron. För det tredje tenderar en applikation (n-tier eller atom) att ha mänskliga användare som bara accepterar ett snabbt systemsvar. Däremot är integrerade applikationer oberoende applikationer som kan löpa i sig, men koordinera med varandra på ett löst kopplat sätt. Detta gör det möjligt för varje applikation att fokusera på en omfattande uppsättning funktionalitet och ändå delegera till andra program för relaterad funktionalitet. Integrerade applikationer som kommunicerar asynkront behöver inte vänta på ett svar de kan fortsätta utan ett svar eller utföra andra uppgifter samtidigt tills svaret är tillgängligt. Integrerade applikationer tenderar att ha en bred tidsbegränsning, så att de kan arbeta med andra uppgifter tills ett resultat blir tillgängligt och därför är mer tålmodiga än de flesta mänskliga användare som väntar i realtid för ett resultat. Kommersiella meddelandesystem De uppenbara fördelarna med att integrera system med en asynkron meddelandehantering har öppnat en betydande marknad för programvaruleverantörer som skapar messaging middleware och tillhörande verktyg. Vi kan grovt gruppera meddelandeleverantörsprodukterna i följande fyra kategorier: Operativsystem. Meddelanden har blivit så vanligt att leverantörer har börjat integrera den nödvändiga programvaruinfrastrukturen i operativsystemet eller databasplattformen. Exempelvis innehåller operativsystemen Microsoft Windows 2000 och Windows XP tjänsteprogrammet Microsoft Message Queuing (MSMQ). Denna tjänst är tillgänglig via ett antal API, inklusive COM-komponenter och System. Messaging namespace, en del av Microsoft-plattformen. På samma sätt erbjuder Oracle Oracle AQ som en del av sin databasplattform. Applikationsservrar. Sun Microsystems införde först Java Messaging Service (JMS) i version 1.2 av J2EE-specifikationen. Sedan dess har praktiskt taget alla J2EE-applikationsservrar (såsom IBM WebSphere, BEA WebLogic, etc.) ett genomförande för denna specifikation. Sun levererar också en JMS-referensimplementering med J2EE JDK. EAI Suites. Produkter från dessa leverantörer erbjuder proprietarybut funktionellt richsuites som omfattar meddelanden, affärsprocessautomatisering, arbetsflöde, portaler och andra funktioner. Viktiga aktörer på denna marknad är IBM WebSphere MQ, Microsoft BizTalk, TIBCO, WebMethods, SeeBeyond, Vitria, CrossWorlds och andra. Många av dessa produkter inkluderar JMS som ett av de många klient-API-erna de stöder, medan andra leverantörer som SonicSoftware och Fioranofocus främst implementerar JMS-kompatibla meddelandecentraler. Web Services Toolkits. Webtjänster har fått mycket intresse för företagsintegrationssamhällena. Standardsorgan och konsortier arbetar aktivt med att standardisera tillförlitlig budskapsleverans via webbtjänster (dvs WS-Reliability, WS-ReliableMessaging, och ebMS). Ett växande antal leverantörer erbjuder verktyg som implementerar routing, transformation och hantering av webbtjänsterbaserade lösningar. Mönstren i denna bok är leverantörsoberoende och gäller för de flesta meddelandelösningar. Tyvärr tenderar varje säljare att definiera sin egen terminologi när man beskriver meddelandelösningar. I den här boken har vi strävat efter att välja mönsternamn som är teknik - och produktneutrala, men ändå beskrivande och lätta att använda konversationellt. Många meddelandeleverantörer har införlivat några av dessa böckermönster som funktioner i sina produkter, vilket förenklar tillämpningen av mönstren och accelererar lösningsutvecklingen. Läsare som är bekanta med en viss leverantörs terminologi kommer troligtvis att känna igen många av koncepten i den här boken. För att hjälpa dessa läsare att kartlägga mönsterspråket i den leverantörsspecifika terminologin, kartlägger följande tabeller de vanligaste mönternamnen till deras motsvarande produktnamn i några av de mest använda meddelandeprodukterna. Företagsintegrationsmönster Java Message Service (JMS) Mönsterformulär Den här boken är strukturerad som en uppsättning mönster som är organiserade i ett mönsterspråk. Böcker som designmönster. Mönsterorienterad programarkitektur. Core J2EE-mönster. och mönster av Enterprise Application Architecture har populärt begreppet att använda mönster för att dokumentera datorprogrammeringsteknik. Christopher Alexander pioneered begreppet mönster och mönster språk i hans böcker Ett mönster språk och ett tidlöst sätt att bygga. Varje mönster representerar ett beslut som läsaren måste göra och de överväganden som går in i det beslutet. Ett mönsterspråk är en webbsida av relaterade mönster där varje mönster leder till andra, vilket leder läsaren genom beslutsprocessen. Detta tillvägagångssätt är en kraftfull metod för att dokumentera en expertkunskap så att den lätt kan förstås och tillämpas av icke-experter. Ett mönsterspråk lär läsaren hur man löser ett gränslöst antal problem inom ett begränsat problemutrymme. Eftersom det övergripande problemet som löses är annorlunda varje gång, banan genom mönstren och hur de tillämpas är också unik. På så sätt har denna bok skrivits för alla som använder något meddelandeverktyg för alla applikationer, men kan tillämpas specifikt för dig och den specifika tillämpningen av meddelanden som du står inför. Att bara använda mönsterskrivet garanterar inte att en bok innehåller en mängd kunskaper. Det är inte bara nog för att helt enkelt säga: När du möter detta problem ska du tillämpa den här lösningen. För en läsare att verkligen lära sig från ett mönster måste det dokumenteras varför problemet är svårt att lösa, överväga möjliga lösningar som faktiskt inte fungerar bra och förklara varför lösningen som erbjuds är bäst tillgänglig. På samma sätt måste mönstren ansluta till varandra så att läsaren går från ett problem till det andra. På så sätt kan mönsterformen användas för att lära läsaren inte bara vilka lösningar som ska tillämpas, utan hur man löser problem som författaren inte kunde ha förutsagt. Dessa är mål som vi strävar efter att uppnå i den här boken. Mönster bör vara förskrivande, vilket innebär att de ska berätta vad du ska göra. De beskriver inte bara ett problem, och de beskriver inte bara hur man löser det, de berättar vad du ska göra för att lösa det. Varje mönster representerar ett beslut som läsaren måste göra: Ska jag använda Meddelanden Skulle ett svarmeddelande hjälpa mig här Mönstret och mönsterspråket är att hjälpa läsaren att fatta beslut som leder till en bra lösning för hans specifika problem, även om författarna hade inte det specifika problemet i åtanke, och även om läsaren inte har kunskapen och erfarenheten att utveckla den lösningen på egen hand. Det finns ingen universell mönsterform, olika böcker använder olika strukturer. Vi använde en stil som ligger ganska nära den asiatiska formuläret, som först populärades för datorprogrammering i Smalltalk Best Practice Patterns av Kent Beck. Vi gillar Alexandria-formuläret, eftersom det resulterar i mönster som är mer prosa-liknande. As a result, even though each pattern follows an identical, well-defined structure, the format avoids headings for each individual sub-section, which disrupt the flow of the discussion. To improve navigability, the format uses style elements such as bolding, indentation, and pictures to help the reader identify important sections even at a quick glance. This pattern language uses the following pattern structure: Name This is an identifier for the pattern that indicates what the pattern does. We chose names that can easily be used in a sentence that describes applying the pattern so that it is easy to reference the patterns concept in a conversation between designers. Icon Many patterns are associated with an icon in addition to the pattern name. Because many architects are used to communicating visually by using diagrams, we wanted to provide a visual language in addition to the verbal language. This visual language underlines the composability of the patterns as multiple pattern icons can be combined to describe the solution of a larger, more complex pattern. Context This explains what you might be working on that would make you likely to run into the problem that this pattern solves. The context sets the stage for the problem and often refers to other patterns you may have already applied. Problem This explains the difficulty you are facing, expressed as a question youre asking yourself, which this pattern solves. You should be able to read the problem statement and quickly determine if this pattern is relevant to your work. Weve formatted the problem to be one sentence, bold and indented. Forces The forces explore the constraints that make the problem difficult to solve. If it were easy, you wouldnt need a pattern. They often consider alternative solutions that seem promising but dont pan out, which helps show the value of the real solution. Solution This is a template that explains what you should do to solve the problem. It is not specific to your particular circumstances, but describes what to do in the variety of circumstances represented by the problem. If you understand a patterns problem and solution, you understand the pattern and dont necessarily need to read the other sections. Weve formatted the solution to be one sentence, bold and indented. Sketch One of the most appealing properties of the Alexandrian form is that each pattern contains a sketch that illustrates the solution. In many cases, just by looking at the pattern name and the sketch you can understand the essence of the pattern. We tried to maintain this style by inserting a solution picture, or sketch, after the solution statement of each pattern. Results This part expands upon the solution to explain the details of how to apply the solution and how it resolves the forces. It also addresses new challenges that may arise as a result of applying this pattern. Next This section lists other patterns to be considered after applying the current one. Patterns dont live in isolation the application of one pattern usually leads you to new problems that are solved by other patterns. This is what makes the collection a pattern language and not just a pattern catalog. Sidebars These sections discuss more detailed technical issues or variations of the pattern. We set these sections visually apart from the remainder of the text so you can easily skip them if they are not be relevant to your particular application of the pattern. Examples A pattern usually includes one or more examples of the pattern being applied or having been applied. An example may be as simple as naming a known use or as detailed as a large segment of sample code. Given the large number of available messaging technologies, we do not expect readers to be familiar with each technology used to implement an example. Therefore, we designed the patterns so that you can safely skip the example without loosing any critical content of the pattern. The beauty in describing solutions as patterns is that it not only teaches the reader how to solve the specific problems discussed, but also how to create designs that solve problems the authors were not even aware of. As a result, these patterns for messaging describe not only messaging systems that exist today, but may also apply to new ones created well after this book is published. Diagram Notation Integration solutions consist of many different piecesapplications, databases, endpoints, channels, messages, routers, etc. If we want to describe an integration solution, we need to define a notation that accommodates all these different components. To our knowledge, there is no widely used, comprehensive notation that is geared towards the description of all aspects of an integration solution. The Unified Modeling Language (UML) does a fine job of describing object-oriented systems with class and interaction diagrams, but it does not contain semantics to describe messaging solutions. The UML Profile for EAI UMLEAI enriches the semantics of collaboration diagrams to describe message flows between components. This notation is very useful as a precise visual description of a system that can serve as the basis for code generation as part of a model-driven architecture (MDA). We decided not to adopt this notation for two reasons. First, the UML Profile does not capture all the patterns described in our pattern language. Second, we were not looking to create a precise visual specification, but images that have a certain sketch quality to them. We wanted pictures that are able to convey the essence of a pattern to the reader at a quick glancevery much like Alexanders sketch . Thats why we decided to create our own notation. Luckily, unlike the more formal notation, ours does not require you to read a large manual. A simple picture should suffice: Visual Notation for Messaging Solutions This simple picture shows a message being sent to a component over a channel. We use the word component very loosely hereit can indicate an application that is being integrated, an intermediary that transforms or routes the message between applications, or a specific part of an application. Sometimes, we also depict a channel as a three-dimensional pipe if we want to highlight the channel itself. Often times we are more interested in the components and draw the channels as simple lines with arrow heads. The two notations are equivalent. We depict the message as a small tree with a round root and nested, square elements. The tree elements can be shaded or colored to highlight their usage in a particular pattern. Many messaging systems allow messages to contain tree-like data structures, for example XML documents. Also, depicting messages in this way allows us to provide a quick visual description of transformation patternsit will be easy to show a pattern that adds, re-arranges or removes fields from the message. When we describe application designsfor example, messaging endpoints or examples written in C or Javawe do use standard UML class and sequence diagrams to depict the class hierarchy and the interaction between objects. The UML notation is widely accepted as the standard way of describing these types of solutions (if you need a refresher on UML, have a look at UML ). Examples and Interludes We have tried to underline the broad applicability of the patterns by including implementation examples using a variety of integration technologies. The potential downside of this approach is that you may not be familiar with each technology that is being used in an example. Thats why we made sure that reading the examples is strictly optional all relevant points are discussed in the pattern description. Therefore, you can safely skip the examples without risk of losing out on important detail. Also, where possible, we provided more than one implementation example using different technologies. When presenting example code we focused on readability over runnability. A code segment can help remove any potential ambiguity left by the solution description and many application developers and architects prefer looking at 30 lines of code as opposed to reading many paragraphs of text. To support this intent we often only show the most relevant methods or classes of a potentially larger solution. We also omitted most forms of error checking to highlight the core function implemented by the code. Most code snippets do not contain in-line comments as the code is explained in the paragraphs before and after the code segment. Providing a meaningful example for a single integration pattern is challenging. Enterprise integration solutions typically consist of a number of heterogeneous components, spread across multiple systems. Likewise, most integration patterns do not operate in isolation but rely on other patterns to form a meaningful solution. To highlight the collaboration between multiple patterns we included more comprehensive examples as interludes at the end of the major sections of the book. These solutions illustrate many of the trade-offs involved in designing a more comprehensive messaging solution. All code samples should be treated as illustrative tools only and not as a starting point for development of an integration solution. For example, almost all examples lack any form of error checking or concern for robustness, security, or scalability. We tried as much as possible to base the examples on software platforms that are available free of charge or as a trial version. In some cases, we used commercial platforms (such as TIBCO ActiveEnterprise or Microsoft BizTalk) to illustrate the difference between developing a solution from scratch and using a commercial tool. We presented those example in such a way that they are educational even if you do not have access to the required run-time platform. For many examples, we use relatively bare-bones messaging frameworks such as JMS or MSMQ. This allows us to be more explicit in the example and focus on the problem at hand instead of distracting from it with all the features a more complex middleware toolset may provide. The Java examples in this book are based on the JMS 1.1 specification, which is part of the J2EE 1.4 specification. By the time this book is published, most messaging and application server vendors will support JMS 1.1. You can download Suns reference implementation of the JMS specification from Suns Web site: java. sunj2ee . The Microsoft examples are based on Version 1.1 of the Framework and are written in C. You can download the Framework SDK from Microsofts Web site: msdn. microsoftnet . Organization of this Book The pattern language in this book, as with any pattern language, is a web of patterns referring to each other. At the same time, some patterns are more fundamental than others, forming a hierarchy of big-concept patterns that lead to finer-detailed patterns. The big-concept patterns form the load-baring members of the pattern language. They are the main ones, what we term root patterns . that provide the foundation of the language and support the other patterns. This book groups patterns into chapters by level-of-abstraction and by topic area. The following diagram shows the root patterns and their relationship to the chapters of the book. Relationship of Root Patterns and Chapters The most fundamental pattern is Messaging thats what this whole book is about. It leads to the six root patternswhich are in the Messaging Systems chapternamely Message Channel . Message . Pipes and Filters . Message Router . Message Translator . and Message Endpoint . In turn, each of these root patterns leads to its own chapter in the book (except Pipes and Filters . which is not specific to messaging but is the basis of the routing and transformation patterns). The pattern language is divided into eight chapters, which follow the hierarchy described above: Chapter 1: Integration Styles This chapter reviews the different approaches available for integrating applications, including Messaging . Chapter 2: Messaging Systems This chapter reviews the six root messaging patterns, giving an overview of the entire pattern language. Chapter 3: Messaging Channels Applications communicate via channels. Channels define the logical pathways a message can follow. This chapter shows how to determine what channels your applications need. Chapter 4: Message Construction Once you have message channels, you need messages to send on them. This chapter explains the different ways messages can be used and how to take advantage of their special properties. Chapter 5: Message Routing As a messaging topography becomes more complex, senders know less and less about who should receive their messages. Rather, they send the messages to intermediate applications that send them to others until the messages finally find their way to their final destination. This chapter teaches you the responsibilities of these routing applications. Chapter 6: Message Transformation Independently developed applications often dont agree on messages formats, on the form and meaning of supposedly unique identifiers, and even the character encoding to be used. Therefore, intermediate components are needed to convert messages from the form one application produced to that which other applications will consume. This chapter shows how to design these transformer applications. Chapter 7: Messaging Endpoints Many applications were not designed to participate in a messaging solution. As a result, they must be explicitly connected to the messaging system. This section describes a messaging layer in the applications that is responsible for sending and receiving the messages, making your application an endpoint for messages. Chapter 8: System Management Once we have a messaging system in place to integrate our applications, how do we make sure that its running correctly and doing what we want This chapter explores how to test and monitor a running messaging system. These eight chapters go together to teach you what you need to know about connecting applications using messaging. Getting Started With any book that has a lot to teach, its hard to know where to start, both for the authors and the readers. Reading all of the pages straight through assures covering the entire subject area, but isnt the quickest way to get to the issues that are of the most help. Starting with a pattern in the middle of the language can be like starting to watch a movie thats half over you see whats happening but dont understand what it means. Luckily, the pattern language is formed around root patterns (as described earlier). These root patterns collectively provide an overview of the pattern language, and individually provide starting points for delving deep into the details of messaging. To get an overall survey of the language without reviewing all of the patterns, start with reviewing the root patterns. To jump into the middle of the language, jump in at a root pattern, a place where the language has finished discussing one major topic and is now starting another. Chapter 1: Integration Styles provides an overview of the four main application integration techniques and settles on Messaging as being the best overall for many integration opportunities. Read this chapter if you are unfamiliar with issues involved in application integration and the pros and cons of the various approaches that are available. If you just want to know whats so great about messaging, go straight to that pattern. If youre already convinced that messaging is the way to go and want to get started with how to use messaging, you can skip the first chapter completely. Chapter 2: Messaging Systems contains all of this pattern languages root patterns (except Messaging . which is in the first chapter). For an overview of the pattern language, read (or at least skim) all of the patterns in this chapter. To dive deep on a particular topic, read its root pattern, then go to the patterns mentioned in its next section at the end of the pattern those next patterns will all be in a chapter named after the root pattern. The root patterns in this language are: Messaging This is the 1 root pattern for the entire book: What is messaging, what problem does it solve, and how does it solve it Message Channel What is the structure in a messaging system that conveys messages from the sender to the receiver How do you know which ones your applications need Message How does information get communicated from a sender to a receiver Pipes and Filters How can intermediate steps be performed after a message is sent but before it is received Message Router If the sender does not know ultimately where the message should go, how can the messaging system get it there Message Translator If the sender and receiver do not agree on the message format, how can they communicate Message Endpoint How do the applications that send and receive messages connect to the messaging system After the first two chapters, different types of messaging developers may be most interested in different chapters, based on the specifics of how each group uses messaging to perform integration: System Administrators may be most interested in Chapter 3: Messaging Channels . the guidelines for what channels to create, and Chapter 8: System Management . guidance on how to maintain a running messaging system. Application Developers should look at Chapter 7: Messaging Endpoints to learn how integrate an application with a messaging system, and Chapter 4: Message Construction to learn what messages to send when. System Integrators will gain the most from Chapter 5: Message Routing how to direct messages to the proper receiversand Chapter 6: Message Transformation how to convert messages from the senders format to the receivers. Keep in mind that when reading a pattern, if youre in a hurry, start by just reading the problem and solution (the two sentences in bold). This will give you enough information to determine if the pattern is of interest to you right now, and if you already know the pattern. If you do not know the pattern and it sounds interesting, go ahead and read the other parts. Also remember that this is a pattern language, so the patterns are not necessarily meant to be read in the order theyre presented in the book. The books order teaches you about messaging by considering all of the relevant topics in turn and discussing related issues together. To use the patterns to solve a particular problem, start with an appropriate root pattern. Its context explains what patterns need to be applied before this one, even if theyre not the ones immediately preceding this one in the book. Likewise, the next section (the last paragraph of the pattern) describes what patterns to consider applying after this one, even if theyre not the ones immediately following this one in the book. Use the web of interconnected patterns, not the linear list of book pages, to guide you through the material. Supporting Web Site Please look for companion information to this book plus related information on enterprise integration at our Web site: enterpriseintegrationpatterns. You can also e-mail your comments, suggestions and feedback to us at authorsenterpriseintegrationpatterns. You should now have a good understanding of the following concepts which are fundamental to the material in this book: What messaging is What a messaging system is Why to use messaging How asynchronous programming is different How application integration is different from application distribution What types of commercial products contain messaging systems You should also have a feel for how this book is going to teach you how to use messaging: The role patterns have in structuring the material The meaning of the custom notation used in the diagrams The purpose and scope of the examples The organization of the material How to get started learning the material Now that you understand the basic concepts and how the material will be presented, you are now ready to start learning how to integrate applications using messaging. Vill du hålla dig uppdaterad Följ bloggen. Vill du läsa mer i djupet Kolla in mina artiklar. Vill du se mig live Se var jag talar nästa. Hitta den fullständiga beskrivningen av detta mönster i: Enterprise Integration Patterns Gregor Hohpe och Bobby Woolf ISBN 0321200683 650 sidor Addison-Wesley Från Enterprise Integration till Enterprise Transformation: Min nya bok beskriver hur arkitekter kan spela en kritisk roll i IT-omvandling genom att tillämpa sina tekniska, kommunikation och organisatoriska färdigheter med 37 episoder från storskalig företags IT. Delar av den här sidan är tillgängliga under Creative Commons Attribution-licens. Du kan återanvända mönsterikonen, mönsternamnet, problemet och lösningsutskrifterna (med fetstil) och skissen enligt denna licens. Andra delar av texten, till exempel textkapitel eller hela mönstret, är skyddade av upphovsrätten.

Comments