Skip to content

Commit 5374924

Browse files
authored
Merge pull request #48477 from mbellade/48469-fix
Disable HQL Console for reactive PUs
2 parents 4435c0d + b0ffb5b commit 5374924

File tree

11 files changed

+107
-13
lines changed

11 files changed

+107
-13
lines changed

extensions/hibernate-orm/deployment/src/main/resources/dev-ui/hibernate-orm-hql-console.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,9 @@ export class HibernateOrmHqlConsoleComponent extends QwcHotReloadElement {
240240

241241
_renderTables() {
242242
if (this._selectedPersistenceUnit) {
243+
if (this._selectedPersistenceUnit.reactive) {
244+
return; // Reactive persistence units are not supported
245+
}
243246
return html`
244247
<qui-card class="tablesCard" header="Entities">
245248
<div slot="content">
@@ -310,6 +313,10 @@ export class HibernateOrmHqlConsoleComponent extends QwcHotReloadElement {
310313
// *** data table and HQL input ***
311314

312315
_renderDataAndInput() {
316+
if (this._selectedPersistenceUnit.reactive) {
317+
return html`
318+
<span style="padding-top:20px;padding-left:20px;">Reactive persistence units are not supported in this console, please use a blocking one.</span>`;
319+
}
313320
return html`
314321
${this._renderHqlInput()}
315322
<div tab="data-tab" style="height:100%;">${this._renderTableData()}</div>`;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import io.quarkus.arc.runtime.BeanContainerListener;
3131
import io.quarkus.hibernate.orm.PersistenceUnit;
3232
import io.quarkus.hibernate.orm.runtime.boot.QuarkusPersistenceUnitDefinition;
33+
import io.quarkus.hibernate.orm.runtime.dev.HibernateOrmDevIntegrator;
3334
import io.quarkus.hibernate.orm.runtime.integration.HibernateOrmIntegrationRuntimeDescriptor;
3435
import io.quarkus.hibernate.orm.runtime.migration.MultiTenancyStrategy;
3536
import io.quarkus.hibernate.orm.runtime.proxies.PreGeneratedProxies;
@@ -73,10 +74,12 @@ public void setupPersistenceProvider(HibernateOrmRuntimeConfig hibernateOrmRunti
7374
public BeanContainerListener initMetadata(List<QuarkusPersistenceUnitDefinition> parsedPersistenceXmlDescriptors,
7475
Scanner scanner, Collection<Class<? extends Integrator>> additionalIntegrators) {
7576
SchemaManagementIntegrator.clearDsMap();
77+
HibernateOrmDevIntegrator.clearPuMap();
7678
for (QuarkusPersistenceUnitDefinition i : parsedPersistenceXmlDescriptors) {
7779
if (i.getConfig().getDataSource().isPresent()) {
7880
SchemaManagementIntegrator.mapDatasource(i.getConfig().getDataSource().get(), i.getName());
7981
}
82+
HibernateOrmDevIntegrator.mapPersistenceUnit(i.getName(), i.getPersistenceUnitDescriptor());
8083
}
8184
return new BeanContainerListener() {
8285
@Override

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/dev/HibernateOrmDevController.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.hibernate.tool.schema.spi.SourceDescriptor;
3232
import org.hibernate.tool.schema.spi.TargetDescriptor;
3333

34+
import io.quarkus.hibernate.orm.runtime.boot.QuarkusPersistenceUnitDescriptor;
35+
3436
public class HibernateOrmDevController {
3537

3638
private static final HibernateOrmDevController INSTANCE = new HibernateOrmDevController();
@@ -48,8 +50,8 @@ public HibernateOrmDevInfo getInfo() {
4850
return info;
4951
}
5052

51-
void pushPersistenceUnit(SessionFactoryImplementor sessionFactoryImplementor, String persistenceUnitName,
52-
Metadata metadata, ServiceRegistry serviceRegistry, String importFile) {
53+
void pushPersistenceUnit(SessionFactoryImplementor sessionFactoryImplementor, QuarkusPersistenceUnitDescriptor descriptor,
54+
String persistenceUnitName, Metadata metadata, ServiceRegistry serviceRegistry, String importFile) {
5355
List<HibernateOrmDevInfo.Entity> managedEntities = new ArrayList<>();
5456
for (PersistentClass entityBinding : metadata.getEntityBindings()) {
5557
managedEntities.add(new HibernateOrmDevInfo.Entity(entityBinding.getJpaEntityName(), entityBinding.getClassName(),
@@ -83,7 +85,8 @@ void pushPersistenceUnit(SessionFactoryImplementor sessionFactoryImplementor, St
8385
DDLSupplier updateDDLSupplier = new DDLSupplier(Action.UPDATE, metadata, serviceRegistry, importFile);
8486

8587
info.add(new HibernateOrmDevInfo.PersistenceUnit(sessionFactoryImplementor, persistenceUnitName, managedEntities,
86-
namedQueries, namedNativeQueries, createDDLSupplier, dropDDLSupplier, updateDDLSupplier));
88+
namedQueries, namedNativeQueries, createDDLSupplier, dropDDLSupplier, updateDDLSupplier,
89+
descriptor.isReactive()));
8790
}
8891

8992
class DDLSupplier implements Supplier<String> {

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/dev/HibernateOrmDevInfo.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,18 @@ public static class PersistenceUnit {
5555
private final Supplier<String> createDDLSupplier;
5656
private final Supplier<String> dropDDLSupplier;
5757
private final Supplier<String> updateDDLSupplier;
58+
private final boolean reactive;
5859

59-
public PersistenceUnit(SessionFactoryImplementor sessionFactory, String name, List<Entity> managedEntities,
60+
public PersistenceUnit(
61+
SessionFactoryImplementor sessionFactory,
62+
String name,
63+
List<Entity> managedEntities,
6064
List<Query> namedQueries,
61-
List<Query> namedNativeQueries, Supplier<String> createDDL, Supplier<String> dropDDL,
62-
Supplier<String> updateDDLSupplier) {
65+
List<Query> namedNativeQueries,
66+
Supplier<String> createDDL,
67+
Supplier<String> dropDDL,
68+
Supplier<String> updateDDLSupplier,
69+
boolean reactive) {
6370
this.sessionFactory = sessionFactory;
6471
this.name = name;
6572
this.managedEntities = managedEntities;
@@ -68,6 +75,7 @@ public PersistenceUnit(SessionFactoryImplementor sessionFactory, String name, Li
6875
this.createDDLSupplier = createDDL;
6976
this.dropDDLSupplier = dropDDL;
7077
this.updateDDLSupplier = updateDDLSupplier;
78+
this.reactive = reactive;
7179
}
7280

7381
// Method name must not be `getSessionFactory` to exclude it from JSON serialization
@@ -119,6 +127,9 @@ public synchronized String getUpdateDDL() {
119127
return updateDDL;
120128
}
121129

130+
public boolean isReactive() {
131+
return reactive;
132+
}
122133
}
123134

124135
public static class Entity {

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/dev/HibernateOrmDevIntegrator.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,40 @@
22

33
import static org.hibernate.cfg.AvailableSettings.HBM2DDL_IMPORT_FILES;
44

5+
import java.util.Map;
6+
import java.util.concurrent.ConcurrentHashMap;
7+
58
import org.hibernate.boot.Metadata;
69
import org.hibernate.boot.spi.BootstrapContext;
10+
import org.hibernate.cfg.AvailableSettings;
711
import org.hibernate.engine.spi.SessionFactoryImplementor;
812
import org.hibernate.integrator.spi.Integrator;
913
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
1014

15+
import io.quarkus.hibernate.orm.runtime.boot.QuarkusPersistenceUnitDescriptor;
16+
1117
public class HibernateOrmDevIntegrator implements Integrator {
18+
private static final Map<String, QuarkusPersistenceUnitDescriptor> puDescriptorMap = new ConcurrentHashMap<>();
19+
20+
public static void clearPuMap() {
21+
puDescriptorMap.clear();
22+
}
23+
24+
public static void mapPersistenceUnit(String pu, QuarkusPersistenceUnitDescriptor descriptor) {
25+
puDescriptorMap.put(pu, descriptor);
26+
}
1227

1328
@Override
1429
public void integrate(Metadata metadata, BootstrapContext bootstrapContext,
1530
SessionFactoryImplementor sessionFactoryImplementor) {
31+
String name = (String) sessionFactoryImplementor.getProperties()
32+
.get(AvailableSettings.PERSISTENCE_UNIT_NAME);
1633
HibernateOrmDevController.get().pushPersistenceUnit(
1734
sessionFactoryImplementor,
18-
(String) sessionFactoryImplementor.getProperties()
19-
.get(org.hibernate.cfg.AvailableSettings.PERSISTENCE_UNIT_NAME),
20-
metadata, sessionFactoryImplementor.getServiceRegistry(),
35+
puDescriptorMap.get(name),
36+
name,
37+
metadata,
38+
sessionFactoryImplementor.getServiceRegistry(),
2139
(String) sessionFactoryImplementor.getProperties().get(HBM2DDL_IMPORT_FILES));
2240
}
2341

integration-tests/devmode/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@
7474
<artifactId>quarkus-jdbc-h2-deployment</artifactId>
7575
<scope>test</scope>
7676
</dependency>
77+
<dependency>
78+
<groupId>io.quarkus</groupId>
79+
<artifactId>quarkus-hibernate-reactive-deployment</artifactId>
80+
<scope>test</scope>
81+
</dependency>
82+
<dependency>
83+
<groupId>io.quarkus</groupId>
84+
<artifactId>quarkus-reactive-pg-client-deployment</artifactId>
85+
<scope>test</scope>
86+
</dependency>
7787
<dependency>
7888
<groupId>io.quarkus</groupId>
7989
<artifactId>quarkus-junit5-internal</artifactId>

integration-tests/devmode/src/test/java/io/quarkus/test/devui/AbstractDevUIHibernateOrmTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@ public abstract class AbstractDevUIHibernateOrmTest extends DevUIJsonRPCTest {
2121
private final String expectedTableName;
2222
private final String expectedClassName;
2323
private final Integer expectedResults;
24+
private final boolean reactive;
2425

2526
public AbstractDevUIHibernateOrmTest(String expectedPersistenceUnitName, String expectedTableName,
26-
String expectedClassName, Integer expectedResults) {
27+
String expectedClassName, Integer expectedResults, boolean reactive) {
2728
super("io.quarkus.quarkus-hibernate-orm");
2829
this.expectedPersistenceUnitName = expectedPersistenceUnitName;
2930
this.expectedTableName = expectedTableName;
3031
this.expectedClassName = expectedClassName;
3132
this.expectedResults = expectedResults;
33+
this.reactive = reactive;
3234
}
3335

3436
@Test
@@ -69,6 +71,10 @@ public void testGetInfo() throws Exception {
6971
JsonNode namedQueries = persistenceUnit.get("namedQueries");
7072
assertNotNull(namedQueries);
7173
assertTrue(namedQueries.isArray());
74+
75+
JsonNode reactive = persistenceUnit.get("reactive");
76+
assertTrue(reactive.isBoolean());
77+
assertEquals(this.reactive, reactive.asBoolean());
7278
}
7379
}
7480
}

integration-tests/devmode/src/test/java/io/quarkus/test/devui/DevUIHibernateOrmActiveFalseAndNamedPuActiveTrueTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class DevUIHibernateOrmActiveFalseAndNamedPuActiveTrueTest extends Abstra
2828
.addClasses(MyNamedPuEntity.class));
2929

3030
public DevUIHibernateOrmActiveFalseAndNamedPuActiveTrueTest() {
31-
super("namedpu", "MyNamedPuEntity", "io.quarkus.test.devui.namedpu.MyNamedPuEntity", null);
31+
super("namedpu", "MyNamedPuEntity", "io.quarkus.test.devui.namedpu.MyNamedPuEntity", null, false);
3232
}
3333

3434
}

integration-tests/devmode/src/test/java/io/quarkus/test/devui/DevUIHibernateOrmActiveFalseTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class DevUIHibernateOrmActiveFalseTest extends AbstractDevUIHibernateOrmT
1818
.addClasses(MyEntity.class));
1919

2020
public DevUIHibernateOrmActiveFalseTest() {
21-
super(null, null, null, null);
21+
super(null, null, null, null, false);
2222
}
2323

2424
}

integration-tests/devmode/src/test/java/io/quarkus/test/devui/DevUIHibernateOrmSmokeTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ public class DevUIHibernateOrmSmokeTest extends AbstractDevUIHibernateOrmTest {
1212
.withApplicationRoot((jar) -> jar.addAsResource(
1313
new StringAsset("quarkus.datasource.db-kind=h2\n"
1414
+ "quarkus.datasource.jdbc.url=jdbc:h2:mem:test\n"
15+
+ "quarkus.datasource.reactive=false\n"
1516
+ "quarkus.hibernate-orm.schema-management.strategy=drop-and-create\n"),
1617
"application.properties")
1718
.addAsResource(new StringAsset("INSERT INTO MyEntity(id, field) VALUES(1, 'entity_1');"), "import.sql")
1819
.addClasses(MyEntity.class));
1920

2021
public DevUIHibernateOrmSmokeTest() {
21-
super("<default>", "MyEntity", "io.quarkus.test.devui.MyEntity", 1);
22+
super("<default>", "MyEntity", "io.quarkus.test.devui.MyEntity", 1, false);
2223
}
2324
}

0 commit comments

Comments
 (0)