2012-12-14 18 views
5

Zostałem poproszony o obejrzenie procesu kompilacji istniejącej aplikacji opartej na usługach. Posiada kilka modułów opartych na usługach, w których niektóre usługi są świadczone przez stronę trzecią. Wsdls użyte w procesie kompilacji są sprowadzane do kompilacji przez http. Dla zgodności używam maven 3 i axistools-maven-plugin do generowania klas z pliku wsdl.Generowanie powtarzalnej kompresji WSDL

To zaczęło mnie myśleć. Jeśli serwer zdalny nie działa, moja kompilacja się nie powiedzie. Jeśli wsdl zmieni moją kompilację, może również zawieść. Czy tego chcę? Zdalne biblioteki wsdls są wersjonowane w nazwie usługi/wsdl, więc nie należy wprowadzać żadnych istotnych zmian w interfejsach API, ale są one stroną trzecią i nie mogę polegać na tej konwencji.

Czy nie byłoby lepiej pobrać lokalnie wsdl i skompilować go pod kontrolą pliku źródłowego? Miałbym odpowiednią powtarzalną kompilację, bez niebezpieczeństwa niedostępności serwera zdalnego. To nie wydaje się jednak bardzo zwinne. Jeśli przyjmuję to podejście, w jaki sposób poznaję zmiany w zdalnym kodzie wsdl?

Jestem pewna, że ​​nie jestem pierwszą osobą, która zastanawia się nad najlepszą praktyką budowania z wsdls. Czy ktokolwiek może wskazać, który mechanizm jest uważany za najlepszy sposób na stworzenie możliwej do powtórzenia kompilacji z usług generowanych przez zdalne wsdls?

+0

Może być lepiej na stronie programmers.stackexchange.com, ale jest to dobre pytanie. – Qwerky

+0

Czy serwer oferujący klucz wsdl jest tak często używany, że ktoś to zauważył, czy jest to tylko ogólna myśl? Brzmi jak niewiarygodna usługa :) Zazwyczaj bardziej martwię się zmianami niż przestojami. Po prostu ciekawy, bo wspomniałeś o pierwszych przestojach. – Scorpio

+1

Jest całkiem OK, aby zachować kopię WSDL lokalnie (jak wszyscy sugerują).WSDL jest umową dla zdalnej usługi WWW. Jest całkowicie normalne, aby obie strony zachowały kopię umowy, szczególnie w celu rozwiązywania późniejszych sporów, gdy umowa zostanie zmieniona bez konsultacji :-) –

Odpowiedz

4

Jeśli chcesz szybko i niezawodnie budować, to złotą zasadą nie jest poleganie na czymkolwiek, nad czym nie masz kontroli!

W twoim przypadku buforowałbym WSDL lokalnie, aby kompilacja nie zawodziła, jeśli oryginalne źródło jest niedostępne lub ulegnie zmianie. Jeśli jednak w ogóle niepokoisz się, że WSDL może się zmienić, to ja także utworzyłbym oddzielne zadanie kompilacji, które działa każdego dnia i porównuje kopię z pamięci podręcznej z oryginałem, a jeśli nie, to z błędem. To daje najlepsze z obu światów ... powtarzalne kompilacje i wczesne ostrzeganie, jeśli WSDL ulegnie zmianie.

Gdzie/jak buforować WSDL należy wyłącznie do Ciebie, ale trzymanie go w kontroli wersji jest szybką i prostą opcją.

0

Chciałbym pobrać pliki WSDL i umieścić je w kontroli źródła z resztą projektu.

Główną zaletą jest to, że gwarantuje powtarzalną budowę. Jeśli pobierzesz je na każdej kompilacji, nie będzie można tego powtórzyć. Na przykład powiedzmy, że budujesz i wdrażasz w środowisku programistycznym lub testowym, otrzymujesz aplikację podpisaną, a następnie kompilujesz i wdrażasz na żywo. Jeśli WSDL ulegnie zmianie, to twoja kompilacja na żywo różni się od tego, co zostało zarejestrowane w teście i może działać inaczej. Jeśli masz problemy z komunikacją sieciową, możesz nawet nie być w stanie w ogóle zbudować.

Oznacza to, że nie otrzymasz automatycznie najnowszej wersji WSDL, ale to dobrze.

+0

Zwykle używam tego samego podejścia przy kodowaniu klienta, tj. Lokalny wsdl (+ xsd, jeśli taki jest) , ale nie jestem z niego zadowolony. Ogólnie obawiam się niezapowiedzianej zmiany klucza wsdl lub schematu. Po prostu coś do zapamiętania, chociaż to * nie * może * naprawdę * się wydarzyć. – Scorpio

+0

Jestem za pobieranie wsdl/xsds i przechowywanie ich w kontroli źródła. Myślę, że to daje mi powtarzalną konstrukcję, której pragnę. Jeśli wydam oprogramowanie, powiedzmy wersję 1.0.0, to zmiany w pliku wsdls powodują nową kompilację, muszę wydać wersję 1.0.1 i przechowywać pliki wsdls/xsds z tą kompilacją. Obawiam się, jak sugeruje U-No-Poo, przez przechowywanie plików WSDL, które nie są w stanie wykryć zmian podczas programowania. Czy istnieje sposób, aby to zrobić. tj. mieć idealny świat? – theINtoy

0

Jeśli wiesz, że usługa internetowa ma naprawiony plik wsdl, lepiej użyj jego lokalnej kopii.

Jeśli kodzie WSDL prawdopodobnie się zmieni, lepiej użyć adresu URL zawsze do swojej kompilacji.

Jeśli problemem sieci jest problem, utwórz dwa osobne profile kompilacji (w maven), jeden dla lokalnego i drugi dla adresu URL.