2009.09_Websphere MQ 7 _[Aplikacje Biznesowe].pdf

(581 KB) Pobierz
441067653 UNPDF
Aplikacje biznesowe
Websphere MQ 7
Dostawca usługi zarządzania komunikatami dla Websphere AS 7
IBM WebSphere MQ to kompletne rozwiązanie realizujące usługę systemu
kolejkowego. Może pracować niezależnie jako zewnętrzny serwer, który
poprzez szereg specjalnych interfejsów daje możliwość korzystania ze
swoich zasobów aplikacjom napisanym w różnych językach, lub działać
jako zewnętrzny dostawca dla serwera Websphere AS.
Dowiesz się:
• Jak stworzyć managera kolejek, kolejkę oraz
kanał komunikacji pomiędzy Websphere
MQ a Websphere AS;
• Jak skonigurować Websphere AS do wyko-
rzystywania Websphere MQ;
• Jak stworzyć aplikację JEE wysyłającą i od-
bierającą komunikaty.
Powinieneś wiedzieć:
• Podstawowa znajomość systemów kolejko-
wych;
• Podstawowa znajomość standardu JEE;
• Podstawowa znajomość obsługi serwerów
aplikacyjnych;
• Znajomość podstawowych pojęć związa-
nych z Websphere MQ (SDJ 10/2008).
Drugim krokiem będzie utworzenie kolejki
do przechowywania komunikatów. W tym ce-
lu rozwijamy QM_SDJ , następnie wybieramy
prawym przyciskiem myszy Kolejki . W nowo-
otwartym menu wybieramy Nowe->Kolejka lo-
kalna . W nowym oknie wprowadzamy nazwę
kolejki, np. QUEUE_SDJ , i wybieramy Dalej .
W kolejnym oknie mamy szereg opcji konfigu-
racji naszej kolejki.
Na potrzeby tego artykułu omówię opcję z
grupy Ogólne :
Poziom
trudności
nych ustawień i przejść do kolejnego okna. W
kolejnym oknie wybieramy opcję Utwórz ka-
nał połączenia z serwerem , wybieramy Dalej .
W ostatnim oknie ustawiamy port nasłuchi-
wania i tworzymy naszego managera.
W tym momencie mamy prawidłowo
utworzonego managera kolejek, którego mo-
żemy przetestować, uruchamiając zestaw do-
myślnych testów (Rysunek 2), z których ra-
port zostanie przedstawiony w oknie Wynik
testów (Rysunek 2).
• Opis – opis kolejki;
• Komunikaty umieszczania – określają, czy
można umieszczać komunikaty w kolejce;
• Komunikaty pobierania – określają, czy
można odczytać komunikaty z kolejki;
• Domyślny priorytet – pozwala ustawić
domyślny priorytet wstawianej wiado-
mości;
• Trwałość domyślna – pozwala ustalić, czy
komunikaty mają być fizycznie utrwala-
le Wstęp do IBM Websphere MQ
omówiłem podstawy pracy w śro-
dowisku IBM Websphere MQ 6.1 oraz progra-
mowania w oparciu o bibliotekę MQ base Java.
W poniższym artykule omówię trzy kwestie
związane z dostępem do MQ z poziomu JMS.
W pierwszej części zostanie opisany proces two-
rzenia managera kolejek (ang. Queue manager ),
kolejki (ang. Queue ) oraz kanału (ang. Channel )
w środowisku WebSphere MQ. W drugiej czę-
ści opiszę, w jaki sposób skonfigurować We-
bSphere MQ jako zawnętrznego dostawcę dla
WebSphere AS. W ostatniej części przedstawię
przykładowy program w standardzie JEE, któ-
ry zademonstruje wykorzystanie MQ.
Konfiguracja WebSphere MQ
Po uruchomieniu Websphere MQ Explorer w
oknie Navigator wybieramy tworzenie nowego
managera kolejek (Rysunek 1). Wpisujemy na-
zwę, np. QM_SDJ , i przechodzimy dalej. W no-
wym oknie możemy skonfigurować ustawienia
dotyczące dziennika logowania. Dla potrzeb te-
go artykułu wystarczy skorzystać z proponowa-
Rysunek 1. Tworzenie nowego managera kolejek
68
09/2009
W numerze 10/2008 w artyku-
441067653.045.png 441067653.046.png 441067653.047.png 441067653.048.png 441067653.001.png 441067653.002.png 441067653.003.png 441067653.004.png 441067653.005.png 441067653.006.png 441067653.007.png 441067653.008.png
Websphere MQ 7 – dostawca usługi zarządzania komu-
ne, czy przechowywane tylko w pamięci
komputera. Ustawienie to ma znaczenie
w przypadku bezpieczeństwa zgromadzo-
nych informacji, ale jest zarazem powo-
dem zmniejszenia wydajności podczas za-
pisu i odczytu komunikatów z kolejki;
• Zasięg – widoczność kolejki;
• Użycie – sposób użycia kolejki.
Po wprowadzeniu wszystkich ustawień może-
my stworzyć kolejkę.
Ostatnim krokiem będzie utworzenie kana-
łu komunikacji z serwerem. Kanał ten będzie
odpowiadał za komunikację serwera WebSphe-
re AS z MQ. W tym celu rozwijamy QM_SDJ ,
następnie Zaawansowane , w których wybie-
ramy Kanały . Podobnie jak w przypadku ko-
lejki, tak i tu rozwijamy menu prawym przy-
ciskiem myszy i wybieramy Nowe->Kanał po-
łączenia z serwerem . Wprowadzamy nazwę ka-
nału, np. SDJ_CHANNEL , i wybieramy Dalej .
W nowym oknie ustawiamy protokół transmi-
sji na TCP i wybieramy Zakończ . Na liście kana-
łów pojawi się nowa pozycja. Wybieramy nasz
kanał, a następnie prawym przyciskiem myszy
otwieramy menu, z którego wybieramy opcję
Uruchom . W tym momencie mamy skonfigu-
rowane wszystkie potrzebne rzeczy po stronie
MQ. W kolejnej części przedstawię, jak podłą-
czyć MQ do serwera aplikacji.
Rysunek 2. Testowanie managera kolejek
Konfiguracja WebSphere AS
do pracy z MQ
Cała konfiguracja zostanie omówiona w opar-
ciu o konsolę WebSphere. Pierwszym krokiem
będzie utworzenie fabryki połączeń kolejki z
zewnętrznym dostawcą, czyli MQ. W tym ce-
lu w konsoli wybieramy Zasoby->JMS->Fabry-
ka połączeń kolejki , a następnie Nowa . W no-
wym oknie zaznaczamy WebSphere MQ mes-
saging provider i wybieramy OK . Następnie
wprowadzamy nazwę fabryki, np. MQFacto-
ry , oraz nazwę JNDI dla naszej fabryki, np.
MQFactoryJNDI , i wybieramy Dalej . W kolej-
nym oknie ustawiamy Wprowadź w tym kre-
atorze wszystkie wymagane informacje i wybie-
ramy Dalej.
Kolejny formularz pozwala ustawić nazwę
naszego managera kolejek, w naszym przypad-
ku jest to QM_SDJ , wybieramy Dalej . W kolej-
Rysunek 3. Szczegółowe informacje dotyczące połączenia
Listing 1. Lokalny interfejs komponentu EJB
package com . cgi . ejb ;
import javax.ejb.Local ;
import javax.jms.JMSException ;
@Local
public interface ISimpleEJB {
String sendSimpleMessage ()
throws JMSException ;
}
Rysunek 4. Tworzenie kolejki
www.sdjournal.org
69
441067653.009.png 441067653.010.png 441067653.011.png 441067653.012.png 441067653.013.png 441067653.014.png 441067653.015.png 441067653.016.png 441067653.017.png 441067653.018.png 441067653.019.png 441067653.020.png 441067653.021.png 441067653.022.png 441067653.023.png
Aplikacje biznesowe
nym z listy transport wybieramy Powiązania,
następnie klient , a następnie wypełniamy trzy
pozostałe pola (Rysunek 3). W kolejnym oknie
mamy możliwość przetestowania naszego połą-
czenia. Po pomyślnym teście wybieramy Dalej , a
następnie Zakończ .
Drugi krok polega na utworzeniu odpowied-
niej kolejki, a raczej na właściwym zmapowaniu
jej na kolejkę utworzoną już w MQ. W tym ce-
lu wybieramy Zasoby->JMS->Kolejki , a następ-
nie Nowa . Podobnie jak w przypadku tworze-
nia fabryki połączeń, tak i tu wybieramy opcję
WebSphere MQ messaging provider . W nowym
oknie wprowadzamy odpowiednie nazwy w
oparciu o to, co zostało utworzone wcześniej na
serwerze MQ (Rysunek 4), wybieramy Zastosuj .
Po wykonaniu wszystkich czynności posiada-
my poprawnie skonfigurowany serwer do pra-
cy z zewnętrznym dostawcą usług zarządzania
komunikatami. Zanim przejdziemy do kolej-
nego punktu tego artykułu, proponuję jeszcze
raz przeanalizować wszystkie ustawienia, któ-
re zostały wprowadzone podczas pracy z MQ
oraz serwerem.
Listing 2. Bezstanowy komponent EJB
package com . cgi . ejb ;
import javax.annotation.Resource ;
import javax.ejb.Stateless ;
import javax.jms.JMSException ;
import javax.jms.MessageProducer ;
import javax.jms.Queue ;
import javax.jms.QueueConnection ;
import javax.jms.QueueConnectionFactory ;
import javax.jms.Session ;
import javax.jms.TextMessage ;
@Stateless
public class SimpleEJB implements ISimpleEJB {
@Resource ( mappedName = "MQFactoryJNDI" )
private QueueConnectionFactory queueConnectionFactory ;
@Resource ( mappedName = "SDJQueue" )
private Queue queue ;
public String sendSimpleMessage () throws JMSException {
QueueConnection conn = queueConnectionFactory . createQueueConnection ();
Session session = conn . createSession ( false , Session . AUTO_ACKNOWLEDGE );
MessageProducer producer = session . createProducer ( queue );
TextMessage msg = session . createTextMessage ();
msg . setText ( "message" );
producer . send ( msg );
conn . close ();
return "ok" ;
}
}
Przykładowa aplikacja JEE
W ostatnim kroku przygotujemy prostą apli-
kację JEE, która uzyska dostęp do naszej kolej-
ki i prześle do niej wiadomość. Część odpowie-
dzialna za dostęp do kolejki będzie
komponentem bezstanowym, natomiast
część odpowiedzialna za wywołanie naszego
EJB zostanie przygotowana jako prosta aplika-
cja WEB-owa w JSF. Ponieważ z naszego EJB
skorzysta jedynie nasza aplikacja WEB-owa, wy-
korzystamy interfejs lokalny dla naszego EJB
(Listing 1).
W oparciu o przedstawiony interfejs doko-
namy implementacji naszego komponentu.
Korzystając z możliwości JEE, wykorzysta-
my adnotację @Resource do uzyskania dostę-
pu zarówno do fabryki połączeń kolejki, jak i
samej kolejki:
@Resource(mappedName="MQFactoryJNDI")
private QueueConnectionFactory
queueConnectionFactory;
@Resource(mappedName="SDJQueue")
private Queue queue;
Listing 3. Implementacja klasy SimpleController
package com . cgi . webapp ;
import javax.ejb.EJB ;
import javax.jms.JMSException ;
import org.apache.log4j.Logger ;
import com.cgi.ejb.ISimpleEJB ;
public class SimpleConstroller {
private static inal Logger LOGGER = Logger.getLogger(SimpleConstroller.class);
@EJB
private ISimpleEJB ejb1 ;
public String fun1 (){
LOGGER . debug ( "invoke fun1" );
try {
String text = ejb1 . sendSimpleMessage ();
LOGGER . debug ( "text = " + text );
} catch ( JMSException ex ){
LOGGER . error ( ex );
LOGGER . error ( ex . getMessage ());
LOGGER . error ( ex . getErrorCode ());
LOGGER . error ( ex . getCause ());
}
LOGGER . debug ( "ending fun1" );
return "";
}
Część z czytelników napewno pamięta, jak w
J2EE wyglądało pobranie odpowiednich refe-
rencji do obiektów zarządzanych przez serwer.
Wiązało się to z utworzeniem obiektu Con-
text i wyszukaniu odpowiedniej referencji w
drzewie JNDI serwera. W obecnym standar-
dzie zostało to znacznie uproszczone. Obec-
nie za całość odpowiada za nas kontener, który
wstrzykuje za nas odpowiednią referencję. Sa-
ma metoda sendSimpleMessage nawiązuje połą-
czenie z kolejką i wysyła prosty komunikat do
kolejki. Kompletny kod bezstanowego kompo-
nentu przedstawia Listing 2.
Ostatnim etapem będzie wstrzyknięcie re-
ferencji naszego komponentu do klasy Sim-
pleController, wykorzystując adnotację @EJB
(Listing 3).
W tym momencie możemy zdefiniować
plik faces-config.xml (Listing 4), a następnie
podpiąć fun1 do akcji komponentu JSF, by
móc wywołać metodę z naszego EJB z pozio-
mu aplikacji WEB-owej JSF (Listing 5). Kom-
pletny kod źródłowy wraz ze skryptami budu-
jącymi dla Maven znajduje się na płycie dołą-
czonej do magazynu.
}
70
09/2009
441067653.024.png 441067653.025.png 441067653.026.png 441067653.027.png 441067653.028.png 441067653.029.png 441067653.030.png
 
