View on GitHub

A Java Persistence framework for Active Records.

Download this project as a .zip file Download this project as a .tar.gz file

Overview

ActiveJPA is intended to be lightweight, fast, relational, object-oriented and an easy-to-use, with no or minimal configuration to get started. We're not willing to reinvent the wheel, but we strive to offer a lighter and more reliable persistence framework.

We're aware that Active Record pattern may be seen by many as an anti-pattern, as it is against the Single Responsibility Pattern (SRV), but community recognise it as a quite useful one. And we agree with that! So we came up with a few ideas to solve part of the SRV problem, using Aspects' cross-cutting concerns to separate responsibilities that are considered an overhead on most ORM implementations. Shipped on its core, we have also found a feasible solution to offer a way for unit testing without the need of a database, as Active Records objects are objects, and so they can be kept in-memory for testing.

With no textual SQL queries, ActiveJPA implements type safe domain-specific language (DSL) for querying objects, and then these objects translate the queries to the database in a trustworthy object-oriented interface.

Why Not JPA?

We believe JPA is overwhelmed and not well designed. While we wanted a straightforward solution and studied the current JPA implementations, we realized that we were not happy with its design, performance and painful configurations.

We want to get fast. And for that JPA implementations are not helpful at all. And with more complexity, the more ineffective JPA gets. JPA has no fluent interface enough on queueing queries for lazy loading, so it can't retrieve data reliably for what is needed at the moment it is needed, often loading more than enough data when not required, or less than enough when strictly required.

Also, we have found many ActiveRecord and DSL implementations for JDBC and JPA, but unfortunately we didn't get into the design we desired. And these reasons have driven us to forget about everything and start from scratch, doing exactly what we wanted from the very beginning, with very best practices on design and conventions.

We also brought together good ideas form the community and successful features found in other frameworks.

Quick Start

We deploy to Maven Central, so all you need to do is simply add the dependency to your POM:

<dependency>
    <groupId>org.activejpa.persistence.dialect</groupId>
    <artifactId>activejpa-dialect-hsql</artifactId>
    <version>1.0.0</version>
</dependency>

Contributing to ActiveJPA

You can start getting involved to ActiveJPA trying out it in your PoC's, answering questions at StackOverflow.

If you want to write code, we encourage contributions through pull requests from forks of our repository at GitHub. If you want to contribute code this way, please reference an issue with the specific task you are addressing.

Before we accept a non-trivial patch or pull request we will need you to sign the contributor's agreement. Signing the contributor's agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions and you will get an author credit if we do. Active contributors might be asked to join the core team, and given the ability to merge pull requests.

Authors

@brunojensen and @ramsvidor.

Support or Contact

Having trouble with ActiveJPA? Check out the documentation at http://docs.activejpa.org/releases/current or contact support@activejpa.org and we'll help you sort it out.

You can try out StackOverflow and our community will give you the attention you need.

Send us issues, be them suggestions, critics, fixes or new features you may want to see on the framework.

Alternatively, subscribe or check our mailing lists:

Legal

Copyright (c) 2014 Versates, Inc. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.