zkplus DelegatingVariableResolver not longer works for the normal CDI case or for Quarkus ARC

XMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: Major
    • 10.2.0
    • Affects Version/s: 10.0.0, 9.6.4
    • Component/s: None
    • Security Level: Jimmy
    • None

      User Story

      As a developer, I want to use CDI to resolve variables
      AND
      As a developer, I was to use Quarkus ARC dependency injection in to manage objects in ZK
      (This is similar to CDI and use the same patterns)

      Acceptance Criteria

      Update ZK's CDI deleguating variable resolver to support mordern CDI resulution, as well as working with a quarkus ARC.

      Details

      Attached a POC variable resolver using CDI bean manager instead of retrieving it with JNDI (which is not available in Quarkus)
       

      https://quarkus.io/blog/quarkus-dependency-injection/

      if (Arc.container() != null) {
             InstanceHandle<T> vInstanceHandle = (InstanceHandle<T>) Arc.container().instance(objectClass);
             if (vInstanceHandle.isAvailable()) {
                obj = vInstanceHandle.get();
             }
             else {
                obj = objectClass.newInstance();
             }
          }
          else {
            obj = objectClass.newInstance();
          }

       

      Debug

       This code doesn't work anymore - https://github.com/zkoss/zk/blob/2bdd999620f030f968bfe05325c031dff8fbd14c/zkplus/src/main/java/org/zkoss/zkplus/cdi/CDIUtil.java#L42

      Current result

      1. run integration.cdi.zip
        org.zkoss.xel.XelException: Cannot locate the BeanManager for JavaEE 6.
            at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
            at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
            at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance (Constructor.java:490)
            at org.zkoss.lang.Classes.newInstance (Classes.java:77)
            at org.zkoss.lang.Exceptions.wrap (Exceptions.java:206)
            at org.zkoss.xel.XelException$Aide.wrap (XelException.java:47)
            at org.zkoss.zkplus.cdi.CDIUtil.getBeanManager (CDIUtil.java:57)
            at org.zkoss.zkplus.cdi.DelegatingVariableResolver.<init> (DelegatingVariableResolver.java:42)
            ...
            at org.zkoss.zk.ui.select.SelectorComposer.<init> (SelectorComposer.java:91)
            at org.zkoss.reference.developer.cdi.composer.DynamicComposer.<init> (DynamicComposer.java:28)
            ...
            at org.zkoss.zk.ui.impl.AbstractUiFactory.newComposer (AbstractUiFactory.java:176)
            at org.zkoss.zk.ui.impl.AbstractUiFactory.newComposer (AbstractUiFactory.java:188)
            at org.zkoss.zk.ui.impl.Utils.newComposer (Utils.java:91)
            at org.zkoss.zk.ui.metainfo.ComponentInfo.toComposer (ComponentInfo.java:361)
            at org.zkoss.zk.ui.metainfo.ComponentInfo.toComposers (ComponentInfo.java:331)
            at org.zkoss.zk.ui.metainfo.ComponentInfo.resolveComposer (ComponentInfo.java:319)
            at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0 (UiEngineImpl.java:907)
            at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild (UiEngineImpl.java:900)
            at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0 (UiEngineImpl.java:787)
            at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate (UiEngineImpl.java:751)
            at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0 (UiEngineImpl.java:469)
            at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage (UiEngineImpl.java:377)
            at org.zkoss.zk.ui.http.DHtmlLayoutServlet.process (DHtmlLayoutServlet.java:253)
            ...
        Caused by: javax.naming.NamingException: WELD-001300: Unable to locate BeanManager
            at org.jboss.weld.resources.ManagerObjectFactory.getObjectInstance (ManagerObjectFactory.java:62)
            at javax.naming.spi.NamingManager.getObjectInstance (NamingManager.java:341)
            at org.eclipse.jetty.jndi.local.localContextRoot.lookup (localContextRoot.java:312)
            at org.eclipse.jetty.jndi.local.localContextRoot.lookup (localContextRoot.java:338)
            at javax.naming.InitialContext.lookup (InitialContext.java:409)
            at org.eclipse.jetty.jndi.NamingContext.lookup (NamingContext.java:462)
            at org.eclipse.jetty.jndi.NamingContext.lookup (NamingContext.java:486)
            at org.eclipse.jetty.jndi.NamingContext.lookup (NamingContext.java:486)
            at org.eclipse.jetty.jndi.NamingContext.lookup (NamingContext.java:500)
            at org.eclipse.jetty.jndi.java.javaRootURLContext.lookup (javaRootURLContext.java:96)
            at javax.naming.InitialContext.lookup (InitialContext.java:409)
            at org.zkoss.zkplus.cdi.CDIUtil.getBeanManager (CDIUtil.java:54)
            at org.zkoss.zkplus.cdi.DelegatingVariableResolver.<init> (DelegatingVariableResolver.java:42)
            at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
            at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
            at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance (Constructor.java:490)
            at org.zkoss.zk.ui.select.Selectors.newVariableResolvers (Selectors.java:258)
            at org.zkoss.zk.ui.select.SelectorComposer.<init> (SelectorComposer.java:91)
            at org.zkoss.reference.developer.cdi.composer.DynamicComposer.<init> (DynamicComposer.java:28)
            at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
            at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
            at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance (Constructor.java:490)
            at java.lang.Class.newInstance (Class.java:584)
            at org.zkoss.zk.ui.impl.AbstractUiFactory.newComposer (AbstractUiFactory.java:176)
            at org.zkoss.zk.ui.impl.AbstractUiFactory.newComposer (AbstractUiFactory.java:188)
            at org.zkoss.zk.ui.impl.Utils.newComposer (Utils.java:91)
            at org.zkoss.zk.ui.metainfo.ComponentInfo.toComposer (ComponentInfo.java:361)
            at org.zkoss.zk.ui.metainfo.ComponentInfo.toComposers (ComponentInfo.java:331)
            at org.zkoss.zk.ui.metainfo.ComponentInfo.resolveComposer (ComponentInfo.java:319)
            at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0 (UiEngineImpl.java:907)
            at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild (UiEngineImpl.java:900)
        

      Workaround

      Use javax.enterprise.inject.spi.CDI.current().getBeanManager() instead.
      CDIUtil.java

            Assignee:
            jumperchen
            Reporter:
            MDuchemin
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: