Recital

Login Register

This article looks at the range of client access mechanisms for Windows that can be used with the Recital C-ISAM Bridge and details bridge configuration and usage.

Overview

Just because the format of data is regarded as 'legacy' does not make that data in any way obsolete. Modern client interfaces can not only extend the life of long-term data, but also provide different ways to analyse and gain advantage from that data.

Recital Corporation provides a range of solutions to interface to Informix compliant C-ISAM data on Linux or UNIX from Windows clients.

.NET

Click image to display full size

Fig 1: Recital Mirage .NET application accessing the C-ISAM Demo table.


Recital offers two alternative ways to access C-ISAM data using Microsoft .NET:

The Recital .NET Data Provider is a managed Data Provider written in C# that provides full compatibility with the Microsoft SQLserver and OLE DB data providers that ship with the .NET framework. It is fully integrated with the Visual Studio .NET IDE supporting data binding and automatic code generation using the form designer. The Recital .NET Data Provider works in conjunction with the Recital Database Server for Linux or UNIX to access C-ISAM data.

Recital Mirage .NET is a complete solution for migrating, developing and deploying 4GL database applications. Recital Mirage .NET works in conjunction with the Recital Mirage .NET Application Server for Linux or UNIX to access C-ISAM data.

JDBC

Click image to display full size

Fig 2: Java™ Swing JTable accessing the C-ISAM Demo table via the Recital JDBC Driver.


The Recital JDBC Driver is an all Java Type 4 JDBC 3.0 Driver, allowing you to access C-ISAM data from Java applets and applications. The Recital JDBC Driver works in conjunction with the Recital Database Server for Linux or UNIX to access C-ISAM data.

ODBC

Click image to display full size

Fig 3: Microsoft® Office Excel 2003 Pivot Chart and Pivot Table accessing the C-ISAM Demo table via the Recital ODBC Driver.


The Recital ODBC Driver is an ODBC 3.0 Driver, allowing you to access C-ISAM data from your preferred ODBC based Windows applications. You can develop your own applications in languages such as C++ or Visual Basic, manipulate the data in a spreadsheet package or word processor document and design charts, graphs and reports. The Recital ODBC Driver works in conjunction with the Recital Database Server for Linux or UNIX to access C-ISAM data.

Configuring the Recital C-ISAM Bridge

Data access is achieved through a C-ISAM Bridge.  This requires the creation of an empty Recital table that has the same structure as the C-ISAM file and of a RecitalC-ISAM Bridge file.

On Linux and UNIX, Recital Terminal Developer and the Recital Database Server come complete with an example C-ISAM data file, C-ISAM index and Recital C-ISAM bridge that can be used for testing and as a template for configuring your own C-ISAM bridges.  The Recital Database Server also includes a bridge creation ini file.

Step 1:

Create a Recital table with the same structure as the C-ISAM file.  The fields/columns in the structure file must exactly match the data type and length of those in the C-ISAM file.  The Recital table will have one byte more in total record length due to the Recital record deletion marker.

To create the table, use the SQL CREATE TABLE command or the Recital Terminal Developer CREATE worksurface.  The SQL CREATE TABLE command can be called directly:

SQLExecDirect:
  In:      hstmt = 0x00761BE8,
    szSqlStr = "CREATE TABLE cisamdemo.str (DD Char(4)
              DESCRIPTION "Dd...", cbSqlStr = -3
  Return:  SQL_SUCCESS=0

or be included in a 4GL program:

