Cloud-Ready Configuration for JPA-Integration Tests

In JPA Integration Tests the EntityManager is started locally with a dedicated persistence.xml containing all JDBC-connection settings:


<?xml version="1.0" encoding="UTF-8"?>
<persistence>
    <persistence-unit name="integration-test" transaction-type="RESOURCE_LOCAL">
        <class>com.airhacks.workshops.entity.Workshop</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <validation-mode>NONE</validation-mode>
        <properties>
            <property name="javax.persistence.jdbc.user" value="air"/>
            <property name="javax.persistence.jdbc.password" value="hacks"/>
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
        </properties>
    </persistence-unit>
</persistence>    
The persistence.xml above does not contain the mandatory javax.persistence.jdbc.url property -- the database host is fetched from the environment and directly passed to the createEntityManagerFactory method at runtime:

public class WorkshopIT {

    private EntityManager em;
    private EntityTransaction tx;
    
    static String getDatabaseHost() {
        return System.getenv().getOrDefault("db.host", System.getProperty("db.host", "localhost"));
    }    

    @BeforeEach
    public void init() {
        String dbURL = String.format("jdbc:postgresql://%s:5432/airhacksDB", getDatabaseHost());
        Map<String, String> configuration = new HashMap();
        configuration.put("javax.persistence.jdbc.url", dbURL);
        this.em = Persistence.
                createEntityManagerFactory("integration-test", configuration).
                createEntityManager();
        this.tx = this.em.getTransaction();
    }
}    

Now the integration test can be configured to use a local database at the developer machine and a different database in the CI/CD pipeline. In Kubernetes-based environments like e.g. OpenShift the configuration can be provided with deployment configuration (DC) or Jenkins build parameters.

See you at Web, MicroProfile and Java EE Workshops at MUC Airport, particularly at the Java EE CI/CD, Testing and Quality workshop


Cloudy Jakarta EE and MicroProfile: Microservices, Clouds and Beyond Jakarta EE / MicroProfile airhacks workshops at MUC airport, Winter Edition

airhacks.fm the podcast:

Stay in touch: airhacks.news.

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed
Online Workshops
realworldpatterns.com
...the last 150 posts
...the last 10 comments
License