{"record":{"id":"871de2399be33151","repo":"quarkusio/quarkus","slug":"can-only-be-used-in-dev-or-test-mode","errorCode":null,"errorMessage":"Can only be used in dev or test mode","messagePattern":"Can only be used in dev or test mode","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/schema/SchemaManagementIntegrator.java","lineNumber":89,"sourceCode":"    public static void mapDatasource(String datasource, String pu) {\n        datasourceToPuMap.put(datasource, pu);\n    }\n\n    static String defaultName(SessionFactoryImplementor sf) {\n        String name = sf.getName();\n        if (name != null) {\n            return name;\n        }\n        Object persistenceUnitName = sf.getProperties().get(PERSISTENCE_UNIT_NAME);\n        if (persistenceUnitName != null) {\n            return persistenceUnitName.toString();\n        }\n        return DataSourceUtil.DEFAULT_DATASOURCE_NAME;\n    }\n\n    public static void recreateDatabases() {\n        if (!LaunchMode.current().isDevOrTest()) {\n            throw new IllegalStateException(\"Can only be used in dev or test mode\");\n        }\n        for (String val : metadataMap.keySet()) {\n            recreateDatabase(val);\n        }\n    }\n\n    public static void recreateDatabase(String name) {\n        if (!LaunchMode.current().isDevOrTest()) {\n            throw new IllegalStateException(\"Can only be used in dev or test mode\");\n        }\n        Holder holder = metadataMap.get(name);\n\n        ServiceRegistry serviceRegistry = holder.sessionFactory.getServiceRegistry();\n        SimpleExecutionOptions executionOptions = new SimpleExecutionOptions(serviceRegistry);\n        Object schemaGenerationDatabaseAction = executionOptions.getConfigurationValues()\n                .get(\"jakarta.persistence.schema-generation.database.action\");\n        if (schemaGenerationDatabaseAction != null && !(schemaGenerationDatabaseAction.toString().equals(\"none\"))) {\n            //if this is none we assume another framework is doing this (e.g. flyway)","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/schema/SchemaManagementIntegrator.java#L71-L107","documentation":"SchemaManagementIntegrator.recreateDatabases() re-imports/recreates all databases registered with the schema integrator, a Dev Services / dev-mode convenience. It is guarded by LaunchMode.current().isDevOrTest(), so calling it in a production (normal) launch throws IllegalStateException. This protects production data from accidental wholesale recreation.","triggerScenarios":"Programmatically invoking SchemaManagementIntegrator.recreateDatabases() (directly or via resetAllDatabases) while the application runs in a launch mode other than NORMAL — i.e. not quarkus:dev, not tests.","commonSituations":"Reusing a dev/test support class from production code; an admin/ops endpoint accidentally wired to database-reset logic running in prod; custom tooling calling Quarkus internal APIs at runtime in a packaged jar.","solutions":["Do not call recreateDatabases in production; guard your code path with LaunchMode checks or remove the call.","For controlled schema changes in production use Flyway/Liquibase migrations instead of Quarkus dev-mode reset APIs.","If this is a legitimate dev workflow, run the app with `quarkus dev` or as a test where the launch mode is DEV/TEST."],"exampleFix":"// before\nSchemaManagementIntegrator.recreateDatabases();\n\n// after\nif (LaunchMode.current().isDevOrTest()) {\n    SchemaManagementIntegrator.recreateDatabases();\n}","handlingStrategy":"validation","validationCode":"if (!LaunchMode.current().isDevOrTest()) {\n    throw new IllegalStateException(\"recreateDatabases is dev/test only\");\n}\nSchemaManagementIntegrator.recreateDatabases();","typeGuard":null,"tryCatchPattern":"try {\n    SchemaManagementIntegrator.recreateDatabases();\n} catch (IllegalStateException e) {\n    log.warn(\"DB reset skipped: only allowed in dev or test mode\", e);\n}","preventionTips":["Never call Quarkus dev-support internal APIs from production code paths","Gate destructive database operations on LaunchMode checks","Use Flyway/Liquibase for production schema management"],"tags":["hibernate-orm","dev-mode","schema-management","launch-mode"],"backgroundTag":"dev-mode-only-api","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}