<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Splatch's devblog &#187; ESB</title>
	<atom:link href="http://blog.dywicki.pl/category/esb/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dywicki.pl</link>
	<description>Pragmatyzm kontrolowany</description>
	<lastBuildDate>Thu, 01 Dec 2011 15:47:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Apache ServiceMix, Open Source ESB</title>
		<link>http://blog.dywicki.pl/2008/06/22/apache-servicemix-open-source-es/</link>
		<comments>http://blog.dywicki.pl/2008/06/22/apache-servicemix-open-source-es/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 18:23:35 +0000</pubDate>
		<dc:creator>Łukasz Dywicki</dc:creator>
				<category><![CDATA[ESB]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Moje publikacje]]></category>
		<category><![CDATA[ServiceMix]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.dywicki.pl/?p=215</guid>
		<description><![CDATA[Jakiś czas temu, jeszcze podczas pracy w poprzedniej firmie przypadło mi zadanie podpięcia się pod magistralę usług opartą o Apache Service Mix (SMX). Był to wówczas dla mnie temat zupełnie nowy, ba nawet nie wiedziałem z czym to się je. :) Koniec końców jednak podpięcie pod ESB (Enterprises Service Bus) nie było w ogóle trudne. [...]]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu, jeszcze podczas pracy w poprzedniej firmie przypadło mi zadanie podpięcia się pod magistralę usług opartą o <a href="http://servicemix.apache.org">Apache Service Mix</a> (SMX). Był to wówczas dla mnie temat zupełnie nowy, ba nawet nie wiedziałem z czym to się je. :) Koniec końców jednak podpięcie pod <acronym title="Enterprise Service Bus">ESB</acronym> (Enterprises Service Bus) nie było w ogóle trudne. Po jakimś czasie i drobnych przetasowaniach na płaszczyźnie zawodowej zająłem się SMX-em nie jako klient magistrali a osoba implementująca usługi na szynie a ten wpis jest drobną przeróbką prezentacji, którą przygotowałem w pracy.<br />
