I’m trying to port a token mapper from Keycloak:legacy that gets claims from an external userdb. When building in with the container, I get the error "UnsatisfiedResolutionException: Unsatisfied dependency for type javax.persistence.EntityManager and qualifiers [@io.quarkus.hibernate.orm.PersistenceUnit(value = "users")]"
From searching, I’ve found out this usually happens because a dependency is missing, there are no Entities or a configuration item is incorrect. Does the following look familiar to anyone?
My DB Repo is like the following
@ApplicationScoped
public class UserRepository {
@PersistenceContext(unitName = "users")
protected EntityManager entityManager;
...
//Transactional functions omitted
}
My application.properties
quarkus.datasource.users.db-kind=h2
quarkus.datasource.users.username=sa
quarkus.datasource.users.password=keycloak
quarkus.datasource.users.jdbc.url=jdbc:h2:mem:default;DB_CLOSE_DELAY=-1
quarkus.datasource.users.jdbc.max-size=16
quarkus.hibernate-orm.users.datasource=users
quarkus.hibernate-orm.users.packages=org.example
quarkus.hibernate-orm.users.database.generation=drop-and-create
pom dependencies
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi-private</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<scope>provided</scope>
</dependency>
<!--Hibernate ORM specific dependencies-->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm</artifactId>
</dependency>
<!-- JDBC driver dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-h2</artifactId>
</dependency>
Longer Error
ERROR: Build failure: Build failed due to errors
[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type javax.persistence.EntityManager and qualifiers [@io.quarkus.hibernate.orm.PersistenceUnit(value = "users")]
- java member: org.example.UserRepository#entityManager
- declared on CLASS bean [types=[org.example.UserRepository, java.lang.Object], qualifiers=[@Default, @Any], target=org.example.UserRepository]
The following beans match by type, but none have matching qualifiers:
- Bean [class=org.hibernate.Session, qualifiers=[@javax.enterprise.inject.Default, @Any]]
at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1202)
at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:272)
at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:134)
at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:462)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:882)
at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
at java.base/java.lang.Thread.run(Thread.java:829)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type javax.persistence.EntityManager and qualifiers [@io.quarkus.hibernate.orm.PersistenceUnit(value = "users")]
- java member: org.example.UserRepository#entityManager
- declared on CLASS bean [types=[org.example.UserRepository, java.lang.Object], qualifiers=[@Default, @Any], target=org.example.UserRepository]
The following beans match by type, but none have matching qualifiers:
- Bean [class=org.hibernate.Session, qualifiers=[@javax.enterprise.inject.Default, @Any]]
at io.quarkus.arc.processor.Beans.resolveInjectionPoint(Beans.java:428)
at io.quarkus.arc.processor.BeanInfo.init(BeanInfo.java:524)
at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:260)
... 13 more
ERROR: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type javax.persistence.EntityManager and qualifiers [@io.quarkus.hibernate.orm.PersistenceUnit(value = "users")]
- java member: org.example.UserRepository#entityManager
- declared on CLASS bean [types=[org.example.UserRepository, java.lang.Object], qualifiers=[@Default, @Any], target=org.example.UserRepository]
The following beans match by type, but none have matching qualifiers:
- Bean [class=org.hibernate.Session, qualifiers=[@javax.enterprise.inject.Default, @Any]]
ERROR: Unsatisfied dependency for type javax.persistence.EntityManager and qualifiers [@io.quarkus.hibernate.orm.PersistenceUnit(value = "users")]
- java member: org.example.UserRepository#entityManager
- declared on CLASS bean [types=[org.example.UserRepository, java.lang.Object], qualifiers=[@Default, @Any], target=org.example.UserRepository]
The following beans match by type, but none have matching qualifiers:
- Bean [class=org.hibernate.Session, qualifiers=[@javax.enterprise.inject.Default, @Any]]