See the javadoc for each class for more information.
Each of these DataSources has two variants. Use the first variant if your application run on JDK 1.5 or lower. Use the second variant (the one whose class name ends with "40") if your application runs on JDK 1.6 or higher.
Implements javax.sql.DataSource interface, which a JNDI server can reference. Typically this is the object that you work with as a DataSource.
Implements javax.sql.ConnectionPoolDataSource. A factory for PooledConnection objects.
Derby's implementation of a javax.sql.XADataSource.