JBoss 中不同部署之间未处理的字段注释
Annotations on fields not processed between different deployments in JBoss
我们有一个问题,我们有一个带有注释 (@Resource
) 的 superclass 和扩展 superclass 的 subclasses 是无状态 beans .
与this非常相似,如果superclass和subclass在同一个模块中则资源注入成功。如果它们在单独的模块中,则不会注入资源 - 似乎未处理注释。
我通过反射验证了class上的注释是"seen",但是当我进入ResourceInjectionAnnotationParsingProcessor
时,@Resource
注释没有显示在从其他模块继承的 classes 上(尽管它确实显示在同一模块中的 classes 上)。
我看到的常见解决方案是 jandex
文件并设置 annotations="true"
但这似乎是针对静态模块的,而不是其他部署,例如我们的案例。
other suggestion 是模块可能缺少对注释的依赖性,但在我的示例中,所有涉及的模块都依赖于 <module name="javax.annotation.api"/>
。
是否有任何其他方法可以从单独的部署中制作这些注释 "visible"?
作为一个最小的例子,如果你有一个超级class
import javax.annotation.Resource;
import javax.ejb.SessionContext;
public class BaseResource {
@Resource
private SessionContext sessionContext;
public String getContext() {
return "Context is " + sessionContext;
}
}
和
的子class
import javax.ejb.Stateless;
@Stateless
public class ResourceBean extends BaseResource {
public ResourceBean() {
System.out.println(getClass().getName() + " created");
}
}
如果它们在同一模块中,则显示 SessionContext
。在单独的模块中,SessionContext
始终是 null
。
您可以查找 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
我们有一个问题,我们有一个带有注释 (@Resource
) 的 superclass 和扩展 superclass 的 subclasses 是无状态 beans .
与this非常相似,如果superclass和subclass在同一个模块中则资源注入成功。如果它们在单独的模块中,则不会注入资源 - 似乎未处理注释。
我通过反射验证了class上的注释是"seen",但是当我进入ResourceInjectionAnnotationParsingProcessor
时,@Resource
注释没有显示在从其他模块继承的 classes 上(尽管它确实显示在同一模块中的 classes 上)。
我看到的常见解决方案是 jandex
文件并设置 annotations="true"
但这似乎是针对静态模块的,而不是其他部署,例如我们的案例。
other suggestion 是模块可能缺少对注释的依赖性,但在我的示例中,所有涉及的模块都依赖于 <module name="javax.annotation.api"/>
。
是否有任何其他方法可以从单独的部署中制作这些注释 "visible"?
作为一个最小的例子,如果你有一个超级class
import javax.annotation.Resource;
import javax.ejb.SessionContext;
public class BaseResource {
@Resource
private SessionContext sessionContext;
public String getContext() {
return "Context is " + sessionContext;
}
}
和
的子classimport javax.ejb.Stateless;
@Stateless
public class ResourceBean extends BaseResource {
public ResourceBean() {
System.out.println(getClass().getName() + " created");
}
}
如果它们在同一模块中,则显示 SessionContext
。在单独的模块中,SessionContext
始终是 null
。
您可以查找 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