Simba Technologies
Simba Technologies

SimbaEngine X SDK 10.1.17
SimbaClient/Server Developer Guide

SimbaClient/Server Architecture

The architecture of a complete Simba Client/Server solution is very similar to that of a stand-alone driver. All of the same functionality is present, with the addition of the client/server functionality that transports the DSI functionality across the network. The following diagram compares the stand-alone Simba SQL Engine ODBC driver and an equivalent client/server solution:

Stack comparison of standalone and client server architecture

The ODBC application and the driver manager are the same in both ODBC stacks.


There is only one driver manager in the Simba Client ODBC stack. Some ODBC client architectures have two driver managers in the stack, which introduces the problem of keeping them synchronized.

The top end of SimbaClient for ODBC uses the same SimbaODBC components as the top end of the stand-alone driver. As a result, their response to ODBC function calls is the same.

The section of code that connects the ODBC functionality to the DSI API is the only place where the two stacks differ:

  • In the stand-alone driver, the SimbaODBC layer connects directly to the DSI API.
  • In the client/server stack, the client/server connection mechanism connects the SimbaODBC code to the DSI API.

The ODBC client component and the server component handle the network communication, effectively projecting the DSI API across the network.

SimbaClient/Server Deployment Options

SimbaClient/Server is a collection of smaller components that allow remote access to your data store. SimbaServer is most frequently used as a stand-alone executable, although it can be set up as a DLL or shared object under another server. You must link SimbaServer to a DSI implementation in order to create an executable. The DSI implementation can include Simba SQLEngine or not, and it can be written to perform a wide range of functionality including SQL query processing with Simba SQLEngine, concentrating client requests through one executable, aggregating data stores, or controlling data access through role-based permissions. Likewise, a SimbaServer written in Java should include the JNI Server. There are many possibilities for using SimbaServer as an intermediate processing step in a larger system.

Running SimbaClient and SimbaServer

When you start up your linked SimbaServer, it binds to a configurable port on your server machine and listens for connection requests from SimbaClientt drivers. Since all SimbaClient drivers use the same protocol, they are all handled in the same way by SimbaServer. When a SimbaClient driver finds SimbaServer, it requests a connection. With a successful connection, the SimbaClient and SimbaServer begin a conversation using the SimbaClient/Serverr protocol. This is a layered protocol designed for clients making remote data queries and optimized for transmitting the result sets back to the client. It is independent of the standard interface used by the user application.

SimbaServer is designed to optimize use of shared server resources, while SimbaClientis designed to optimize the responsiveness of the application to give the best experience to the user. The protocol parameters are configurable in case the default parameters do not provide the best performance for your circumstances.

Reusing your DSI Implementation

One of the important design features of SimbaServer is that it links downward to exactly the same DSI implementation as SimbaODBC, which enables it to serve as a simpler development environment than SimbaServer. This means that you can first develop and test your DSI implementation as a local stand-alone ODBC driver using SimbaODBC. This is a simpler initial environment than developing using SimbaServer. When your new DSI implementation is performing to your satisfaction, you can link it to SimbaServer and begin testing it in a remote way. If you know the state of the logic and performance of the DSI implementation before introducing client/server, you can reduce your investigation time and debugging costs.

SimbaEngine contains a SimbaClient for ODBC and a SimbaClient for JDBC that provide direct access to SimbaServer.

SimbaClient for ODBC

SimbaClient for ODBC is an ODBC driver DLL or shared object that can connect to SimbaServer. It includes SimbaODBC and a DSI implementation that communicates via the Simba Client/Server protocol to SimbaServer. Since any SQLEngine in the stack will be on the server side, there is no need for Simba SQLEngine in this driver. This is a completely generic ODBC driver that, when queried, reports the capabilities of the database that is connected to SimbaServer.

You do not need to modify the ODBC driver.

SimbaClient for JDBC

SimbaClient for JDBC is a JDBC driver packaged as a Jar file so you can install it in an end user’s client-side Java Run Time Environment. SimbaClient for JDBC includes the equivalent of SimbaODBC and custom Java code that communicates via the Simba Client/Server protocol with SimbaServer.

You do not need to modify the JDBC driver.


Related Links

Introducing Simba Client/Server

Working with Simba Client/Server