|  | type=page | 
|  | status=published | 
|  | title=Administering the Java Naming and Directory Interface (JNDI) Service | 
|  | next=transactions.html | 
|  | prev=jms.html | 
|  | ~~~~~~ | 
|  |  | 
|  | = Administering the Java Naming and Directory Interface (JNDI) Service | 
|  |  | 
|  | [[GSADG00021]][[ablky]] | 
|  |  | 
|  |  | 
|  | [[administering-the-java-naming-and-directory-interface-jndi-service]] | 
|  | == 18 Administering the Java Naming and Directory Interface (JNDI) Service | 
|  |  | 
|  | The Java Naming and Directory Interface (JNDI) API is used for accessing | 
|  | different kinds of naming and directory services. Jakarta EE components | 
|  | locate objects by invoking the JNDI lookup method. | 
|  |  | 
|  | The following topics are addressed here: | 
|  |  | 
|  | * link:#ggjue[About JNDI] | 
|  | * link:#gglpq[Administering JNDI Resources] | 
|  |  | 
|  | Instructions for accomplishing the tasks in this chapter by using the | 
|  | Administration Console are contained in the Administration Console | 
|  | online help. | 
|  |  | 
|  | [[ggjue]][[GSADG00603]][[about-jndi]] | 
|  |  | 
|  | === About JNDI | 
|  |  | 
|  | By making calls to the JNDI API, applications locate resources and other | 
|  | program objects. A resource is a program object that provides | 
|  | connections to systems, such as database servers and messaging systems. | 
|  | A JDBC resource is sometimes referred to as a data source. Each resource | 
|  | object is identified by a unique, people-friendly name, called the JNDI | 
|  | name. A resource object and its JNDI name are bound together by the | 
|  | naming and directory service, which is included with the {productName}. | 
|  |  | 
|  | When a new name-object binding is entered into the JNDI, a new resource | 
|  | is created. | 
|  |  | 
|  | The following topics are addressed here: | 
|  |  | 
|  | * link:#abllb[Jakarta EE Naming Environment] | 
|  | * link:#gglpg[How the Naming Environment and the Container Work | 
|  | Together] | 
|  | * link:#abllc[Naming References and Binding Information] | 
|  |  | 
|  | [[abllb]][[GSADG00780]][[java-ee-naming-environment]] | 
|  |  | 
|  | ==== Jakarta EE Naming Environment | 
|  |  | 
|  | JNDI names are bound to their objects by the naming and directory | 
|  | service that is provided by a Jakarta EE server. Because Jakarta EE components | 
|  | access this service through the JNDI API, the object usually uses its | 
|  | JNDI name. For example, the JNDI name of the Apache Derby database is | 
|  | `jdbc/_default`. At startup, the {productName} reads information from | 
|  | the configuration file and automatically adds JNDI database names to the | 
|  | name space, one of which is `jdbc/_default`. | 
|  |  | 
|  | Jakarta EE application clients, enterprise beans, and web components must | 
|  | have access to a JNDI naming environment. | 
|  |  | 
|  | The application component's naming environment is the mechanism that | 
|  | allows customization of the application component's business logic | 
|  | during deployment or assembly. This environment allows you to customize | 
|  | the application component without needing to access or change the source | 
|  | code off the component. A Jakarta EE container implements the provides the | 
|  | environment to the application component instance as a JNDI naming | 
|  | context. | 
|  |  | 
|  | [[gglpg]][[GSADG00781]][[how-the-naming-environment-and-the-container-work-together]] | 
|  |  | 
|  | ==== How the Naming Environment and the Container Work Together | 
|  |  | 
|  | The application component's environment is used as follows: | 
|  |  | 
|  | * The application component's business methods access the environment | 
|  | using the JNDI interfaces. In the deployment descriptor, the application | 
|  | component provider declares all the environment entries that the | 
|  | application component expects to be provided in its environment at | 
|  | runtime. | 
|  | * The container provides an implementation of the JNDI naming context | 
|  | that stores the application component environment. The container also | 
|  | provides the tools that allow the deployer to create and manage the | 
|  | environment of each application component. | 
|  | * A deployer uses the tools provided by the container to initialize the | 
|  | environment entries that are declared in the application component's | 
|  | deployment descriptor. The deployer sets and modifies the values of the | 
|  | environment entries. | 
|  | * The container makes the JNDI context available to the application | 
|  | component instances at runtime. These instances use the JNDI interfaces | 
|  | to obtain the values of the environment entries. | 
|  |  | 
|  | Each application component defines its own set of environment entries. | 
|  | All instances of an application component within the same container | 
|  | share the same environment entries. Application component instances are | 
|  | not allowed to modify the environment at runtime. | 
|  |  | 
|  | [[abllc]][[GSADG00782]][[naming-references-and-binding-information]] | 
|  |  | 
|  | ==== Naming References and Binding Information | 
|  |  | 
|  | A resource reference is an element in a deployment descriptor that | 
|  | identifies the component's coded name for the resource. For example, | 
|  | `jdbc/SavingsAccountDB`. More specifically, the coded name references a | 
|  | connection factory for the resource. | 
|  |  | 
|  | The JNDI name of a resource and the resource reference name are not the | 
|  | same. This approach to naming requires that you map the two names before | 
|  | deployment, but it also decouples components from resources. Because of | 
|  | this decoupling, if at a later time the component needs to access a | 
|  | different resource, the name does not need to change. This flexibility | 
|  | makes it easier for you to assemble Jakarta EE applications from | 
|  | preexisting components. | 
|  |  | 
|  | The following table lists JNDI lookups and their associated resource | 
|  | references for the Jakarta EE resources used by the {productName}. | 
|  |  | 
|  | [[GSADG1029]][[sthref87]][[fxizy]] | 
|  |  | 
|  |  | 
|  | Table 18-1 JNDI Lookup Names and Their Associated References | 
|  |  | 
|  | [width="100%",cols="38%,62%",options="header",] | 
|  | |=== | 
|  | |JNDI Lookup Name |Associated Resource Reference | 
|  | |`java:comp/env` |Application environment entries | 
|  |  | 
|  | |`java:comp/env/jdbc` |JDBC DataSource resource manager connection | 
|  | factories | 
|  |  | 
|  | |`java:comp/env/ejb` |EJB References | 
|  |  | 
|  | |`java:comp/UserTransaction` |UserTransaction references | 
|  |  | 
|  | |`java:comp/env/mail` |JavaMail Session Connection Factories | 
|  |  | 
|  | |`java:comp/env/url` |URL Connection Factories | 
|  |  | 
|  | |`java:comp/env/jms` |JMS Connection Factories and Destinations | 
|  |  | 
|  | |`java:comp/ORB` |ORB instance shared across application components | 
|  | |=== | 
|  |  | 
|  |  | 
|  | [[gglpq]][[GSADG00604]][[administering-jndi-resources]] | 
|  |  | 
|  | === Administering JNDI Resources | 
|  |  | 
|  | Within {productName}, you can configure your environment for custom | 
|  | and external JNDI resources. A custom resource accesses a local JNDI | 
|  | repository; an external resource accesses an external JNDI repository. | 
|  | Both types of resources need user-specified factory class elements, JNDI | 
|  | name attributes, and so on. | 
|  |  | 
|  | * link:#ablle[Administering Custom JNDI Resources] | 
|  | * link:#gitxz[Administering External JNDI Resources] | 
|  |  | 
|  | [[ablle]][[GSADG00783]][[administering-custom-jndi-resources]] | 
|  |  | 
|  | ==== Administering Custom JNDI Resources | 
|  |  | 
|  | A custom resource specifies a custom server-wide resource object factory | 
|  | that implements the `javax.naming.spi.ObjectFactory` interface. | 
|  |  | 
|  | The following topics are addressed here: | 
|  |  | 
|  | * link:#giowe[To Create a Custom JNDI Resource] | 
|  | * link:#gioxb[To List Custom JNDI Resources] | 
|  | * link:#giwlk[To Update a Custom JNDI Resource] | 
|  | * link:#gioxl[To Delete a Custom JNDI Resource] | 
|  |  | 
|  | [[giowe]][[GSADG00503]][[to-create-a-custom-jndi-resource]] | 
|  |  | 
|  | ===== To Create a Custom JNDI Resource | 
|  |  | 
|  | Use the `create-custom-resource` subcommand in remote mode to create a | 
|  | custom resource. | 
|  |  | 
|  | 1. Ensure that the server is running. Remote subcommands require a running server. | 
|  | 2. Create a custom resource by using the | 
|  | link:reference-manual/create-custom-resource.html#GSRFM00022[`create-custom-resource`] subcommand. | 
|  | + | 
|  | Information on properties for the subcommand is contained in this help | 
|  | page. | 
|  | 3. Restart {productName}. | 
|  | + | 
|  | See link:domains.html#ginqj[To Restart a Domain]. | 
|  |  | 
|  | [[GSADG00284]][[gioyi]] | 
|  | Example 18-1 Creating a Custom Resource | 
|  |  | 
|  | This example creates a custom resource named `sample-custom-resource`. | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> create-custom-resource --restype topic --factoryclass com.imq.topic | 
|  | sample_custom_resource | 
|  | Command create-custom-resource executed successfully. | 
|  | ---- | 
|  |  | 
|  | [[GSADG1030]] | 
|  |  | 
|  | See Also | 
|  |  | 
|  | You can also view the full syntax and options of the subcommand by | 
|  | typing `asadmin help create-custom-resource` at the command line. | 
|  |  | 
|  | [[gioxb]][[GSADG00504]][[to-list-custom-jndi-resources]] | 
|  |  | 
|  | ===== To List Custom JNDI Resources | 
|  |  | 
|  | Use the `list-custom-resources` subcommand in remote mode to list the | 
|  | existing custom resources. | 
|  |  | 
|  | 1. Ensure that the server is running. Remote subcommands require a running server. | 
|  | 2. List the custom resources by using the | 
|  | link:reference-manual/list-custom-resources.html#GSRFM00162[`list-custom-resources`] subcommand. | 
|  |  | 
|  | [[GSADG00285]][[gioyr]] | 
|  | Example 18-2 Listing Custom Resources | 
|  |  | 
|  | This example lists the existing custom resources. | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> list-custom-resources | 
|  | sample_custom_resource01 | 
|  | sample_custom_resource02 | 
|  | Command list-custom-resources executed successfully | 
|  | ---- | 
|  |  | 
|  | [[GSADG1031]] | 
|  |  | 
|  | See Also | 
|  |  | 
|  | You can also view the full syntax and options of the subcommand by | 
|  | typing `asadmin help list-custom-resources` at the command line. | 
|  |  | 
|  | [[giwlk]][[GSADG00505]][[to-update-a-custom-jndi-resource]] | 
|  |  | 
|  | ===== To Update a Custom JNDI Resource | 
|  |  | 
|  | 1. List the custom resources by using the | 
|  | link:reference-manual/list-custom-resources.html#GSRFM00162[`list-custom-resources`] subcommand. | 
|  | 2. Use the link:reference-manual/set.html#GSRFM00226[`set`] subcommand to modify a custom JNDI | 
|  | resource. | 
|  |  | 
|  | [[GSADG00286]][[giwkg]] | 
|  | Example 18-3 Updating a Custom JNDI Resource | 
|  |  | 
|  | This example modifies a custom resource. | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> set server.resources.custom-resource.custom | 
|  | /my-custom-resource.property.value=2010server.resources.custom-resource.custom | 
|  | /my-custom-resource.property.value=2010 | 
|  | ---- | 
|  |  | 
|  | [[gioxl]][[GSADG00506]][[to-delete-a-custom-jndi-resource]] | 
|  |  | 
|  | ===== To Delete a Custom JNDI Resource | 
|  |  | 
|  | Use the `delete-custom-resource` subcommand in remote mode to delete a | 
|  | custom resource. | 
|  |  | 
|  | 1. Ensure that the server is running. Remote subcommands require a running server. | 
|  | 2. List the custom resources by using the | 
|  | link:reference-manual/list-custom-resources.html#GSRFM00162[`list-custom-resources`] subcommand. | 
|  | 3. Delete a custom resource by using the | 
|  | link:reference-manual/delete-custom-resource.html#GSRFM00074[`delete-custom-resource`] subcommand. | 
|  |  | 
|  | [[GSADG00287]][[gioxh]] | 
|  | Example 18-4 Deleting a Custom Resource | 
|  |  | 
|  | This example deletes a custom resource named `sample-custom-resource`. | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> delete-custom-resource sample_custom_resource | 
|  | Command delete-custom-resource executed successfully. | 
|  | ---- | 
|  |  | 
|  | [[GSADG1032]] | 
|  |  | 
|  | See Also | 
|  |  | 
|  | You can also view the full syntax and options of the subcommand by | 
|  | typing `asadmin help delete-custom-resource` at the command line. | 
|  |  | 
|  | [[gitxz]][[GSADG00784]][[administering-external-jndi-resources]] | 
|  |  | 
|  | ==== Administering External JNDI Resources | 
|  |  | 
|  | Applications running on {productName} often require access to | 
|  | resources stored in an external JNDI repository. For example, generic | 
|  | Java objects might be stored in an LDAP server according to the Java | 
|  | schema. External JNDI resource elements let you configure such external | 
|  | resource repositories. | 
|  |  | 
|  | The following topics are addressed here: | 
|  |  | 
|  | * link:#gitxn[To Register an External JNDI Resource] | 
|  | * link:#gitvj[To List External JNDI Resources] | 
|  | * link:#gitwc[To List External JNDI Entries] | 
|  | * link:#giwnr[To Update an External JNDI Resource] | 
|  | * link:#gitvt[To Delete an External JNDI Resource] | 
|  | * link:#abllk[Example of Using an External JNDI Resource] | 
|  | * link:#gknaf[To Disable {productName} v2 Vendor-Specific JNDI Names] | 
|  |  | 
|  | [[gitxn]][[GSADG00507]][[to-register-an-external-jndi-resource]] | 
|  |  | 
|  | ===== To Register an External JNDI Resource | 
|  |  | 
|  | Use the `create-jndi-resource` subcommand in remote mode to register an | 
|  | external JNDI resource. | 
|  |  | 
|  | [[GSADG1033]] | 
|  |  | 
|  | Before You Begin | 
|  |  | 
|  | The external JNDI factory must implement the | 
|  | `javax.naming.spi.InitialContextFactory` interface. | 
|  |  | 
|  | 1. Ensure that the server is running. Remote subcommands require a running server. | 
|  | 2. Register an external JNDI resource by using the | 
|  | link:reference-manual/create-jndi-resource.html#GSRFM00041[`create-jndi-resource`] subcommand. | 
|  | + | 
|  | Information on properties for the subcommand is contained in this help | 
|  | page. | 
|  | 3. Restart {productName}. | 
|  | + | 
|  | See link:domains.html#ginqj[To Restart a Domain]. | 
|  |  | 
|  | [[GSADG00288]][[giwcx]] | 
|  | Example 18-5 Registering an External JNDI Resource | 
|  |  | 
|  | In This example `sample_jndi_resource` is registered. | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> create-jndi-resource --jndilookupname sample_jndi | 
|  | --restype queue --factoryclass sampleClass --description "this is a sample jndi | 
|  | resource" sample_jndi_resource | 
|  | Command create-jndi-resource executed successfully | 
|  | ---- | 
|  |  | 
|  | [[GSADG1034]] | 
|  |  | 
|  | See Also | 
|  |  | 
|  | You can also view the full syntax and options of the subcommand by | 
|  | typing `asadmin help create-jndi-resource` at the command line. | 
|  |  | 
|  | [[gitvj]][[GSADG00508]][[to-list-external-jndi-resources]] | 
|  |  | 
|  | ===== To List External JNDI Resources | 
|  |  | 
|  | Use the `list-jndi-resources` subcommand in remote mode to list all | 
|  | existing JNDI resources. | 
|  |  | 
|  | 1. Ensure that the server is running. Remote subcommands require a running server. | 
|  | 2. List the existing JNDI resources by using | 
|  | theolink:GSRFM00179[`list-jndi-resources`] subcommand. | 
|  |  | 
|  | [[GSADG00289]][[giwbe]] | 
|  | Example 18-6 Listing JNDI Resources | 
|  |  | 
|  | This example lists the JNDI resources. | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> list-jndi-resources | 
|  | jndi_resource1 | 
|  | jndi_resource2 | 
|  | jndi_resource3 | 
|  | Command list-jndi-resources executed successfully | 
|  | ---- | 
|  |  | 
|  | [[GSADG1035]] | 
|  |  | 
|  | See Also | 
|  |  | 
|  | You can also view the full syntax and options of the subcommand by | 
|  | typing `asadmin help list-jndi-resources` at the command line. | 
|  |  | 
|  | [[gitwc]][[GSADG00509]][[to-list-external-jndi-entries]] | 
|  |  | 
|  | ===== To List External JNDI Entries | 
|  |  | 
|  | Use the `list-jndi-entries` subcommand in remote mode to browse and list | 
|  | the entries in the JNDI tree. You can either list all entries, or you | 
|  | can specify the JNDI context or subcontext to list specific entries. | 
|  |  | 
|  | 1. Ensure that the server is running. Remote subcommands require a running server. | 
|  | 2. List the JNDI entries for a configuration by using the | 
|  | link:reference-manual/list-jndi-entries.html#GSRFM00178[`list-jndi-entries`] subcommand. | 
|  |  | 
|  | [[GSADG00290]][[giwal]] | 
|  | Example 18-7 Listing JNDI Entries | 
|  |  | 
|  | This example lists all the JNDI entries for the naming service. | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> list-jndi-entries | 
|  | jndi_entry03 | 
|  | jndi_entry72 | 
|  | jndi_entry76 | 
|  | Command list-jndi-resources executed successfully | 
|  | ---- | 
|  |  | 
|  | [[GSADG1036]] | 
|  |  | 
|  | See Also | 
|  |  | 
|  | You can also view the full syntax and options of the subcommand by | 
|  | typing `asadmin help list-jndi-entries` at the command line. | 
|  |  | 
|  | [[giwnr]][[GSADG00510]][[to-update-an-external-jndi-resource]] | 
|  |  | 
|  | ===== To Update an External JNDI Resource | 
|  |  | 
|  | 1. List the existing JNDI resources by using | 
|  | theolink:GSRFM00179[`list-jndi-resources`] subcommand. | 
|  | 2. Use the link:reference-manual/set.html#GSRFM00226[`set`] subcommand to modify an external | 
|  | JNDI resource. | 
|  |  | 
|  | [[GSADG00291]][[giwoa]] | 
|  | Example 18-8 Updating an External JNDI Resource | 
|  |  | 
|  | This example modifies an external resource. | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> set server.resources.external-jndi-resource.my-jndi-resource. | 
|  | jndi-lookup-name=bar server.resources.external-jndi-resource.my-jndi-resource.jndi-lookup-name=bar | 
|  | ---- | 
|  |  | 
|  | [[gitvt]][[GSADG00511]][[to-delete-an-external-jndi-resource]] | 
|  |  | 
|  | ===== To Delete an External JNDI Resource | 
|  |  | 
|  | Use the `delete-jndi-resource` subcommand in remote mode to remove a | 
|  | JNDI resource. | 
|  |  | 
|  | 1. Ensure that the server is running. Remote subcommands require a running server. | 
|  | 2. Remove an external JNDI entry by using the | 
|  | link:reference-manual/delete-jndi-resource.html#GSRFM00093[`delete-jndi-resource`] subcommand. | 
|  |  | 
|  | [[GSADG00292]][[giwby]] | 
|  | Example 18-9 Deleting an External JNDI Resource | 
|  |  | 
|  | This example deletes an external JNDI resource: | 
|  |  | 
|  | [source] | 
|  | ---- | 
|  | asadmin> delete-jndi-resource jndi_resource2 | 
|  | Command delete-jndi-resource executed successfully. | 
|  | ---- | 
|  |  | 
|  | [[GSADG1037]] | 
|  |  | 
|  | See Also | 
|  |  | 
|  | You can also view the full syntax and options of the subcommand by | 
|  | typing `asadmin help delete-jndi-resource` at the command line. | 
|  |  | 
|  | [[abllk]][[GSADG00688]][[example-of-using-an-external-jndi-resource]] | 
|  |  | 
|  | ===== Example of Using an External JNDI Resource | 
|  |  | 
|  | [source,xml] | 
|  | ---- | 
|  | <resources> | 
|  | <!-- external-jndi-resource element specifies how to access Jakarta EE resources | 
|  | -- stored in an external JNDI repository. This example | 
|  | -- illustrates how to access a java object stored in LDAP. | 
|  | -- factory-class element specifies the JNDI InitialContext factory that | 
|  | -- needs to be used to access the resource factory. property element | 
|  | -- corresponds to the environment applicable to the external JNDI context | 
|  | -- and jndi-lookup-name refers to the JNDI name to lookup to fetch the | 
|  | -- designated (in this case the java) object. | 
|  | --> | 
|  | <external-jndi-resource jndi-name="test/myBean" | 
|  | jndi-lookup-name="cn=myBean" | 
|  | res-type="test.myBean" | 
|  | factory-class="com.sun.jndi.ldap.LdapCtxFactory"> | 
|  | <property name="PROVIDER-URL" value="ldap://ldapserver:389/o=myObjects" /> | 
|  | <property name="SECURITY_AUTHENTICATION" value="simple" /> | 
|  | <property name="SECURITY_PRINCIPAL", value="cn=joeSmith, o=Engineering" /> | 
|  | <property name="SECURITY_CREDENTIALS" value="changeit" /> | 
|  | </external-jndi-resource> | 
|  | </resources> | 
|  | ---- | 
|  |  | 
|  | [[gknaf]][[GSADG00512]][[to-disable-glassfish-server-v2-vendor-specific-jndi-names]] | 
|  |  | 
|  | ===== To Disable {productName} v2 Vendor-Specific JNDI Names | 
|  |  | 
|  | The EJB 3.1 specification supported by {productName} 7 defines | 
|  | portable EJB JNDI names. Because of this, there is less need to continue | 
|  | to use older vendor-specific JNDI names. | 
|  |  | 
|  | By default, {productName} v2-specific JNDI names are applied | 
|  | automatically by {productName} 7 for backward compatibility. | 
|  | However, this can lead to some ease-of-use issues. For example, | 
|  | deploying two different applications containing a Remote EJB component | 
|  | that exposes the same remote interface causes a conflict between the | 
|  | default JNDI names. | 
|  |  | 
|  | The default handling of v2-specific JNDI names in {productName} 7 | 
|  | can be managed with the `asadmin` command or with the | 
|  | `disable-nonportable-jndi-names` boolean property for the | 
|  | `ejb-container` element in `glassfish-ejb-jar.xml`. | 
|  |  | 
|  | Use the `asadmin` command or directly modify the `glassfish-ejb-jar.xml` | 
|  | file to set the `disable-nonportable-jndi-names` property. | 
|  |  | 
|  | * Using the `asadmin` command: | 
|  | + | 
|  | [source] | 
|  | ---- | 
|  | asadmin> set server.ejb-container.property.disable-nonportable-jndi-names="true" | 
|  | ---- | 
|  | * Directly modifying the `glassfish-ejb-jar.xml` file. | 
|  | 1. Add the `disable-nonportable-jndi-names` property to the | 
|  | `ejb-container` element in `glassfish-ejb-jar.xml`. | 
|  | 2. Set the value of the `disable-nonportable-jndi-names` boolean, as | 
|  | desired. | 
|  | + | 
|  | `false` - Enables the automatic use of {productName} v2-specific JNDI | 
|  | names. This is the default setting. | 
|  | + | 
|  | `true` - Disables the automatic use of v2-specific JNDI names. In all | 
|  | cases, 5.0-compatible JNDI names will be used. | 
|  | 3. Save the `glassfish-ejb-jar.xml` file and restart the {productName} domain. | 
|  | + | 
|  | This setting applies to all EJBs deployed to the server. | 
|  |  | 
|  |  |