This section describes how to store a Derby JDBC ClientDataSource object in the file system using JNDI File System Service Provider.
JNDI File System Service Provider offers a directory service which allows you to store Java objects on the local file system.
You can use this feature to create a Derby JDBC ClientDataSource object and store it on the local file system. That stored ClientDataSource
object can be retrieved later whenever you want to use it.
To store a ClientDataSource object on the local file system, I need to:
Initiate the directory service with RefFSContextFactory class.
Assign a file system directory as the service home directory.
Create a ClientDataSource object with correct access information for the Derby Network Server.
Bind the ClientDataSource object to a name to store it to the file system.
I wrote the following sample program to store my ClientDataSource object to the file system via JNDI:
/**
* DerbyJndiBind.java
* Copyright (c) 2007 by Dr. Herong Yang. All rights reserved.
*/
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import org.apache.derby.jdbc.*;
public class DerbyJndiBind {
public static void main(String [] args) {
Connection con = null;
try {
// Starting the Directory service
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL, "file:/local/fscontext");
Context ctx = new InitialContext(env);
// Creating a DataSource object
ClientDataSource ds
= new org.apache.derby.jdbc.ClientDataSource();
ds.setServerName("localhost");
ds.setDatabaseName("TestDB");
// Storing the DataSource object
ctx.bind("DerbyTestDB", ds);
System.out.println("ClientDataSource object stored ok.");
} catch (Exception e) {
System.err.println("Exception: "+e.getMessage());
}
}
}
Here is the output of compilation and execution of the program:
C:\>javac -cp .;\local\javadb\lib\derbyclient.jar DerbyJndiBind.java
Note: DerbyJndiBind.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
C:\>java -cp .;\local\javadb\lib\derbyclient.jar;
\local\lib\fscontext.jar;\local\lib\providerutil.jar DerbyJndiBind
ClientDataSource object stored ok.
C:\>java -cp .;\local\javadb\lib\derbyclient.jar;
\local\lib\fscontext.jar;\local\lib\providerutil.jar DerbyJndiBind
Exception: DerbyTestDB
Note that:
The compilation gave me a warning message. Don't worry about it for now.
When I ran the program for the second time, it gave me an exception because the name "DerbyTestDB" has already been used to store
the ClientDataSource from the first execution.