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/

Reply via email to