2015-05-08 26 views
0

我們有一個問題,我們有一個帶註釋的超類(@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

+0

你可能需要給它的所有包裝成一個耳朵的JBoss認識到超類。 – djb

+0

在我們的例子中,有一個主要項目,大約有70個項目使用它,所以將它包裝在'EAR'中是不可行的。另外,JBoss識別超類,但註釋不被處理。 –

+0

子類是否有@Inherited? (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/annotation/Inherited.html) – djb

回答

0

您可以查找SessionContext作爲解決方法。這不是你的問題的答案,但你至少可以訪問SessionContext。

public SessionContext getSessionContext() 
    { 
    try 
    { 
     InitialContext ic = new InitialContext(); 
     return (SessionContext) ic.lookup("java:comp/EJBContext"); 
    } 
    catch (NamingException ex) 
    { 
     // handle exception 
    } 
    return null; 
    } 

摘自:http://javahowto.blogspot.com/2006/06/4-ways-to-get-ejbcontext-in-ejb-3.html

+0

我想如果它是一個標準的方式來查找我可能也是。儘管如此,仍然很奇怪 –