У нас есть проблема, когда у нас есть суперкласс с аннотацией (@Resource
) и подклассы, которые расширяют этот суперкласс, являются фанатами без состояния.Аннотации по полям, которые не обрабатываются между различными развертываниями в JBoss
Очень похоже на this, если суперкласс и подкласс находятся в одном модуле, тогда ресурс успешно вводится. Если они находятся в отдельных модулях, то ресурс не вводится - кажется, аннотация не обрабатывается.
Я проверял через отражение, что аннотации «видели» на классе, но когда я ступаю в ResourceInjectionAnnotationParsingProcessor
, то @Resource
аннотаций не показывает на классы, которые наследуются от других модулей (хотя это показывает на классы которые находятся в одном модуле).
Общее решение, которое я видел, - это jandex
файлы и набор annotations="true"
, но это похоже на статические модули, а не на другие развертывания, например, в нашем случае.
other suggestion было то, что модули могли отсутствовать зависимость от аннотаций, но в моем примере все задействованные модули имели зависимость от <module name="javax.annotation.api"/>
.
Есть ли другой способ сделать эти аннотации «видимыми» из отдельных развертываний?
В минимальной, например, если у вас есть суперкласс
import javax.annotation.Resource;
import javax.ejb.SessionContext;
public class BaseResource {
@Resource
private SessionContext sessionContext;
public String getContext() {
return "Context is " + sessionContext;
}
}
и подкласс
import javax.ejb.Stateless;
@Stateless
public class ResourceBean extends BaseResource {
public ResourceBean() {
System.out.println(getClass().getName() + " created");
}
}
Если они находятся в том же модуле, то SessionContext
отображается. В отдельных модулях SessionContext
всегда null
.
Вы, вероятно, нужно обернуть все это в EAR для JBoss признать суперкласса. – djb
В нашем случае есть один основной проект и около 70 проектов, использующих его, поэтому его упаковка в EAR невозможна. Кроме того, JBoss распознает суперкласс, но аннотации не обрабатываются. –
Подкласс @Inherited? (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/annotation/Inherited.html) – djb