2009-11-13 7 views
6

Jakie są zalety korzystania z klienta dynamicznego z usługami JAX-WS w przeciwieństwie do korzystania z wygenerowanych klas klientów? Jakie są wady?Zalety używania klienta dynamicznego z JAX-WS

** Dla mojego konkretnego przypadku używam Apache CXF, nie jestem pewien, jakie inne biblioteki pozwalają "dynamicznym" klientom.

- Pomyślałem, że nie muszę tego dodawać, ale ... Szukam nieoczywistych (wiem ... subiektywnych) zalet. Nie potrzebuję kogoś, kto by mi powiedział, że zaletą nieużywania generowanych klas jest to, że nie muszę generować klas.

Odpowiedz

2

Zaletą jest unikanie generowania i włączania kodu. W niektórych środowiskach jest to problem. Jeśli w twoim środowisku nie ma bariery obejmującej wygenerowany kod, to klient dynamiczny jest złym pomysłem, wolniejszym i bardziej kłopotliwym.

Dynamiczny klient jest wolniejsze, ponieważ kod (z których pisałem kilka) musi:

  1. analizować WSDL oraz schemat
  2. wygenerować kod
  3. skompilować kod

It jest bardziej uciążliwy, ponieważ nie masz klas komponentów bean dla żadnych złożonych obiektów w swoim modelu danych. Musisz użyć odbicia.

Należy pamiętać, że klient dynamiczny różni się od interfejsu wywołania.

+0

@bmargulies - Wszelkie odniesienia dla klientów dynamiczne są wolniej? Chcesz się dowiedzieć, co oznacza bardziej "uciążliwy"? Nie mówię, że to nie jest poprawne, tylko szukam odniesienia. – jconlin

+1

Jedyną "wolną" częścią dynamicznego klienta są koszty uruchomienia. Zasadniczo musimy przeanalizować wsdl, wywołać xjc, aby wygenerować jakiś kod, skompilować go, wczytać skompilowane klasy do pamięci itd., A następnie, po wykonaniu wszystkich czynności, wykonać to samo ustawienie, co normalnie wygenerowani klienci. Po wygenerowaniu i uruchomieniu klienci dynamiczni nie są wolniejsi. –

1

Zaletą korzystania z klienta dynamicznego jest to, że nie trzeba generować kodu pośredniczącego przed uruchomieniem. Pozwala to na ogólne wywoływanie usług, o których możesz nie wiedzieć w czasie wykonywania.

+0

@Kevin - To jest powód, dla którego poproszono mnie o przeniesienie do "dynamicznego" klienta .. w celu stworzenia zależności czasu kompilacji ... ale także wprowadza sprzężenie między klientem a kodem po stronie serwera ... Chyba ja Wciąż ważę pozytywy i negatywy. – jconlin

7

Dobrze, dokumentacja CXF jest całkiem jasne, o zaletach Dynamic Clients:

CXF obsługuje kilka alternatyw, aby umożliwić aplikacji do komunikowania się z usługą bez SEI i klas danych. JAX-WS określił interfejs API JAX-WS Dispatch, a także interfejs dostawcy do odczytu i zapisu XML. Ta strona opisuje jednak funkcję dynamicznego klienta CXF. W przypadku klientów dynamicznych CXF generuje klasy SEI i komponenty bean w środowisku wykonawczym, a umożliwia wywoływanie operacji za pośrednictwem interfejsów API pobierających obiekty lub za pomocą funkcji odbicia w celu wywoływania pełnych serwerów proxy.

Innymi słowy, nie trzeba definicje klas, jak pokazano w próbce dokumentacji poniżej:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); 
Client client = dcf.createClient("echo.wsdl"); 

Object[] res = client.invoke("echo", "test echo"); 
System.out.println("Echo response: " + res[0]); 

Jeśli chodzi o wady, są one dość oczywiste (i to jest cena do zapłacenia): manipulujesz strunami, tracisz silne pisanie.

