Estoy tratando de implementar un servidor WildFly KeyCloak en modo standalone . Esto funciona bien cuando simplemente no hago nada, pero ahora quiero agregar una Datasource de datos de MySQL .
Por lo tanto, tengo que agregar un controlador que estoy usando: mysql-connector-java-8.0.20.jar .
Para agregar el controlador, lo puse dentro de /modules/com/mysql/main/ . Luego agrego un archivo module.xml :
<module xmlns="urn:jboss:module:1.1" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-8.0.20.jar"/> </resources> <dependencies> <module name="javax.api"> <module name="javax.transaction.api"/> </dependencies> </module> Luego agrego lo siguiente en standalone.xml :
<driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class> </driver> Cuando implemento el servidor con standalone.bat , aparece el siguiente error:
16:57:43,962 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 32) WFLYCTL0013: Operation ("add") failed - address: ([ ("subsystem" => "datasources"), ("jdbc-driver" => "mysql") ]) - failure description: "WFLYJCA0041: Failed to load module for driver [com.mysql]"Salud !!
Simplifica tu vida para que la próxima vez que hagas esto no sea manual. Cree un archivo que contenga algo como:
embed-server --server-config=standalone.xml --std-out=echo batch # # remove the default provided datasource # /subsystem=datasources/data-source=KeycloakDS/:remove # # add the module # module add --name=com.mysql --resources=${user.home}/Downloads/mysql-connector-java-8.0.20/mysql-connector-java-8.0.20.jar --dependencies=javax.api,javax.transaction.api # # create the driver # /subsystem=datasources/jdbc-driver=mysql:add(driver-name="mysql",driver-module-name="com.mysql",driver-class-name=com.mysql.cj.jdbc.MysqlXADataSource) # # create the datasource # /subsystem=datasources/data-source=KeycloakDS/:add(connection-url=jdbc:mysql://localhost:3306/keycloak,driver-name=mysql,jndi-name=java:jboss/datasources/KeycloakDS,initial-pool-size=4,max-pool-size=64,min-pool-size=4,password=keycloak,user-name=keycloak) run-batch Ejecute esto con $KEYCLOAK_HOME/bin/jboss-cli.sh --file=<the_file_name> . Keyclock no se puede ejecutar cuando ejecuta este script. Y el usuario y la base de datos ya deben existir antes de reiniciar Keycloak.
Lo que esto hace es
La ventaja es que esto es repetible si necesita instalarlo nuevamente o en un servidor diferente.
¿Y necesitas el controlador XA? Si estuviera desarrollando en Wildfly para mí mismo, podría necesitar XA, pero no creo que Keycloak lo aproveche.
Prueba esto:
Coloque el conector en /standalone/deployments y luego vuelva a iniciar el servidor. Implementará y registrará el conector en el sistema.
A continuación, agregue esto a sus fuentes de datos standalone.xml.
<datasource jndi-name="java:/jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true"> <connection-url>jdbc:mysql://localhost:3306/keycloak?useSSL=false&characterEncoding=UTF-8&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Africa/Luanda</connection-url> <driver>mysql</driver> <pool> <min-pool-size>5</min-pool-size> <max-pool-size>15</max-pool-size> </pool> <security> <user-name>usernameforthedb</user-name> <password>password</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/> </validation> </datasource>Cambie su serverTimezone en consecuencia. Y, por seguridad, agregue la base de datos en mysql antes de iniciar el servidor.
Reinicie de nuevo.
PD, mantén esto donde está, por supuesto:
<driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class> </driver>