13-08.pdf

(501 KB) Pobierz
Firma-firma
13
Czytelnik wie już dużo o XML-u. Poznał interfejsy SAX, DOM i JDOM, znajome mu są struktury
publikacji i zaawansowane transformacje, jak również model XML-RPC; zna także zagadnienia
związane z zastosowaniem XML-a w procesach konfiguracji oraz z wykorzystaniem tego języka
jako źródła danych; potrafi również tworzyć dane XML z programów w Javie. W niniejszym
rozdziale zostanie omówiony bardzo modny temat, a mianowicie zastosowanie XML-a w
aplikacjach typu firma-firma. Przedsiębiorstwa wkroczyły w erę internetową i właściwa komunikacja
stała się najważniejszym warunkiem prowadzenia handlu. Wiele firm przywiązuje większą wagę do
procesów komunikacyjnych niż... do własnych produktów. Agresywne kampanie online i aplikacje
e-biznesowe mogą przyczynić się do pokonania konkurencji, która może nawet oferować
atrakcyjniejsze produkty. Ogromną rolę w pojęciu „firma-firma” odgrywa XML. Język ten
stanowi standardowy sposób reprezentacji danych i właśnie dzięki niemu firmy wykorzystujące
różne aplikacje, systemy i języki programowania mają możliwość komunikowania się ze sobą.
W niniejszym rozdziale Czytelnik dowie się, w jaki sposób za pomocą XML-a można uzyskać
taką właśnie możliwość porozumienia pomiędzy różnymi aplikacjami; na potrzeby rozdziału zostaną
nawet stworzone wyimaginowane firmy. Tym razem XML nie posłuży do wymiany informacji
pomiędzy składnikami jednej aplikacji ani też jako źródło danych, ale do komunikacji pomiędzy
różnymi aplikacjami. Najpierw zostanie zaprezentowana Biblioteka Publiczna NaNiby, której
dostawcy będą mogli wprowadzać nowe tytuły w trybie online. Książki będą następnie dodawane
do składnicy danych biblioteki do późniejszego wykorzystania. Niestety, w dzisiejszych czasach
trudno o dobrych programistów Javy, a więc nasza biblioteka będzie opierała swoje działanie na
programie CGI napisanym w Perlu. Nowe książki wpisywane online są sortowane przez skrypt
właśnie w tym języku.
Będzie też druga firma, KsiegarniaTechniczna.com. W tej księgarni sprzedaje się w systemie online
— w porozumieniu z innymi dużymi księgarniami — książki o tematyce technicznej i komputero-
wej (takie jak ta). Ostatnio podpisano umowę z Biblioteką Publiczną NaNiby, zgodnie z którą firma
będzie uzyskiwała książki od tej biblioteki na specjalnych warunkach. KsiegarniaTechniczna.com
opłaci koszty dostawy i administracyjne, zaś biblioteka zamówi dodatkowe egzemplarze książek
po specjalnej, obniżonej cenie; te dodatkowe książki sprzeda następnie KsiegarniaTech-
niczna.com. KsiegarniaTechniczna.com musi mieć dostęp do danych wprowadzanych
w Bibliotece Publicznej NaNiby przez dostawców, tak aby wiedzieć o nowych tytułach i móc je
reklamować u siebie. Jednakże nie wiadomo, w jaki sposób uzyskać dostęp do danych systemu bi-
C:\Users\a_czajka\Dropbox\Informatyka\książki
informatyczne\Java i XML\13-08.DOC
— strona
323
324
Rozdział 13. Firma-firma
blioteki opartego na Perlu. Co więcej, pomiędzy obiema firmami nie istnieją chronione połączenia
sieciowe, a więc konieczne jest wykorzystanie zwyczajnego protokołu HTTP.
Czytelnik będzie mógł spojrzeć na te aplikacje z punktu widzenia klientów KsiegarniaTech-
niczna.com. Księgarnia oferuje produkty osobom aktywnym w Internecie, a więc chce ogłaszać się
w witrynach w rodzaju Netscape Netcenter; chce także, aby klienci mogli w prosty sposób uzyskać
informacje z ich witryny o nowych ofertach. Jednakże, podobnie jak w przypadku Biblioteki
Publicznej NaNiby, KsiegarniaTechniczna.com nie posiada informacji o tym, jak to zrobić.
Przedstawiciele grupy Netscape Netcenter poinformowali programistów księgarni, że na potrzeby
takiego reklamowania się najlepiej nadaje się RSS (Rich Site Summary). Ale programiści
księgarni nawet nie wiedzą, czym jest RSS!
Zaczniemy od Biblioteki Publicznej NaNiby — przyjrzymy się, jak zbudowany jest ich system na-
pisany w Perlu. Następnie przejdziemy do firmy KsiegarniaTechniczna.com, a jeszcze później do
klientów tej księgarni. Zobaczymy, jak pomiędzy tymi wszystkimi stronami stworzyć komunika-
cję opartą na języku XML.
Biblioteka Publiczna NaNiby
Tworzenie systemu typu firma-firma rozpoczniemy od zbadania, jaki stan rzeczy zastaliśmy w bi-
bliotece. Zanim jednak przejdziemy do samego kodu aplikacji, musimy poznać wymagania biblio-
teki (aby nie tworzyć systemu, którego nie będzie można potem obsłużyć).
Określenie wymagań
Często dobre rozwiązanie nie oznacza jeszcze — w przypadku określonej firmy — rozwiązania
zgodnego z wymaganiami. Świetnym przykładem jest tutaj Biblioteka Publiczna NaNiby — pro-
blemy tej biblioteki i firmy KsiegarniaTechniczna.com można byłoby rozwiązać za pomocą
serwletów Javy działających po obu stronach. Jednakże nie zostałyby wówczas zaspokojone
wymagania biblioteki. A więc najpierw należy przyjrzeć się właśnie wymaganiom:
rozwiązanie musi być napisane w Perlu; w bibliotece nie ma programistów Javy;
rozwiązanie nie może wymagać instalacji nowego oprogramowania czy bibliotek;
rozwiązanie nie może wpłynąć na istniejący system zamawiania (nie może być zmian
w interfejsie).
Nie są to może jakieś zaporowe wymagania, ale na pewno zmuszają do ponownego przeanalizo-
wania problemu. Nie wolno nam korzystać z Javy. Oczywiście, ponieważ ta książka jest o XML-u,
Czytelnik może się domyślać, że dane o nowych książkach będą zapisywane w formacie XML,
następnie przekazywane klientom protokołem HTTP i wykorzystywane w dowolny sposób. Tak,
i jest to o wiele lepsze rozwiązanie niż komunikacja pomiędzy serwletami; XML może zostać uży-
ty w dowolnej firmie lub u dowolnego klienta i nie trzeba „przywiązywać” biblioteki (i wszystkich
jej książek) do jednej, określonej firmy. I w ten sposób zostało nakreślone zadanie związane
z aktualizacją systemu biblioteki — zachować wpisane informacje w postaci kodu XML, a następ-
nie stworzyć klientom możliwość dostępu do tych danych poprzez protokół HTTP.
C:\Users\a_czajka\Dropbox\Informatyka\książki
informatyczne\Java i XML\13-08.DOC
strona
324
Biblioteka
Publiczna NaNiby
325
Wprowadzanie książek
Po pierwsze trzeba poznać istniejący interfejs, za pomocą którego dostawcy wprowadzają nowe
książki do systemu. W przykładzie 13.1 pokazano, jak zbudowany jest sam statyczny formularz.
Przykład 13.1. Statyczny interfejs Biblioteki Publicznej NaNiby w HTML-u
<html>
<head>
<title>Biblioteka Publiczna NaNiby: Wprowadzanie książek</title>
<style>
<!--
body
{ font-family: Arial }
h1
{ color: #000080 }
-->
</style>
</head>
<body link="#FFFF00" vlink="#FFFF00" alink="#FFFF00">
<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td width="15%" bgcolor="#000080" valign="top" align="center">
<b><i>
<font color="#FFFFFF" size="4">Opcje</font>
</i></b>
<p><b>
<font color="#FFFFFF">
<a href="/javaxml/foobar">Menu Główne</a>
</font>
</p></b>
<p><b>
<font color="#FFFFFF">
<a href="/javaxml/foobar/catalog.html">Katalog</a>
</font>
</b></p>
<p><b>
<i><font color="#FFFF00">Wprowadzanie książek</font></i>
</b></p>
<p><b>
<font color="#FFFFFF">
<a href="/javaxml/foobar/logout.html">Wylogowanie</a>
</font>
</p></td>
<td width="*" valign="top" align="center">
<h1 align="center">Biblioteka Publiczna NaNiby</h1>
<h3 align="center"><i>- Dodawanie książek -</i></h3>
<!-- Poniżej ścieżka do katalogu i skryptu CGI, którym zajmiemy się w
następnej kolejności -->
<form method="POST" action="/cgi/addBook.pl">
<table border="0" cellpadding="5" width="100%">
<tr>
<td width="100%" valign="top" align="center" colspan="2">
Tytuł&nbsp;
<input type="text" name="title" size="20">
<hr width="85%" />
</td>
</tr>
<tr>
C:\Users\a_czajka\Dropbox\Informatyka\książki
informatyczne\Java i XML\13-08.DOC
strona
325
326
Rozdział 13. Firma-firma
<td width="50%" valign="top" align="right">Autor&nbsp;
<input type="text" name="author" size="20">
</td>
<td width="50%" valign="top" align="left">Temat&nbsp;
<select size="1" name="subject">
<option>Beletrystyka</option>
<option>Biografie</option>
<option>Nauka</option>
<option>Przemysł</option>
<option>Komputery</option>
</select></td>
</tr>
<tr>
<td width="50%" valign="top" align="right">Wydawca&nbsp;
<input type="text" name="publisher" size="20">
</td>
<td width="50%" valign="top" align="left">ISBN&nbsp;
<input type="text" name="isbn" size="20">
</td>
</tr>
<tr>
<td width="50%" valign="top" align="right">Cena&nbsp;
<input type="text" name="price" size="20">
</td>
<td width="50%" valign="top" align="left">Stron&nbsp;
<input type="text" name="numPages" size="20">
</td>
</tr>
<tr>
<td width="100%" valign="top" align="center" colspan="2">
Opis&nbsp;
<textarea rows="2" name="description" cols="20"></textarea>
</td>
</tr>
</table>
<p>
<input type="submit" value="Dodaj książkę" name="addBook">
<input type="reset" value="Wyczyść formularz" name="reset">
<input type="button" value="Anuluj" name="cancel">
</p>
</form>
</td>
</tr>
</table>
</body>
</html>
Powyższy plik, zachowany jako
addBooks.html,
umożliwia wprowadzenie nowych książek przy-
syłanych do biblioteki.
W tym rozdziale zostanie wydrukowany pełny kod wszystkich opisywanych przykła-
dów, tak aby Czytelnik mógł sam stworzyć przykładową aplikację i dokładnie zaznajo-
mić się z procesem uruchamiania komunikacji XML pomiędzy firmami. Możliwe jest
też obejrzenie działających przykładów pod adresem
http://www.newInstance.com.
Stamtąd, jak również spod adresu
http://www.oreilly.com/catalog/javaxml/,
można
także pobrać przykładowe pliki. W tym rozdziale założono, że Czytelnik użyje nazw
plików zgodnych z opisywanymi; w przeciwnym razie trzeba odpowiednio dostosować
kod (miejsca wymagające takich zmian odpowiednio zaznaczono).
C:\Users\a_czajka\Dropbox\Informatyka\książki
informatyczne\Java i XML\13-08.DOC
strona
326
Biblioteka Publiczna NaNiby
327
Po załadowaniu powyższego przykładu do przeglądarki, Czytelnik otrzyma wynik przypominający
ten na rysunku 13.1. Tutaj nie będą omawiane pozostałe pozycje menu, ale przecież dostawca mo-
że chcieć przejrzeć katalog biblioteki, przejść do menu głównego czy wylogować się — wszystkie
te opcje muszą więc znaleźć się w zasięgu ręki.
Rysunek 13.1. Interfejs HTML biblioteki
Formularz taki pozwala dostawcy wprowadzić szczegółowe informacje o każdej książce przesyła-
nej do biblioteki. Wprowadzane są następujące dane: tytuł, autor, wydawca, liczba stron, cena, nu-
mer ISBN, opis, a także kategoria tematyczna książki.
Po wprowadzeniu informacji formularz przesyłany jest do skryptu CGI:
<form method="POST" action="/cgi/addBook.pl">
Skrypt ten ma następnie zwrócić dane XML. Najprościej byłoby załadować bibliotekę Perla do
obsługi przetwarzania XML, np. Xerces-Perl; należy jednak pamiętać o tym, że jedno z wymagań
brzmi: żadnych nowych bibliotek i oprogramowania. Takie ograniczenie może wydawać się
głupie, ale trzeba pamiętać, że w wielu firmach oprogramowanie produkcyjne traktuje się w spo-
sób bardzo mało elastyczny. Biblioteka Publiczna NaNiby ma „zaistnieć” w Internecie, ale nie mo-
żemy przeznaczyć na to żadnych dodatkowych zasobów i środków.
Na szczęście naszym zadaniem jest tylko uzyskać dane XML. Można to zrobić w dość łatwy spo-
sób — „brutalnie” generując pliki z informacjami wprowadzonymi do formularza. Ponieważ wszy-
stkie dotychczasowe informacje i tak mają być zachowywane, zamiast tworzyć nowe pliki,
wystarczy dołączyć nowe informacje do plików już istniejących. Dla programistów Javy napisanie
C:\Users\a_czajka\Dropbox\Informatyka\książki
informatyczne\Java i XML\13-08.DOC
strona
327
Zgłoś jeśli naruszono regulamin