У меня есть проект Java 8 и сервер JBoss 7.1.0GA.У меня есть класс пакета с глобальной переменной
@EJB
public MyInterface delegate;
, которая определена как экземпляр DelegateClass в моем файле ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
<module-name>moduleName</module-name>
<enterprise-beans>
<session>
<ejb-name>ejbName</ejb-name>
<business-remote>MyInterface</business-remote>
<ejb-class>DelegateClass</ejb-class>
<session-type>Stateless</session-type>
</session>
</enterprise-beans>
IУ меня есть некоторые реализации MyInterface, поэтому в моем классе DelegateClass я хочу обернуть реализацию MyInterface и установить ее с помощью константы enum.Вот код:
@Stateless
@LocalBean
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class DelegateClass implements MyInterface {
@Inject
@Any
protected Instance<MyInterface> instance;
protected MyInterface selectedImpl;
@PostConstruct
public void init() {
selectedImpl = instance.select(MyLiteralAnnotation.create(MyEnum.value)).get();
}
Вот код моего буквального класса аннотаций:
public class MyLiteralAnnotation extends AnnotationLiteral<MyAnnotation> implements MyAnnotation {
private final MyEnum value;
private MyLiteralAnnotation(MyEnum value) {
this.value = value;
}
@Override
public MyEnum getValue() {
return value;
}
public static MyLiteralAnnotation create(MyEnum value) {
return new MyLiteralAnnotation(value);
}
}
аннотация, которую я создал:
@Retention(RetentionPolicy.RUNTIME)
@Target({ TYPE, METHOD, FIELD, PARAMETER, CONSTRUCTOR })
@Qualifier
public @interface MyAnnotation {
MyEnum getValue();
}
и реализация, которую я хочу получить из instance.select (...)
@Stateless
@LocalBean
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@MyAnnotation(MyEnum.value)
public class MyInterfaceImpl implements MyInterface {
....
}
Я отлаживаю приложение на моем сервере, но когда я пытаюсь создать экземпляр поля selectImpl с помощью instance.select(...), у меня есть исключение:
org.jboss.weld.exceptions.UnsatisfiedResolutionException WELD-001334 Неудовлетворенные зависимости для типа MyInterface с квалификаторами @Any @ MyAnnotation
Может кто-нибудь помочь мне, пожалуйста?