Hi all,
here is a brief introduction about Syncope architecture and the way the
build is organized.
Let's assume you've checkout /trunk.
+ pom.xml
This is the root pom.xml: when launching mvn from here, only client,
core, console and parent modules will be involved in the build, by default.
+ parent/
This module actually contains only the main pom.xml, defining
dependencies, plugins, repositories and so on for all other modules:
also projects generated using archetype (see below) will have this as
parent pom, thus having one place where dependencies are defined.
This pom currently extends Sonatype OSS pom: AFAIK we must change this
with Apache parent pom.
+ quality/
This includes custom rulesets for PMD, Findbugs and Checkstyle that will
be enforced by all other modules.
+ hibernate-enhancer/
Syncope empowers OpenJPA as JPA implementation: however, when deploying
to JBoss AS (see below), Hibernate is embedded in the container; some
additional tweaks are needed in order to make everything work properly,
in this case.
+ archetype/
Maven archertype for generating Syncope projects: see [1] for more details.
+ build-tools/
This is actually a webapp that, upon startup, will launch an ApacheDS
instance and an H2/TCP db instance. This will provide two external
resources (LDAP and JDBC) for running Syncope core integration tests.
+ client/
All classes (mainly transfer objects) needed when communicating with
Syncope core RESTful services.
+ core/
A Spring-powered RESTful server, managing entity persistence through a
JPA 2.0 DAO layer. More information can be found at [2].
Besides unit tests, integration tests are run against a Tomcat 7
instance with 3 webapps deployed: build-tools, wssample (reference
implementation of ConnId's SOAP server) and Syncope core itself.
In this way, three kind of external resources are available for tests:
JDBC, LDAP and SOAP. Internal persistence is based on another
(in-memory) H2 db instance.
However, more build profiles are provided here:
- dev: Tomcat 7 + in-memory H2 (same configurations for integration
tests); useful for developing and debugging
- jrebel: like as dev, but with JRebel reloading features enabled
- notification-test: for testing e-mail notification
- postgres-it: run integration tests by replacing in-memory H2
instance with a PostgreSQL instance
- mysql-it: run integration tests by replacing in-memory H2 instance
with a MySQL instance
- oracle-it: run integration tests by replacing in-memory H2 instance
with an Oracle instance
- glassfish-it: run integration tests by replacing Tomcat 7 with
Glassfish 3.1.1
- jboss-it: run integration tests by replacing Tomcat 7 with JBoss AS 7.1
+ console/
A Wicket-based webapp acting as a REST client for core.
Some additional profiles are provided here as well:
- dev: build the same environment as for core integration tests;
useful for developing and debugging
- jrebel: like as dev, but with JRebel reloading features enabled
- selenium: launch Selenium-based integration tests
NOTE: all additional profiles for core and console assume that you've
already built and installed everything from toplevel, i.e. "mvn -P all
clean install".
Hope this helps in getting started with Syncope development.
Regards.
[1]
http://wiki.syncope-idm.org/index.php?title=GettingStarted/CreateAProject
[2] http://wiki.syncope-idm.org/index.php?title=Architecture
--
Francesco Chicchiriccò
Apache Cocoon Committer and PMC Member
http://people.apache.org/~ilgrosso/