Fala galera,
Estou tentando fazer um Provider no keycloak para buscar de um banco de dados de terceiros os usuários para fazer o login no sistema. Primeiramente usei esse código para fazer o deploy:
https://github.com/keycloak/keycloak/tree/master/examples/providers/user-storage-simple
Até aí foi tudo tranquilo, tive só que alterar o maven para importar o cara correto que em vez dessa tag:
<parent>
<artifactId>keycloak-examples-providers-parent</artifactId>
<groupId>org.keycloak</groupId>
<version>4.0.0.Beta3-SNAPSHOT</version>
</parent>
Troquei a tag por essa aí em baixo e funcionou perfeitamente o exemplo
<parent>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-parent</artifactId>
<version>3.4.3.Final</version>
</parent>
O problema que tive foi quando eu tentei colocar o JPA para rodar, ele não encontra o persistence.xml olha o erro:
2018-05-18 13:47:37,675 ERROR [br.com.test.DatabaseUserStorageProviderFactory] (default task-21) Failed to connect to database: javax.persistence.PersistenceException: No Persistence provider for EntityManager named TestUnit
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at br.com.test.DatabaseUserStorageProviderFactory.init(DatabaseUserStorageProviderFactory.java:32)
at br.com.test.DatabaseUserStorageProviderFactory.create(DatabaseUserStorageProviderFactory.java:45)
at br.com.test.DatabaseUserStorageProviderFactory.create(DatabaseUserStorageProviderFactory.java:13)
at org.keycloak.storage.UserStorageManager.getStorageProviderInstance(UserStorageManager.java:90)
at org.key
Como o keycloak usa o wildfly achei vários erros parecidos, falando que o persistence.xml estava em local errado e que o certo é colocar ele em src/main/recources/META-INF/persistence.xml, mas no meu caso ele está no lugar certo.
Para tirar a prova se estava funcionando o JPA fiz um caso de teste e ele conseguiu fazer um select em um banco de dados normalmente.
Persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="TestUnit">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:/PostgresDS</jta-data-source>
<class>br.com.test.User</class>
<properties>
<!-- property name="hibernate.archive.autodetection" value="class" /-->
<!-- Dados da conexão -->
<!-- property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://192.213.102.149:5432/test" />
<property name="javax.persistence.jdbc.user" value="test" />
<property name="javax.persistence.jdbc.password" value="test" /-->
<!-- Propriedades do hibernate -->
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.hbm2ddl.auto" value="none" />
</properties>
</persistence-unit>
</persistence>
POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-parent</artifactId>
<version>3.4.3.Final</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.keycloak.examples.userstorage</groupId>
<artifactId>user-storage-properties-example</artifactId>
<name>UserStorageProvider Simple Example</name>
<packaging>jar</packaging>
<dependencies>
<!-- KEYCLOAK -->
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<scope>provided</scope>
</dependency>
<!-- HIBERNATE -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.3.0.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<scope>provided</scope>
</dependency>
<!-- POSTGRESQL -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.2</version>
<scope>provided</scope>
</dependency>
<!-- LOG4J -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>compile</scope>
</dependency>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>user-storage-properties-example</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>product</id>
<activation>
<property>
<name>product</name>
</property>
</activation>
<build>
<plugins>
<!-- The example needs to be deployed during the product build, because it's testsuite's dependency.
We need to override setting from parent module. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
standalone.xml
<datasource jta="true" jndi-name="java:/PostgresDS" pool-name="PostgresDS" enabled="true" use-ccm="false">
<connection-url>jdbc:postgresql://192.213.102.149:5432/test</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql-42.2.2.jar</driver>
<security>
<user-name>test</user-name>
<password>test</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<background-validation>true</background-validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
</datasource>
Pra chamar a instancia estou fazendo assim:
EntityManagerFactory factory = Persistence.createEntityManagerFactory("TestUnit");
EntityManager manager = factory.createEntityManager();
Mas ele dá o erro na primeira linha
Alguém tem algum palpite?