What is JNDI? What is its basic use? When is it used?

前端 未结 9 1993
离开以前
离开以前 2020-11-30 16:21
  • What is JNDI?

  • What is its basic use?

  • When is it used?

相关标签:
9条回答
  • 2020-11-30 16:50

    What is JNDI ?

    JNDI stands for Java Naming and Directory Interface. It comes standard with J2EE.

    What is its basic use?

    With this API, you can access many types of data, like objects, devices, files of naming and directory services, eg. it is used by EJB to find remote objects. JNDI is designed to provide a common interface to access existing services like DNS, NDS, LDAP, CORBA and RMI.

    When it is used?

    You can use the JNDI to perform naming operations, including read operations and operations for updating the namespace. The following operations are described here.

    0 讨论(0)
  • 2020-11-30 16:54

    What is JNDI ?

    It stands for Java Naming and Directory Interface.

    What is its basic use?

    JNDI allows distributed applications to look up services in an abstract, resource-independent way.

    When it is used?

    The most common use case is to set up a database connection pool on a Java EE application server. Any application that's deployed on that server can gain access to the connections they need using the JNDI name java:comp/env/FooBarPool without having to know the details about the connection.

    This has several advantages:

    1. If you have a deployment sequence where apps move from devl->int->test->prod environments, you can use the same JNDI name in each environment and hide the actual database being used. Applications don't have to change as they migrate between environments.
    2. You can minimize the number of folks who need to know the credentials for accessing a production database. Only the Java EE app server needs to know if you use JNDI.
    0 讨论(0)
  • 2020-11-30 16:56

    I will use one example to explain how JNDI can be used to configure database without any application developer knowing username and password of the database.

    1) We have configured the data source in JBoss server's standalone-full.xml. Additionally, we can configure pool details also.

     <datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
                    <connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
                    <driver-class>oracle.jdbc.OracleDriver</driver-class>
                    <driver>oracle</driver>
                    <security>
                        <user-name>usname</user-name>
                        <password>pass</password>
                        </security>
                        <security>
    
     <security-domain>encryptedSecurityDomain</security-domain>
                        </security>
    
                    <validation>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                        <background-validation-millis>1</background-validation-millis>
                    </validation>
                    <statement>
                        <prepared-statement-cache-size>0</prepared-statement-cache-size>
                        <share-prepared-statements>false</share-prepared-statements>
                        <pool>
                            <min-pool-size>5</min-pool-size>
                            <max-pool-size>10</max-pool-size>
                        </pool>
                    </statement>
                </datasource>
    

    Now, this jndi-name and its associated datasource object will be available for our application.application.

    2) We can retrieve this datasource object using JndiDataSourceLookup class.

    Spring will instantiate the datasource bean, after we provide the jndi-name.

    Now, we can change the pool size, user name or password as per our environment or requirement, but it will not impact the application.

    Note : encryptedSecurityDomain, we need to configure it separately in JBoss server like

    <security-domain name="encryptedSecurityDomain" cache-type="default">
                        <authentication>
                            <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
                                <module-option name="username" value="<usernamefordb>"/>
                                <module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
                            </login-module>
                        </authentication>
                    </security-domain>
    

    This is one of the use cases. Hope it clarifies.

    0 讨论(0)
提交回复
热议问题