// createtab.prg
CREATE TABLE cisamdemo.str;
    (DD Char(4) DESCRIPTION "Dd",;
     CONFIRM Char(6) DESCRIPTION "Confirm",;
     PROCDATE Char(6) DESCRIPTION "Procdate",;
     CONTROL Char(5) DESCRIPTION "Control",;
     DOLLARS Decimal(13,2) DESCRIPTION "Dollars",;
     DEALER Char(5) DESCRIPTION "Dealer",;
     TERRITORY Char(2) DESCRIPTION "Territory",;
     WOREP Char(12) DESCRIPTION "Worep",;
     CURRTRAN Char(3) DESCRIPTION "Currtran",;
     TRADDATE Char(6) DESCRIPTION "Traddate",;
     CITY Char(10) DESCRIPTION "City",;
     ACCOUNT Char(11) DESCRIPTION "Account",;
     PRETRAN Char(2) DESCRIPTION "Pretran",;
     AFSREP Char(14) DESCRIPTION "Afsrep",;
     REPKEY Char(9) DESCRIPTION "Repkey",;
     BRANCH Char(3) DESCRIPTION "Branch",;
     WODEALER Char(5) DESCRIPTION "Wodealer",;
     BANKCODE Char(2) DESCRIPTION "Bankcode",;
     COMMRATE Decimal(6,4) DESCRIPTION "Commrate",;
     NEWREP Char(1) DESCRIPTION "Newrep",;
     SETTLE Char(1) DESCRIPTION "Settle",;
     POSTDATE Char(6) DESCRIPTION "Postdate")
if file("cisamdemo.str")
    return .T.
else
    return .F.
endif
// end of createtab.prg

Server-side 4GL programs can be called by all clients, e.g. from a Java class with a JDBC connection:

//---------------------------------
//-- create_str.java --
//---------------------------------
import java.sql.*;
import java.io.*;
import Recital.sql.*;

public class create_str {

  public static void main(String argv[]) {
    try {
      new RecitalDriver();
      String url = "jdbc:Recital:" +
        "SERVERNAME=cisamserver;" +
        "DIRECTORY=/usr/recital/data/southwind;" +
        "USERNAME=user;" +
        "PASSWORD=password";
      Connection con = DriverManager.getConnection(url, "user", "pass");
      Statement stmt = con.createStatement();

      CallableStatement sp = con.prepareCall("{call createtab}");
      boolean res = sp.execute();
      String outParam = sp.getString(1);
      System.out.println("Returned "+outParam);
      sp.close();
      con.close();
    } catch (Exception e) {
      System.out.flush();
      System.err.flush();
      DriverManager.println("Driver exception: " + e.getMessage());
      e.printStackTrace();
    }
    try {
      System.out.println("Press any key to continue...");
      System.in.read();
    } catch(IOException ie) {
      ;
    }
  }
}

The table should be given a ‘.str’ file extension (rather than the default ‘.dbf’) to signify that this is a structure file only.

Please see the end of this article for information on matching Informix and Recital data types



Fig 4: Recital CREATE/MODIFY STRUCTURE worksurface for character mode table creation.

Step 2: Creating the Bridge File

If you have Recital installed on the server platform, the Bridge File can be created using the CREATE BRIDGE worksurface.  The corresponding command to modify the bridge file is MODIFY BRIDGE <bridge file>.  This is the cisamdemo.dbf bridge file in the CREATE/MODIFY BRIDGE WORKSURFACE:

> modify bridge cisamdemo.dbf


Fig 5: Recital CREATE BRIDGE/MODIFY BRIDGE worksurface for bridge creation.

For Recital Database Server clients, the Bridge File can be created using the Recital/SQL CREATE BRIDGE command:

Recital/SQL CREATE BRIDGE:
CREATE BRIDGE cisamdemo.dbf;
  TYPE "CISAM";
  EXTERNAL "cisamdemo.dat";
  METADATA "cisamdemo.str";
  ALIAS "cisamdemo"

or:

CREATE BRIDGE cisamdemo.dbf;
  AS "type=CISAM;external=cisamdemo.dat;metadata=cisamdemo.str;alias=cisamdemo"

The examples above assume that the C-ISAM file, the bridge file and the Recital structure file are all in the current working directory.  Full path information can be specified for the <externalname> and the <databasename>.  For added flexibility, environment variables can be used to determine the path at the time the bridge is opened.  Environment variables can be included for either or both the <externalname> and the <databasename>.  A colon should be specified between the environment variable and the file name.

e.g.

  CREATE BRIDGE cisamdemo.dbf;
  TYPE "CISAM";
  EXTERNAL "DB_DATADIR:cisamdemo";
  METADATA "DB_MIRAGE_PATH:cisamdemo.str";
  ALIAS "cisamdemo"
Recital CREATE BRIDGE/MODIFY BRIDGE worksurface:


Fig 6: Recital CREATE BRIDGE/MODIFY BRIDGE worksurface - using environment variables.

