All the ConnectionPoolDataSource
and
DataSource
implementations can be stored in JNDI. In the
case of the nonpooling implementations, a new instance will be created
every time the object is retrieved from JNDI, with the same settings as
the instance that was stored. For the pooling implementations, the same
instance will be retrieved as long as it is available (e.g., not a
different JVM retrieving the pool from JNDI), or a new instance with the
same settings created otherwise.
In the application server environment, typically the application
server's DataSource
instance will be stored in JNDI,
instead of the LightDB ConnectionPoolDataSource
implementation.
In an application environment, the application may store the
DataSource
in JNDI so that it doesn't have to make a
reference to the DataSource
available to all application
components that may need to use it. An example of this is shown in Example 11.2, "DataSource
JNDI
Code Example".
Example 11.2. DataSource
JNDI Code Example
Application code to initialize a pooling DataSource
and
add it to JNDI might look like this:
= new PGPoolingDataSource();
PGPoolingDataSource source .setDataSourceName("A Data Source");
source.setServerName("localhost");
source.setDatabaseName("test");
source.setUser("testuser");
source.setPassword("testpassword");
source.setMaxConnections(10);
sourcenew InitialContext().rebind("DataSource", source);
Then code to use a connection from the pool might look like this:
Connection conn = null;
try
{
DataSource source = (DataSource)new InitialContext().lookup("DataSource");
= source.getConnection();
conn // use connection
}
catch (SQLException e)
{
// log error
}
catch (NamingException e)
{
// DataSource wasn't found in JNDI
}
finally
{
if (con != null)
{
try { conn.close(); } catch (SQLException e) {}
}
}