An OpenWMS.org microservice implementation with Java technology is structured into source packages. Some generic and often used packages exist in all microservices with a common sense. In the example below the structure underneath the `common` package is also applied to any other domain package like `core`, `tms` or `wms`. **Figure 6. Java package organisation** Beside these packages exist dozens of others specific to every microservice. The Transportation service for example has also a separation into functional packages, like `transports` or `routes`. The packages and conventions shown here should be followed for every OpenWMS.org microservice implementation when possible.
PackageResponsibility
org.openwmsTop level product package
coreAll types that belong to the CORE domain
commonAll types that belong to the COMMON domain
tmsAll types that belong to the TMS domain
wmsAll types that belong to the WMS domain
apiTypes that are relevant for client applications or API consumers and that are cut off into a separate build artifact
appTypes and configuration artifacts that are responsible for the microservice lifecyle
commandsContains all command types and handlers, processors of commands
configContains configuration classes responsible for the microservice external configuration, most often Spring Boot managed classes mapped to properties files
eventsAll event types used service internally and externally. External events must put under api.events
implThe internal implementation details of the microservice API