Статьи

OpenLiberty: ошибка при инъекции, работает на TomEE и Wildfly

Пока я работал над этим блогом, я столкнулся с этой ошибкой:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
[INFO    ] DSRA8203I: Database product name : MySQL
[INFO    ] DSRA8204I: Database product version : 8.0.11
[INFO    ] DSRA8205I: JDBC driver name  : MySQL Connector/J
[INFO    ] DSRA8206I: JDBC driver version  : mysql-connector-java-8.0.11 (Revision: 6d4eaa273bc181b4cf1c8ad0821a2227f116fedf)
[INFO    ] CWWJP9990I: test/wsjpa:wsjar:file:/home/dwuysan/dev/appservers/wlp/usr/servers/test/apps/expanded/test.war/WEB-INF/lib/d9f2b261-b3c6-4001-8a61-0aaebe46aa99.jar!/_testPU login successful
[INFO    ] WELD-000900: 2.4.5 (Final)
[INFO    ] FFDC1015I: An FFDC Incident has been created: "org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private id.co.lucyana.test.services.LogService.em
  at id.co.lucyana.test.services.LogService.em(LogService.java:0)
 com.ibm.ws.container.service.state.internal.ApplicationStateManager 31" at ffdc_18.06.21_14.11.27.0.log
[INFO    ] FFDC1015I: An FFDC Incident has been created: "com.ibm.ws.container.service.state.StateChangeException: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private id.co.lucyana.test.services.LogService.em
  at id.co.lucyana.test.services.LogService.em(LogService.java:0)
 com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase 384" at ffdc_18.06.21_14.11.27.1.log
[INFO    ] CWWJP9990I: test/wsjpa:wsjar:file:/home/dwuysan/dev/appservers/wlp/usr/servers/test/apps/expanded/test.war/WEB-INF/lib/d9f2b261-b3c6-4001-8a61-0aaebe46aa99.jar!/_testPU logout successful
[ERROR   ] CWWKZ0002E: An exception occurred while starting the application test. The exception message was: com.ibm.ws.container.service.state.StateChangeException: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private id.co.lucyana.test.services.LogService.em
  at id.co.lucyana.test.services.LogService.em(LogService.java:0)

Два класса, на которых мы должны сосредоточиться:

01
02
03
04
05
06
07
08
09
10
11
12
package id.co.lucyana.test.util;
 
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
 
public class EntityManagerProducer {
     
    @PersistenceContext(unitName = "testPU")
    @Produces
    private EntityManager em;
}

И

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
package id.co.lucyana.test.services;
 
import id.co.lucyana.test.entity.Log;
import java.util.Collection;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.persistence.EntityManager;
 
@Stateless
@LocalBean
public class LogService {
 
    @Inject
    private EntityManager em;
        
    public Collection<Log> getLogs() {
        return this.em.createNamedQuery(Log.FIND_ALL, Log.class).getResultList();
    }
}

Дело в том, что этот подход работает как для TomEE, так и для Wildfly.

Есть мысли?

PS Я следовал чьей-то рекомендации в сети, чтобы использовать этот подход ранее, с аргументом, что если нужно когда-либо изменить имя «unitName», это можно сделать в одном месте. Я не мог найти ссылку больше. Я не уверен, что это все еще «хороший» подход. Я приветствую любые комментарии.

Опубликовано на Java Code Geeks с разрешения Дени Вуйсана, партнера нашей программы JCG. См. Оригинальную статью здесь: OpenLiberty: ошибка при инъекции, работает на TomEE и Wildfly.

Мнения, высказанные участниками Java Code Geeks, являются их собственными.