2011-08-15 15 views
5

Obecnie próbuję wejść głębiej w Apache Camel. Jak wiesz, istnieją co najmniej dwa sposoby opisywania tras: Java DSL i konfiguracja XML.Jakie są zalety i wady definiowania tras wielbłądów na wiosnę xml?

Twórcy Camel zalecają korzystanie z Java DSL, ponieważ ma to tę zaletę, że lepiej integruje się z IDE. Kolejną korzyścią jest to, że możesz wzbogacić Java DSL własnym kodem bez pisania skomplikowanych struktur klasowych. Wydaje się to konieczne, jeśli wybrano konfigurację XML.

Jakie są wady i zalety tras zdefiniowanych w pliku xml? Kiedy używać plików xml do definicji tras i kiedy używać Java DSL?

Odpowiedz

6

To zależy od wymagań trochę, ale niemal w każdym przypadku, wolę Java DSL z następujących powodów:

  • bardziej wydajne i elastyczne niż XML
  • mniej przerzucanie między XML/pliki Java
  • ułatwia wizualizację, zarządzanie, utrzymanie debug, test (przez mock, etc.)
  • wsparcie dla inline Processors
  • lepsza integracja z IDE (uzupełnianie kodu i walidacji)
  • czystsze, łatwiejsze do naśladowania examples
5

Jeśli korzystasz z Java DSL, możesz wykorzystać narzędzia do refaktoryzacji IDE i sprawdzić czas kompilacji.

Z drugiej strony, jeśli korzystasz z plików xml, możesz przekazać całe trasy wielbłądów i zmienić trasę bez ponownej instalacji aplikacji.

2

Jeśli zaczniesz za pomocą sprężyny najprawdopodobniej dojdzie do punktu, gdzie trzeba zaimplementować procesor lub coś innego . Będziesz potrzebował niestandardowego kodu w pewnym momencie. Po tym masz w swoim kodzie mieszankę java i xml - horror konserwacyjny.

obok tego Java jest:

  • typ bezpieczny
  • skompilowany

aby uzyskać jak najwięcej z niego Chciałbym również zasugerować, aby zminimalizować konfigurację punktów końcowych z łańcuchów. Więc zamiast tworzenia i konfigurowania punktów końcowych w ten sposób:

from("file:/someFolder?delete=true") 

proponuję temat tworzenia/konfigurowania punktu końcowego oddzielnie:

Endpoint fileEndpoint= context.getEndpoint("file:" + folder.getPath(), FileEndpoint.class); 
fileEndpoint.setDelete(true); 

To jest mniej podatne na błędy niż błahy wokół strun.