Создание управляемого компонента в Quarkus не выполняется при сборке, но успешно при создании вручную - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь управлять классом через CDI под названием MongoQuery, который содержит логику для запросов к MongoDB.Для этого потребуется информация из кэшей, управляемых с помощью ArC CDI (реализация Quarkus flavor CDI для подложки VM).Я могу создать его вручную в своем классе ListingResource (см. Закомментированный код в указанном классе, чтобы узнать, как я это делал), но не тогда, когда я установил управление им в области запроса.

Все элементы работают по отдельности, когда я собираю все это вместе, оно разваливается и жалуется, что есть неразрешенные зависимости.Я включил трассировку стека, которую я получаю при попытке сборки, а также некоторые соответствующие фрагменты кода классов, которые вызывают проблемы при построении.

Что вызывает проблемы в CDI?Единственное, о чем я мог подумать, это могло бы вызвать проблему - это стирание типов, вызывающее проблемы при поиске соответствующих bean-компонентов, но у меня есть общие шаблоны, разбросанные по коду, и до сих пор не было проблем.

Фактический код был передан в GitHub fork в текущем состоянии, если кто-то хочет увидеть полный код.

org.eclipsefoundation.marketplace.resource.ListingResource

@Path("/listings")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@RequestScoped
public class ListingResource {
    private static final Logger LOGGER = LoggerFactory.getLogger(ListingResource.class);

    @Inject
    MongoDao dao;
    @Inject
    CachingService<List<Listing>> cachingService;
    @Inject
    RequestWrapper params;
    @Inject
    DtoFilter<Listing> dtoFilter;
    @Inject
    MongoQuery<Listing> q;

    /**
     * Endpoint for /listing/ to retrieve all listings from the database along with
     * the given query string parameters.
     * 
     * @param listingId int version of the listing ID
     * @return response for the browser
     */
    @GET
    public Response select() {
        //MongoQuery<Listing> q = new MongoQuery<>(params, dtoFilter);

        ...

org.eclipsefoundation.marketplace.model.MongoQuery

@RequestScoped
public class MongoQuery<T> {
    private static final Logger LOGGER = LoggerFactory.getLogger(MongoQuery.class);

    @Inject
    RequestWrapper wrapper;
    @Inject
    DtoFilter<T> dtoFilter;

    private Bson filter;
    private Bson sort;

    // flag that indicates that aggregate should be used as filter
    private boolean useAggregate = false;

    ...

Stacktrace:

[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 org.eclipsefoundation.marketplace.model.MongoQuery<org.eclipsefoundation.marketplace.dto.Listing> and qualifiers [@Default]
    - java member: org.eclipsefoundation.marketplace.resource.ListingResource#q
    - declared on CLASS bean [types=[org.eclipsefoundation.marketplace.resource.ListingResource, java.lang.Object], qualifiers=[@Default, @Any], target=org.eclipsefoundation.marketplace.resource.ListingResource]
    at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:835)
    at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:214)
    at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:106)
    at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:249)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at io.quarkus.deployment.ExtensionLoader$1.execute(ExtensionLoader.java:768)
    at io.quarkus.builder.BuildContext.run(BuildContext.java:415)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426)
    at java.lang.Thread.run(Thread.java:748)
    at org.jboss.threads.JBossThread.run(JBossThread.java:479)```
...