Skip to content

Commit 982d46f

Browse files
committed
Force the default version of all supported Hibernate ORM dialects
1 parent 0267ddc commit 982d46f

File tree

12 files changed

+253
-4
lines changed

12 files changed

+253
-4
lines changed

extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DataSourceBuildTimeConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class DataSourceBuildTimeConfig {
4141
* or simply a warning in case the database cannot be reached.
4242
*
4343
* The default for this property is specific to each extension;
44-
* the Hibernate ORM extension will default to the oldest version it supports.
44+
* the Hibernate ORM extension will default to the oldest version supported in Quarkus.
4545
*
4646
* @asciidoclet
4747
*/

extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,9 @@ public final class HibernateOrmProcessor {
178178
void registerHibernateOrmMetadataForCoreDialects(
179179
BuildProducer<DatabaseKindDialectBuildItem> producer) {
180180
producer.produce(new DatabaseKindDialectBuildItem(DatabaseKind.DB2,
181-
"org.hibernate.dialect.DB2Dialect"));
181+
"org.hibernate.dialect.DB2Dialect", DialectVersions.Defaults.DB2));
182182
producer.produce(new DatabaseKindDialectBuildItem(DatabaseKind.DERBY,
183-
"org.hibernate.dialect.DerbyDialect"));
183+
"org.hibernate.dialect.DerbyDialect", DialectVersions.Defaults.DERBY));
184184
producer.produce(new DatabaseKindDialectBuildItem(DatabaseKind.H2,
185185
// Using our own default version is extra important for H2
186186
// See https://github.com/quarkusio/quarkus/issues/1886
@@ -194,7 +194,7 @@ void registerHibernateOrmMetadataForCoreDialects(
194194
producer.produce(new DatabaseKindDialectBuildItem(DatabaseKind.ORACLE,
195195
"org.hibernate.dialect.OracleDialect", DialectVersions.Defaults.ORACLE));
196196
producer.produce(new DatabaseKindDialectBuildItem(DatabaseKind.POSTGRESQL,
197-
"org.hibernate.dialect.PostgreSQLDialect"));
197+
"org.hibernate.dialect.PostgreSQLDialect", DialectVersions.Defaults.POSTGRESQL));
198198
}
199199

