Hello Luis,
The path to persistence.xml you've found in the logs is the default location of
persistence.xml for Keycloak's main module (server-war). But it is unused, since
Keycloak uses custom persistence.xml location:
You can use the same method (or at least the same technique) to load yours.
Cheers,
Dmitry Telegin
CTO, Acutus s.r.o.
Keycloak Consulting and Training
Pod lipami street 339/52, 130 00 Prague 3, Czech Republic
+42 (022) 888-30-71
E-mail: info(a)acutus.pro
On Thu, 2018-11-22 at 11:18 +0100, Luis Rodríguez Fernández wrote:
Hello there,
I am using the standalone server distribution [1].
We need to extend the keycloak server [2] and we need to access a third
party database to get some data.
I developed a sample domain extension based on the keycloak example domain
extension [3]. The deployment of this example one works at the first try,
thanks!!!
My sample domain extension access a third party database (mysql), so in
wildfly...
- I install the mysql driver
- I create a datasource
... and in my sample I create a META-INF/persistence.xml
<persistence version>
<persistence-unit name="JavaHelps"
transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>java:/MySqlDS</non-jta-data-source>
<class>my.entity.Class</class>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLDialect"/>
</properties>
</persistence-unit>
</persistence>
I add my sample $KEYCLOAK_HOME/bin/jboss-cli.sh --command="module add
--name=...
And it seems that wildfly likes evrything (from standard output), you can
see below part of the wildfly output at startup time. However when I run it
I get:
Uncaught server error: java.lang.ExceptionInInitializerError.... Caused by:
javax.persistence.PersistenceException: No Persistence provider for
EntityManager named JavaHelps
I found a workaround: having a deeper look at the standard output I saw
this message...
parse checking if
"$KEYCLOAK_HOMEl/modules/system/layers/keycloak/org/keycloak/keycloak-server-subsystem/main/server-war/WEB-INF/classes/META-INF/persistence.xml"
exists, result = false
10:59:55,279 TRACE [org.jboss.as.jpa] (MSC service thread 1-1) parsed
persistence unit definitions for war server-war
... so if I copy my persistence.xml to that location my domain extension
sample WORKS! My question is WHY???
Any thoughts on this?
Thanks in advance,
Luis
[1]
https://downloads.jboss.org/keycloak/4.6.0.Final/keycloak-4.6.0.Final.zip
[2]
https://www.keycloak.org/docs/latest/server_development/index.html#_exten...
[3]
https://github.com/keycloak/keycloak/tree/master/examples/providers/domai...
10:59:54,575 INFO [org.jboss.as.connector.subsystems.datasources]
(ServerService Thread Pool -- 28) WFLYJCA0005: Deploying non-JDBC-compliant
driver class com.mysql.jdbc.Driver (version 5.1)
10:59:55,071 INFO [org.jboss.as.connector.subsystems.datasources] (MSC
service thread 1-8) WFLYJCA0001: Bound data source [java:/MySqlDS]
10:59:55,158 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) parse
checking if
"/content/domain-extension-example.jar/META-INF/persistence.xml" exists,
result = true
10:59:55,163 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) parse
persistence.xml: attribute value(0) = JavaHelps
10:59:55,163 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) parse
persistence.xml: attribute value(1) = RESOURCE_LOCAL
10:59:55,164 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) parse
persistence.xml: element=non-jta-data-source
10:59:55,164 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) parse
persistence.xml: element=class
10:59:55,164 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) parse
persistence.xml: element=properties
10:59:55,165 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) parse
persistence.xml: reached ending persistence-unit tag
10:59:55,165 INFO [org.jboss.as.jpa] (MSC service thread 1-7) WFLYJPA0002:
Read persistence.xml for JavaHelps
10:59:55,166 TRACE [org.jboss.as.jpa] (MSC service thread 1-7)
PersistenceUnitMetadataImpl(version=2.1) [
name: JavaHelps
jtaDataSource: null
nonJtaDataSource: java:/MySqlDS
transactionType: RESOURCE_LOCAL
provider: org.hibernate.jpa.HibernatePersistenceProvider
classes[
com.javahelps.jpa.Student ]
packages[
]
mappingFiles[
]
jarFiles[
]
validation-mode: AUTO
shared-cache-mode: UNSPECIFIED
properties[
hibernate.dialect: org.hibernate.dialect.MySQLDialect
]]
10:59:55,167 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) parsed
persistence unit definitions for jar domain-extension-example.jar
10:59:55,168 TRACE [org.jboss.as.jpa] (MSC service thread 1-7) incrementing
PU count for domain-extension-example.jar by 1
10:59:55,174 DEBUG [org.jboss.as.jpa] (MSC service thread 1-3) added
javax.persistence.api dependency to domain-extension-example.jar
10:59:55,174 DEBUG [org.jboss.as.jpa] (MSC service thread 1-3) added
org.hibernate.bytecodetransformer dependency to domain-extension-example.jar
10:59:55,175 DEBUG [org.jboss.as.jpa] (MSC service thread 1-3) added
org.jboss.as.jpa dependency to domain-extension-example.jar
10:59:55,175 DEBUG [org.jboss.as.jpa] (MSC service thread 1-3) added
org.jboss.as.jpa.spi dependency to domain-extension-example.jar
10:59:55,175 DEBUG [org.jboss.as.jpa] (MSC service thread 1-3) added
(default provider) org.hibernate dependency to domain-extension-example.jar
(since 1 PU(s) didn't specify jboss.as.jpa.providerModule)
10:59:55,175 DEBUG [org.jboss.as.jpa] (MSC service thread 1-3) added
org.hibernate dependency to domain-extension-example.jar
10:59:55,196 TRACE [org.jboss.as.jpa] (MSC service thread 1-8) install
persistence unit definition for jar domain-extension-example.jar
10:59:55,196 TRACE [org.jboss.as.jpa] (MSC service thread 1-8) adding
'vfs:/content/domain-extension-example.jar/' to annotation index map
10:59:55,196 TRACE [org.jboss.as.jpa] (MSC service thread 1-8) returning
global (module) Persistence Provider
org.hibernate.jpa.HibernatePersistenceProvider
10:59:55,199 DEBUG [org.jboss.as.jpa] (MSC service thread 1-8) loaded
persistence provider adapter
org.jboss.as.jpa.hibernate5.HibernatePersistenceProviderAdaptor from
classloader ModuleClassLoader for Module "org.hibernate" version
5.3.6.Final from local module loader @400cff1a (finder: local module finder
@275710fc (roots:
/media/hdd/keycloak-4.6.0.Final/modules,/media/hdd/keycloak-4.6.0.Final/modules/system/layers/keycloak,/media/hdd/keycloak-4.6.0.Final/modules/system/layers/base))
10:59:55,202 TRACE [org.jboss.as.jpa] (MSC service thread 1-8) add second
level cache dependencies with properties '{caches=entity,
container=hibernate}'
10:59:55,203 TRACE [org.jboss.as.jpa] (MSC service thread 1-8) added
PersistenceUnitService (phase 1 of 2) for 'service
jboss.persistenceunit."domain-extension-example.jar#JavaHelps".__FIRST_PHASE__'.
PU is ready for injector action.
10:59:55,204 TRACE [org.jboss.as.jpa] (MSC service thread 1-8) returning
global (module) Persistence Provider
org.hibernate.jpa.HibernatePersistenceProvider
10:59:55,206 INFO
[org.keycloak.subsystem.server.extension.KeycloakProviderDeploymentProcessor]
(MSC service thread 1-4) Deploying Keycloak provider:
domain-extension-example.jar
10:59:55,234 TRACE [org.jboss.as.jpa] (MSC service thread 1-6) install
persistence unit definition for jar domain-extension-example.jar
10:59:55,234 TRACE [org.jboss.as.jpa] (MSC service thread 1-6) adding
'vfs:/content/domain-extension-example.jar/' to annotation index map
10:59:55,234 TRACE [org.jboss.as.jpa] (MSC service thread 1-6) returning
global (module) Persistence Provider
org.hibernate.jpa.HibernatePersistenceProvider
10:59:55,235 TRACE [org.jboss.as.jpa] (MSC service thread 1-6) add second
level cache dependencies with properties '{caches=entity,
container=hibernate}'
10:59:55,235 TRACE [org.jboss.as.jpa] (MSC service thread 1-6) added
PersistenceUnitService (phase 2 of 2) for 'service
jboss.persistenceunit."domain-extension-example.jar#JavaHelps"'. PU is
ready for injector action.
10:59:55,645 INFO [org.jboss.as.jpa] (ServerService Thread Pool -- 57)
WFLYJPA0010: Starting Persistence Unit (phase 1 of 2) Service
'domain-extension-example.jar#JavaHelps'
10:59:55,695 INFO [org.hibernate.jpa.internal.util.LogHelper]
(ServerService Thread Pool -- 57) HHH000204: Processing PersistenceUnitInfo
[
name: JavaHelps
...]
10:59:56,038 INFO [org.jboss.as.jpa] (ServerService Thread Pool -- 57)
WFLYJPA0010: Starting Persistence Unit (phase 2 of 2) Service
'domain-extension-example.jar#JavaHelps'