Using the Bridge

The Bridge can now be used.  To access the C-ISAM file, use the ‘alias’ specified in the Bridge definition.

SQL:
SELECT * FROM cisamdemo
Recital/4GL:
use cisamdemo

Indexes

The cisamdemo.dat file included in the Recital distributions for Linux and UNIX has three associated index keys in the cisamdemo.idx file:

Select area: 1
Database in use: cisamdemo
Alias: cisamdemo
Number of records: 4
Current record: 2
File Type: CISAM (C-ISAM)
Master Index: [cisamdemo.idx key #1]
Key: DD+CONFIRM+PROCDATE+CONTROL
Type: Character
Len: 21   (Unique)
Index: [cisamdemo.idx key #2]
Key: DD+SUBSTR(CONFIRM,2,5)+TRADDATE+STR(DOLLARS,13,2) +CURRTRAN+ACCOUNT Type: Character Len: 42 Index: [cisamdemo.idx key #3] Key: DEALER+BRANCH+AFSREP+SUBSTR(PROCDATE,5,2) +SUBSTR(CONTROL,2,4) Type: Character Len: 28

The Recital C-ISAM bridge makes full use of the C-ISAM indexes.  SQL SELECT statements with WHERE clauses are optimized based on any of the existing indexes when possible.  The following ODBC SELECT call makes use of key #3 rather than sequentially searching through the data file.

SQLExecDirect:
  In:      hstmt = 0x00761BE8,
    szSqlStr = "select * from cisamdemo
      where dealer+branch+afsrep=' 00161   595-7912",
      cbSqlStr = -3
  Return:  SQL_SUCCESS=0

Get Data All:

"DD", "CONFIRM", "PROCDATE", "CONTROL", "DOLLARS", "DEALER", 
"TERRITORY", "WOREP", "CURRTRAN", "TRADDATE", "CITY", "ACCOUNT", 
"PRETRAN", "AFSREP", "REPKEY", "BRANCH", "WODEALER", "BANKCODE", 
"COMMRATE", "NEWREP", "SETTLE", "POSTDATE"

"0159", " 15522", "930312", "13356", 4992.60, "00161", "19", 
"", "210", "930305", "", "70000100009", "", "595-7912", 
"930315791", "", "", "59", 0.0000, "1", "", "930315"
1 row fetched from 22 columns.

Using the Recital/4GL, the primary index is set as the master index when the bridge is first opened.  Any secondary indexes can be selected using the SET ORDER TO <expN> command.  The Recital/4GL SEEK or FIND commands and SEEK() function can be used to search in the current master index.

> SET ORDER TO 3
Master index: [cisamdemo.idx key #3]
> SEEK “00161   595-7912”

Appendix 1: Data Types

Informix

Recital

Byte

Numeric

Char

Character

Character

Character

Date

Date

Datetime

Character

Decimal

Numeric

Double Precision

Float

Float

Real

16 Bit Integer

Short

Integer

Numeric

Interval

Character

32 Bit Long

Integer

Money

Numeric

Numeric

Numeric

Real

Numeric

Smallfloat

Numeric

Smallint

Numeric

Text

Unsupported

Varchar

Character

Appendix 2: C-ISAM RDD Error Messages

The following errors relate to the use of the Recital CISAM Replaceable Database Driver (RDD).  They can be received as an ‘errno <expN>’ on Recital error messages:


ERRNO()

Error Description

100

Duplicate record

101

File not open

102

Invalid argument

103

Invalid key description

104

Out of file descriptors

105

Invalid ISAM file format

106

Exclusive lock required

107

Record claimed by another user

108

Key already exists

109

Primary key may not be used

110

Beginning or end of file reached

111

No match was found

112

There is no “current” established

113

Entire file locked by another user

114

File name too long

115

Cannot create lock file

116

Memory allocation request failed

117

Bad custom collating

118

Duplicate primary key allowed

119

Invalid transaction identifier

120

Exclusively locked in a transaction

121

Internal error in journaling

122

Object not locked

Published in Blogs
Read more...
There is a good article here this describes agile software development techniques. This is what we have always been doing but it's nice to see it defined formally.

We use this technique ourselves on our development portal.
Published in Blogs
Read more...
Each Recital table can have one or more data dictionaries to provide a central repository for constraints and other metadata. 

Here's how to set up field validation based on dynamic values from another table.

Using the products.dbf table from the southwind sample database, validation can be added to the categoryid field to ensure it matches an existing categoryid from the categories.dbf table.
open database southwind
alter table products add constraint;
(categoryid set check rlookup(products.categoryid,categories))
The rlookup() function checks whether an expression exists in the index (master or specified) of the specified table .  An attempt to update categoryid with a value not in the list will give an error: Validation on field 'CATEGORYID' failed.

If you have access to the Recital Workbench, you can use the modify structure worksurface to add and alter your dictionary entries, including a customized error message if required.

validation


Published in Blogs
Read more...

If you want details about how storage devices are performing on Redhat/Centos/Fedora use the vmstat and iostat commands.

After installing Centos 5.3 the iostat command is not available. To install it use yum:

# yum install sysstat
Published in Blogs
Read more...

This article talks about the log files available in Recital products and how to enable logging when required.

Overview

When discussing a problem with the Recital Support Team, one of the most common requests is that you enable logging and send them the log files produced. Log files along with error files are designed to provide detailed information about Recital processes and the prevailing environment and can be a fast-track to resolving a problem.

Log Files

There are three main types of log file:

  1. System Log
  2. Client/Server Communication Logs
  3. Custom Logs

System Log

The System log is a system-wide  all product log.  It tracks all login and logout operations from either Recital or the Recital Server. Logout details include the exit code: 0 for an error-free, 'normal' exit and the error number and message when an error has occurred. It also shows the licenses that have been loaded and any license error codes and messages. The system log filename is recital.log.
 

Client/Server Communication Logs

The Client/Server communication logs track the requests and responses between the Recital Server and its clients. The log files are as follows:


Filename Type Description

dbserver.log

System-wide

The Recital Server startup log. This logs any problems with the Recital Server startup.

port.log

System-wide

The port listener log. The port listener (or portserver) listens on port 8001 for client connection requests and spawns the appropriate server process.

net.log

Connection

The netserver log. The netserver is the Recital Server database and 4GL engine.

rsi.log

Connection

The Recital Server Interface (RSI) Gateway log. This logs communication with the Database Gateways to SQL databases.

rec.log

Connection

The Recital Database Gateway log. The Recital Database Gateway (or recserver) is the SQL database engine for Recital Gateway data access.

mys.log

Connection

The MySQL Database Gateway log.

ora.log

Connection

The Oracle Database Gateway log.

inf.log

Connection

The Informix Database Gateway log.

ing.log

Connection

The Ingres Database Gateway log.

pos.log

Connection

The PostgreSQL Database Gateway log.

jdb.log

Connection

The JDBC Driver Database Gateway log.


Custom Logs

The Recital/4GL USERLOG() function can be used to log information to a user-specific log file for debugging or audit trail purposes. For full information on this function, please see the USERLOG() documentation.

Enabling Log Files

For instructions on enabling log files for individual products, please follow these links:

Enabling Log Files: Recital Server for Windows

To enable the system log file for the Recital Universal Application Server for Windows, include the following command in the UAS\config.db file:

set syslogging on

The Recital Server Manager System Logging tab allows for the viewing and resetting of the System log.

Section

Item

Description

System Logging

DateTime

Date and time stamp of the action.

Name

Login name used by connection

Action

Action logged: Login, Logoff, Errot

Details

Details of action

Buttons

Purge

Allows the log file to be reset

Refresh

Refreshes the display

To set up Client/Server logging, use the Recital Server Manager Settings tab to update the server's Registry entries:

The following Log file settings can be configured:

Item

Description

Log files Directory Path

Enter the directory in which log files will be created. The default is the UAS\log directory.

Enabled

Check to enable log file creation.

Versions

Check to enable log file versioning.

Listener

Click to view the current port listener log file

Server

Click to view the current netserver log file

Purge

Click to purge all log files

Enabling Log Files: Recital Server for Linux

To enable the system log file for the Recital Server for Linux, include the following command in the conf/config.db file:

set syslogging on

To set up Client/Server logging, the Recital Server can be started with the 'logging' parameter, in which case, all relevant logging will take place.

# service startup logging<

Alternatively, one or more of the following environment variables can be added to the dbserver.conf file or set at the Operating System prompt.  The Recital Server must be restarted before environment variable changes will be recognized.  Each environment variable should be set to the name of a log file.

Environment Variable

Logs Activity of...

UASLOG_PORT

Port Server (db_rsiserver)

UASLOG_NET

(Net) Server (db_netserver)

UASLOG_ORA

Oracle Server (db_oraserver)

UASLOG_INF

Informix Server (db_infserver)

UASLOG_ING

Ingres Server (db_ingserver)

UASLOG_JDB

JDBC Server (db_jdbserver)

UASLOG_REC

Recital Server (db_recserver)

Extract from recital.conf:

UASLOG_PORT="port.log" ; export UASLOG_PORT
UASLOG_NET="net.log"   ; export UASLOG_NET
UASLOG_ORA="ora.log"  ; export UASLOG_ORA
UASLOG_INF="inf.log"     ; export UASLOG_INF
UASLOG_ING="ing.log"   ; export UASLOG_ING
UASLOG_JDB="jdb.log"   ; export UASLOG_JDB
UASLOG_REC="rec.log"   ; export UASLOG_REC
DB_LOGDIR

If the environment variable DB_LOGDIR is set to an existing directory, all log files will be written to this directory.  If not, the log files will be created in the bin directory.

DB_LOGDIR is set in the conf/recital.conf file. By default it is set to the log directory:

DB_LOGDIR=${ROI_ROOT}log/           ; export DB_LOGDIR
DB_LOGVER

If the environment variable DB_LOGVER is greater than 0, version numbers are added to the file names.  For example, the activity of the first Net Server process will be logged to net.log, the second to net001.log, the third to net002.log etc. up to the maximum value of DB_LOGVER.

DB_LOGVER is set in the conf/recital.conf file:

DB_LOGVER=10; export DB_LOGVER

Enabling Log Files: Recital Server for UNIX

To enable the system log file for the Recital Server for UNIX, include the following command in the conf/config.db file:

set syslogging on

To set up Client/Server logging, the Recital Server can be started with the 'logging' parameter, in which case, all relevant logging will take place.

# service startup logging

Alternatively, one or more of the following environment variables can be added to the <em>dbserver.conf</em> file or set at the Operating System prompt.  The Recital Server must be restarted before environment variable changes will be recognized.  Each environment variable should be set to the name of a log file.

Environment Variable

Logs Activity of...

UASLOG_PORT

Port Server (db_rsiserver)

UASLOG_NET

(Net) Server (db_netserver)

UASLOG_ORA

Oracle Server (db_oraserver)

UASLOG_INF

Informix Server (db_infserver)

UASLOG_ING

Ingres Server (db_ingserver)

UASLOG_JDB

JDBC Server (db_jdbserver)

UASLOG_REC

Recital Server (db_recserver)

Extract from recital.conf:

UASLOG_PORT="port.log" ; export UASLOG_PORT
UASLOG_NET="net.log"   ; export UASLOG_NET
UASLOG_ORA="ora.log"  ; export UASLOG_ORA
UASLOG_INF="inf.log"     ; export UASLOG_INF
UASLOG_ING="ing.log"   ; export UASLOG_ING
UASLOG_JDB="jdb.log"   ; export UASLOG_JDB
UASLOG_REC="rec.log"   ; export UASLOG_REC
DB_LOGDIR

If the environment variable DB_LOGDIR is set to an existing directory, all log files will be written to this directory.  If not, the log files will be created in the bin directory.

DB_LOGDIR is set in the conf/recital.conf file. By default it is set to the log directory:

DB_LOGDIR=${DB_ROOT}log/           ; export DB_LOGDIR
DB_LOGVER

If the environment variable DB_LOGVER is greater than 0, version numbers are added to the file names.  For example, the activity of the first Net Server process will be logged to net.log, the second to net001.log, the third to net002.log etc. up to the maximum value of DB_LOGVER.

DB_LOGVER is set in the conf/recital.conf file:

DB_LOGVER=10; export DB_LOGVER

Enabling Log Files: Recital Universal Application Server for OpenVMS

To enable the system log file for the Recital Universal Application Server for OpenVMS, include the following command in the db_uas:config.db file:

set syslogging on

To set up Client/Server logging, one or more of the following symbols can be added to the <em>db_uas:login.com</em> file.  The Recital Server must be restarted before symbol changes will be recognized.  Each symbol should be set to the name of a log file.

Symbol

Logs Activity of…

UASLOG_PORT

Port Server (db_rsiserver)

UASLOG_NET

(Net) Server (db_netserver)

UASLOG_ORA

Oracle Server (db_oraserver)

UASLOG_INF

Informix Server (db_infserver)

UASLOG_ING

Ingres Server (db_ingserver)

UASLOG_JDB

JDBC Server (db_jdbserver)

UASLOG_REC

Recital Server (db_recserver)

Extract from db_uas:login.com

$ uaslog_port :==  port.log
$ uaslog_net  :==  net.log
$ uaslog_ora  :==  ora.log
$ uaslog_inf  :==  inf.log
$ uaslog_ing  :==  ing.log
$ uaslog_jdb  :==  jdb.log
$ uaslog_rec  :==  rec.log
DB_LOGDIR

If the symbol DB_LOGDIR is set to an existing directory, all log files will be written to this directory.  If not, the log files will be created in the UAS directory.

DB_LOGDIR is set in the db_uas:login.com file. By default it is set to the UAS.log] directory:

$db_logdir    :== 'db_root'.log]               ! system logging directory
DB_LOGVER

If the symbol DB_LOGVER is enabled, version numbers are added to the file names. For example, the activity of the first Net Server process will be logged to net.log, the second to net001.log, the third to net002.log etc.

DB_LOGVER is set in the db_uas:login.com file:

$db_logver  :== true                           ! enable multiple log files

Enabling Log Files: Recital for Linux

To enable the system log file for Recital for Linux, include the following command in the conf/config.db file:

set syslogging on

Enabling Log Files: Recital for UNIX

To enable the system log file for Recital for UNIX, include the following command in the conf/config.db file:

set syslogging on

Enabling Log Files: Recital for OpenVMS

To enable the system log file for Recital for OpenVMS, include the following command in the db_ovd:config.db file:

set syslogging on

In Brief

  • Log files provide important information to aid problem resolution, but they are also an overhead, so logging should only be enabled when required, not in normal production operation.
  • The System log provides a system-wide view of logins, exits and error codes.
  • The System log can be viewed in table format via the SYSLOGGING System Table.
  • The System log is enabled using the SET SYSLOGGING ON Recital/4GL command in the conf/config.db file.
  • Client/Server logs provide detailed information on client/server requests and responses.
  • Client/Server logs are enabled using environment variables, symbols or Registry entries or by specifying the 'logging' parameter when starting the Recital Server.
  • The location of log files is determined by the DB_LOGDIR setting.
  • Versioning of log files is determined by the DB_LOGVER setting.
Published in Blogs
Read more...
Dave Michelle at ITPRO writes a good review of the DS3400 San here.
Published in Blogs
Read more...
Found a nice subversion plugin for finder on the MAC.

The goal of the SCPlugin project is to integrate Subversion into the Mac OS X Finder. 

  • Support for Subversion.
  • Access to commonly used source control operations via contextual menu [screenshot]
  • Dynamic icon badging for files under version control. Shows the status of your files visually. [ screenshot ]
Published in Blogs
Read more...
Recital 10 enhances the way updating tables with indexes is done. The Recital engine will now evaluate each index individually to determine if any changes being made to the row effect it. If this is not the case then the index is flagged not to be updated. This enhancement helps speed up performance of updates and is particularly noticeable in cluster/network installations.
Published in Blogs
Read more...
And apparently IE9 will support rounded corners.
http://kbala.com/ie-9-supports-corner-radius/
Published in Blogs
Read more...
Subclipse is an Eclipse Team Provider plug-in providing support for Subversion within the Eclipse IDE. This plugin is required in order to use the recital eclipse workspace.
Published in Blogs
Read more...

Copyright © 2025 Recital Software Inc.

Login

Register

User Registration
or Cancel