diff --git a/connections/jpa-liquibase/pom.xml b/connections/jpa-liquibase/pom.xml
index 3642f74c96..cf520671c2 100755
--- a/connections/jpa-liquibase/pom.xml
+++ b/connections/jpa-liquibase/pom.xml
@@ -38,7 +38,11 @@
org.jboss.logging
jboss-logging
-
+
+ org.keycloak
+ keycloak-services
+ ${project.version}
+
diff --git a/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/CustomKeycloakTask.java b/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/CustomKeycloakTask.java
index 40d71cb7b8..1b63bdb281 100644
--- a/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/CustomKeycloakTask.java
+++ b/connections/jpa-liquibase/src/main/java/org/keycloak/connections/jpa/updater/liquibase/custom/CustomKeycloakTask.java
@@ -15,14 +15,18 @@ import liquibase.resource.ResourceAccessor;
import liquibase.snapshot.SnapshotGeneratorFactory;
import liquibase.statement.SqlStatement;
import liquibase.structure.core.Table;
+import org.jboss.logging.Logger;
import org.keycloak.connections.jpa.updater.liquibase.ThreadLocalSessionContext;
import org.keycloak.models.KeycloakSession;
+import org.keycloak.services.DefaultKeycloakSessionFactory;
/**
* @author Marek Posolda
*/
public abstract class CustomKeycloakTask implements CustomSqlChange {
+ private final Logger logger = Logger.getLogger(getClass());
+
protected KeycloakSession kcSession;
protected Database database;
@@ -49,8 +53,18 @@ public abstract class CustomKeycloakTask implements CustomSqlChange {
@Override
public void setUp() throws SetupException {
this.kcSession = ThreadLocalSessionContext.getCurrentSession();
+
if (this.kcSession == null) {
- throw new SetupException("No KeycloakSession provided in ThreadLocal");
+ // Probably running Liquibase from maven plugin. Try to create kcSession programmatically
+ logger.info("No KeycloakSession provided in ThreadLocal. Initializing KeycloakSessionFactory");
+
+ try {
+ DefaultKeycloakSessionFactory factory = new DefaultKeycloakSessionFactory();
+ factory.init();
+ this.kcSession = factory.create();
+ } catch (Exception e) {
+ throw new SetupException("Exception when initializing factory", e);
+ }
}
}
diff --git a/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-connections-jpa-liquibase/main/module.xml b/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-connections-jpa-liquibase/main/module.xml
index f52bc84788..c5b7d85166 100755
--- a/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-connections-jpa-liquibase/main/module.xml
+++ b/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-connections-jpa-liquibase/main/module.xml
@@ -10,6 +10,7 @@
+