With SYNCOPE-620, the source tree was restructured in order to ease maintenance, allow easier extendability and obtain more modularity.
Source tree <= 1.2.X
Up to 1.2.X, the effective source tree (e.g. excluding utility modules providing the standalone distribution, .deb artifacts, installer, ...) is organized into four main modules:
- common
JAR library including- JAX-RS 2.0 REST services definition
- Java transfer objects (TO) to be used with REST services
- client
JAR library with utilities for invoking REST services - core
WAR web application exposing the REST interface and implementing the whole business logic including provisioning, workflow management and persistence to an internal RDBMS via JPA. - console
WAR web application providing rich GUI for interacting with core
When creating a new project from archetype, the core
and console
sub-modules generated are actually web applications empowering the WAR overlays feature.
The nice part about this is that generated projects can easily override any single file from the official Syncope Maven artifacts; the major drawbacks are that the whole Maven artifacts need to be downloaded, and that any single feature to be implemented must be thought as a "deviation" from the standard behavior; moreover, even if some features are not required in the specific project (Activiti workflow adapter, Camel integration, ...) the related dependencies are still to be carried over, because they are part of the official artifacts.
Source tree >= 2_0_X
Starting with 2.0.0, the modules were re-organized according to the following package diagram (where packages are Maven modules, actually):
The general approach taken with this refactoring was to split, wherever possible and meaningful, the existing code into API and implementation, and to introduce new modules for each relevant feature.
Moreover, a proper mechanism for handling extensions was introduced, for which the reference implementation for Camel integration was also provided.
Even if not likely at the moment, one can think to provide an alternative, LDAP or MyBatis based, implementation for syncope-core-persistence-api.
The upgraded archetype
The upgraded archetype for 2.0.X is still generating the core
and console
sub-modules as web applications; differently from the past, however, such applications enlist as dependencies one or more Syncope JAR artifacts (no more WAR overlays).
Core
The following dependencies are set:
- syncope-core-rest-cxf
Provides a web-fragment with REST interface; depends on syncope-core-logic (general business logic) which in turn relies on syncope-provisioning-java (default provisioning management engine) - syncope-core-workflow-java
Bare workflow adapter implementation; also includes common features for workflow management - syncope-core-workflow-activiti
Activiti-based workflow adapter implementation - syncope-core-persistence-jpa
OpenJPA-based internal persistence module
From the list above, any generated project can remove syncope-core-workflow-activiti to avoid embedding Activiti dependencies or provide its own workflow adapter implementing the API defined in syncope-core-workflow-api.
Moreover, if integration with Camel is desired, the following dependencies can be added:
- syncope-ext-camel-rest-cxf
Provides implementation of additional REST interface methods - syncope-ext-camel-provisioning
Camel-based implementation of syncope-provisioning-api - syncope-ext-camel-persistence-jpa
OpenJPA extensions for managing additional persistence table
Console
The following dependency is set:
- syncope-client-console
Provides the whole Wicket-based GUI, again as web-fragment; depends on syncope-client-lib for the actual communication with core
If integration with Camel is desired, the following dependency can be added:
- syncope-ext-camel-client-console
This will enable an additional tab under Configuration > Extensions with facilities for handling Camel integration