Troubleshooting

Change the log configuration

The ADO runtime uses the logging framework provided by Ada Utility Library. By default, logging messages are disabled and the logging framework has a negligeable impact on performance (less than 1 us per log).

You can customize the logging framework so that you activate logs according to your needs. In the full mode, the ADO runtime will report the SQL statements which are executed.

To control the logging, add or update the following definitions in a property file:

log4j.rootCategory=DEBUG,console,result

log4j.appender.console=Console
log4j.appender.console.level=WARN
log4j.appender.console.layout=level-message

log4j.appender.result=File
log4j.appender.result.File=test.log

# Logger configuration
log4j.logger.ADO=INFO,result
log4j.logger.ADO.Sessions=WARN
log4j.logger.ADO.Statements=DEBUG

The logging framework is configured by using the Util.Log.Logging.Initialize operation:

   Util.Log.Loggers.Initialize ("config.properties");

which can be executed from any place (but the best place is during the application start).

You can also configure the logger in Ada by using the following code:

with Util.Properties;
...
   Log_Config  : Util.Properties.Manager;
   ...
   Log_Config.Set ("log4j.rootCategory", "DEBUG,console");
   Log_Config.Set ("log4j.appender.console", "Console");
   Log_Config.Set ("log4j.appender.console.level", "ERROR");
   Log_Config.Set ("log4j.appender.console.layout", "level-message");
   Log_Config.Set ("log4j.logger.Util", "FATAL");
   Log_Config.Set ("log4j.logger.ADO", "ERROR");
   Log_Config.Set ("log4j.logger.ADO.Statements", "DEBUG");
   Util.Log.Loggers.Initialize (Log_Config);                                    

The ADO runtime has several loggers, each of them can be activated separately. The following loggers are interesting:

Logger name Description
ADO.Drivers Database drivers and connection to servers
ADO.Sessions Database session management
ADO.Statements SQL statements execution
ADO.Queries Named queries identification and retreival

Handling exceptions

Some exceptions are raised when there is a serious problem. The problem could be of different nature:

  • there is a database connection issue,
  • there is an SQL error,
  • there is a data inconsistency.

The ADO.Sessions.Connection_Error exception is raised when the connection string used to access the database is incorrect. The connection string could be improperly formatted, a database driver may not be found, the database server may not be reachable.

The ADO.Sessions.Session_Error exception is raised when the Session object is used while it is not initialized or the connection was closed programatically.

The ADO.Queries.Query_Error exception is raised when a named query cannot be found. In that case, the SQL that corresponds to the query cannot be executed.

The ADO.Statements.SQL_Error exception is raised when the execution of an SQL query fails. This is an indication that the SQL statement is invalid and was rejected by the database.

The ADO.Statements.Invalid_Column exception is raised after the execution of an SQL query when the application tries to access the result. It is raised when the program tries to retrieve a column value that does not exist.

The ADO.Statements.Invalid_Type exception is also raised after the execution of an SQL query when the value of a column cannot be converted to the Ada type. It occurs if a column contains a string while the application tries to get the column as an integer or date. Similarly, if a column is null and the returned Ada type does not support the nullable concept, this exception will be raised.

The ADO.Statements.Invalid_Statement exception is raised when you try to use and execute a Statement object which is not initialized.

The object layer provided by ADO raises specific exceptions.

The ADO.Objects.NOT_FOUND exception is raised by the generated Load procedure when an object cannot be found in the database.

The ADO.Objects.INSERT_ERROR exception is raised by the generated Save procedure executed the SQL INSERT statement and its execution failed.

The ADO.Objects.UPDATE_ERROR exception is raised by the generated Save procedure executed the SQL UPDATE statement and its execution failed.

The ADO.Objects.LAZY_LOCK exception is raised by the generated Save procedure executed the SQL UPDATE statement failed and the version of the object was changed.