Janux is an open source integration tool that aims to make it easy to interconnect disparate software systems into a single logical application.
One of our core beliefs is that business problems tend to change at a much smaller pace than the technology du-jour, and that we should thus focus on describing elegant solutions to common business problems that can be re-used in a variety of contexts, languages and platforms.
The goal of the project is to provide a set of models and service facades that are language-agnostic, and can interoperate with applications written in other languages via web services or other messaging mechanisms. These concerns are closely aligned to ideas such as standardizing common business objects (such as a Postal Address) via microformats, or creating a 'Universal Business Model', though our focus is more on elegance and re-usability than standardization and universality.
In its initial implementation, the project provides a set of web services to create, store and search entities representing person and organizations (see Janux People), as well as provide a flexible permission-based scheme for authorizing the user accounts that may be associated with specific persons (see Janux Authorization).
Janux currently takes the form of:
A set of abstract object models and service facades that model Party, Person and Organization entities and related entities such as Postal Addresses and other Contact Methods. These models and services aim to represent commonly used business objects in a generic way, so that they can be used to integrate to a variety of use cases. These abstract object models are represented as java interfaces and UML diagrams.
A set of object models and services that model Permissions, Roles and Accounts that can be used to create flexible and extensible authorization permission-based schemes to control access to business services, or to vary the User Interface according to the Permissions held by an authenticated User.
A high-quality, scaleable, lightweight yet robust java/spring/hibernate implementation of these models, that is exposed via web services. The implementation is database agnostic, and currently uses mysql as the datastore. While a relational database is quite sufficient to model these entities, we are also planning to integrate a NoSql database that is better suited to represent less structured data, such as a User's Profile, for example, which may vary widely according to the context in which it is used.