Uploaded image for project: 'Application Server 3  4  5 and 6'
  1. Application Server 3 4 5 and 6
  2. JBAS-5536

UnifiedInvokerHAProxy replicants are not updated when other nodes undeploy beans

XMLWordPrintable

    • Workaround Exists
    • Hide

      The obvious workaround is to use JRMP invokers instead of Unified invokers while this
      gets sorted as JRMP invoker proxy ha does implement InvokerProxyHA. To do that, take
      your EJB and add the following to the beans jboss.xml so that it uses JRMP invoker instead
      of Unified:

      <jboss>

      <enterprise-beans>

      <session>
      <ejb-name>Boo</ejb-name>
      <jndi-name>ejb/BooEjb</jndi-name>
      <configuration-name>JRMP Clustered Stateless SessionBean</configuration-name>
      <clustered>true</clustered>
      </session>

      </enterprise-beans>

      <container-configurations>

      <container-configuration extends="Clustered Stateless SessionBean">
      <container-name>JRMP Clustered Stateless SessionBean</container-name>
      <invoker-proxy-binding-name>clustered-stateless-rmi-invoker</invoker-proxy-binding-name>
      </container-configuration>

      </container-configurations>

      </jboss>

      If you wanna apply the workaround to all your beans, apply these changes to the
      "Clustered Stateless SessionBean" configuration in conf/standardjboss.xml

      Show
      The obvious workaround is to use JRMP invokers instead of Unified invokers while this gets sorted as JRMP invoker proxy ha does implement InvokerProxyHA. To do that, take your EJB and add the following to the beans jboss.xml so that it uses JRMP invoker instead of Unified: <jboss> <enterprise-beans> <session> <ejb-name>Boo</ejb-name> <jndi-name>ejb/BooEjb</jndi-name> <configuration-name>JRMP Clustered Stateless SessionBean</configuration-name> <clustered>true</clustered> </session> </enterprise-beans> <container-configurations> <container-configuration extends="Clustered Stateless SessionBean"> <container-name>JRMP Clustered Stateless SessionBean</container-name> <invoker-proxy-binding-name>clustered-stateless-rmi-invoker</invoker-proxy-binding-name> </container-configuration> </container-configurations> </jboss> If you wanna apply the workaround to all your beans, apply these changes to the "Clustered Stateless SessionBean" configuration in conf/standardjboss.xml

      We have a big regression at out hands. When we moved to unified
      invokers, we lost the ability for home/bean proxies to be updated
      when another node undeploys a bean. Why?

      ProxyFactoryHA.replicantsChanged looks something like this
      (the trace logs were added by me during debugging):

      public synchronized void replicantsChanged (String key,
      List newReplicants,
      int newReplicantsViewId)
      {
      try
      {
      if (homeInvoker instanceof InvokerProxyHA)
      {
      if (log.isTraceEnabled())

      { log.trace("Updating home proxy with new replicants " + target.getReplicants() + ", view=" + target.getCurrentViewId ()); }

      ((InvokerProxyHA)homeInvoker).updateClusterInfo (target.getReplicants(), target.getCurrentViewId ());
      }
      if (beanInvoker instanceof InvokerProxyHA)
      {
      if (log.isTraceEnabled())

      { log.trace("Updating bean proxy with new replicants " + target.getReplicants() + ", view=" + target.getCurrentViewId ()); }

      ((InvokerProxyHA)beanInvoker).updateClusterInfo (target.getReplicants(), target.getCurrentViewId ());
      }

      log.debug ("Rebinding in JNDI... " + key);
      rebindHomeProxy ();
      }
      catch (Exception none)

      { log.debug (none); }

      }

      UnifiedInvokerHAProxy does not implement InvokerProxyHA, so unified invoker ha
      proxies will never have their replicants updated.

              rh-ee-galder Galder ZamarreƱo
              rh-ee-galder Galder ZamarreƱo
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved: