(c) 2026 Software Tree, LLC
1999 S. Bascom Avenue, Suite 700
Campbell, CA 95008
USA
https://www.softwaretree.com
----------------------------

                          Gilhari(r)
                       Version 0.8 (beta)

                         Release Notes 
                         -------------

                        (July 13, 2026)


Gilhari is a RESTful microservice framework for persisting JSON objects in relational databases.

The Gilhari SDK includes a detailed introduction, API documentation, as well as some sample apps using Gilhari.

Please read Gilhari_README.pdf to get started with using Gilhari.

You may also find the Gilhari API details in POSTMAN documentation at https://www.postman.com/dperiwalst/gilhari-workspace/collection/acn1jou/gilhari-rest-api

To pull the Docker image of Gilhari from dockerhub, you would need a Docker ID. If you don’t have a Docker ID, you may easily get one by signing up at https://app.docker.com/signup


Changes since the release on January 8, 2020:
---------------------------------------------

- Added handling of NCLOB column types

- Added a custom metadata mapping file for SAP HANA config\dxMetadata_saphana.jdx (CLOB data type for jdxMetaInfo attribute)

- Fixed: type coercion errors on JSON-originated numeric and date/time inserts

- Fixed: SQL string literals escaping

- Improved: RDBMS_GENERATED now exposed in object model summary.

- Fixed: UUID columns on PostgreSQL/CockroachDB — database-generated UUID primary keys now supported. 

- Updated to a newer version (05.16) of JDX that has fixes for CockroachDB detailed below.

- Fixed: UUID columns on PostgreSQL/CockroachDB. Tables with a native uuid column.

- Fixed: CockroachDB connection failure. Connecting to CockroachDB could fail immediately with a transaction-isolation error before any table access occurred. Resolved.

- All example directories have been updated with the following enhancements/fixes:
  .js → .json rename for classnames_map files,
   bin directory creation in compile.cmd and compile.sh,
   CRLF → LF line endings in .sh files,
   Executable bit restored on .sh files

- Includes a newer version (05.14) of JDX that has fixes for proper conversion of JSON String values 
  to SQL values for TIMESTAMP/DATE/TIME column types

- The Gilhari SDK is now also offered a tar.gz format for Linux/Mac (preserves executable bit on .sh files) users

- Updated to a newer version (05.12) of JDX that has preliminary support for MariaDB, YugaByte, Spanner, Databricks, and SAP Hana databases.
  Also support for database columns of National character string types NCHAR, NVARCHAR, LONGNVARCHAR, and NCLOB.

- Includes a newer version (05.11) of JDX that has preliminary support for more kinds of databases.

- Includes a newer version (05.09) of JDX that has fixes for properly handling schema names in the JDX_DATABAE specification
  and improved printing of JSON objects by JDXDemo.

- Added a new version of JDX that has fixes for properly creating a nested JSON object with 1-many-many relationships 
  and for inserting a non-decimal value into a Decimal or Numeric SQL column.

- Added an example directory gilhari_ecommerce_example showcasing a complete e-commerce microservice built with Gilhari.

- Apdated README.md files in all the example directories with more detailed information.

- Added the option of specifying 'gilhari_microservice_name' in the Gilhari configuration (gilhari_service.config) file.

- Start using softwaretree/gilhari image in all the example directories.

- Added an example directory gilhari_onetomany_example showcasing use of Gilhari with an object model having a one-to-many (BYREFERENCE) relationship between a Department and an Employee class.

- Added support for health/check endpoint to get the health status of the Gilhari microservice and its uptime.

- Made sqlite-jdbc-3.50.3.0.jar as the default JDBC driver for Gilhari.

- Added support for parsing operationDetails from query URLs in the GET REST call (for query, startStream, fetchMore, getObjectById, and access methods) and passing those details in the downstream JDX calls through JDXNode.

- Added operationDetailsDoc.pdf in the docs directory to explain the purpose of operationDetails and how to use them.

- Added some curl commands to exemplify the usage of operationDetails.

- Updated curlCommandsPopulate.sh scripts in various example directories.

- Updated README.md file for the JDX_ReverseEngineeringJSONExample example directory.

- Added JDX_DATABASE_JDBC_DRIVER_Specification_Guide.md and JDX_DATABASE_JDBC_DRIVER_Specification_Guide.html files to help in specifying database urls and JDBC drivers in the mapping (.jdx) files.

- Changed README.txt files to README.md files in all the example directories.

- Added support for getObjectModelSummary/now endpoint for GET operation to return a summary of the information about the underlying object model, such as classes (types), attributes, primary keys, relationships, etc. May be helpful to a client application like an AI LLM to generate proper API calls. 

- Added support and documentation for object caching.

- Packaged a new Postgres driver (postgresql-42.7.5.jar) in the SDK.

- Upgraded to a new JSON library (json-20240303.jar).

