Szymon Błądek

Szymon Błądek Software Engineer at
I-BS.PL

Temat: Web services i pola polaczen

Witam.

Ostatnio zaczalem pisac pierwsze web service w jee. No i mam kilka pytan moze nawet nie do konca z WS zwiazanych.

1. Chce utworzyc pewna pole polaczen przez API (cos a'la polaczenia do bazy danych). Np. 5 otwartych polaczen i w miare potrzeb kolejne.
Chodzi o to ze wykonujac jakas metode WS, ktora korzysta z tego API aby nie bylo za kazdym razem tworzone polaczenie do systemu zewnetrznego.

2. WS laczy sie z systemem zewnetrznym (dokladnie nie WS a obiekt EJB). Jak to zrobic aby WS dzialalo jako statefull?
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Web services i pola polaczen

1. Chce utworzyc pewna pole polaczen przez API (cos a'la polaczenia do bazy danych). Np. 5 otwartych polaczen i w miare potrzeb kolejne.
Chodzi o to ze wykonujac jakas metode WS, ktora korzysta z tego API aby nie bylo za kazdym razem tworzone polaczenie do systemu zewnetrznego.

Może wyposaż WebServis w metodę typu ping(), która robi dokładnie NIC :) Co jakiś czas wołaj tę metodę na każdym połączeniu, w ten sposób je podtrzymasz.
Jeśli z jakiegoś względu nie chcesz dodawać takiej metody, to może wyowołuj jedną z istniejących metod z parametrami, które nie spowodują zmiany stanu danych.
2. WS laczy sie z systemem zewnetrznym (dokladnie nie WS a obiekt EJB). Jak to zrobic aby WS dzialalo jako statefull?

Skoro to EJB, to może być stateful session beanem. W czym problem, bo nie do końca rozumiem co masz na myśli pisząc "stateful WebServuce"? Doprecyzuj :)

Jeśli to wygląda jakoś tak:

klient (HTTP) --> WebService (kontener servletów) --> EJB,

to stateful EJB + utrzymywanie sesji HTTP powinno rozwiązać Twój problem.

Mnie osobiście podoba się podejście RESTful do Web Servisów :)
Szymon Błądek

Szymon Błądek Software Engineer at
I-BS.PL

Temat: Web services i pola polaczen

Paweł Grzegorz Kwiatkowski:
1. Chce utworzyc pewna pole polaczen przez API (cos a'la polaczenia do bazy danych). Np. 5 otwartych polaczen i w miare potrzeb kolejne.
Chodzi o to ze wykonujac jakas metode WS, ktora korzysta z tego API aby nie bylo za kazdym razem tworzone polaczenie do systemu zewnetrznego.

Może wyposaż WebServis w metodę typu ping(), która robi dokładnie NIC :) Co jakiś czas wołaj tę metodę na każdym połączeniu, w ten sposób je podtrzymasz.
Jeśli z jakiegoś względu nie chcesz dodawać takiej metody, to może wyowołuj jedną z istniejących metod z parametrami, które nie spowodują zmiany stanu danych.


Moze zle sprecyzowalem pytanie... chodzi mi o stworzenie puli polaczen (powiedzmy 5 polaczen). Metody WS lacza sie przez ta pule do systemu zewnetrznego. No i chodzi teraz o to by wywolujac metode WS ona dostawala uchwyt do wolnego utworzonego polaczenia.

Chodzi o to ze jesli 5 klientow na raz wywola metode WS, to zeby kazda z metod dostala dynamicznie przydzielona referencje do wolnego polaczenia.
Piotr Wierzbowski

Piotr Wierzbowski IT Architect, Asseco
Poland S.A.

Temat: Web services i pola polaczen

Ale pula połączeń do czego?
Jak do bazy danych to masz az nadto rozwiązań, sa interfejsy w Javaie do tego, w jdbs bazy danych masz odpowiednie implementacji: http://java.sun.com/j2se/1.4.2/docs/api/javax/sql/pack...
W czasie inicjalizacji otwiera x połączeń, które sa pobierane z puli i do nie zwracane (a nie za każdym razem otwierane i zamykane).
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Web services i pola polaczen

Moze zle sprecyzowalem pytanie... chodzi mi o stworzenie puli polaczen (powiedzmy 5 polaczen). Metody WS lacza sie przez ta pule do systemu zewnetrznego. No i chodzi teraz o to by wywolujac metode WS ona dostawala uchwyt do wolnego utworzonego polaczenia.

Chodzi o to ze jesli 5 klientow na raz wywola metode WS, to zeby kazda z metod dostala dynamicznie przydzielona referencje do wolnego polaczenia.

Ja jedynie mogę się domyślać o co chodzi w całym problemie i architektura zdaje się wyglądać mniej więcej tak:

Client1----
... ==> Web Service ==> EJB ==> jakis system
ClientN----

Przy czym chcesz, zeby:
- Web Service dzialał jako stateful (co rozumiem jako wywołanie kilku operacji/metod składających się na szerokopojętą transakcję)
- Web Service mógł odwoływać się do dowolnego wolnego beana w puli beanów
- Bean wykonywał "właściwą" operację na systemie zewnętrznym (zapewne bazie danych)

Czy o to chodzi?
Zacheusz Siedlecki

Zacheusz Siedlecki Senior Java
Architect, Working
Manager

