keycloak-aplcache

Details

diff --git a/distribution/demo-dist/pom.xml b/distribution/demo-dist/pom.xml
index 187d62d..71a5a1a 100755
--- a/distribution/demo-dist/pom.xml
+++ b/distribution/demo-dist/pom.xml
@@ -202,6 +202,31 @@
                     </execution>
                 </executions>
             </plugin>
+            
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>unpack</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>unpack</goal>
+                        </goals>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>org.keycloak</groupId>
+                                    <artifactId>keycloak-wildfly-server-subsystem</artifactId>
+                                    <version>${project.version}</version>
+                                    <type>jar</type>
+                                    <includes>default-config/*.xml</includes>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/distribution/demo-dist/src/main/xslt/standalone.xsl b/distribution/demo-dist/src/main/xslt/standalone.xsl
index db2247c..855efc0 100755
--- a/distribution/demo-dist/src/main/xslt/standalone.xsl
+++ b/distribution/demo-dist/src/main/xslt/standalone.xsl
@@ -1,19 +1,19 @@
 <!--
-  ~ Copyright 2016 Red Hat, Inc. and/or its affiliates
-  ~ and other contributors as indicated by the @author tags.
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
+~ Copyright 2016 Red Hat, Inc. and/or its affiliates
+~ and other contributors as indicated by the @author tags.
+~
+~ Licensed under the Apache License, Version 2.0 (the "License");
+~ you may not use this file except in compliance with the License.
+~ You may obtain a copy of the License at
+~
+~ http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+-->
 
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:xalan="http://xml.apache.org/xalan"
@@ -42,7 +42,7 @@
     <xsl:template match="//ds:datasources">
         <xsl:copy>
             <xsl:apply-templates select="node()[name(.)='datasource']"/>
-            <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" use-java-context="true">
+            <datasource jndi-name="java:jboss/datasources/KeycloakDS" jta="false" pool-name="KeycloakDS" use-java-context="true">
                 <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url>
                 <driver>h2</driver>
                 <security>
@@ -57,68 +57,7 @@
     <xsl:template match="//j:profile">
         <xsl:copy>
             <xsl:apply-templates select="node()|@*"/>
-            <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
-                <web-context>auth</web-context>
-                <providers>
-                    <provider>classpath:${jboss.home.dir}/providers/*</provider>
-                </providers>
-                <master-realm-name>master</master-realm-name>
-                <scheduled-task-interval>900</scheduled-task-interval>
-                <theme>
-                    <staticMaxAge>2592000</staticMaxAge>
-                    <cacheThemes>true</cacheThemes>
-                    <cacheTemplates>true</cacheTemplates>
-                    <dir>${jboss.home.dir}/themes</dir>
-                </theme>
-                <spi name="eventsStore">
-                    <default-provider>jpa</default-provider>
-                    <provider name="jpa" enabled="true">
-                        <properties>
-                            <property name="exclude-events" value="[&quot;REFRESH_TOKEN&quot;]"/>
-                        </properties>
-                    </provider>
-                </spi>
-                <spi name="realm">
-                    <default-provider>jpa</default-provider>
-                </spi>
-                <spi name="user">
-                    <default-provider>jpa</default-provider>
-                </spi>
-                <spi name="userCache">
-                    <provider name="default" enabled="true"/>
-                </spi>
-                <spi name="userSessionPersister">
-                    <default-provider>jpa</default-provider>
-                </spi>
-                <spi name="authorizationPersister">
-                    <default-provider>jpa</default-provider>
-                </spi>
-                <spi name="timer">
-                    <default-provider>basic</default-provider>
-                </spi>
-                <spi name="connectionsHttpClient">
-                    <provider name="default" enabled="true"/>
-                </spi>
-                <spi name="connectionsJpa">
-                    <provider name="default" enabled="true">
-                        <properties>
-                            <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
-                            <property name="databaseSchema" value="update"/>
-                        </properties>
-                    </provider>
-                </spi>
-                <spi name="realmCache">
-                    <provider name="default" enabled="true"/>
-                </spi>
-                <spi name="connectionsInfinispan">
-                    <default-provider>default</default-provider>
-                    <provider name="default" enabled="true">
-                        <properties>
-                            <property name="cacheContainer" value="java:comp/env/infinispan/Keycloak"/>
-                        </properties>
-                    </provider>
-                </spi>
-            </subsystem>
+            <xsl:copy-of select="document('../../../target/dependency/default-config/keycloak-server-default-config.xml')"/>
             <subsystem xmlns="urn:jboss:domain:keycloak:1.1"/>
             <subsystem xmlns="urn:jboss:domain:keycloak-saml:1.1"/>
         </xsl:copy>
diff --git a/distribution/server-overlay/cli/keycloak-install.cli b/distribution/server-overlay/cli/keycloak-install.cli
index c3ca492..c89859d 100644
--- a/distribution/server-overlay/cli/keycloak-install.cli
+++ b/distribution/server-overlay/cli/keycloak-install.cli
@@ -1,5 +1,5 @@
 embed-server --server-config=standalone.xml
-/subsystem=datasources/data-source=KeycloakDS/:add(connection-url="jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE",driver-name=h2,jndi-name=java:jboss/datasources/KeycloakDS,password=sa,user-name=sa,use-java-context=true)
+/subsystem=datasources/data-source=KeycloakDS/:add(connection-url="jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE",jta=false,driver-name=h2,jndi-name=java:jboss/datasources/KeycloakDS,password=sa,user-name=sa,use-java-context=true)
 /subsystem=infinispan/cache-container=keycloak:add(jndi-name="infinispan/Keycloak")
 /subsystem=infinispan/cache-container=keycloak/local-cache=realms:add()
 /subsystem=infinispan/cache-container=keycloak/local-cache=users:add()
@@ -30,3 +30,6 @@ embed-server --server-config=standalone.xml
 /subsystem=keycloak-server/spi=realmCache/provider=default/:add(enabled=true)
 /subsystem=keycloak-server/spi=connectionsInfinispan/:add(default-provider=default)
 /subsystem=keycloak-server/spi=connectionsInfinispan/provider=default/:add(properties={cacheContainer => "java:comp/env/infinispan/Keycloak"},enabled=true)
+/subsystem=keycloak-server/spi=jta-lookup/:add
+/subsystem=keycloak-server/spi=jta-lookup/provider=jboss/:add(enabled=true)
+
diff --git a/distribution/server-overlay/cli/keycloak-install-ha.cli b/distribution/server-overlay/cli/keycloak-install-ha.cli
index f52bbc0..ddcefc4 100644
--- a/distribution/server-overlay/cli/keycloak-install-ha.cli
+++ b/distribution/server-overlay/cli/keycloak-install-ha.cli
@@ -1,5 +1,5 @@
 embed-server --server-config=standalone-ha.xml
-/subsystem=datasources/data-source=KeycloakDS/:add(connection-url="jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE",driver-name=h2,jndi-name=java:jboss/datasources/KeycloakDS,password=sa,user-name=sa,use-java-context=true)
+/subsystem=datasources/data-source=KeycloakDS/:add(connection-url="jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE",jta=false,driver-name=h2,jndi-name=java:jboss/datasources/KeycloakDS,password=sa,user-name=sa,use-java-context=true)
 /subsystem=infinispan/cache-container=keycloak:add(jndi-name="infinispan/Keycloak")
 /subsystem=infinispan/cache-container=keycloak/transport=TRANSPORT:add(lock-timeout=60000)
 /subsystem=infinispan/cache-container=keycloak/invalidation-cache=realms:add(mode="SYNC")
@@ -30,3 +30,5 @@ embed-server --server-config=standalone-ha.xml
 /subsystem=keycloak-server/spi=realmCache/provider=default/:add(enabled=true)
 /subsystem=keycloak-server/spi=connectionsInfinispan/:add(default-provider=default)
 /subsystem=keycloak-server/spi=connectionsInfinispan/provider=default/:add(properties={cacheContainer => "java:comp/env/infinispan/Keycloak"},enabled=true)
+/subsystem=keycloak-server/spi=jta-lookup/:add
+/subsystem=keycloak-server/spi=jta-lookup/provider=jboss/:add(enabled=true)
diff --git a/wildfly/server-subsystem/pom.xml b/wildfly/server-subsystem/pom.xml
index db0f3ca..05b0fc0 100755
--- a/wildfly/server-subsystem/pom.xml
+++ b/wildfly/server-subsystem/pom.xml
@@ -47,8 +47,23 @@
                         <include>**/*TestCase.java</include>
                     </includes>
                 </configuration>