<span id="more-215"></span></p>
<h3>Czym jest <acronym title="Enterprise Service Bus">ESB</acronym></h3>
<p>Jednoznaczne określenie terminu <acronym title="Enterprise Service Bus">ESB</acronym> nie jest łatwe, ponieważ wokół tego tematu rozpętana została burza marketingowa. Jedni uważają je za oś <acronym title="Service Oriented Architecture">SOA</acronym> (Service Oriented Architecture) inni jako zło konieczne w dużych instytucjach.</p>
<p>Dlatego pomijając teorię przejdźmy do najistotniejszych cech, jakie oferuje <acronym title="Enterprise Service Bus">ESB</acronym>, niezależnie od producenta oraz osoby definiującej pojęcie. Sam nie chciałbym wdawać się w dyskusję na temat postrzegania i <acronym title="Enterprise Service Bus">ESB</acronym> i <acronym title="Service Oriented Architecture">SOA</acronym>. </p>
<p><img src="http://blog.dywicki.pl/wp-content/uploads/2008/06/esb.jpg" alt="" title="esb" width="500" height="378" class="aligncenter size-full wp-image-217" /><br />
<em>Źródło &#8211; <a href="http://www.codeplex.com/esb">CodePlex</a></em></p>
<p>Na załączonym wyżej obrazku widać typową strukturę logiczną w oparciu o <acronym title="Enterprise Service Bus">ESB</acronym>. Z lewej strony mamy komercyjne rozwiązanie – <a href="http://www-306.ibm.com/software/integration/wmq/">MQ Series</a> firmy <a href="http://www.ibm.com/us/">IBM</a>, dalej idąc dołem, widzimy bazę danych, serwer pocztowy a na końcu mainframe. U góry natomiast pojawiają się klienci.</p>
<h3>Ciąg dalszy</h3>
<p>Na bazie tego obrazku można powiedzieć co nieco o tym, czym owa niebieska rurka symbolizująca <acronym title="Enterprise Service Bus">ESB</acronym> jest:</p>
<ul>
<li>Jest to z pewnością centralny rejestr usług firmy, dzięki któremu nie jest konieczne wiązanie aplikacji między sobą. Wiąże się je tylko i wyłącznie z jednym elementem – z magistralą.</li>
<li>Kolejny ważny punkt, to most pomiędzy protokołami. W dobie, gdy wszyscy żyją już Web Services nie można zapomnieć o innych sposobach komunikacji – poczynając od poczciwej <a href="http://pl.wikipedia.org/wiki/CORBA">Corby</a> po kolejki JMS czy też odczyt zasobów z <acronym title="File Transfer Protocol">FTP</acronym>.</li>
<li>Transformacja komunikatów to opcjonalna czynność, której nie widać na wyżej wymienionym obrazku. Jest ona wykonywana pod maską, wewnątrz magistrali, w zależności od potrzeb. W chwili gdy mamy komunikaty z systemu A do systemu B możemy wszystko sprowadzić do jednego uniwersalnego <acronym title="Application Programming Interface">API</acronym> danych.</li>
<li>Inteligentny router informacji. Większość magistral ma coś wspólnego z pojęciem EIP, czyli <a href="http://www.enterpriseintegrationpatterns.com/">Enterprise Integration Patterns</a>. Jednym z tych wzorców jest <a href="http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html">Content Based Router</a>, to znaczy w zależności od kształtu, zawartości komunikatu, nagłówka, fragmentu, czegokolwiek możemy odbijać komunikat w różnych kierunkach. Dalej z wzorców można wymienić <a href="http://www.enterpriseintegrationpatterns.com/Filter.html">Message Filter</a>, <a href="http://www.enterpriseintegrationpatterns.com/RecipientList.html">Recipient List</a>, <a href="http://www.enterpriseintegrationpatterns.com/RoutingTable.html">Routing Slip</a>, <a href="http://www.enterpriseintegrationpatterns.com/WireTap.html">Wire Tap</a>, <a href="http://www.enterpriseintegrationpatterns.com/Sequencer.html">Splitter</a>, <a href="http://www.enterpriseintegrationpatterns.com/Resequencer.html">Resequencer</a> itd.</li>
<li>Integrator procesów biznesowych (bardziej marketingowo) – po pierwsze odwzorowanie usług magistrali do czynności biznesowych w organizacji a po drugie wsparcie dla procesorów reguł biznesowych (<a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsbpel">WS-BPEL</a>).</li>
</ul>
<h3>Service Mix jako <acronym title="Enterprise Service Bus">ESB</acronym></h3>
<p>Mając zestaw wyżej wymienionych cech możemy przejść do omówienia projektu Apache Service Mix.<br />
Może na początku kilka słów o tym, czym jest JBI, ponieważ pojawia się sam skrót, ale nie ma jego omówienia.<br />
Otóż, <a href="http://jcp.org/en/jsr/detail?id=208">JBI</a> w rozwinięciu oznacza Java Business Integration. Jest to standard przyjęty w ramach <a href="http://jcp.org/">Java Community Process</a> w celu określenia norm budowania rozwiązań <acronym title="Service Oriented Architecture">SOA</acronym> (znów buzzword). Pomijając politykę wielkich korporacji oraz marketing przejdźmy do elementów, które standard ten określa:<br />
<img src="http://blog.dywicki.pl/wp-content/uploads/2008/06/msgflow3.png" alt="Źródło: Java.net" title="Komponenty JBI" align="center" /><br />
<em>Źródło <a href="http://download.java.net/general/open-esb/docs/jbi-admin-guide/">Open <acronym title="Enterprise Service Bus">ESB</acronym> Starter Kit</a></em></p>
<ul>
<li>Typy komponentów:
<ol>
<li>Service Engine (SE) – backend do obsługi zapytań.</li>
<li>Binding Components (BC) – frontend, do nasłuchiwania w danym standardzie.</li>
<li>Shared Libraries (SL) – kod współdzielony przez w/w komponenty.
<li>
<li>Service Assembly (SA) – zbiór usług rozumianych jako jedność przez magistralę (zwykle para BC+SE).</li>
</ol>
<li>Normalized Message Router – jest to serce rozwiązania opartego o JBI, ponieważ w nim są transportowane komunikaty. To on zapewnia przepływ informacji z komponentów bindujących do silników.</li>
<li>Message Exchange Patterns – w oparciu o definicję dla <acronym title="Simple Object Access Protocol">SOAP</acronym> JBI przewiduje następujące typy komunikatów:</li>
<ol>
<li>In-Only – tylko wejście, usługa nie zwraca żadnej odpowiedzi
<li>Rebust In-Only – zwrócony zostanie status po obsłudze zapytania bądź wyjątek.
<li>In-Out – standardowa obsługa wejście-wyjście.
<li>In Optional-Out – wejście z niewiążącą (nieobowiązkową) odpowiedzią.
    </ol>
</ul>
<p>Dostępnych jest kilka implementacji JBI:</p>
<ul>
<li><a href="https://open-esb.dev.java.net/">Open <acronym title="Enterprise Service Bus">ESB</acronym></a></li>
<li><a href="http://servicemix.apache.org">Apache Service Mix</a></li>
<li><a href="http://open.iona.com/products/enterprise-servicemix/">FUSE <acronym title="Enterprise Service Bus">ESB</acronym></a> (na bazie Service Mix)</li>
<li><a href="http://www.bostechcorp.com/products_cb_esb.htm">Bostech Chain Builder <acronym title="Enterprise Service Bus">ESB</acronym></a></li>
<li><a href="http://mule.mulesource.org/display/MULE/Home">Mule</a></li>
<li><a href="http://www.jboss.org/jbossesb/">JBoss <acronym title="Enterprise Service Bus">ESB</acronym></a></li>
<li><a href="http://www.oracle.com/products/middleware/index.html">Fusion Middleware</a></li>
<li><a href="http://www.tibco.com/software/soa/activematrix_service_bus/default.jsp">ActiveMatrix Service Bus</a></li>
</ul>
<h3>Service Mix od środka</h3>
<p>Wewnątrz Service Mix jest spięciem kilku potężnych projektów, rozwijanych od dłuższego czasu, które zdobyły już renomę i popularność. Między innymi można wyróżnić:</p>
<ul>
<li>Pierwszy z tych projektów to <a href="http://springframework.org/">Spring Framework</a>, rozwijany od bodajże 2000 roku, z powodzeniem rywalizujący z architekturami opartymi o EJB. Spring jest nie tylko mechanizmem konfiguracyjnym ale również zbiorem bardzo dobrych komponentów umożliwiających szereg operacji (bazy danych, JMS, przetwarzanie wsadowe, Web Services etc).</li>
<li>Drugi, bardzo ważny projekt to <a href="http://activemq.apache.org/">Active MQ</a>. Największa i najpopularniejsza otwarta implementacja standardu JMS. Jest on używany wewnątrz Service Mix-a jako transporter komunikatów w Normalized Message Router jak i do obsługi końcówek JMS.<br />
        &#8211; Wymieniony nieco niżej pod-projekt Active MQ to <a href="http://activemq.apache.org/camel/">Camel</a>. Jest to szkielet przeznaczony do tworzenia reguł routingu. Wspiera różnorakie transporty (<acronym title="HyperText Transfer Protocol">HTTP</acronym>, JMS, JBI, <acronym title="Microsoft">MS</acronym> MQ itp.).</li>
<li><a href="http://geronimo.apache.org/xbean/">XBean</a> jest fragmentem projektu Apache Geronimo (serwer aplikacyjny ze stajni Apache) przeznaczonym do tworzenia konfiguracji i zarządzania komponentami. Jest zbudowany w oparciu o Springa.</li>
<li><a href="http://cxf.apache.org/">Apache CXF</a> jest stosunkowo nowym projektem, który jest używany poprzez Service Mix w celu obsługi zapytań <acronym title="Simple Object Access Protocol">SOAP</acronym> (chociaż możliwe jest użycie innego komponentu).</li>
<li><a href="http://ode.apache.org/">Apache ODE</a> jest silnikiem reguł biznesowych w oparciu o WS-BPEL.</li>
<li>JBoss Drools jest kolejnym procesorem reguł biznesowych. Może być użyty do routingu. Jest dostępny plugin pozwalający na łatwą pracę z tą technologią.</li>
</ul>
<h3>Możliwości Service Mix</h3>
<p>Wyżej wymienione projekty są używane w Service Mix w celu uzyskania typowych funkcjonalności ESB:</p>
<ul>
<li><a href="http://servicemix.apache.org/servicemix-jms.html">JMS</a>, czyli obsługa kolejek</li>
<li><a href="http://servicemix.apache.org/servicemix-bpe.html">WS-BPEL</a>, obsługa reguł biznesowych</li>
<li>Web Services przy pomocy <a href="http://servicemix.apache.org/servicemix-cxf-se.html">CXF</a> jak i modułu <a href="http://servicemix.apache.org/servicemix-jsr181.html">JSR-181</a></li>
<li><a href="http://servicemix.apache.org/servicemix-saxon.html">Transformacje</a> <acronym title="eXtensible Stylesheet Language Transformations">XSLT</acronym> oraz XQuery (w oparciu o Saxona)</li>
<li><a href="http://servicemix.apache.org/servicemix-file.html">File Drop</a> to odczyt i zapis do plików dostępnych lokalnie jak i zdalnie (<a href="http://servicemix.apache.org/servicemix-ftp.html"><acronym title="File Transfer Protocol">FTP</acronym></a>)</li>
<li>Obsługa protokołu <a href="http://servicemix.apache.org/servicemix-xmpp.html">XMPP</a> pozwala na łatwą integrację z komunikatorami zbudowanymi w oparciu o Jabbera.</li>
<li>Dostęp do poczty przy pomocy modułu <a href="http://servicemix.apache.org/servicemix-mail.html">servicemix-mail</a></li>
<li>Komponenty programowe:</li>
<ul>
<li>Dają <a href="http://servicemix.apache.org/servicemix-bean.html">możliwość dopisania</a> własnych &#8220;endpointów&#8221;, czyli implementacji docelowych usług bądź pośredników.</li>
<li>Dodatkowe funkcjonalności (cache, rss, walidacja)</li>
</ul>
<li><a href="http://servicemix.apache.org/servicemix-scripting.html">Języki skryptowe</a> (min <a href="http://groovy.codehaus.org/">Groovy</a>)</li>
</ul>
<h3><acronym title="Enterprise Service Bus">ESB</acronym> – dlaczego Open Source</h3>
<p>Wybór Service Mix-a nie był podyktowany przypadkiem. Jest to bowiem najpopularniejsze tego typu rozwiązanie z otwartym kodem źródłowym. Co więcej, nie jest to projekt rozwijany przez osoby bez doświadczenia, pozostawiony bez wsparcia.<br />
Otwarty kod ułatwia przede wszystkim adaptację tego rozwiązania do potrzeb organizacji a nie odwrotnie – organizacji do potrzeb magistrali. W razie potrzeb jesteśmy w stanie dopisać własne komponenty, obsługę mniej standardowych protokołów na bazie dostarczonych interfejsów czy to w Service Mix czy to w Camelu.<br />
Przyjęte standardy gwarantują ciągłość rozwoju oraz ułatwiają integrację (<a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/">JMX</a> umożliwia łatwe podpięcie konsoli administracyjnej), podczas gdy <a href="http://en.wikipedia.org/wiki/J2EE_Connector_Architecture">J2EE Connector Architecture</a> definiuje kontrakty (zarządzanie połączeniami, transakcjami, bezpieczeństwem).<br />
Nie bez znaczenia jest również koszt, jaki organizacja ponosi w przypadku zdecydowania się na otwarte rozwiązanie. Rozpoczęcie prac z Service Mix-em kosztuje 0 PLN. Każdy, bez rejestracji, podawania jakichkolwiek danych może pobrać źródła albo gotowe dystrybucje i uruchomić je na swoim komputerze. W chwili gdy istnieje takie zapotrzebowanie, organizacja posiada kompetencje i skromny budżet to taka konfiguracja początkowo jest optymalna. Z biegiem czasu gdy zaistnieje konieczność wsparcia czy szkoleń to są one oferowane przez firmę IONA, która jest zaangażowana w rozwój Service Mix-a.</p>
<h3>Service Mix a bezpieczeństwo</h3>
<p>Większość, jeśli nie wszystkie rozwiązania w Javie, które wiążą się z kryptografią są oparte na JCA – <a href="http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html">Java Cryptography Architecture</a>. Jest to zestaw interfejsów oraz ich implementacji zawierający implementację najpopularniejszych algorytmów kryptograficznych jak i <acronym title="Application Programming Interface">API</acronym> umożliwiające tworzenie własnych rozszerzeń (<a href="http://java.sun.com/javase/technologies/security/">JCE</a>).<br />
Standard autoryzacji i uwierzytelniania w Javie to JAAS (<a href="http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html">Java Authentication and Authorization Service</a>). W oparciu o niego jest budowanych większość rozwiązań związanych z bezpieczeństwem. Nawet największe alternatywy takie jak <a href="http://www.acegisecurity.org/">Acegi Security</a> (obecnie Spring Security posiadają adaptery integrujące je ze standardem). Przy użyciu dostępnych interfejsów możliwe jest dostarczenie własnej implementacji usługi obsługującej autoryzację bądź uwierzytelnianie użytkowników/systemów.<br />
Bezpieczeństwo usług sieciowych jest zależne od wybranego komponentu Service Mix. Pełne wsparcie dla WS-Security oferują komponenty zbudowane w oparciu o Apache CXF (szyfrowanie, podpisywanie komunikatów). Z innych standardów CXF wspiera także WS-Policy, WS-Addressing.<br />
Szyfrowane połączenia są łatwe do uzyskania przy pomocy komponentu <a href="http://servicemix.apache.org/servicemix-http.html">servicemi-http</a>.<br />
Dostępne zabezpieczenia na poziomie wirtualnej maszyny Javy to certyfikowanie (podpisywanie) kodu modułów oraz konfiguracja Security Managera (umożliwia wyłączenie dostępu do pakietów/klas/metod).</p>]]></content:encoded>
			<wfw:commentRss>http://blog.dywicki.pl/2008/06/22/apache-servicemix-open-source-es/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

