Brought EventService closer to the domain by renaming it DomainEventNotifier and use ubiquitous language in the method signatures (fireHandlingEventRegistered is now cargoWasHandled) in order to make it naturally fit in among the domain services.
Package "remote" renamed "remoting" for consistency.
The implementation of our routing service - which consists mainly of model translation and delegation - is moved to the application part, from the domain service layer. The routing service interface is part of our domain but the implementation is not, similar to repositories and their implementations.
Slight refinement of packge structure under application - service is split into things like messagning and remoting.
The external routing team application is moved out to its own top-level package, to highlight the fact that it is a completely separate application from booking/tracking.
Introduced OR mapping for the Cargo->(DeliveryHistory)->HandlingEvent relation, instead of explicitly deciding whether or not to fetch handling events when loading a particular cargo.
Introduced BookingServiceFacade as an application service, on top of the domain layer's BookingService and the repositories, as a DTO assembly point and remoting exposure layer (currently configured in context-remote.xml, but only used as local reference).
CargoAdminController now sits on top on this facade. If time permits, the booking part of the application can be moved to another virtual machine at this point.
Reworked the Cargo-Itinerary relationship OR-mapping to make it possible to move the full responsibility for purging orphaned itineraries to the implementation of the Cargo repository, making it a concern of the infrastructure layer.
Also added explicit names for foreign key constraints to mapping files.
Purged last DTO from domain service layer, in preparation for a combination of dedicated remote facade with DTO assembly (booking application) and working directly against the domain service layer (tracking web interface).
Split routing service into two parts: "our" part with model translation, and remote service part for graph calculations. Still a bit sketchy though.
More flesh on RouteSpecification, with some ideas around factory methods for specifications.
Renamed a few service methods to match ubiquotous language more closely.
Pushed DTO assembly outside of service layer and into MVC controllers, pending creation of dedicated remoting layer. Service layer now uses pure domain model classes.
CarrierMovementId implements ValueObject.
Final destination is now just "destination" everywhere.
Persistence annotations removed from domain model classes.
DeliveryHistory is now immutable.
Domain model implements the new pettern interfaces (entity/value object/domain event)
Orphaned old itinerary is now deleted when attaching a new itinerary to a Cargo.
Reorganized the context files so that the persistence layer can be selected as either Hibernate or in-memory, and the messagning layer either JMS-based or thread-based.