Strona główna > Oracle Database > Oracle i … Web Service

Oracle i … Web Service

Witajcie,

Dzisiaj ma miejsce historyczne wydarzenie – został zamieszczony pierwszy post tematyczny🙂
Do rzeczy…(Web Service będę określał skrótem WS)

Zostaliśmy ostatnio poproszeni o próbę stworzenia WS w 2 dni. Nie byłoby w tym nic dziwnego gdyby nie fakt, że ani ja, ani kumpel nie mieliśmy z WS nigdy styczności. Trochę poczytaliśmy, poznaliśmy kilka nowych terminów.. że SOAP, że WSDL, że można np. w Javie.

Pomysł Javy wydał się kuszący (cały projekt stoi na WebLogicu), ale zaraz – trzeba pisać klasę, która przy pomocy JDBC łączyłaby się do bazy i wywoływała stamtąd odpowiednią procedurę, a następnie wynik parsowała i przesyłała Response? Wydało nam się to zbyt czasochłonne biorąc pod uwagę, że WS miał zachowywać się w taki właśnie prosty sposób – wyślij zapytanie o urządzenie – podaj adres IP tego urządzenia. W ten sposób – drogą nauki (WS), analizy możliwych rozwiązań (Java, a może nie),  i znajomości pewnych narzędzi (JDeveloper) doszliśmy do wniosku, że można spróbować uprościć ten proces. Dzisiaj chciałbym zaprezentować jedynie przykład działania takiego WS, analizie możliwości poświęcony będzie inny wpis.

Na przykładzie prostego WS odpowiadającego na żądanie wskazania dzisiejszej daty zaprezentuję budowę WS bezpośrednio z funkcji PL/SQL. Popatrzcie:

1. Tworzymy paczkę PL/SQL – w niej umieszczone zostaną funkcje wystawione przez nasz WS.

2. Wystawione funkcje mogą przyjmować parametry i zwracać wartości. W naszym przypadku, funkcja nie przyjmuje wartości, a jedynie zwraca dzisiejszą datę:


CREATE OR REPLACE PACKAGE pkg_my_webservice_jdev IS
FUNCTION getdate RETURN VARCHAR2;
END pkg_my_webservice_jdev;


CREATE OR REPLACE PACKAGE BODY pkg_my_webservice_jdev IS
FUNCTION getdate RETURN VARCHAR2 AS
BEGIN
RETURN to_char(sysdate);
END getdate;
END pkg_my_webservice_jdev;

Tyle kodowania. Dalej występuje jedynie klikanie. Korzystam tutaj z JDevelopera 10.1.3.5

3. Tworzymy aplikację – File -> New -> General -> Application -> wypełniamy konieczne pola (nazwa aplikacji) i klikamy OK. Automatycznie zostaniemy poproszeni o wpisanie nazwy projektu dla aplikacji. Póki co nasz projekt nie wygląda zbyt ciekawie.

4. W tym momencie można zestawić połączenie z bazą (Database) i z serwerem aplikacyjnym (Application Server; opcjonalnie) na karcie Connection Navigator. Jeżeli serwer aplikacyjny nie zostanie określony w trakcie tworzenia projektu, WS zadziała lokalnie na dołączonym do JDevelopera Oracle’owym OC4J.

5. Tworzymy WS za pomocą New->Business Tier-> Web Services-> PL/SQL Web Service, wybieramy opcję J2EE 1.3

Następnie przechodzimy przez czytelnego Wizarda – określamy połączenie z bazą i paczkę, która zawiera zdefiniowaną funkcję, nazywamy swój WS oraz nadajemy nazwę paczce Java jaka się za chwilę wygeneruje.

6. W kolejnym kroku zaznaczamy „ptaszkiem” funkcje które mają się znaleźć w WS – w naszym przypadku będzie to getDate.

7. Określenie End Pointu oraz pliku wsdl są generowane automatycznie

Za pomocą kilku kliknięć został stworzony WS z funkcji napisanej w PL/SQL. Stworzone zostały odpowiednie klasy oraz plik web.xml. Następnym krokiem jest deploy na serwer aplikacyjny (co nam przysporzyło sporo problemów – ale to już chyba specyfika WebLogica 9.2😉 ). Widok projektu:

W przykładzie poprzestaniemy na wywołaniu lokalnym:

Uruchomi nam się OC4J – na końcu znajdziecie link do WS.

Klik i.. otrzymujecie panel, w który wywołujecie różne WS (w naszym przypadku tylko jeden).

Klik na getDate -> Invoke i…

mamy odpowiedź.

Dziękuję za uwagę🙂

Kategorie:Oracle Database
  1. Brak komentarzy.
  1. No trackbacks yet.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: