#java #maven #dependency-injection #interface #cdi
#Ява #знаток #инъекция зависимости #интерфейс #cdi
Вопрос:
У меня проблема, когда я пытаюсь развернуть свое приложение в Wildfly 10.
Проблема связана с внедрением зависимостей для интерфейса.
Мое приложение представляет собой многомодульный проект maven. Интерфейс и внедрение зависимостей находятся в одном модуле. У меня уже есть такая же проблема с другим интерфейсом, размещенным в другом модуле (инъекция выполнена в том же классе, что и для текущей проблемы).
Мой модуль развернут в пакете war (это то, что я пытаюсь развернуть). Мой проект развернут в уникальном пакете ear.
Ошибка :
"{"WFLYCTL0080: Failed services" =gt; {"jboss.deployment.unit.\"myApp-0.0.1-SNAPSHOT.war\".component.SpecificDataListener.WeldInstantiator" =gt; "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"myApp-0.0.1-SNAPSHOT.war\".component.SpecificDataListener.WeldInstantiator: Failed to start service Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type IMsgPoolManager with qualifiers @Default at injection point [BackedAnnotatedField] @Inject private fr.gateway.controller.impl.SpecificDataListener.messagePoolManager at fr.gateway.controller.impl.SpecificDataListener.messagePoolManager(SpecificDataListener.java:0) "}}"
Интерфейс :
import eu.datamodel.entity.Entity; public interface IMsgPoolManager { void sendCiseMessage(Entity myObject); }
Инъекция :
@MessageDriven(mappedName = "topic/specificdatato", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/specificdatato"), @ActivationConfigProperty(propertyName = "clientId", propertyValue = "specificdatato") }) public class SpecificDataListener implements MessageListener { private static Logger LOGGER = LoggerFactory.getLogger(SpecificDataListener.class); @Inject public IMsgPoolManager messagePoolManager; /** Some code **/ }
beans.xml :
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="all"gt; lt;/beansgt;
pom.xml
lt;?xml version="1.0"?gt; lt;project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"gt; lt;modelVersiongt;4.0.0lt;/modelVersiongt; lt;parentgt; lt;groupIdgt;frlt;/groupIdgt; lt;artifactIdgt;myParentApplt;/artifactIdgt; lt;versiongt;0.0.1-SNAPSHOTlt;/versiongt; lt;/parentgt; lt;artifactIdgt;myApplt;/artifactIdgt; lt;namegt;myApplt;/namegt; lt;packaginggt;warlt;/packaginggt; lt;propertiesgt; lt;project.build.sourceEncodinggt;UTF-8lt;/project.build.sourceEncodinggt; lt;/propertiesgt; lt;buildgt; lt;pluginsgt; lt;plugingt; lt;groupIdgt;org.apache.maven.pluginslt;/groupIdgt; lt;artifactIdgt;maven-compiler-pluginlt;/artifactIdgt; lt;versiongt;3.1lt;/versiongt; lt;configurationgt; lt;sourcegt;1.8lt;/sourcegt; lt;targetgt;1.8lt;/targetgt; lt;/configurationgt; lt;/plugingt; lt;plugingt; lt;artifactIdgt;maven-war-pluginlt;/artifactIdgt; lt;versiongt;3.1.0lt;/versiongt; lt;configurationgt; lt;failOnMissingWebXmlgt;falselt;/failOnMissingWebXmlgt; lt;archivegt; lt;manifestEntriesgt; lt;Dependenciesgt;org.mongodblt;/Dependenciesgt; lt;/manifestEntriesgt; lt;/archivegt; lt;/configurationgt; lt;/plugingt; lt;/pluginsgt; lt;/buildgt; lt;dependenciesgt; lt;!-- JAVAX dependencies --gt; lt;dependencygt; lt;groupIdgt;javax.ws.rslt;/groupIdgt; lt;artifactIdgt;javax.ws.rs-apilt;/artifactIdgt; lt;versiongt;2.0.1lt;/versiongt; lt;scopegt;providedlt;/scopegt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;javax.injectlt;/groupIdgt; lt;artifactIdgt;javax.injectlt;/artifactIdgt; lt;versiongt;1lt;versiongt; lt;scopegt;providedlt;/scopegt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;javax.ejblt;/groupIdgt; lt;artifactIdgt;javax.ejb-apilt;/artifactIdgt; lt;versiongt;3.2lt;versiongt; lt;scopegt;providedlt;/scopegt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;javax.annotationlt;/groupIdgt; lt;artifactIdgt;javax.annotation-apilt;/artifactIdgt; lt;versiongt;1.3.2lt;versiongt; lt;scopegt;providedlt;/scopegt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;javax.enterpriselt;/groupIdgt; lt;artifactIdgt;cdi-apilt;/artifactIdgt; lt;versiongt;1.2lt;/versiongt; lt;scopegt;providedlt;/scopegt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;javax.enterprise.concurrentlt;/groupIdgt; lt;artifactIdgt;javax.enterprise.concurrent-apilt;/artifactIdgt; lt;versiongt;1.0lt;versiongt; lt;scopegt;providedlt;/scopegt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;junitlt;/groupIdgt; lt;artifactIdgt;junitlt;/artifactIdgt; lt;versiongt;3.8.1lt;versiongt; lt;scopegt;testlt;/scopegt; lt;/dependencygt; lt;/dependenciesgt; lt;/projectgt;
Я перепробовал множество решений, найденных в Интернете, но ошибка все равно возникает…
Комментарии:
1. Где осуществляется реализация
IMsgPoolManager
? В каком модуле Maven он расположен, как он аннотирован, что такое beans.xml из этого модуля?2. Реализация IMsgPoolManager находится в одном пакете SpecificDataListener и IMsgPoolManager, в одном модуле. В beans.xml является ли файл описанным в вопросе. Реализация представляет собой аннотированный запуск и одноэлементный
3. Хорошо, извините, реализация не аннотирована синглтоном, и теперь это работает. Но теперь у меня аналогичная проблема с простым классом, который пытается ввести некоторые строковые поля. Класс является аннотированным запуском и одноэлементным. Модуль имеет то же самое beans.xml как и в вопросе. У меня следующая ошибка :
WELD-001475: The following beans match by type, but none have matching qualifiers: - Producer Method [String] with qualifiers [BatchProperty Any] declared as [[UnbackedAnnotatedMethod] Produces BatchProperty public org.jberet.creation.BatchBeanProducer.getString(InjectionPoint)] "}}