+1

@Pascal - Doceniam odpowiedź ... Może powinienem był lepiej sformułować pytanie, jakie warunki spowodowałyby użycie dynamicznego klienta zamiast wygenerowanego ... – jconlin

1

Wygenerowane klasy klientów są świetne, jeśli wiesz dokładnie, jaką usługę internetową będzie wywoływał twój kod klienta i że nie zmieni się ona przez cały okres istnienia klienta.

Jeśli któraś z tych sytuacji nie ma miejsca, należy zastanowić się, w jaki sposób klient poradzi sobie z takimi sytuacjami. Interfejs API Dispatch zapewnia elastyczność generowania wywołania usługi internetowej w locie bez wiedzy o dostępnej usłudze. To oczywiście wiąże się z kosztem kodu wymagającego obsługi opcji konfiguracyjnych wymaganych do zbudowania tego połączenia.

Z tym wszystkim wynika, że ​​deweloper/opiekun interfejsu po stronie serwera ponosi pewną część odpowiedzialności za niewprowadzanie zmian, które złamią kod klienta.

1

Pewnego dnia miałem podobną rozmowę ze współpracownikiem. Korzystał z klienta Spring, który wymaga użycia interfejsu do kompilacji klienta, ale następnie Spring wstrzykuje rzeczywisty kod, aby interfejs działał. Zasadniczo sprowadza się to do najstarszych pił między nami, rzeczy takie jak dynamiczne proxy zwykle wprowadzają jakiś podatek od wyników, jest w porządku z tym, zacząłem pisać sterowniki urządzeń do pisania życia, a więc jestem całkowicie uprzedzony na korzyść prędkości. Szybsze/mniejsze wygrane jeśli chodzi o mnie, a ponieważ nie jestem ograniczony do tak ograniczonych środowisk ... do cholery mój telefon Droid sprawia, że ​​wszystkie systemy, nad którymi pracowałem, w tym mainframe, przez pierwsze 10 lat profesjonalnie wyglądają słabo, Zejdę po tej prędkości. Powszechną ripostą jest to, że istnieje wiele innych "wąskich gardeł", które są "prawdziwym" problemem i że kwestia ta jest dla nich nieistotna ... i może być prawdą ... ale co trochę pomaga. Jeśli czytasz rzeczy od Steve Souders i jego rodaków ... użytkownicy zauważają zmianę zaledwie o 400 milisekund ... niekoniecznie rejestrują, że rzeczy są wolniejsze, ale ich reakcja jest inna. Ponieważ nie mogę nic zrobić z szybkością sieci, obciążeniem indeksu bazy danych itp., Mogę przynajmniej wykonać najlepszą pracę, jaką mogę, dzięki rzeczom, na które mogę wpłynąć. Whew! Przepraszam za to!! Wyjdź teraz z mydelniczki! ;)

0

DII(Dynamic Invocation Interface) Client: Wraz z DII, klient może wywołać zdalną procedurę nawet jeśli podpis zdalnej procedury lub nazwy usług są nieznane do wykonywania.

Z powodu swojej elastyczności, klient DII może być używany w brokerze usług, który dynamicznie wykrywa usługi, konfiguruje połączenia zdalne i wykonuje połączenia.

  • Zalety

    • Tutaj musimy stworzyć prosty interfejs Java opisujące operacje obsługiwane przez usługę internetową, aby uzyskać dostęp. Więc nie trzeba automatycznie generowane kody dostępu do usługi.
    • Używając punktu końcowego generuje WSDL i skrótów w locie, tj. W czasie wykonywania.
  • Wady

    • Nawet w tym stylu musimy wiedzieć usługę internetową przed tworząc klienta.
    • W porównaniu do Wygenerowany skrót (GS) działa wolno, ponieważ WSDL i kody pośredniczące są generowane w czasie wykonywania.
Powiązane problemy