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.
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.
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>
Note: ActiveJPA still have no stable release yet, but we have an official release planned to Jan, 2015.
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.
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:
- ActiveJPA Community Group
- ActiveJPA Users Group
- ActiveJPA Announcement Group for News and Releases
- ActiveJPA Development Group
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.