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. 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.
Jednoznaczne określenie terminu ESB nie jest łatwe, ponieważ wokół tego tematu rozpętana została burza marketingowa. Jedni uważają je za oś SOA (Service Oriented Architecture) inni jako zło konieczne w dużych instytucjach.
Dlatego pomijając teorię przejdźmy do najistotniejszych cech, jakie oferuje ESB, niezależnie od producenta oraz osoby definiującej pojęcie. Sam nie chciałbym wdawać się w dyskusję na temat postrzegania i ESB i SOA.
Źródło – CodePlex
Na załączonym wyżej obrazku widać typową strukturę logiczną w oparciu o ESB. Z lewej strony mamy komercyjne rozwiązanie – MQ Series firmy IBM, dalej idąc dołem, widzimy bazę danych, serwer pocztowy a na końcu mainframe. U góry natomiast pojawiają się klienci.
Na bazie tego obrazku można powiedzieć co nieco o tym, czym owa niebieska rurka symbolizująca ESB jest:
Mając zestaw wyżej wymienionych cech możemy przejść do omówienia projektu Apache Service Mix.
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.
Otóż, JBI w rozwinięciu oznacza Java Business Integration. Jest to standard przyjęty w ramach Java Community Process w celu określenia norm budowania rozwiązań SOA (znów buzzword). Pomijając politykę wielkich korporacji oraz marketing przejdźmy do elementów, które standard ten określa:
Źródło Open ESB Starter Kit
Dostępnych jest kilka implementacji JBI:
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ć:
Wyżej wymienione projekty są używane w Service Mix w celu uzyskania typowych funkcjonalności ESB:
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.
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.
Przyjęte standardy gwarantują ciągłość rozwoju oraz ułatwiają integrację (JMX umożliwia łatwe podpięcie konsoli administracyjnej), podczas gdy J2EE Connector Architecture definiuje kontrakty (zarządzanie połączeniami, transakcjami, bezpieczeństwem).
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.
Większość, jeśli nie wszystkie rozwiązania w Javie, które wiążą się z kryptografią są oparte na JCA – Java Cryptography Architecture. Jest to zestaw interfejsów oraz ich implementacji zawierający implementację najpopularniejszych algorytmów kryptograficznych jak i API umożliwiające tworzenie własnych rozszerzeń (JCE).
Standard autoryzacji i uwierzytelniania w Javie to JAAS (Java Authentication and Authorization Service). W oparciu o niego jest budowanych większość rozwiązań związanych z bezpieczeństwem. Nawet największe alternatywy takie jak Acegi Security (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.
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.
Szyfrowane połączenia są łatwe do uzyskania przy pomocy komponentu servicemi-http.
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).
10 Responses to Apache ServiceMix, Open Source ESB
Kuba
July 25, 2008 at 2:15 pm
Cześć!
Nie znalazłem nigdzie maila do ciebie, wiec zadam pytanie jako komentarz.
Jak uczyć sie tego Servicemixa? Od ładnych paru dni czytam o nim, przeleciałem już ich całą stronkę wzdłuż i wszerz, a jednak moja wiedza jest poki co bardzo mała(mozliwe ze to przez brak ogolnego doswiadczenia). Poza tym odnosze wrazenie ze malo kto zajmuje sie utrzymywaneim tej strony, informacje sa bardzo nieaktualne i w wiekszosci przypadków nic nie dziala do konca tak jak powinno.
Moje pytanie bardziej bezposrednie to czy mogłbyś zapronować jakis sposób na rozwiazanie problemu takiego ze: szyna esb ma wystawiać webservice i ona sama ma takze sie komunikować z innym webservicem, poki co ma to byc zwykle przekierowanie z jednej uslugi do drugiej(taki najprosztszy przypadek). Jak to ugryzc? Chyba komponent jsr181 sie do tego nadaje, ale jak sie go wykorzystuje juz niestety ciezko znalezc (http://docs.huihoo.com/apache/servicemix/orchestration-with-jsr181.html) artykul w tym linku jest juz niestety mocno przeterminowany…
pozdrawiam
Piotrek
July 26, 2008 at 5:22 pm
Cześć,
mam ten sam “problem” co Kuba.
Tez zagłębiłem się w dokumentację, jednak poza opisem (chyba niezbyt wyczerpującym) komponentów, EIP itd nie znalazłem rzeczy praktycznych. Probowałem szukać w sieci jak sie servicemixa stosuje w praktyce, ale to co znalazłem nie nadawało się to wykorzystania w praktyce. W każdym materiale są rysunki analogiczne do pierwszego w tym artykule, ale w żadnym nie znalazłem chociaż przybliżonego opisu jak taką konfigurację stworzyć.
Dlatego przyłączam się do pytania/prośby z poprzedniego posta.
Pozdrawiam.
Lukasz
September 14, 2008 at 5:39 pm
Witam panowie, jeśli dalej macie jakieś pytania odnoście ServiceMix to możecie napisać na ‘lichota.lukasz’ na gmailu – jeśli będę potrafił to odpowiem bo pracuję z ServisMixem juz jakiś czas.
Poza tym warto przeszukać forum http://servicemix.apache.org/discussion-forums.html
i zadać pytanie jeśli nie będzie odpowiedzi.
Lukaszk
September 18, 2008 at 3:51 pm
Polecam Mule ESB (open source). Zdecydowanie bardziej dojrzałe rozwiązanie. Sam przegrzebałem dokuemntację i bieda. Cytując autora Mule ESB też kosztuje 0 PLN.
Piotrek
September 18, 2008 at 9:52 pm
Niestety nie zawsze można decydować o tym jakie rozwiązanie zostanie wybrane…
Co do forum, to zdążyłem się już przekonać o jego pożyteczności (nawet z Twoim udziałem)
Łukasz Dywicki
September 19, 2008 at 8:15 am
Lukaszk każde rozwiązanie ma swoją niszę. Jeśli idzie o braki w dokumentacji Service Mixa polecam lekturę dokumentów dostarczonych przez Iona Technologies. Są tam opisy przede wszystkim używania JMS wewnątrz magistrali jak i Camela.
Niestety SMX nie ma boskiej dokumentacji, wielu rzeczy trzeba się doszukiwać w google..
Lukasz
October 5, 2008 at 11:09 pm
Wg mnie dokumentacja Mule tak samo leży jak ServiceMixa 😉 (doki IONY faktycznie nieco lepsze chociaż nie zrobili ich jeszcze do wszystkiego).
Paweł
November 29, 2008 at 9:45 pm
Super artykulik. Można prosić o kilka słów komentarza do openesb z https://open-esb.dev.java.net/ na tle pozostałych, dojżałość, itp?
A.Nonim
March 16, 2011 at 10:52 am
‘Buzzword’ a nie ‘buzzworld’
Łukasz Dywicki
May 19, 2011 at 10:04 pm
Dzięki, poprawiam 🙂