Jsf jboss作为7类在war中加载,与应用程序协同工作的ManagedBean
我在Maven项目中有这样的结构:Jsf jboss作为7类在war中加载,与应用程序协同工作的ManagedBean,jsf,classloader,managed-bean,jboss7.x,Jsf,Classloader,Managed Bean,Jboss7.x,我在Maven项目中有这样的结构: WEB-INF/lib - a.jar - Registry.class (@ApplicationScoped, @ManagedBean(eager=true) - b.jar - Module.class (@ApplicationScoped, @ManagedBean(eager=true) - RegistryTwo.class (@ApplicationScoped, @ManagedBean(eager=
WEB-INF/lib
- a.jar
- Registry.class (@ApplicationScoped, @ManagedBean(eager=true)
- b.jar
- Module.class (@ApplicationScoped, @ManagedBean(eager=true)
- RegistryTwo.class (@ApplicationScoped, @ManagedBean(eager=true)
我在这两个类的@PostConstruct注释方法中放置了一个记录器,以确定首先调用哪个类。在JBossAS7服务器上进行了多次部署之后,我注意到加载这些类似乎没有特定的顺序。我的目的是始终在Module.class之前加载Registry.class。但是对于这种类加载行为,我不知道如何实现它。
在某些情况下,会首先加载Registry.class,但在其他情况下,会首先加载Module.class,即使我刚刚重新启动应用程序服务器并且没有对代码进行任何更改。
现在我的问题是,我可以做些什么来定义在WEB-INF/lib中加载JAR的顺序吗
另一种观点: 问题是否也可能不在类加载中,而是在应用程序处理的ManagedBean中?我在a.jar上添加了一个类:
WEB-INF/lib
- a.jar
- Registry.class (@ApplicationScoped, @ManagedBean(eager=true)
- b.jar
- Module.class (@ApplicationScoped, @ManagedBean(eager=true)
- RegistryTwo.class (@ApplicationScoped, @ManagedBean(eager=true)
因此,a.jar现在包含Registry.class和RegistryTwo.class。有了这一点,我期待的是: (期望输出) 或者(我对此会有问题。)
但在某些情况下,我得到的是:
RegistryTwo.class is invoked.
Module.class is invoked.
... (Other Processing logs.)
Registry.class is invoked.
根据@BalusC的说法,应用程序启动时,将自动实例化一个应用程序范围的ManagedBean( )这在我的代码中发生 我只是想知道:
绝对没有排序规则 我建议让
Registry
实现,或者改用它。两者都保证在JSF应用程序范围的bean构造之前运行
在ServletContextListener
的情况下,您可以让Registry
将其自身放入应用程序范围,如下所示:
@Override
public void contextInitialized(ServletContextEvent event) {
event.getServletContext().setAttribute("registry", this);
}
它将以JSF/EL的通常方式通过
{registry}
提供,绝对没有排序规则
我建议让Registry
实现,或者改用它。两者都保证在JSF应用程序范围的bean构造之前运行
在ServletContextListener
的情况下,您可以让Registry
将其自身放入应用程序范围,如下所示:
@Override
public void contextInitialized(ServletContextEvent event) {
event.getServletContext().setAttribute("registry", this);
}
它将以JSF/EL的通常方式通过{registry}
提供