JDBC Tutorials - Herong's Tutorial Notes
Dr. Herong Yang, Version 2.11

Derby - Storing ClientDataSource Objects on File System

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.

Sections in This Chapter

Derby - Connection with DataSource Objects

Derby - Using ClientDataSource Directly

Installing JNDI File System Service Provider

Derby - Storing ClientDataSource Objects on File System

Derby - Looking Up ClientDataSource Objects on File System

What Happens If Client JDBC DataSource JAR Is Missing?

Dr. Herong Yang, updated in 2007
Derby - Storing ClientDataSource Objects on File System