71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
layout: default_docs
 | 
						|
title: Data Sources and JNDI
 | 
						|
header: Chapter 11. Connection Pools and Data Sources
 | 
						|
resource: media
 | 
						|
previoustitle: Tomcat setup
 | 
						|
previous: tomcat.html
 | 
						|
nexttitle: Chapter 12. Logging with java.util.logging
 | 
						|
next: logging.html
 | 
						|
---
 | 
						|
 | 
						|
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 PostgreSQL™
 | 
						|
`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”](jndi.html#ds-jndi).
 | 
						|
 | 
						|
<a name="ds-jndi"></a>
 | 
						|
**Example 11.2. `DataSource` JNDI Code Example**
 | 
						|
 | 
						|
Application code to initialize a pooling `DataSource` and add it to JNDI might
 | 
						|
look like this:
 | 
						|
 | 
						|
```java
 | 
						|
PGPoolingDataSource source = new PGPoolingDataSource();
 | 
						|
source.setDataSourceName("A Data Source");
 | 
						|
source.setServerName("localhost");
 | 
						|
source.setDatabaseName("test");
 | 
						|
source.setUser("testuser");
 | 
						|
source.setPassword("testpassword");
 | 
						|
source.setMaxConnections(10);
 | 
						|
new InitialContext().rebind("DataSource", source);
 | 
						|
```
 | 
						|
 | 
						|
Then code to use a connection from the pool might look like this:
 | 
						|
 | 
						|
```java
 | 
						|
Connection conn = null;
 | 
						|
try
 | 
						|
{
 | 
						|
    DataSource source = (DataSource)new InitialContext().lookup("DataSource");
 | 
						|
    conn = source.getConnection();
 | 
						|
    // 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) {}
 | 
						|
    }
 | 
						|
}
 | 
						|
```
 |