- Updated the Gilhari_README file with some details about the sample Gilhari microservices directories.

- Added an example directory (gilhari_relationships_implicit_attribs_example) to demonstrate support for a one-to-one relationship using the implicit attribute feature of JDX ORM such that an attribute of a referenced (contained) object is implicitly initialized by the ORM using a foreign key value derived from the referencing (containing) object. 

- Added an example directory (gilhari_relationships_inline_attribs_example) to demonstrate support for a one-to-one relationship using the INLINE mapping feature of JDX ORM, which provides the flexibility of optionally storing the attribute values of a contained (referenced) object in the same database table as the one used for storing the attribute values of the containing (referencing) object.

- Allow more complex JDBC URLs for cloud databases. 

- Added the exported file of the Postman collection (Gilhari REST API.postman_collection.json) of Gilhari Rest API in the docs directory so that you may easily access it by importing it in your Postman instance.

- Modified compiler scripts to target JDK 1.8 when compiling container classes.

- Enhanced documentation with more tips on using JDBC drivers and the database URLs.

- Enhanced the Gilhari_README file to give more details on the reverse-engineering feature and process to use existing dtabase schema and data.

- Added an example directory (JDX_ReverseEngineeringJSONExample) to demonstrate reverse engineering of an existing relational schema for a JSON object data model. You can use this example to get a jump start on using Gilhari for your legacy data in a relational database.

- Upgraded the lower level infrastructure stack

- Use JDBC driver compatible with JDK 1.8

- Added support for streaming queries by introducing startStream, fetchMore, and closeStream directives (keywords) in the GET URIs.

- Added a new example directory gilhari_streaming_example to show how the streaming queries can be used with Gilhari.

- Updated README file to explain streaming queries.

- Added support for handling some operational directives (like "projections", "ignore", "follow", and "filters") for fine-tuning the REST API calls. These directives that are specified in the body of a request can help in refining the shape of the target JSON objects. Potentially useful in implementing GraphQL Queries and Mutations.
  
- Updated infrastructure modules (ubuntu, node, openjdk)

- Improved documentation.

- Added documentation for using existing schema (and data) in legacy relational databases.

- Added an example directory to show the support of many-to-many relationship functionality in the object model.

- Improved exception handling and reporting.

- Improved Gilhari_README.pdf.

- Changed /jdx/ to /gilhari/ in the REST URLs.

- Changed the product name from RJPS to Gilhari.

Changes since the release on November 21, 2019:
-----------------------------------------------

- Improved README files in various example directories.

- Added more curl commands and scripts in the example directories.

Changes since the release on October 26, 2019:
----------------------------------------------

- Change "RJPS microservice listening at http://localhost:::" to 
  "RJPS microservice listening at http://localhost:8081".
  Also, to avoid any confusion, add a note saying that the port number may be mapped
  to another number for accessing the service from outside of Docker.

- Added an example directory to show the autoincrement functionality such that
  the database automatically generates a unique id value for a new JSON object.

- Show an error message for a DROP TABLE failure during the database schema creation
  only if debug level is 0.

- Added shell script files corresponding to the Windows .cmd files in the example directories.

- Added some curl commands to quickly check the response from the containerised app.

- Added libs and external_libs directories to support compilation of model files.

- Changed classes.txt files to contain only the relative paths to the source (.java) files.

Suggestions for fixing some common problems:
--------------------------------------------

- Database connection errors:
  These errors happen mainly for the following reasons:
 
  Problem: The database server is not running.
  Solution: Start the database server (service).

  Problem: The database URL specified using the JDX_DATABASE tag in the ORM specification (.jdx) file is not correct.
  Solution: Please make sure that you are using the correct URI for your target database. Sometimes, the "localhost" specification would not work from inside a container; you have to specify the IP address of the system where your database is running.

  Problem: The database credentials (name/password) are not correct.
  Solution: Fix them under the JDX_DATABASE tag in the ORM specification (.jdx) file. You may also override the credentials in the Gilhari service configuration (e.g. gilhari_service.config) file.

  Problem: Correct JDBC driver not found.
  Solutions: 
  1: Please make sure that the JDBC URL is correct in the JDX_DATABASE tag in the ORM specification (.jdx) file. 
  2: Please make sure that the correct JDBC driver name corresponding to your database has been specified in the JDBC_DRIVER tag in the ORM specification (.jdx) file.
  3: Please make sure that your JDBC driver (.jar) file is added in your app specific Gilhari image (check your Dockerfile) and that "jdbc_driver_path" property is set to that path in Gilhari service configuration (e.g. gilhari_service.config) file.

  Problem: The database connection errors persist even after making the changes to the ORM specification and/or the Gilhari service configuration files.
  Solution: Don't forget to update the Docker image of your app with these changes by rebuilding the image. Also, remove the old containers which might be blocking some communication ports.













