[keycloak-user] Using Keycloak on Linux with A Microsoft SQL server
Marko Strukelj
mstrukel at redhat.com
Fri Feb 17 04:05:01 EST 2017
It looks like the module for your MS SQL jdbc driver lacks visibility of
javax.xml.bind classes.
Try adding the dependency on module 'javax.xml.bind.api' to your MSSQL jdbc
driver module.
In module.xml of the driver module simply add:
<module name="javax.xml.bind.api" />
On Thu, Feb 16, 2017 at 7:38 PM, Reed Lewis <RLewis at carbonite.com> wrote:
> Has anyone configured Keycloak to use Microsoft SQL server where Keycloak
> is running on a linux machine? I can make it work correctly with
> Postgres, but cannot get it to work with Microsoft SQL.
>
> Here is my part of the standalone-ha.xml file:
>
> <subsystem xmlns="urn:jboss:domain:datasources:4.0">
> <datasources>
> <datasource jndi-name="java:/MSSQLDS" pool-name="MSSQLDS"
> enabled="true">
> <connection-url>jdbc:sqlserver://(IP
> ADDRESS):1433;databaseName=keycloak</connection-url>
> <driver>sqlserver</driver>
> <security>
> <user-name>username</user-name>
> <password>password</password>
> </security>
> <validation>
> <valid-connection-checker class-name="org.jboss.jca.
> adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"><
> /valid-connection-checker>
> </validation>
> </datasource>
> <drivers>
> <driver name="sqlserver" module="com.microsoft">
> <xa-datasource-class>com.microsoft.sqlserver.jdbc.
> SQLServerXADataSource</xa-datasource-class>
> </driver>
> </drivers>
> </datasources>
> </subsystem>
>
>
> and here is where I use the datasource.
> <spi name="connectionsJpa">
> <provider name="default" enabled="true">
> <properties>
> <property name="dataSource" value="java:/MSSQLDS"/>
> <property name="initializeEmpty" value="true"/>
> <property name="migrationStrategy" value="manual"/>
> <property name="migrationExport"
> value="${jboss.home.dir}/keycloak-database-update.sql"/>
> </properties>
> </provider>
> </spi>
>
>
> and I am using JDBC_PING to handle multiple systems since the environment
> I want to use does not support multicast.
>
> <protocol type="JDBC_PING">
> <property name="datasource_jndi_name">java:/MSSQLDS</property>
> <property name="initialize_sql">
>
> CREATE TABLE IF NOT EXISTS jgroupsping (
> own_addr VARCHAR(200) NOT NULL,
> cluster_name VARCHAR(200) NOT NULL,
> ping_data BYTEA DEFAULT NULL,
> PRIMARY KEY (own_addr, cluster_name)
> )
> </property>
> </protocol>
>
>
> And this is the error when I start it up.
>
>
> 13:39:48,758 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool]
> (MSC service thread 1-6) IJ000604: Throwable while attempting to get a new
> connection: null: javax.resource.ResourceException: IJ031084: Unable to
> create connection
> at org.jboss.jca.adapters.jdbc.local.
> LocalManagedConnectionFactory.createLocalManagedConnection(
> LocalManagedConnectionFactory.java:343)
> at org.jboss.jca.adapters.jdbc.local.
> LocalManagedConnectionFactory.getLocalManagedConnection(
> LocalManagedConnectionFactory.java:350)
> at org.jboss.jca.adapters.jdbc.local.
> LocalManagedConnectionFactory.createManagedConnection(
> LocalManagedConnectionFactory.java:285)
> at org.jboss.jca.core.connectionmanager.pool.mcp.
> SemaphoreConcurrentLinkedDequeManagedConnectionPool.
> createConnectionEventListener(SemaphoreConcurrentLinkedDeque
> ManagedConnectionPool.java:1319)
> at org.jboss.jca.core.connectionmanager.pool.mcp.
> SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(
> SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:496)
> at org.jboss.jca.core.connectionmanager.pool.AbstractPool.
> getSimpleConnection(AbstractPool.java:626)
> at org.jboss.jca.core.connectionmanager.pool.
> AbstractPool.getConnection(AbstractPool.java:598)
> at org.jboss.jca.core.connectionmanager.
> AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.
> java:590)
> at org.jboss.jca.core.connectionmanager.tx.
> TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:
> 429)
> at org.jboss.jca.core.connectionmanager.
> AbstractConnectionManager.allocateConnection(AbstractConnectionManager.
> java:747)
> at org.jboss.jca.adapters.jdbc.WrapperDataSource.
> getConnection(WrapperDataSource.java:138)
> at org.jboss.as.connector.subsystems.datasources.
> WildFlyDataSource.getConnection(WildFlyDataSource.java:66)
> at org.jgroups.protocols.JDBC_
> PING.getConnection(JDBC_PING.java:348)
> at org.jgroups.protocols.JDBC_PING.
> attemptSchemaInitialization(JDBC_PING.java:298)
> at org.jgroups.protocols.JDBC_
> PING.init(JDBC_PING.java:130)
> at org.jgroups.stack.ProtocolStack.initProtocolStack(
> ProtocolStack.java:860)
> at org.jgroups.stack.ProtocolStack.setup(
> ProtocolStack.java:481)
> at org.jgroups.JChannel.init(JChannel.java:853)
> at org.jgroups.JChannel.<init>(JChannel.java:159)
> at org.jboss.as.clustering.jgroups.JChannelFactory$1.run(
> JChannelFactory.java:95)
> at org.jboss.as.clustering.jgroups.JChannelFactory$1.run(
> JChannelFactory.java:92)
> at org.wildfly.security.manager.WildFlySecurityManager.
> doChecked(WildFlySecurityManager.java:636)
> at org.jboss.as.clustering.jgroups.JChannelFactory.
> createChannel(JChannelFactory.java:98)
> at org.wildfly.clustering.jgroups.spi.service.
> ChannelBuilder.start(ChannelBuilder.java:78)
> at org.jboss.msc.service.ServiceControllerImpl$
> StartTask.startService(ServiceControllerImpl.java:1948)
> at org.jboss.msc.service.ServiceControllerImpl$
> StartTask.run(ServiceControllerImpl.java:1881)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/
> DatatypeConverter
> at com.microsoft.sqlserver.jdbc.
> SQLServerConnection.sendLogon(SQLServerConnection.java:4098)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(
> SQLServerConnection.java:3160)
> at com.microsoft.sqlserver.jdbc.
> SQLServerConnection.access$100(SQLServerConnection.java:43)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection$
> LogonCommand.doExecute(SQLServerConnection.java:3123)
> at com.microsoft.sqlserver.jdbc.
> TDSCommand.execute(IOBuffer.java:7505)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.
> executeCommand(SQLServerConnection.java:2445)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.
> connectHelper(SQLServerConnection.java:1981)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(
> SQLServerConnection.java:1628)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.
> connectInternal(SQLServerConnection.java:1459)
> at com.microsoft.sqlserver.jdbc.
> SQLServerConnection.connect(SQLServerConnection.java:773)
> at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(
> SQLServerDriver.java:1168)
> at org.jboss.jca.adapters.jdbc.local.
> LocalManagedConnectionFactory.createLocalManagedConnection(
> LocalManagedConnectionFactory.java:319)
> ... 28 more
> Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
> from [Module "com.microsoft:main" from local module loader @66133adc
> (finder: local module finder @7bfcd12c (roots: /opt/keycloak/modules,/opt/
> keycloak/modules/system/layers/keycloak,/opt/keycloak/
> modules/system/layers/base))]
> at org.jboss.modules.ModuleClassLoader.findClass(
> ModuleClassLoader.java:198)
> at org.jboss.modules.ConcurrentClassLoader.
> performLoadClassUnchecked(ConcurrentClassLoader.java:363)
> at org.jboss.modules.ConcurrentClassLoader.
> performLoadClass(ConcurrentClassLoader.java:351)
> at org.jboss.modules.ConcurrentClassLoader.loadClass(
> ConcurrentClassLoader.java:93)
> ... 40 more
>
> 13:39:48,760 ERROR [org.jgroups.protocols.JDBC_PING] (MSC service thread
> 1-6) Could not open connection to database: java.sql.SQLException:
> javax.resource.ResourceException: IJ000453: Unable to get managed
> connection for java:/MSSQLDS
> at org.jboss.jca.adapters.jdbc.WrapperDataSource.
> getConnection(WrapperDataSource.java:146)
> at org.jboss.as.connector.subsystems.datasources.
> WildFlyDataSource.getConnection(WildFlyDataSource.java:66)
> at org.jgroups.protocols.JDBC_
> PING.getConnection(JDBC_PING.java:348)
> at org.jgroups.protocols.JDBC_PING.
> attemptSchemaInitialization(JDBC_PING.java:298)
> at org.jgroups.protocols.JDBC_
> PING.init(JDBC_PING.java:130)
> at org.jgroups.stack.ProtocolStack.initProtocolStack(
> ProtocolStack.java:860)
> at org.jgroups.stack.ProtocolStack.setup(
> ProtocolStack.java:481)
> at org.jgroups.JChannel.init(JChannel.java:853)
> at org.jgroups.JChannel.<init>(JChannel.java:159)
> at org.jboss.as.clustering.jgroups.JChannelFactory$1.run(
> JChannelFactory.java:95)
> at org.jboss.as.clustering.jgroups.JChannelFactory$1.run(
> JChannelFactory.java:92)
> at org.wildfly.security.manager.WildFlySecurityManager.
> doChecked(WildFlySecurityManager.java:636)
> at org.jboss.as.clustering.jgroups.JChannelFactory.
> createChannel(JChannelFactory.java:98)
> at org.wildfly.clustering.jgroups.spi.service.
> ChannelBuilder.start(ChannelBuilder.java:78)
> at org.jboss.msc.service.ServiceControllerImpl$
> StartTask.startService(ServiceControllerImpl.java:1948)
> at org.jboss.msc.service.ServiceControllerImpl$
> StartTask.run(ServiceControllerImpl.java:1881)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: javax.resource.ResourceException: IJ000453: Unable to get
> managed connection for java:/MSSQLDS
> at org.jboss.jca.core.connectionmanager.
> AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.
> java:656)
> at org.jboss.jca.core.connectionmanager.tx.
> TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:
> 429)
> at org.jboss.jca.core.connectionmanager.
> AbstractConnectionManager.allocateConnection(AbstractConnectionManager.
> java:747)
> at org.jboss.jca.adapters.jdbc.WrapperDataSource.
> getConnection(WrapperDataSource.java:138)
> ... 18 more
> Caused by: javax.resource.ResourceException: IJ031084: Unable to create
> connection
> at org.jboss.jca.adapters.jdbc.local.
> LocalManagedConnectionFactory.createLocalManagedConnection(
> LocalManagedConnectionFactory.java:343)
> at org.jboss.jca.adapters.jdbc.local.
> LocalManagedConnectionFactory.getLocalManagedConnection(
> LocalManagedConnectionFactory.java:350)
> at org.jboss.jca.adapters.jdbc.local.
> LocalManagedConnectionFactory.createManagedConnection(
> LocalManagedConnectionFactory.java:285)
> at org.jboss.jca.core.connectionmanager.pool.mcp.
> SemaphoreConcurrentLinkedDequeManagedConnectionPool.
> createConnectionEventListener(SemaphoreConcurrentLinkedDeque
> ManagedConnectionPool.java:1319)
> at org.jboss.jca.core.connectionmanager.pool.mcp.
> SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(
> SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:496)
> at org.jboss.jca.core.connectionmanager.pool.AbstractPool.
> getSimpleConnection(AbstractPool.java:626)
> at org.jboss.jca.core.connectionmanager.pool.
> AbstractPool.getConnection(AbstractPool.java:598)
> at org.jboss.jca.core.connectionmanager.
> AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.
> java:590)
> ... 21 more
> Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/
> DatatypeConverter
> at com.microsoft.sqlserver.jdbc.
> SQLServerConnection.sendLogon(SQLServerConnection.java:4098)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(
> SQLServerConnection.java:3160)
> at com.microsoft.sqlserver.jdbc.
> SQLServerConnection.access$100(SQLServerConnection.java:43)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection$
> LogonCommand.doExecute(SQLServerConnection.java:3123)
> at com.microsoft.sqlserver.jdbc.
> TDSCommand.execute(IOBuffer.java:7505)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.
> executeCommand(SQLServerConnection.java:2445)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.
> connectHelper(SQLServerConnection.java:1981)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(
> SQLServerConnection.java:1628)
> at com.microsoft.sqlserver.jdbc.SQLServerConnection.
> connectInternal(SQLServerConnection.java:1459)
> at com.microsoft.sqlserver.jdbc.
> SQLServerConnection.connect(SQLServerConnection.java:773)
> at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(
> SQLServerDriver.java:1168)
> at org.jboss.jca.adapters.jdbc.local.
> LocalManagedConnectionFactory.createLocalManagedConnection(
> LocalManagedConnectionFactory.java:319)
> ... 28 more
> Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
> from [Module "com.microsoft:main" from local module loader @66133adc
> (finder: local module finder @7bfcd12c (roots: /opt/keycloak/modules,/opt/
> keycloak/modules/system/layers/keycloak,/opt/keycloak/
> modules/system/layers/base))]
> at org.jboss.modules.ModuleClassLoader.findClass(
> ModuleClassLoader.java:198)
> at org.jboss.modules.ConcurrentClassLoader.
> performLoadClassUnchecked(ConcurrentClassLoader.java:363)
> at org.jboss.modules.ConcurrentClassLoader.
> performLoadClass(ConcurrentClassLoader.java:351)
> at org.jboss.modules.ConcurrentClassLoader.loadClass(
> ConcurrentClassLoader.java:93)
> ... 40 more
> _______________________________________________
> keycloak-user mailing list
> keycloak-user at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-user
>
More information about the keycloak-user
mailing list