users@glassfish.java.net

Re: How to map Global JNDI name and ENC.

From: Sahoo <Sahoo_at_Sun.COM>
Date: Thu, 25 Jun 2009 13:04:10 +0530

see inline...

glassfish_at_javadesktop.org wrote:
> In Glassfish, I have created a global JNDI name :
>
> JNDI name = jdbc/abcd .
>
> And in my code, I tried to inject the resource with the same name:
>
> @Resource(name="jdbc/abcd")
> private static DataSource ds;
>
> I assume that this will be interpreted as Environment Naming Context (ENC) name : java:comp/env/jdbc/abcd .
>
> Fortunately I think Glassfish will automatically resolve ENC name to global JNDI name if a resource with the same Global JNDI name exists.
>
I also think GlassFish does this automatic mapping. See [1].
> But what if I have :
>
> @Resource (name="Some_Portable_JNDI_Name")
> DataSource ds;
>
> And still my global JNDI name on server is jdbc/abcd.
>
> How to provide the mapping between ENC (java:comp/env/Some_Portable_JNDI_Name) and Global JNDI name (jdbc/abcd) in this case?
>
> I think I have to provide this mapping in Glassfish specific deployment descriptor?
> May I know waht is that and how to provide mapping?
>
> I dont want to rely on mappedName property of @Resource annotation as that makes code difficult to port.
>
> Can you please tell me which file I have to use to map these two?
>
You can use sun-*.xml deployment descriptors to map component specific
name to global JNDI name. e.g., if you are developing EJBs, then use
sun-ejb-jar.xml; for web, use sun-web.xml. You can specify something
like this in that file:

<resource-ref>
   <res-ref-name>Some_Portable_JNDI_Name
</res-ref-name>
   <jndi-name>jdbc/abcd</jndi-name>
</resource-ref>


See [1] for details.

Sahoo.

[1] http://docs.sun.com/app/docs/doc/819-3659/beanr?a=view
>