{"record":{"id":"f7b466f79300468c","repo":"quarkusio/quarkus","slug":"no-pool-has-been-defined-for-persistence-unit","errorCode":null,"errorMessage":"No pool has been defined for persistence unit ","messagePattern":"No pool has been defined for persistence unit ","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"critical","filePath":"extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java","lineNumber":384,"sourceCode":"        return FastBootHibernateReactivePersistenceProvider.class.getName().equals(requestedProviderName)\n                || IMPLEMENTATION_NAME.equals(requestedProviderName)\n                || FastBootHibernatePersistenceProvider.class.getName().equals(requestedProviderName)\n                || \"org.hibernate.jpa.HibernatePersistenceProvider\".equals(requestedProviderName);\n    }\n\n    private void registerVertxAndPool(String persistenceUnitName,\n            RuntimeSettings runtimeSettings,\n            PreconfiguredReactiveServiceRegistryBuilder serviceRegistry, String datasourceName) {\n        if (runtimeSettings.isConfigured(AvailableSettings.URL)) {\n            // the pool has been defined in the persistence unit, we can bail out\n            return;\n        }\n\n        Pool pool;\n        try {\n            InjectableInstance<Pool> poolHandle = ReactiveDataSourceUtil.dataSourceInstance(datasourceName);\n            if (!poolHandle.isResolvable()) {\n                throw new IllegalStateException(\"No pool has been defined for persistence unit \" + persistenceUnitName);\n            }\n            // ClientProxy.unwrap is necessary to trigger exceptions on inactive datasources\n            pool = ClientProxy.unwrap(poolHandle.get());\n        } catch (RuntimeException e) {\n            throw PersistenceUnitUtil.unableToFindDataSource(persistenceUnitName, datasourceName, e);\n        }\n\n        serviceRegistry.addInitiator(new QuarkusReactiveConnectionPoolInitiator(pool));\n\n        InstanceHandle<Vertx> vertxHandle = Arc.container().instance(Vertx.class);\n        if (!vertxHandle.isAvailable()) {\n            throw new IllegalStateException(\"No Vert.x instance has been registered in ArC ?\");\n        }\n        serviceRegistry.addInitiator(new VertxInstanceInitiator(vertxHandle.get()));\n    }\n\n    private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersistenceUnit persistenceUnitConfig,\n            Builder runtimeSettingsBuilder) {","sourceCodeStart":366,"sourceCodeEnd":402,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java#L366-L402","documentation":"A Hibernate Reactive persistence unit must be backed by an Agroal datasource (reactive Pool). When the Pool CDI instance for the PU's datasource is not resolvable, Quarkus throws IllegalStateException 'No pool has been defined for persistence unit ...' (wrapped by unableToFindDataSource on other RuntimeExceptions).","triggerScenarios":"Bootstrapping a reactive persistence unit whose configured datasource (quarkus.hibernate-orm.datasource or the default datasource) has no matching quarkus.datasource.\"name\".db-kind / reactive pool configuration; detected in registerVertxAndPool via ReactiveDataSourceUtil.dataSourceInstance(datasourceName).","commonSituations":"PU points at a named datasource that isn't configured (typo in quarkus.hibernate-orm.datasource vs quarkus.datasource key); no datasource at all defined; hibernate-reactive used without an Agroal/reactive datasource extension; datasource deactivated at runtime.","solutions":["Define the datasource: quarkus.datasource.db-kind (and quarkus.datasource.username/password, reactive url) in application.properties","If the PU uses a named datasource, configure quarkus.datasource.\"<name>\".* with the exact name referenced by quarkus.hibernate-orm.datasource","Ensure quarkus-agroal (and reactive client driver, e.g., io.quarkus:quarkus-reactive-pg-client) dependencies are present","Fix typos/mismatch between the PU datasource name and the configured datasource"],"exampleFix":"// before (application.properties)\nquarkus.hibernate-orm.datasource=customers\n# no datasource named 'customers' configured\n\n// after\nquarkus.hibernate-orm.datasource=customers\nquarkus.datasource.\"customers\".db-kind=postgresql\nquarkus.datasource.\"customers\".reactive.url=vertx-postgresql://localhost:5432/customers","handlingStrategy":"validation","validationCode":"String dsName = config.datasource().orElse(\"<default>\");\nboolean poolExists = Arc.container().instance(DataSource.class, DataSourceUtil.dataSourceNameQualifier(dsName)).isResolvable();\nif (!poolExists) throw new IllegalStateException(\"Configure quarkus.datasource for \" + dsName);","typeGuard":"boolean datasourceConfigured(String name) {\n    return Arc.container() != null\n        && Arc.container().instance(DataSource.class,\n             DataSourceUtil.dataSourceNameQualifier(name)).isResolvable();\n}","tryCatchPattern":"try {\n    sessionFactory = quarkusFactory();\n} catch (IllegalStateException e) {\n    if (e.getMessage().startsWith(\"No pool has been defined\")) { failFast(\"Configure the datasource\"); }\n    throw e;\n}","preventionTips":["Match quarkus.hibernate-orm.datasource exactly to a quarkus.datasource.\"name\" config key","Always add quarkus-agroal and the reactive client driver when using hibernate-reactive","Smoke-test datasource resolution at startup in every environment"],"tags":["hibernate-reactive","datasource","missing-config","agroal"],"backgroundTag":"missing-datasource","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}