即时添加来自jboss模块的CDI bean存档

时间:2018-03-19 05:34:16

标签: java-ee cdi wildfly-10 jboss-modules

我正在使用wildfly(以及wildfly核心包含的jboss模块)构建JEE插件架构。

目前我正在处理从其他已部署模块加载xhtml(core-web.war从deployment.customers.jar或任何deployment.xmodule.jar加载xhtml文件),这要归功于Obtaining Facelets templates/files from an external filesystem or database和"扩展名注册表"我用来了解哪些模块可用。

当我尝试使用来自这些已部署模块的托管bean时出现问题,这是因为没有扫描注释,我不知道这是因为我需要JSF,EL,Classpath,CDI上的自定义组件或Jboss模块。

我正在使用Wildfly 10,JEE 7,primefaces 6。

最简单的方法是让它发挥作用。

我的一些尝试是:

  1. 我已阅读jboss模块文档,我发现模块初始化后无法修改模块依赖项。但我发现我可以以编程方式访问任何模块。例如:

    Module currentMod = org.jboss.modules.Module.getCallerModule();
    Module otherModule = currentMod.getModuleLoader().loadModule(ModuleIdentifier.create("deployment.inmuebles-web.jar"));
    otherModule.getClassLoader().loadClass("co.hatit.enterprise.inmuebles.beans.InmueblesBean");
    
  2. 我已经阅读了CDI文档,它说我可以听取生命周期事件等 作为类型和bean发现,但我不确定这是否是我需要的。

    public void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bbd, BeanManager beanManager) {
        try {
    
            Field f = ClassLoader.class.getDeclaredField("classes");
            f.setAccessible(true);
    
            //Get all classes from other module
            ClassLoader classLoader = org.jboss.modules.Module.getCallerModule().getModuleLoader()
                    .loadModule(org.jboss.modules.ModuleIdentifier.create("deployment.customers-web.jar"))
                    .getClassLoader();
            List<Class> classes = (List<Class>) f.get(classLoader);
    
            for (Class<?> clazz : classes) {
                final AnnotatedType<?> annotatedType = beanManager.createAnnotatedType(clazz);
                bbd.addAnnotatedType(annotatedType);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    1. 我还试图建立一个自定义el解析器,但它没有工作。

      public class PluginELResolver extends ELResolver {
      
          @Override
          public Object getValue(ELContext ctx, Object base, Object property) {
              return CDI.current().getBeanManager().getBeans("inmueblesBean");
          }
      }
      

0 个答案:

没有答案