Convert JGROUPS config to Quarkus

Ok, so I ended up with the following content in /opt/keycloak/current/conf/jgroups.xml and I set KC_CACHE_CONFIG_FILE=jgroups.xml as environment varaible.
But in the startup log I get the error:

Apr 13 10:47:32 SETEST16 kc.sh[124016]: 2022-04-13 10:47:32,890 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: org.infinispan.commons.configuration.io.ConfigurationReaderException: Unexpected element 'property' encountered[11,32]
Apr 13 10:47:32 SETEST16 kc.sh[124016]: 2022-04-13 10:47:32,891 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Unexpected element 'property' encountered[11,32]
<?xml version="1.0" encoding="UTF-8"?>
<infinispan
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:infinispan:config:11.0 http://www.infinispan.org/schemas/infinispan-config-11.0.xsd"
    xmlns="urn:infinispan:config:11.0">

	<!-- custom stack goes into the jgroups element -->
	<jgroups>
		<stack name="unicast-tcp">
			<transport type="TCP" socket-binding="jgroups-tcp">
				<property name="bind_port">${env.JGROUPS_PORT:7800}</property>
				<property name="external_addr">${env.JGROUPS_EXTERNAL_IP:127.0.0.1}</property>
			</transport>
			<protocol type="org.jgroups.protocols.TCPPING">
				<property name="initial_hosts">${env.JGROUPS_REMOTE_HOSTS:localhost[7800]}</property>
				<property name="port_range">0</property>
			</protocol>
			<protocol type="MERGE3"/>
			<protocol type="FD_SOCK"/>
			<protocol type="FD_ALL"/>
			<protocol type="VERIFY_SUSPECT"/>
			<protocol type="org.jgroups.protocols.SYM_ENCRYPT">
				<property name="provider">SunJCE</property>
				<property name="sym_algorithm">AES</property>
				<property name="encrypt_entire_message">true</property>
				<property name="keystore_name">${env.JGROUPS_KEYSTORE:/etc/secrets/jgroups.jceks}</property>
				<property name="alias">${env.JGROUPS_KEYSTORE_ALIAS:jgroups}</property>
				<property name="store_password">${env.JGROUPS_JKS_PASSWORD:changeme}</property>
			</protocol>
			<protocol type="pbcast.NAKACK2">
				<property name="use_mcast_xmit">false</property>
			</protocol>
			<protocol type="UNICAST3"/>
			<protocol type="pbcast.STABLE"/>
			<protocol type="org.jgroups.protocols.AUTH">
				<property name="auth_class">org.jgroups.auth.MD5Token</property>
				<property name="token_hash">SHA</property>
				<property name="auth_value">${env.JGROUPS_AUTH_SECRET:changeme2}</property>
			</protocol>
			<protocol type="pbcast.GMS">
				<property name="print_physical_addrs">true</property>
				<property name="print_local_addr">true</property>
			</protocol>
			<protocol type="UFC"/>
			<protocol type="MFC"/>
			<protocol type="FRAG2"/>
			<protocol type="RSVP"/>
		</stack>
	</jgroups>
	<cache-container name="keycloak">
		<!-- custom stack must be referenced by name in the stack attribute of the transport element -->
		<transport lock-timeout="60000" stack="unicast-tcp"/>
		<local-cache name="realms">
			<encoding>
				<key media-type="application/x-java-object"/>
				<value media-type="application/x-java-object"/>
			</encoding>
			<memory max-count="10000"/>
		</local-cache>
		<local-cache name="users">
			<encoding>
				<key media-type="application/x-java-object"/>
				<value media-type="application/x-java-object"/>
			</encoding>
			<memory max-count="10000"/>
		</local-cache>
		<distributed-cache name="sessions" owners="2">
			<expiration lifespan="-1"/>
		</distributed-cache>
		<distributed-cache name="authenticationSessions" owners="2">
			<expiration lifespan="-1"/>
		</distributed-cache>
		<distributed-cache name="offlineSessions" owners="2">
			<expiration lifespan="-1"/>
		</distributed-cache>
		<distributed-cache name="clientSessions" owners="2">
			<expiration lifespan="-1"/>
		</distributed-cache>
		<distributed-cache name="offlineClientSessions" owners="2">
			<expiration lifespan="-1"/>
		</distributed-cache>
		<distributed-cache name="loginFailures" owners="2">
			<expiration lifespan="-1"/>
		</distributed-cache>
		<local-cache name="authorization">
			<encoding>
				<key media-type="application/x-java-object"/>
				<value media-type="application/x-java-object"/>
			</encoding>
			<memory max-count="10000"/>
		</local-cache>
		<replicated-cache name="work">
			<expiration lifespan="-1"/>
		</replicated-cache>
		<local-cache name="keys">
			<encoding>
				<key media-type="application/x-java-object"/>
				<value media-type="application/x-java-object"/>
			</encoding>
			<expiration max-idle="3600000"/>
			<memory max-count="1000"/>
		</local-cache>
		<distributed-cache name="actionTokens" owners="2">
			<encoding>
				<key media-type="application/x-java-object"/>
				<value media-type="application/x-java-object"/>
			</encoding>
			<expiration max-idle="-1" lifespan="-1" interval="300000"/>
			<memory max-count="-1"/>
		</distributed-cache>
	</cache-container>
</infinispan>
1 Like