środa, 28 kwietnia 2010

Przystosowywanie aplikacji klienckiej do współpracy z usługą sieciową, której lokalizacja uległa zmianie

Modyfikacja wnętrza archiwum jar klienta usługi sieciowej może być szybkim sposobem na przystosowanie aplikacji do współpracy z usługą, której lokalizacja uległa zmianie. Klient stworzony w oparciu
o dokument WSDL usługi działającej w obrębie serwera aplikacji GlassFish, posłuży nam przy budowie swojego odpowiednika współpracującego z identyczną usługą, uruchomioną pod WebSphere Application Server 7.

1. Wcześniejsze wpisy bezpośrednio korespondujące z bieżącym

Tworzenie usługi sieciowej z wykorzystaniem JAX-WS i NetBeans IDE 6.8
Instalacja oraz uruchomienie usługi sieciowej pod WebSphere Application Server 7

2. Tworzenie aplikacji klienckiej

Rozpakowujemy archiwum MyWsClient.jar do folderu MyWsClient .

Pliki wewnątrz MyWsClient/myfirstws/ nie będą nam dłużej potrzebne - usuwamy wszystkie.

W celu wygenerowania nowej zawartości folderu myfirstws wykorzystamy narzędzie wsimport. Jeżeli dokument WSDL usługi jest aktualnie dostępny pod adresem http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl możemy przejść dalej,
w przeciwnym wypadku powinniśmy najpierw uruchomić usługę.

Domyślna lokalizacja wsimport.sh to /opt/IBM/WebSphere/AppServer/bin/ . Znajdując się wewnątrz MyWsClient wykonujemy polecenie /opt/IBM/WebSphere/AppServer/bin/wsimport.sh -verbose http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl .
Pliki wygenerowane w oparciu o dokument WSDL umożliwią nam komunikację pomiędzy klientem a dostawcą usługi.

Kolejnym krokiem jest modyfikacja zawartości folderu MyWsClient/meta-inf/. Plik jax-ws-catalog.xml
edytujemy do postaci:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">

<system systemId="http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService?WSDL" uri="wsdl/localhost_9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl"/>

<system systemId="http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService?xsd=1" uri="wsdl/localhost_9080/mywebapp/MyFirstWsService/MyFirstWsService.xsd_1.xsd"/>

</catalog>
Następnie nadpisujemy plik MyFirstWsService.wsdl aktualną wersją dokumentu znajdującą się pod adresem http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl

Dokument WSDL wraz z pozostawionym bez zmian plikiem MyFirstWsService.xsd_1.xsd powinien znaleźć się w folderze MyWsClient/meta-inf/wsdl/localhost_9080/mywebapp/MyFirstWsService/. Po przeniesieniu dokumentów należy usunąć podfoldery localhost_30074/MyWebApplication/ .

Wymagana jest również zmiana nazwy folderu meta-inf oraz pliku manifest.mf na odpowiednio META-INF oraz MANIFEST.MF .

Pozostało nam jedynie podmienić w archiwum jar foldery meta-inf oraz myfirstws na ich, przygotowane przez nas odpowiedniki.

Stworzoną aplikację uruchamiamy poleceniem
java -jar MyWsClient.jar 15 3
. Otrzymany wynik świadczy
o przeprowadzeniu poprawnych modyfikacji.

sobota, 24 kwietnia 2010

Instalacja oraz uruchomienie usługi sieciowej pod WebSphere Application Server 7

Uruchomienie usługi sieciowej pod WAS'em nie jest rzeczą skomplikowaną, przekonałem się o tym, wykorzystując do tego celu stworzoną wcześniej przykładową usługę (Tworzenie usługi sieciowej z wykorzystaniem JAX-WS i NetBeans IDE 6.8). Poniżej znajduje się krótki opis z serii "Zrób to sam" :)

1. Instalacja aplikacji


Logujemy się do konsoli administracyjnej. Z menu wybieramy Applications -> New Application . Interesuje nas tylko jeden typ aplikacji do zainstalowania: New Enterprise Application.

Podajemy ścieżkę do archiwum war zawierającego usługę (Local file system -> Browse) . Następnie wciskamy przycisk "Next".

Opcja instalacji "na skróty" (Fast Path) w zupełności nas zadowala. Przechodzimy dalej wciskając "Next".

Przed nami pięć kroków umożliwiających skonfigurowanie instalacji.


W kroku pierwszym możemy określić m.in. miejsce docelowe instalowanej aplikacji, jej nazwę, prawa dostępu do plików oraz wersję (Build ID). Jeżeli chcemy pozostawić wartości domyślne, możemy śmiało przejść dalej.

Krok drugi i trzeci również możemy pominąć, domyślne wartości pozwolą nam uruchomić usługę na naszym serwerze aplikacji.

W kroku czwartym określamy context root dla aplikacji. Podając /mywebapp sprawimy, że wszystkie wywołania dla http://localhost:9080/mywebapp oraz http://localhost:9080/mywebapp/* będą kierowane do instalowanej usługi (o ile nie zdefiniujemy później bardziej szczegółowego context root dla innej usługi np. /mywebapp/service).

