2015-06-05 3 views
0

Я столкнулся с проблемой с JBoss AS7/JEE 6, а с помощью продюсера для регистратора, что работа в порядке с WildFly и JEE 7.JBoss и CDI Производитель

Я создал спецификатор:

@Qualifier 
@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.FIELD, ElementType.METHOD}) 
public @interface BpeLogger { 
} 

класс производителя:

public class LoggerProducer{ 
    @Produces 
    @BpeLogger 
    public Logger produceLogger(InjectionPoint injectionPoint) { 
    return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName()); 
    } 
} 

И сейчас я пытаюсь внедрить регистратор в другой КДИ Bean с:

@Inject 
    @BpeLogger 
    private Logger logger; 

Установка завершается с исключением следующего:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Logger] with qualifiers [@BpeLogger] at injection point [[field] @Inject @BpeLogger private de.ulc.bpe.web.process.Domino.logger] 

Что здесь не так?

+0

У вас есть beans.xml-файл? Он обязателен в Java EE 6, но необязательно в Java EE 7. –

+0

Вы работаете на JBoss AS 7 или на WildFly? Это не ясно из вашего вопроса. –

+0

Немой вопрос: вы не смешиваете 2 разных класса 'Logger' (j.u.l vs slf4j)? –

ответ

0

Убедитесь, что в папке META-INF есть файл beans.xml.

Вы также можете попытаться аннотировать свой класс LoggerProducer как компонент CDI напрямую. Например. добавьте аннотацию @Named и, возможно, подходящую область. В вашем случае @Singleton, вероятно, будет просто отлично.

@Named 
public class LoggerProducer{ 
    @Produces 
    @BpeLogger 
    public Logger produceLogger(InjectionPoint injectionPoint) { 
    return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName()); 
    } 
}