Broadleaf Microservices
  • v1.0.0-latest-prod

Module Structure

Individual Service Extensions

At the lowest level, there is a separate TMForum extension module for each Broadleaf microservice that needs additional functionality to support a TMF goal. For example, there is a separate broadleaf-tmforum-pricing-services module for PricingServices, as well as a broadleaf-tmforum-catalog-services module for CatalogServices. These modules unlock additional TMForum-specific capabilities on top of core Broadleaf concepts.

The scope of impact within this tier of module is bounded to a particular microservice.

Important

The auto-configurations in each of these extensions are all explicitly annotated with @ConditionalOnClass to make sure they only engage when the base service is available on the classpath.

This is because the starter base module may include this extension in a flexpackage that does not include the base service. By having @ConditionalOnClass, we ensure service-specific extension configuration remains dormant unless applicable and 'class not found' issues do not arise.

TMF Core Library

There is a broadleaf-tmforum-core 'core' extension library that each of the service-specific extension modules rely on.

There are a lot of concepts that are standardized across all TMForum APIs in the design guidelines. For example, the patterns for pagination, sorting, attribute filtration, and attribute selection are shared between all the APIs.

Naturally, it makes sense to consolidate this shared functionality in one place, so the 'core' module is where those concerns live. Often, the core module will define a common interface and an abstract implementation of a component that each service-module can implement with type-specific behavior.

Note
More details about the contents of this core library are discussed in the common concepts article.

TMF Starter Base

In the interest of making the extensions easy to consume, there is a broadleaf-tmforum-starter-base module which itself includes each of the service-specific extension modules. This allows clients to simply specify a single dependency that automatically enables the appropriate functionality, as documented here.