[jboss-as7-dev] PART 3! of EJB Remote client design
Jaikiran Pai
jpai at redhat.com
Thu Sep 22 05:38:54 EDT 2011
On Thursday 22 September 2011 01:04 PM, Jaikiran Pai wrote:
>> This gives us configuration-free JNDI. Also, it gives us a JNDI name
>> scheme we can use in server-side EJB references as a lookup-name which
>> can create dependency-free injections of remote EJBs that may not be
>> present on the current system. And it's also nice in that it doesn't
>> interfere with "java:" spec lookups at all.
>
> I didn't understand the dependency-free injection part, but I guess
> what you are saying is that having a new ejb: scheme has an additional
> advantage too?
>
> Furthermore, I'm not a JNDI expert, so I might be missing some basic
> details. But why not treat "java:global" just like we would treat this
> new "ejb:" scheme? Is it the namespace "java:" and its traditional
> meaning that it's a in-VM namespace? I mean why do we need a new
> "ejb:" scheme for remote clients? Furthermore, although the EJB3 spec
> or other spec doesn't say anything for/against using the EJB3.1 spec
> mandated JNDI name scheme (java:global) from remote JVMs, I think some
> other app servers (GlassFish?) do allow these JNDI names to be used
> from a remote client. EJB3.1 spec Global JNDI section talks about
> portable JNDI names, so I'm not sure whether not supporting
> java:global from a remote client is right or wrong.
To put this in a more practical perspective - consider a usecase where a
user has App1 containing a Foo bean which exposes a remote view. As per
the EJB3.1 JNDI spec, this remote view becomes available in JNDI at spec
mandated namespace java:global/a/b/Foo!blah jndi name. Let's also assume
that the same server has another deployment App2 which acts a client of
App1 and uses the java:global JNDI name to lookup and invoke on the EJB.
Now all this works fine since it's in-VM (on the same server). At a
certain point in time if the user decides, due to architectural reasons,
to move App2 to a different server instance then he will have to end up
changing the jndi name from java:global to a JBoss specific custom ejb:
scheme. I personally don't think this is a good idea. Note that usecase
like this work fine in previous AS versions and JNDI name change isn't
required when the deployment is moved to a different server - it's just
a matter of passing the right PROVIDER_URL during the lookup.
Furthermore, the Java EE 6 spec section 5.2.2 says this about
java:global JNDI namespace:
<quote>
java:global - Names in this namespace are shared by all applications
deployed in an application server instance. Note that an application
server instance may represent a single server, a cluster of servers, an
administrative domain containing many servers, or even more. The scope
of an application server instance is product-dependent, but it must be
possible to deploy multiple applications to a single application server
instance.
</quote>
So the spec does allow enough scope for java:global namespace to be used
across servers from remote clients.
-Jaikiran
More information about the jboss-as7-dev
mailing list