Temat: Web services i pola polaczen

1. Chce utworzyc pewna pole polaczen przez API (cos a'la polaczenia do bazy danych). Np. 5 otwartych polaczen i w miare potrzeb kolejne.
Chodzi o to ze wykonujac jakas metode WS, ktora korzysta z tego API aby nie bylo za kazdym razem tworzone polaczenie do systemu zewnetrznego.
A nie chodzi Ci czasem o pulę połączeń z ws po stronie klienta ? Jeśli tak to nie masz się o co martwić - pulą połączeń http zarządza jvm.
Szymon Błądek

Szymon Błądek Software Engineer at
I-BS.PL

Temat: Web services i pola polaczen

Paweł Grzegorz Kwiatkowski:
Moze zle sprecyzowalem pytanie... chodzi mi o stworzenie puli polaczen (powiedzmy 5 polaczen). Metody WS lacza sie przez ta pule do systemu zewnetrznego. No i chodzi teraz o to by wywolujac metode WS ona dostawala uchwyt do wolnego utworzonego polaczenia.

Chodzi o to ze jesli 5 klientow na raz wywola metode WS, to zeby kazda z metod dostala dynamicznie przydzielona referencje do wolnego polaczenia.

Ja jedynie mogę się domyślać o co chodzi w całym problemie i architektura zdaje się wyglądać mniej więcej tak:

Client1----
... ==> Web Service ==> EJB ==> jakis system
ClientN----

Przy czym chcesz, zeby:
- Web Service dzialał jako stateful (co rozumiem jako wywołanie kilku operacji/metod składających się na szerokopojętą transakcję)
- Web Service mógł odwoływać się do dowolnego wolnego beana w puli beanów
- Bean wykonywał "właściwą" operację na systemie zewnętrznym (zapewne bazie danych)

Czy o to chodzi?


to roziwazanie jest najblizsze temu co chce osiagnac. Przy czym WS + EJB maja byc czyms a'la proxy. Maja udostepniac usugi systemu zewnetrznego przez WS dalej. Tak naprawde EJB pobiera dane z systemu zewnetrznego, filtruje (wybiera tylko czesc danych zwroconych przez system zewnetrzny) i przekazuje dalej do klineta przez WS. No i chodzi o to zeby polaczenie miedzy EJB a systemem zewnetrznym bylo na zasadzie puli (tak jak to jest z polaczeniami do baz danych). Myslalem o EJB stateful tylko po to by nie zrywal polaczenia za kazdym razem z systemem zewnetrznym. Bo do niczego innego nie jest potrzebne trzymanie stanu obiektu.

Reasumujac:
N klientow wywoluje metode WS, ktora przez EJB laczy sie do systemu zewnetrznego, pobiera dane, filtruje i zwraca do klienta. A problem polega na tym zeby kazdorazowe wywowalnie WS nie powodowalo otwierania polaczenia do systemu zewnetrznego tylko zeby byla pula polaczen z ktorej EJB pobiera sobie pierwsze wolne i po zakonczeniu operacji zwraca do puli.
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Web services i pola polaczen

Skoro nie jest potrzebne trzymanie sesji, to jednak wybrałbym tego stateless beana. Z uwagi na to, że serwery aplikacji mogą bez problemu utrzymywać pule takich beanów.

Jeśli chodzi o połączenie do bazy danych to pozostaje stworzyć źródło danych, które będzie operować na puli połączeń. Jest to kwestia deploymentu aplikacji i skonfigurowania źródła danych.
W aplikacji nie musisz się martwić jak serwer zarządza połączeniami.

Gdyby połączenie odbywało się po jakimś fikuśnym protokole, do nietypowego systemu pozostowałoby napisać tzw. Resource Adapter.
Szymon Błądek

Szymon Błądek Software Engineer at
I-BS.PL

Temat: Web services i pola polaczen

Paweł Grzegorz Kwiatkowski:
Skoro nie jest potrzebne trzymanie sesji, to jednak wybrałbym tego stateless beana. Z uwagi na to, że serwery aplikacji mogą bez problemu utrzymywać pule takich beanów.

Jeśli chodzi o połączenie do bazy danych to pozostaje stworzyć źródło danych, które będzie operować na puli połączeń. Jest to kwestia deploymentu aplikacji i skonfigurowania źródła danych.
W aplikacji nie musisz się martwić jak serwer zarządza połączeniami.

Gdyby połączenie odbywało się po jakimś fikuśnym protokole, do nietypowego systemu pozostowałoby napisać tzw. Resource Adapter.


No wlasnie chodzi o to ze to nie ma byc pula polaczen do bazy danych tylko do zewnetrznego systemu, ktory nie jest baza. A operacje na tym zewnetrznym systemie wymagaja nawiazania polaczenia, ustawienia uslugi i dopiero po tym mozna wykonywac operacje na tym systemie. No i chce utworzyc pule polaczen do tego systemu, zeby nie laczyc sie za kazdym razem tylko odrazu wykonywac operacje na zewnetrznym systemie.
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Szymon Błądek

Szymon Błądek Software Engineer at
I-BS.PL

Temat: Web services i pola polaczen

tak chyba bede musial zrobic :) Dziekuje wszystkim za pomoc

Następna dyskusja:

ibernate + Web Services




Wyślij zaproszenie do