keycloak-aplcache

Details

diff --git a/connections/jpa-liquibase/pom.xml b/connections/jpa-liquibase/pom.xml
index 3642f74..cf52067 100755
--- a/connections/jpa-liquibase/pom.xml
+++ b/connections/jpa-liquibase/pom.xml
@@ -38,7 +38,11 @@
             <groupId>org.jboss.logging</groupId>
             <artifactId>jboss-logging</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.keycloak</groupId>
+            <artifactId>keycloak-services</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
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 40d71cb..1b63bdb 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 <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
 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 f52bc84..c5b7d85 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 @@
         <module name="org.keycloak.keycloak-core"/>
         <module name="org.keycloak.keycloak-model-api"/>
         <module name="org.keycloak.keycloak-connections-jpa"/>
+        <module name="org.keycloak.keycloak-services"/>
         <module name="org.liquibase"/>
         <module name="javax.persistence.api"/>
         <module name="org.jboss.logging"/>