Better date handling in route assigment.
Added voyage to handling activity, where applicable.
Next expected activity is now visible in the tracking interface.
Now possible to change destination of a cargo.
Minor touchups of the web pages.
Slight method name changes (deriveStatusFromHandling => deriveDeliveryProgress).
Fixed cloning of Date in a few places.
Explicitly roll back transaction if handling event registration fails.
Using single-parameter validation + message in more places (instead of arrays)
HandlingEventService.registerHandlingEvent() signature takes value objects instead of HandlingEventRegistrationAttempt, decoupling it from message queues.
Creating sample data using domain objects and storing with Hibernate, for simplicity.
Estimated time of arrival is now a property of the Cargo aggregate.
Tracking web interface has new look for 1.1.
Admin interface shows more time related information.
Serverside now handles change of destination (no UI yet though)
Asynchronous update of the Cargo aggregate. Several properties of the Cargo aggregate are now calculated and persisted, on handling (asynchronously) and on changes to routing (synchronously, since that's inside the cargo aggregate).
Relation between Cargo and its complete delivery history (handling events) is now replaced by explicit repository lookup at the time of cargo status update.
The copy() method on value objects is removed.
All enums in the cargo are now value objects.
Split the tracking and booking web interfaces to separate dispatcher servlets, to clarify the fact that the booking web app is external and could be run in a different JVM or be replaced by a thick client.
Restructured the context files to be organized per layer, and moved the external graph traversal application to its own, separate context. Communication is now through RMI.