[ Pobierz całość w formacie PDF ]
.out.println("\nDodawanie zdarzeń.\n");// Parametry zdarzeń.Vector params = new Vector();// Zdarzenie na następny miesiąc.params.addElement("Zweryfikować ostateczną wersję roboczą".);Calendar cal = Calendar.getInstance();cal.add(Calendar.MONTH, 1);params.addElement(cal.getTime());// Dodanie zdarzenia.if (((Boolean)client.execute("scheduler.addEvent", params)).booleanValue()) {System.out.println("Zdarzenie zostało dodane.");} else {System.out.println("Zdarzenie nie mogło zostać dodane.");}// Zdarzenie na jutro.params.clear();params.addElement("Wysłać ostateczną wersję roboczą");cal = Calendar.getInstance();cal.add(Calendar.DAY_OF_MONTH, 1);params.addElement(cal.getTime());// Dodanie zdarzenia.if (((Boolean)client.execute("scheduler.addEvent", params)).booleanValue()) {System.out.println("Zdarzenie zostało dodane.");} else {System.out.println("Zdarzenie nie mogło zostać dodane.");}}/*** <p>* Wyświetlenie zdarzeń obecnych w programie Scheduler.* </p>** @param <code>XmlRpcClient</code> - klient, z którym się łączymy.*/public static void listEvents(XmlRpcClient client)throws XmlRpcException, IOException {System.out.println("\nWyświetlanie zdarzeń.\n");// Pobieranie zdarzeń z planu zadań.Vector params = new Vector();Vector events =(Vector)client.execute("scheduler.getListOfEvents", params);for (int i=0; i<events.size(); i++) {System.out.println((String)events.elementAt(i));}}/*** <p>* Statyczny punkt wyjścia programu.* </p>*/public static void main(String args[]) {try {// Korzystamy z implementacji parsera SAX Apache Xerces.XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");// Łączenie z serwerem.XmlRpcClient client =new XmlRpcClient("http://localhost:8585/");// Dodanie zdarzeń.addEvents(client);// Wyświetlenie zdarzeńlistEvents(client);} catch (Exception e) {System.out.println(e.getMessage());}}}Warto zauważyć, że dodawanie zdarzeń następuje w kolejności odwrotnej do kolejności ich wystę­po­wania.Nasz serwer sam zajmie się ich posortowaniem (metoda sortEvents()) i gdy wy­wo­ła­my metodę getListOfEvents(), zdarzenia zostaną zwrócone we właściwej kolejności.Mów do mnie jeszcze.Po wpisaniu kodu procedury obsługi serwera i klienta wszystkie pliki źródłowe należy skom­pi­lować.Trzeba również stworzyć plik konfiguracyjny, w którym umieszczone będą procedury ob­sługi do zarejestrowania w serwerze XML-RPC.Następnie najpierw uruchamiamy serwer XML-RPC jako oddzielny proces:D:\prod>start java com.oreilly.xml.LightweightXmlRpcServer 8585 D:\prod\conf\xmlrpc.conf.czego odpowiednikiem w systemach Unix jest:[adam@maly ch10]$ java com.oreilly.xml.LightweightXmlRpcServer 8585 conf/xmlrpc.conf &Serwer powinien wyświetlić procedury obsługi odczytane z pliku konfiguracyjnego oraz odpo­wia­dające im nazwy:Uruchamianie serwera XML-RPC.Zarejestrowana w serwerze nazwa scheduler odpowiada klasie Scheduler.Zarejestrowana w serwerze nazwa hello odpowiada klasie HelloHandler.Jeśli wcześniej nie zatrzymaliśmy utworzonego wcześniej serwera XML-RPC, Hel­loServer, otrzymamy komunikat o błędzie wynikający z próby uruchomienia kolej­nego serwera na tym samym porcie.Przed uruchomieniem obecnego serwera należy zatrzymać poprzedni.Teraz uruchamiamy klienta i obserwujemy wyniki:[adam@maly ch10]$ java SchedulerClientDodawanie zdarzeń.Zdarzenie zostało dodane.Zdarzenie zostało dodane.Wyświetlanie zdarzeń.Zdarzenie "Wysłać ostateczną wersję roboczą" zaplanowane na 03:42 PM 01/20/2001Zdarzenie "Zweryfikować ostateczną wersję roboczą" zaplanowane na 03:42 PM 02/19/2001W czasie dodawania i wyświetlania zdarzeń nie powinniśmy odczuć znacznego opóźnienia, a mi­mo to zdarzenia są sortowane przez serwer.Odbywa się to po prostu w oddzielnym wątku wir­tu­al­nej ma­szyny Javy (a trzeba wiedzieć, że sortowanie pęcherzykowe nie należy do szybkich algorytmów!).I tak właśnie napisaliśmy pierwszą użyteczną aplikację XML-RPC.Praktyczne zastosowania technologii XML-RPCW zakończeniu rozdziału zostaną omówione zagadnienia zwiazane z wykorzystywaniem XML-RPC w rzeczywistych zastosowaniach.Czytelnik po raz kolejny będzie mógł się przekonać, że XML używany jest nie dlatego, że to taka nowoczesna i modna technologia, ale dlatego, że w niektórych sytuacjach po prostu nie ma sobie równych.Cała wiedza zawarta w tej książce, specyfikacje ota­czające XML i inne książki opisujące ten standard — wszystko to na nic się nie zda, jeśli pro­gramista nie będzie wiedział, jak korzystać z języka XML oraz modelu XML-RPC poprawnie! W niniejszej części zostaną przedstawione typowe problemy trapiące programistów XML-RPC.Gdzie właściwie jest ten XML?Po lekturze dotychczasowej części rozdziału Czytelnik może zastanawiać się, dlaczego w two­rzo­nym kodzie nie zostały użyte interfejsy SAX, DOM lub JDOM.Co więcej, kod prawie wcale nie bazował bezpośrednio na XML-u.Wynika to stąd, że kodowanie i dekodowanie żądań przesy­ła­nych pomiedzy klientem a serwerem wykonywane było przez biblioteki XML-RPC.Choć XML nie został użyty bezpośrednio, to jednak całe to rozwiązanie oparte jest właśnie na technologii XML.Proste żądanie wysyłane do metody sayHello() zostało tak naprawdę przetłumaczone na wywołanie HTTP o postaci przedstawionej w przykładzie 10.10.Przykład 10.10.Żądanie XML-RPC po rozkodowaniuPOST /RPC2 HTTP/1.1User-Agent: Tomcat Web Server/3.1 Beta (Sun Solaris 2.6)Host: newInstance.comContent-Type: text/xmlContent-length: 234<?xml version="1.0"?><methodCall><methodName>hello.sayHello</methodName><params><param><value><string>Brett</string></value></param></params></methodCall>Biblioteki XML-RPC po stronie serwera otrzymują takie żądanie i rozkodowują je, dopasowując odpowiednią metodę procedury obsługi (o ile taka istnieje) [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • drakonia.opx.pl
  • Linki