我們有一個問題,我們有一個帶註釋的超類(@Resource
),並且擴展該超類的子類都是無狀態bean。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
。
你可能需要給它的所有包裝成一個耳朵的JBoss認識到超類。 – djb
在我們的例子中,有一個主要項目,大約有70個項目使用它,所以將它包裝在'EAR'中是不可行的。另外,JBoss識別超類,但註釋不被處理。 –
子類是否有@Inherited? (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/annotation/Inherited.html) – djb