Ostatni krok to podsumowanie dokonanej konfiguracji, wciskamy przycisk "Finish". Jeżeli wszystko zrobiliśmy poprawnie, powinien pojawić się ekran potwierdzający pomyślną instalację. Nie zapominamy zapisać dokonanych zmian, "Save".



2. Uruchomienie usługi

W konsoli administracyjnej przechodzimy do Applications -> Application types -> WebSphere enterprise applications . Zaznaczamy naszą aplikację oraz wciskamy przycisk "Start".


Otrzymany komunikat świadczy o poprawnym uruchomieniu aplikacji.


Dokument WSDL usługi możemy znaleźć pod adresem http://localhost:9080/mywebapp/MyFirstWsService/MyFirstWsService.wsdl . Plik ten wykorzystamy podczas tworzenia aplikacji klienckiej, bazującej na tej stworzonej wcześniej przy pomocy środowiska NetBeans 6.8 . Archiwum jar klienta będziemy modyfikować własnoręcznie (bez wykorzystania IDE), ale o tym już następnym razem.

piątek, 23 kwietnia 2010

Tworzenie usługi sieciowej z wykorzystaniem JAX-WS i NetBeans IDE 6.8

Jak już wcześniej napisałem, czytanie wszelkiej maści dokumentacji dotyczących technologii Web Services umilało mi wolny czas przez ostatni tydzień. Biorąc pod uwagę, że nie samą teorią człowiek żyje, postanowiłem przejść do praktyki. Stworzenie przy pomocy JAX-WS przykładowej usługi sieciowej oraz jej klienta okazało się być bardzo proste. Wykorzystując środowisko programistyczne NetBeans 6.8 możemy napisać nasz własny Web Service w szybki i przejrzysty sposób.

1. Tworzenie przykładowej usługi

Pierwszym krokiem jest stworzenie nowego projektu: File -> New Project . Wybieramy kategorię Java Web oraz typ projektu Web Application. Przechodzimy dalej wciskając "Next". Jako Project Name podajemy MyWebApplication oraz klikamy myszką "Next", "Next" i "Finish".

Do stworzonego projektu dodajemy nowy plik: File -> New File . Wybieramy kategorię Web Services oraz typ pliku Web Service. Zatwierdzamy poprzez "Next". Jako Web Service Name podajemy MyFirstWs, w pole Package wpisujemy myfirstws. "Finish".

Edytujemy kod powstałego pliku MyFirstWs.java :

package myfirstws;

import javax.jws.WebService;

@WebService()
public class MyFirstWs {
public int func(int a, int b) {
return a * b;
}
}
Stworzoną usługę uruchamiamy poprzez Run -> Run Main Project . Jeżeli zrobiliśmy wszystko jak należy powinniśmy otrzymać komunikat:
"(...)
Personal GlassFish v3 Domain is running.
In-place deployment at D:\MyWebApplication\build\web
Initializing...
run-deploy:
Browsing: http://localhost:30074/MyWebApplication/
run-display-browser:
run:
BUILD SUCCESSFUL (total time: 34 seconds)"


2. Tworzenie aplikacji klienckiej

Ponownie rozpoczynamy od stworzenia nowego projektu, tym razem jednak wybieramy kategorię Java oraz typ projektu Java Application. Jako Project Name podajemy MyWsClient oraz odznaczamy pole Create Main Class.

Do stworzonego projektu dodajemy nowy plik wybierając kategorię Web Services oraz typ Web Service Client. Następnie wskazujemy ścieżkę do pliku WSDL uruchomionej usługi (WSDL URL): http://localhost:30074/MyWebApplication/MyFirstWsService?WSDL oraz wpisujemy w pole Package: myfirstws (tak jak poprzednio).

Jeżeli ukazał się nam komunikat "(...) BUILD SUCCESSFUL (total time: 2 seconds)" możemy przejść dalej. Wygenerowane pliki umożliwią nam połączenie się z usługą poprzez aplikację kliencką.

Do projektu dodajemy nową klasę (kategoria Java, typ Java Class) nadając jej nazwę MyFirstWsClient oraz wpisując w pole Package: mywsclient . Edytujemy kod powstałego pliku MyFirstWsClient.java :

package mywsclient;

import myfirstws.MyFirstWs;
import myfirstws.MyFirstWsService;

public class MyFirstWsClient {
public static void main(String[] args) {
try {
MyFirstWsService service = new MyFirstWsService();
MyFirstWs myws = service.getMyFirstWsPort();
if(args.length >= 2) {
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
System.out.println(a + " * " + b + " = " + myws.func(a, b));
}
else {
System.out.println("java -jar MyWsClient.jar integer1 integer2");
}
}
catch(Exception e) {
e.printStackTrace();
}
}
}
Archiwum jar z aplikacją tworzymy poprzez Run -> Clean and Build Main Project (jeżeli jest głównym projektem) lub Clean and Build wybrane na projekcie. Jeżeli zobaczyliśmy komunikat "(...) BUILD SUCCESSFUL (...)", w podfolderze dist projektu znajdziemy plik jar z gotową do uruchomienia aplikacją kliencką.

Kolejny wpis będzie dotyczył uruchamiania usługi sieciowej pod IBM WebSphere Application Server 7.