Websphere MQ 7 – dostawca usługi zarządzania komu-
Listing 4. Plik faces-conig.xml
Zakładam, że dysponujemy już poprawnie
zbudowanym earem. W celu instalacji aplika-
cji na serwerze WebSphere musimy wybrać
Aplikacje->Typy aplikacji->Aplikacje korporacyj-
ne Websphere , a następnie Instaluj . W nowym
oknie wskazujemy ścieżkę do pliku ear i wy-
bieramy Dalej .
W kolejnym oknie zaznaczamy opcję Krót-
ka ścieżka , i przechodzimy dalej. Następnie mo-
żemy ustawić wiele istotnych opcji instalacji ta-
kich jak prekompilowanie jsp czy inny kontekst
aplikacji, na tym etapie proponuję pozostawić
wszystkie domyślne ustawienia i przejść do kolej-
nego okna. Kolejny formularz pozwala wskazać
miejsce instalacji naszej aplikacji, wybieramy Da-
lej . Następny widok pozwala dowiązać naszą re-
ferencję opatrzoną adnotacją @Resource(mappe
dName="SDJQueue") do odpowiedniego obiektu
w drzewie JNDI. Wpisujemy SDJQueue , i prze-
chodzimy dalej. Kolejny formularz wymusza do-
wiązanie obiektu do referencji opatrzonej adno-
tacją @Resource (mappedName="MQFactoryJN-
DI") , wpisujemy MQFactoryJNDI , i przechodzi-
my do kolejnego formularza. Na nowej podstro-
nie mamy możliwość ustawienia wirtualnego
hosta dla modułu WEB, pozostawiamy domyśl-
ne ustawienie i przechodzimy do ostatniej pod-
strony, która zawiera podsumowanie, wybiera-
my Zakończ . Po poprawnej instalacji i zapisaniu
ustawień w konfiguracji lokalnej możemy uru-
chomić naszą aplikację poprzez zaznaczenie jej
na liście zainstalowanych modułów i wybraniu
Uruchom . Po poprawnym uruchomieniu aplika-
cji możemy ją przetestować. Aplikację WEB-ową
uruchamiamy z poziomu przeglądarki, wpisując
adres http://localhost:9080/webapp2/index.jsf . Po-
winniśmy otrzymać stronę z przyciskiem, który
wywołuje metodę z komponentu EJB odpowie-
dzialną za wysłanie komunikatu do kolejki. Po
wywołaniu akcji komunikat zostanie przesłany
do kolejki po stronie MQ (Rysunek 5).
<?xml version="1.0" encoding="UTF-8"?>
<faces-conig xmlns= "http://java.sun.com/xml/ns/javaee" xmlns:xsi= "http://
www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation= "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/
javaee/web-facesconig_1_2.xsd"
version= "1.2" >
<managed-bean>
<managed-bean-name> bean1 </managed-bean-name>
<managed-bean-class> com.cgi.webapp.SimpleConstroller </managed-bean-class>
<managed-bean-scope> request </managed-bean-scope>
</managed-bean>
</faces-conig>
Listing 5. Plik index.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" preix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" preix="h" %>
<html>
<head>
<title> HelloWorldJSF </title>
</head>
<body>
<f:view>
<h:form>
<h:commandButton action= "#{bean1.fun1}" value= "Invoke EJB " >
</h:commandButton><br><br>
</h:form>
</f:view>
</body>
</html>
Rysunek 5. Odczyt wiadomości z kolejki
Podsumowanie
Powyższy artykuł wraz z przykładem aplikacji
daje dobrą bazę wyjściową do tego, by zacząć
eksperymentować z WebSphere MQ oraz JEE.
Omówiony materiał przedstawa krok po kroku
to, co zazwyczaj jest najtrudniejsze w rozpoczę-
ciu pracy z danymi technologiami – konfigura-
cja. Mając bazową wiedzę na temat konfigura-
cji, można iść dalej i przygotować sobie oprócz
kolejek także tematy, popracować trochę z kom-
ponentami sterowanymi komunikatami czy na-
pisać webservice, dzięki któremu dostaniemy
się do MQ z aplikacji napisanej w .net. Pole do
pracy jest spore, dlatego zachęcam do szerszego
zapoznania się z tematem WebSphere MQ 7.
W Sieci
PAWEŁ PIETRASZ
Consultant , CGI Information Systems and Mana-
gement Consultants (Polska) Sp. z o. o.,
Warszawa, ul. Sienna 39, tel. 022 526 57 00
Kontakt: pawel.pietrasz@gmail.com
ht tp : //publib.b o ulde r. ib m.co m / info center/wmqv7/ v7r 0 / inde x . jsp? to p ic=/
com.ibm.mq.amqtac.doc/wq11350_.htm ;
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp ;
http://java.sun.com/javaee/5/docs/tutorial/doc/ .
www.sdjournal.org
71
441067653.031.png 441067653.032.png 441067653.033.png 441067653.034.png 441067653.035.png 441067653.036.png 441067653.037.png 441067653.038.png 441067653.039.png 441067653.040.png 441067653.041.png 441067653.042.png 441067653.043.png 441067653.044.png
 
Zgłoś jeśli naruszono regulamin