type=page
status=published
title=Resources and JNDI Naming
next=resource-creation002.html
prev=resource-creation.html
~~~~~~
Resources and JNDI Naming
=========================

[[BNCJI]]

[[resources-and-jndi-naming]]
Resources and JNDI Naming
-------------------------

In a distributed application, components need to access other components
and resources, such as databases. For example, a servlet might invoke
remote methods on an enterprise bean that retrieves information from a
database. In the Java EE platform, the Java Naming and Directory
Interface (JNDI) naming service enables components to locate other
components and resources.

A resource is a program object that provides connections to systems,
such as database servers and messaging systems. (A Java Database
Connectivity resource is sometimes referred to as a data source.) Each
resource object is identified by a unique, people-friendly name, called
the JNDI name. For example, the JNDI name of the preconfigured JDBC
resource for Apache Derby shipped with GlassFish Server
is `java:comp/DefaultDataSource`.

An administrator creates resources in a JNDI namespace. In GlassFish
Server, you can use either the Administration Console or the `asadmin`
command to create resources. Applications then use annotations to inject
the resources. If an application uses resource injection, GlassFish
Server invokes the JNDI API, and the application is not required to do
so. However, it is also possible for an application to locate resources
by making direct calls to the JNDI API.

A resource object and its JNDI name are bound together by the naming and
directory service. To create a new resource, a new name/object binding
is entered into the JNDI namespace. You inject resources by using the
`@Resource` annotation in an application.

You can use a deployment descriptor to override the resource mapping
that you specify in an annotation. Using a deployment descriptor allows
you to change an application by repackaging it rather than by both
recompiling the source files and repackaging. However, for most
applications a deployment descriptor is not necessary.