200200
@BuildStep

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/config/DialectVersions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ public final class DialectVersions {
1616
public static final class Defaults {
1717

1818
// The following constants must be at least equal to the default dialect version in Hibernate ORM
19+
public static final String DB2 = "10.5";
20+
public static final String DERBY = "10.14";
1921
public static final String MARIADB = "10.6";
2022
public static final String MSSQL = "13"; // 2016
2123
public static final String MYSQL = "8";
2224
public static final String ORACLE = "12";
25+
public static final String POSTGRESQL = "10.0";
2326

2427
// This must be aligned on the H2 version in the Quarkus BOM
2528
public static final String H2 = "2.1.210";
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.quarkus.it.jpa.db2;
2+
3+
import java.io.IOException;
4+
import java.io.PrintWriter;
5+
6+
import jakarta.inject.Inject;
7+
import jakarta.servlet.annotation.WebServlet;
8+
import jakarta.servlet.http.HttpServlet;
9+
import jakarta.servlet.http.HttpServletRequest;
10+
import jakarta.servlet.http.HttpServletResponse;
11+
12+
import org.hibernate.SessionFactory;
13+
import org.hibernate.engine.spi.SessionFactoryImplementor;
14+
15+
import io.quarkus.hibernate.orm.runtime.config.DialectVersions;
16+
17+
@WebServlet(name = "DialectEndpoint", urlPatterns = "/dialect/version")
18+
public class DialectEndpoint extends HttpServlet {
19+
@Inject
20+
SessionFactory sessionFactory;
21+
22+
@Override
23+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
24+
try {
25+
var version = sessionFactory.unwrap(SessionFactoryImplementor.class).getJdbcServices().getDialect().getVersion();
26+
resp.getWriter().write(DialectVersions.toString(version));
27+
} catch (Exception e) {
28+
reportException("Failed to retrieve dialect version", e, resp);
29+
}
30+
}
31+
32+
private void reportException(String errorMessage, final Exception e, final HttpServletResponse resp) throws IOException {
33+
final PrintWriter writer = resp.getWriter();
34+
if (errorMessage != null) {
35+
writer.write(errorMessage);
36+
writer.write(" ");
37+
}
38+
writer.write(e.toString());
39+
writer.append("\n\t");
40+
e.printStackTrace(writer);
41+
writer.append("\n\t");
42+
}
43+
44+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.quarkus.it.jpa.db2;
2+
3+
import io.quarkus.test.junit.QuarkusIntegrationTest;
4+
5+
/**
6+
* DialectTest, but in native mode.
7+
*/
8+
@QuarkusIntegrationTest
9+
public class DialectInGraalITCase extends DialectTest {
10+
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.quarkus.it.jpa.db2;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
import io.quarkus.hibernate.orm.runtime.config.DialectVersions;
8+
import io.quarkus.test.junit.QuarkusTest;
9+
import io.restassured.RestAssured;
10+
11+
/**
12+
* Test the dialect used by default in Quarkus.
13+
*/
14+
@QuarkusTest
15+
public class DialectTest {
16+
17+
/**
18+
* This is important for backwards compatibility reasons:
19+
* we want to keep using at least the same version as before by default.
20+
*/
21+
@Test
22+
public void version() {
23+
String version = RestAssured.when().get("/dialect/version").then().extract().body().asString();
24+
assertThat(version).startsWith(DialectVersions.DB2);
25+
}
26+
27+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.quarkus.it.jpa.derby;
2+
3+
import java.io.IOException;
4+
import java.io.PrintWriter;
5+
6+
import jakarta.inject.Inject;
7+
import jakarta.servlet.annotation.WebServlet;
8+
import jakarta.servlet.http.HttpServlet;
9+
import jakarta.servlet.http.HttpServletRequest;
10+
import jakarta.servlet.http.HttpServletResponse;
11+
12+
import org.hibernate.SessionFactory;
13+
import org.hibernate.engine.spi.SessionFactoryImplementor;
14+
15+
import io.quarkus.hibernate.orm.runtime.config.DialectVersions;
16+
17+
@WebServlet(name = "DialectEndpoint", urlPatterns = "/dialect/version")
18+
public class DialectEndpoint extends HttpServlet {
19+
@Inject
20+
SessionFactory sessionFactory;
21+
22+
@Override
23+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
24+
try {
25+
var version = sessionFactory.unwrap(SessionFactoryImplementor.class).getJdbcServices().getDialect().getVersion();
26+
resp.getWriter().write(DialectVersions.toString(version));
27+
} catch (Exception e) {
28+
reportException("Failed to retrieve dialect version", e, resp);
29+
}
30+
}
31+
32+
private void reportException(String errorMessage, final Exception e, final HttpServletResponse resp) throws IOException {
33+
final PrintWriter writer = resp.getWriter();
34+
if (errorMessage != null) {
35+
writer.write(errorMessage);
36+
writer.write(" ");
37+
}
38+
writer.write(e.toString());
39+
writer.append("\n\t");
40+
e.printStackTrace(writer);
41+
writer.append("\n\t");
42+
}
43+
44+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.quarkus.it.jpa.derby;
2+
3+
import io.quarkus.test.junit.QuarkusIntegrationTest;
4+
5+
/**
6+
* DialectTest, but in native mode.
7+
*/
8+
@QuarkusIntegrationTest
9+
public class DialectInGraalITCase extends DialectTest {
10+
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.quarkus.it.jpa.derby;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
import io.quarkus.hibernate.orm.runtime.config.DialectVersions;
8+
import io.quarkus.test.junit.QuarkusTest;
9+
import io.restassured.RestAssured;
10+
11+
/**
12+
* Test the dialect used by default in Quarkus.
13+
*/
14+
@QuarkusTest
15+
public class DialectTest {
16+
17+
/**
18+
* This is important for backwards compatibility reasons:
19+
* we want to keep using at least the same version as before by default.
20+
*/
21+
@Test
22+
public void version() {
23+
String version = RestAssured.when().get("/dialect/version").then().extract().body().asString();
24+
assertThat(version).startsWith(DialectVersions.DERBY);
25+
}
26+
27+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.quarkus.it.jpa.postgresql;
2+
3+
import java.io.IOException;
4+
import java.io.PrintWriter;
5+
6+
import jakarta.inject.Inject;
7+
import jakarta.servlet.annotation.WebServlet;
8+
import jakarta.servlet.http.HttpServlet;
9+
import jakarta.servlet.http.HttpServletRequest;
10+
import jakarta.servlet.http.HttpServletResponse;
11+
12+
import org.hibernate.SessionFactory;
13+
import org.hibernate.engine.spi.SessionFactoryImplementor;
14+
15+
import io.quarkus.hibernate.orm.runtime.config.DialectVersions;
16+
17+
@WebServlet(name = "DialectEndpoint", urlPatterns = "/dialect/version")
18+
public class DialectEndpoint extends HttpServlet {
19+
@Inject
20+
SessionFactory sessionFactory;
21+
22+
@Override
23+
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
24+
try {
25+
var version = sessionFactory.unwrap(SessionFactoryImplementor.class).getJdbcServices().getDialect().getVersion();
26+
resp.getWriter().write(DialectVersions.toString(version));
27+
} catch (Exception e) {
28+
reportException("Failed to retrieve dialect version", e, resp);
29+
}
30+
}
31+
32+
private void reportException(String errorMessage, final Exception e, final HttpServletResponse resp) throws IOException {
33+
final PrintWriter writer = resp.getWriter();
34+
if (errorMessage != null) {
35+
writer.write(errorMessage);
36+
writer.write(" ");
37+
}
38+
writer.write(e.toString());
39+
writer.append("\n\t");
40+
e.printStackTrace(writer);
41+
writer.append("\n\t");
42+
}
43+
44+
}

0 commit comments

Comments
 (0)