JARB - JAva Repository Bridge
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Java Repository Bridge (JaRB)

JaRB aims to improve database usage in Java enterprise applications.



  • Database constraints
  • Automate database schema validation with JSR303
  • Translate JDBC driver exceptions into constraint exceptions
  • Full access to constraint violation information
  • Map custom exceptions to named constraints
  • Describe bean constraint metadata, with front-end example
  • Database initialization
  • Automate database migrations on application startup
  • Populate database on application startup
  • SQL
  • Excel



Copyright 2011-2014 42BV (http://www.42.nl)

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


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.

Database constraints


To validate database constraints with JSR303 validation, we often need to duplicate constraint information in both the database and entity class. Duplication is never good, so we made a @DatabaseConstrained annotation that dynamically validates all simple database constraints based on JDBC metadata.

public class Person {
  @Id @GeneratedValue
  private Long id;
  private String name;

Database constraint exceptions

Whenever a database constraint is violated, the JDBC driver will convert it into a runtime exception. This SQLException is hard to use in the application because all metadata is held inside its message. By using exception translation we can convert the driver exception into a more intuitive exception, e.g. the UniqueKeyAlreadyExistsException. Inside our translated exception we have full access to the constraint violation and any desired metadata.

It is even possible to map custom exceptions on named constraints.

public class PostTitleAlreadyExistsException extends UniqueKeyViolationException {


The XML configuration is as follows:

<constraints:enable-constraints data-source="dataSource" base-package="org.jarbframework.sample"/>
<constraints:enable-constraints entity-manager-factory="entityManagerFactory" base-package="org.jarbframework.sample"/>

We also support Java configuration:

@EnableDatabaseConstraints(basePackage = "org.jarbframework.sample")

Database migrations (schema)

By wrapping the data source in a migrating data source, the data base will automatically be migrated to the latest version during application startup.

In the below example we use Liquibase to perform database migrations, by default it will look for a 'src/main/db/changelog.groovy' file.

<migrations:migrate data-source="dataSource" path="src/main/db/changelog.groovy"/>

Or an embedded database:

public DataSource dataSource() {
    return new EmbeddedMigratingDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL).build();

Database populating

Whenever we require data to be inserted during application startup, the database updater interface can be used.

Below we demonstrate how to run an insert script at startup:

<populator:populate initializer="populator"/>

<bean id="populator" class="org.jarbframework.populator.SqlDatabasePopulator">
    <constructor-arg ref="dataSource"/>
    <constructor-arg value="classpath:import.sql"/>

For Java configurations we provide a builder:

public PopulateApplicationListener populateAppliationListener() {
    return new PopulateApplicationListenerBuilder()
                        .add(new SqlDatabasePopulator(dataSource, new ClassPathResource("import.sql")))
                        .add(new ExcelDatabasePopulator(entityManagerFactory, new ClassPathResource("import.xls")))
                        .add(new SqlDatabasePopulator(dataSource, new ClassPathResource("clean.sql")))


  • constraints (simplifies the managing of (database) constraints by preventing and translating JDBC exceptions)
  • migrations (automated database migrations on application startup, with Liquibase implementation)
  • populator (populate the database with data on startup, SQL script implementation and building blocks)
  • populator-excel (excel driven database populator)
  • utils (common utility library, used by other components)
  • sample (demonstrates all above described functionality in a simple project)

Release notes

  • Version 3.0.0
    • Java version below 1.8 not supported anymore
    • Hibernate version below 5.0 not supported anymore