+

Search Tips   |   Advanced Search

Data access problems - Apache Derby database


This article provides troubleshooting tips for accessing Apache Derby databases.

 

What kind of problem are you having accessing your Apache Derby database?

Tip: Apache Derby errorCodes (2000, 3000, 4000) indicate levels of severity, not specific error conditions. In diagnosing Apache Derby problems, pay attention to the given sqlState value.

 

Unexpected IOException wrapped in SQLException, accessing Apache Derby database

This problem can occur because Apache Derby databases use a large number of files. Some operating systems, such as the Solaris Operating Environment, limit the number of files an application can open at one time. If the default is a low number, such as 64, we can get this exception.

If the operating system lets you configure the number of file descriptors, we can correct the problem by setting the number to a high value, such as 1024.

 

The "select for update" operation causes table lock and deadlock when accessing Apache Derby

If a select for update operation on one row locks the entire table, which creates a deadlock condition, there might be undefined indexes on that table. The lack of an index on the columns you use in the where clause can cause Apache Derby to create a table lock rather than a row level lock.

To resolve this problem, create an index on the affected table.

 

ERROR XSDB6: Another instance of Apache Derby may have already booted the database "database"

This problem occurs because Apache Derby embedded framework only allows one JVM to access the database instance at a time. To resolve this problem:

  1. Verify that you do not have other JDBC client programs, such as ij or cview running on that database instance, when WAS is running.

  2. Verify that you do not use the same instance of the database for more than one data source or use the networkServer framework, which doesn't have this limitation.

  3. If there are no connections to Apache Derby, delete the db.lck lock file. This file can be found in the directory where the Apache Derby database is mounted, under the schema directory. For example, if the database is mounted at /myDerbyDB, issue the command: rm /myDerbyDB/schemaName/db.lck
Error "The version of the IBM Universal JDBC driver in use is not licensed for connectivity to Apache Derby databases"

 

Error "The version of the IBM Universal JDBC driver in use is not licensed for connectivity to Apache Derby databases"

At the client runtime, an error similar to the following occurs:

The version of the IBM Universal JDBC driver in use is not  licensed for connectivity to Apache Derby databases.  To connect  to this DB2 server, please obtain a licensed copy of the IBM DB2  Universal Driver for JDBC and SQLJ.  An appropriate license file  db2jcc_license_*.jar for this target platform must be installed to  the application classpath.  Connectivity to Apache Derby databases is  enabled by any of the following license files: 
{ db2jcc_license_c.jar, b2jcc_license_cu.jar, db2jcc_license_cisuz.jar }
The problem occurs because an incorrect JDBC driver jar file name is specified in the class path for JDBC provider. For example, the jar file name may have an extra '_', as follows:

${UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc_license__cu.jar

To resolve the problem:

  1. Correct the UNIVERSAL_JDBC_DRIVER_PATH jar file name in the JACL script

  2. Restart the cluster.

  3. Rerun the client.

 

Running an application causes a runtime exception which produces an unreadable message.

At client runtime, you may receive a message similar to the following: Caused by: com.ibm.db2.jcc.a.SqlException: DB2 SQL error: SQLCODE: -1, SQLSTATE: 42X05, SQLERRMC: ANNUITYHOLDER20^T42X05

The problem occurs because the property retrieveMessagesfromServerOnGetMessage, which is required by WAS, has not been set. To resolve the problem, on the admininstrative console

  1. Click Resources -> JDBC Providers

  2. Click on a Apache Derby provider

  3. Scroll down and click on Data Sources

  4. Select the data source (or add a new one)

  5. Scroll down and select Custom Properties

  6. If the property retrieveMessagesFromServerOnGetMessage already exists, set its value to true. If the property does not exist, select Newand add the property retrieveMessagesFromServerOnGetMessage with a value true

  7. Rerun the client
The SystemOut.log will now generate readable messages so that we can resolve the underlying problem.



Related concepts


welc6toptroubleshooting.html

 

Related tasks


Develop data access applications
Example: Using IBM extended APIs to share connections between CMP beans and BMP beans

 

Related


Data access problems
Data access problems - Oracle data source
Data access problems - DB2 database
Data access problems - Microsoft SQL Server data source
Data access problems - Sybase data source
Extensions to data access APIs