5 Replies Latest reply on Aug 22, 2008 6:44 PM by Brian Stansberry

    Behavior difference in intra-AS EJB calls

    Brian Stansberry Master

      An FYI; not necessarily a problem.

      I'm seeing a difference in behavior when a bean in one AS looks up a bean in another AS and then invokes on it.[1] Previously that call would go remote; now it stays local if the same bean is deployed locally.

      This is because of the change in how proxy factories are created. Previously they were built on the server and downloaded. Now they are built on the client. Effect is IsLocalProxyFactoryInterceptor.isLocal() will *always* return true.

      I don't know if this is an acceptable behavior change or not. I do think it should be overridable; for EJB2 beans I often see forum requests wanting to know how to override "local-preference". For EJB2 this can be overridden by writing a simple custom extension of a JBoss class, which can then be configured in on a per-bean basis. For EJB3 the equivalent override would be a bit more complex (customized IsLocalProxyFactoryInterceptor and extension of all the ObjectFactory impls to override createProxyFactoryProxy). But if that's done I don't see any way to configure the new classes on a per-bean basis. The JndiSessionRegistrarBase impls to use are hard coded.

      [1] e.g.

       public VMID getVMIDFromRemoteLookup(String jndiURL, String name)
       throws NamingException
       log.info("Looking up " + jndiURL + "/" + name);
       Properties env = new Properties();
       env.setProperty(Context.PROVIDER_URL, jndiURL);
       env.setProperty("jnp.disableDiscovery", "true");
       InitialContext ctx = new InitialContext(env);
       VMTester tester = (VMTester) ctx.lookup(name);
       return tester.getVMID();