-            </plugin>            
+            </plugin>        
         </plugins>
+        <filters>
+            <filter>src/main/config/default-server-subsys-config.properties</filter>
+        </filters>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <testResources>
+            <testResource>
+                <directory>src/test/resources</directory>
+                <filtering>true</filtering>
+            </testResource>
+        </testResources>
     </build>
 
     <dependencies>
diff --git a/wildfly/server-subsystem/src/main/config/default-server-subsys-config.properties b/wildfly/server-subsystem/src/main/config/default-server-subsys-config.properties
new file mode 100644
index 0000000..afdebe2
--- /dev/null
+++ b/wildfly/server-subsystem/src/main/config/default-server-subsys-config.properties
@@ -0,0 +1,67 @@
+keycloak.server.subsys.default.config=\
+<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">\
+   <web-context>auth</web-context>\
+    <providers>\
+        <provider>classpath:${jboss.home.dir}/providers/*</provider>\
+    </providers>\
+    <master-realm-name>master</master-realm-name>\
+    <scheduled-task-interval>900</scheduled-task-interval>\
+    <theme>\
+        <staticMaxAge>2592000</staticMaxAge>\
+        <cacheThemes>true</cacheThemes>\
+        <cacheTemplates>true</cacheTemplates>\
+        <dir>${jboss.home.dir}/themes</dir>\
+    </theme>\
+    <spi name="eventsStore">\
+        <default-provider>jpa</default-provider>\
+        <provider name="jpa" enabled="true">\
+            <properties>\
+                <property name="exclude-events" value="[&quot;REFRESH_TOKEN&quot;]"/>\
+            </properties>\
+        </provider>\
+    </spi>\
+    <spi name="realm">\
+        <default-provider>jpa</default-provider>\
+    </spi>\
+    <spi name="user">\
+        <default-provider>jpa</default-provider>\
+    </spi>\
+    <spi name="userCache">\
+        <provider name="default" enabled="true"/>\
+    </spi>\
+    <spi name="userSessionPersister">\
+        <default-provider>jpa</default-provider>\
+    </spi>\
+    <spi name="authorizationPersister">\
+        <default-provider>jpa</default-provider>\
+    </spi>\
+    <spi name="timer">\
+        <default-provider>basic</default-provider>\
+    </spi>\
+    <spi name="connectionsHttpClient">\
+        <provider name="default" enabled="true"/>\
+    </spi>\
+    <spi name="connectionsJpa">\
+        <provider name="default" enabled="true">\
+            <properties>\
+                <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>\
+                <property name="databaseSchema" value="update"/>\
+            </properties>\
+        </provider>\
+    </spi>\
+    <spi name="realmCache">\
+        <provider name="default" enabled="true"/>\
+    </spi>\
+    <spi name="connectionsInfinispan">\
+        <default-provider>default</default-provider>\
+        <provider name="default" enabled="true">\
+            <properties>\
+                <property name="cacheContainer" value="java:comp/env/infinispan/Keycloak"/>\
+            </properties>\
+        </provider>\
+    </spi>\
+    <spi name="jta-lookup">\
+        <default-provider>${keycloak.jta.lookup.provider:jboss}</default-provider>\
+        <provider name="jboss" enabled="true"/>\
+    </spi>\
+</subsystem>\
\ No newline at end of file
diff --git a/wildfly/server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/JsonConfigConverter.java b/wildfly/server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/JsonConfigConverter.java
index 95010cc..aa4d3f5 100644
--- a/wildfly/server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/JsonConfigConverter.java
+++ b/wildfly/server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/JsonConfigConverter.java
@@ -47,7 +47,7 @@ import static org.keycloak.subsystem.server.extension.ThemeResourceDefinition.WE
  */
 public class JsonConfigConverter {
 
-    private static final List<String> NON_SPI_LIST = new ArrayList();
+    private static final List<String> NON_SPI_LIST = new ArrayList<>();
     
     static {
         NON_SPI_LIST.add("providers");
diff --git a/wildfly/server-subsystem/src/main/resources/default-config/keycloak-server-default-config.xml b/wildfly/server-subsystem/src/main/resources/default-config/keycloak-server-default-config.xml
new file mode 100644
index 0000000..e520611
--- /dev/null
+++ b/wildfly/server-subsystem/src/main/resources/default-config/keycloak-server-default-config.xml
@@ -0,0 +1 @@
+${keycloak.server.subsys.default.config}
\ No newline at end of file
diff --git a/wildfly/server-subsystem/src/main/resources/subsystem-templates/keycloak-server.xml b/wildfly/server-subsystem/src/main/resources/subsystem-templates/keycloak-server.xml
index f2d4cd6..67bf03e 100644
--- a/wildfly/server-subsystem/src/main/resources/subsystem-templates/keycloak-server.xml
+++ b/wildfly/server-subsystem/src/main/resources/subsystem-templates/keycloak-server.xml
@@ -19,66 +19,5 @@
 <!--  Template used by WildFly build when directed to include Keycloak subsystem in a configuration. -->
 <config>
     <extension-module>org.keycloak.keycloak-server-subsystem</extension-module>
-    <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
-        <web-context>auth</web-context>
-        <providers>
-            <provider>classpath:${jboss.home.dir}/providers/*</provider>
-        </providers>
-        <master-realm-name>master</master-realm-name>
-        <scheduled-task-interval>900</scheduled-task-interval>
-        <theme>
-            <staticMaxAge>2592000</staticMaxAge>
-            <cacheThemes>true</cacheThemes>
-            <cacheTemplates>true</cacheTemplates>
-            <dir>${jboss.home.dir}/themes</dir>
-        </theme>
-        <spi name="eventsStore">
-            <default-provider>jpa</default-provider>
-            <provider name="jpa" enabled="true">
-                <properties>
-                    <property name="exclude-events" value="[&quot;REFRESH_TOKEN&quot;]"/>
-                </properties>
-            </provider>
-        </spi>
-        <spi name="realm">
-            <default-provider>jpa</default-provider>
-        </spi>
-        <spi name="user">
-            <default-provider>jpa</default-provider>
-        </spi>
-        <spi name="userCache">
-            <provider name="default" enabled="true"/>
-        </spi>
-        <spi name="userSessionPersister">
-            <default-provider>jpa</default-provider>
-        </spi>
-        <spi name="authorizationPersister">
-            <default-provider>jpa</default-provider>
-        </spi>
-        <spi name="timer">
-            <default-provider>basic</default-provider>
-        </spi>
-        <spi name="connectionsHttpClient">
-            <provider name="default" enabled="true"/>
-        </spi>
-        <spi name="connectionsJpa">
-            <provider name="default" enabled="true">
-                <properties>
-                    <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
-                    <property name="databaseSchema" value="update"/>
-                </properties>
-            </provider>
-        </spi>
-        <spi name="realmCache">
-            <provider name="default" enabled="true"/>
-        </spi>
-        <spi name="connectionsInfinispan">
-            <default-provider>default</default-provider>
-            <provider name="default" enabled="true">
-                <properties>
-                    <property name="cacheContainer" value="java:comp/env/infinispan/Keycloak"/>
-                </properties>
-            </provider>
-        </spi>
-    </subsystem>
+    ${keycloak.server.subsys.default.config}
 </config>
diff --git a/wildfly/server-subsystem/src/test/java/org/keycloak/subsystem/server/extension/SubsystemParsingTestCase.java b/wildfly/server-subsystem/src/test/java/org/keycloak/subsystem/server/extension/SubsystemParsingTestCase.java
index ade4a05..0bc4110 100755
--- a/wildfly/server-subsystem/src/test/java/org/keycloak/subsystem/server/extension/SubsystemParsingTestCase.java
+++ b/wildfly/server-subsystem/src/test/java/org/keycloak/subsystem/server/extension/SubsystemParsingTestCase.java
@@ -41,6 +41,7 @@ public class SubsystemParsingTestCase extends AbstractSubsystemBaseTest {
     protected Properties getResolvedProperties() {
         Properties properties = new Properties();
         properties.put("jboss.home.dir", System.getProperty("java.io.tmpdir"));
+        properties.put("keycloak.jta.lookup.provider", "jboss");
         return properties;
     }
     
diff --git a/wildfly/server-subsystem/src/test/resources/org/keycloak/subsystem/server/extension/keycloak-server-1.1.xml b/wildfly/server-subsystem/src/test/resources/org/keycloak/subsystem/server/extension/keycloak-server-1.1.xml
index 290d8b7..e520611 100644
--- a/wildfly/server-subsystem/src/test/resources/org/keycloak/subsystem/server/extension/keycloak-server-1.1.xml
+++ b/wildfly/server-subsystem/src/test/resources/org/keycloak/subsystem/server/extension/keycloak-server-1.1.xml
@@ -1,79 +1 @@
-<!--
-~ Copyright 2016 Red Hat, Inc. and/or its affiliates
-~ and other contributors as indicated by the @author tags.
-~
-~ Licensed under the Apache License, Version 2.0 (the "License");
-~ you may not use this file except in compliance with the License.
-~ You may obtain a copy of the License at
-~
-~ http://www.apache.org/licenses/LICENSE-2.0
-~
-~ Unless required by applicable law or agreed to in writing, software
-~ distributed under the License is distributed on an "AS IS" BASIS,
-~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-~ See the License for the specific language governing permissions and
-~ limitations under the License.
--->
-
-<subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
-    <web-context>auth</web-context>
-    <providers>
-        <provider>classpath:${jboss.home.dir}/providers/*</provider>
-    </providers>
-    <master-realm-name>master</master-realm-name>
-    <scheduled-task-interval>900</scheduled-task-interval>
-    <theme>
-        <staticMaxAge>2592000</staticMaxAge>
-        <cacheThemes>true</cacheThemes>
-        <cacheTemplates>true</cacheTemplates>
-        <dir>${jboss.home.dir}/themes</dir>
-    </theme>
-    <spi name="eventsStore">
-        <default-provider>jpa</default-provider>
-        <provider name="jpa" enabled="true">
-            <properties>
-                <property name="exclude-events" value="[&quot;REFRESH_TOKEN&quot;]"/>
-            </properties>
-        </provider>
-    </spi>
-    <spi name="realm">
-        <default-provider>jpa</default-provider>
-    </spi>
-    <spi name="user">
-        <default-provider>jpa</default-provider>
-    </spi>
-    <spi name="userCache">
-        <provider name="default" enabled="true"/>
-    </spi>
-    <spi name="userSessionPersister">
-        <default-provider>jpa</default-provider>
-    </spi>
-    <spi name="authorizationPersister">
-        <default-provider>jpa</default-provider>
-    </spi>
-    <spi name="timer">
-        <default-provider>basic</default-provider>
-    </spi>
-    <spi name="connectionsHttpClient">
-        <provider name="default" enabled="true"/>
-    </spi>
-    <spi name="connectionsJpa">
-        <provider name="default" enabled="true">
-            <properties>
-                <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
-                <property name="databaseSchema" value="update"/>
-            </properties>
-        </provider>
-    </spi>
-    <spi name="realmCache">
-        <provider name="default" enabled="true"/>
-    </spi>
-    <spi name="connectionsInfinispan">
-        <default-provider>default</default-provider>
-        <provider name="default" enabled="true">
-            <properties>
-                <property name="cacheContainer" value="java:comp/env/infinispan/Keycloak"/>
-            </properties>
-        </provider>
-    </spi>
-</subsystem>
\ No newline at end of file
+${keycloak.server.subsys.default.config}
\ No newline at end of file