2014-06-05 2 views
1

У меня есть веб-приложение, развернутое на Glassfish 4, что позволяет мне выбрать реализацию интерфейса в точке впрыска. Однако, когда я пытаюсь развернуть, я получаю org.jboss.weld.exceptions.DeploymentException. Проблема возникает из-за того, что я не указал конкретно класс инъекции с оформлением CDI. Предполагая, что я хотел использовать javax.enterprise.context.RequestScoped, которому требуется класс, требуется класс, и я НЕ ДЕЛАЮТbean-discovery-mode = "all". Какой класс/метод я должен украшать?CDI-инъекция с bean-discovery-mode = "annotated"

beans.xml:

<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="annotated"> 
</beans> 

Интерфейс:

public interface ModelQuery { 
... 
} 

Реализация:

public class DasModelQuery implements ModelQuery { 
... 
} 

Классификатор:

@Qualifier 
@Retention(RUNTIME) 
@Target({METHOD, FIELD, PARAMETER, TYPE}) 
public @interface ModelQueryQualifier { 
} 

ModelQueryType:

@Retention(RUNTIME) 
@Target({FIELD, TYPE, METHOD}) 
public @interface ModelQueryType { 
... 
} 

Фабрика:

public class ModelQueryFactory { 

    @Produces 
    @ModelQueryQualifier 
    public ModelQuery getModelQuery(
      @Any Instance<ModelQuery> instance, 
      InjectionPoint ip){ 
     Annotated gtAnnotated = ip.getAnnotated(); 
     ModelQueryType gtAnnotation = gtAnnotated.getAnnotation(ModelQueryType.class); 
     Class<? extends ModelQuery> modelService = gtAnnotation.value().getClazz(); 
     return instance.select(modelService).get(); 
    } 

} 

инъекции:

@Named 
@ViewScoped 
public class Das implements Serializable { 
... 
    @Inject 
    @ModelQueryQualifier 
    @ModelQueryType(ModelQueryType.ModelQueries.DAS) 
    private ModelQuery model; 
... 
} 

Исключение:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [ModelQuery] with qualifiers [@ModelQueryQualifier] at injection point [[BackedAnnotatedField] @Inject @ModelQueryQualifier @ModelQueryType private com.service.das.Das.model] 
    at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:403) 
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:325) 
    at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:177) 
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:208) 
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:519) 
    at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:505) 
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:480) 
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:536) 
    at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:216) 
    at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131) 
    at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:493) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) 
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:360) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674) 
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534) 
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224) 
    at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    at java.lang.Thread.run(Thread.java:744) 

ответ

3

Ваш завод не примеч. Чтобы он был разрешен, класс должен быть аннотирован, например. @Dependent или @ApplicationScoped

+0

Я пробовал аннотировать с помощью @RequestScoped, но все еще получал ту же проблему. – tarka

+2

Почему '@ RequestScoped'? Ваш bean-компонент является '@ ViewScoped', который не имеет явно никакого активного запроса. Вы должны использовать либо '@ Dependent', либо' @ ApplicationScoped' –

Смежные вопросы