Skip to content

Latest commit

 

History

History
98 lines (79 loc) · 3.35 KB

File metadata and controls

98 lines (79 loc) · 3.35 KB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Project Overview

SQLBridge v2 is a Spring Boot-based REST API service written in Groovy that acts as a database connectivity bridge. It provides configurable endpoints for executing SQL queries against multiple database systems using XML-based configuration.

Build and Development Commands

Run Development Server

./gradlew bootRun

Build JAR

./gradlew bootJar  # Creates sqlbridge.jar in build/libs/

Run Tests

./gradlew test

Clean Build

./gradlew clean build

Key Architecture Components

Configuration System

  • Main Config: conf/sqlbridge-config.xml - Defines database actions, SQL scripts, and JNDI mappings
  • DataSources: conf/sqlbridge-datasource.properties and conf/local-sqlbridge-datasource.properties - Database connection configurations
  • Hot Reload: ConfigXml.groovy supports configuration reloading (currently disabled via commented scheduler)

REST API Endpoints

Primary controller: DataLinkRestController.groovy

  • GET /sqlbridge/dataconnect/selectAction - Execute select queries with XML response
  • GET /sqlbridge/dataconnect/jsonAction - Execute queries with JSON response
  • POST /sqlbridge/dataconnect/xmlPostAction - Handle XML POST requests

Database Layer

  • DatabaseService.groovy: Manages multiple DataSource connections with HikariCP pooling
  • MultiDataSourceConfig.groovy: Handles multiple database configurations
  • Supports: SQL Server (with integrated auth), Oracle, IBM iSeries DB2, HSQLDB, CSV JDBC

Request Processing Flow

  1. Request parameters evaluated by key script (from XML config)
  2. JNDI name resolved to select appropriate database
  3. SQL script evaluated with request parameters using Groovy templating
  4. Query executed against selected database
  5. Results formatted (XML/JSON/tab-separated) and returned

Important Implementation Details

Groovy SQL Pattern

The codebase uses Groovy SQL for database operations. Example pattern:

sql.eachRow(sqlQuery) { row ->
    // Process row
}

XML Configuration Structure

Actions in sqlbridge-config.xml follow this pattern:

<actions>
    <action name="actionName">
        <key>// Groovy script to evaluate key</key>
        <script>// SQL query with ${param} placeholders</script>
        <jndi>DataSourceName</jndi>
    </action>
</actions>

Logging

  • Application logs to logs/sqlbridge.log with rotation
  • Request/response logging configured in application.properties
  • Use SLF4J logger: log.info(), log.error(), etc.

Static Web Resources

To serve additional web applications (e.g., visposteringer):

  • Place files under /webapps in project root
  • Access via http://localhost:8080/{app-name}/
  • Enable by uncommenting in application.properties: spring.web.resources.static-locations=file:/webapps

Database Connection Management

  • Connection pooling via HikariCP
  • Dynamic DataSource selection based on request parameters
  • Integrated Windows authentication support for SQL Server
  • Connection properties defined in conf/*-datasource.properties

Testing Approach

  • Spring Boot test framework with JUnit 5
  • Test classes in src/test/groovy/
  • Use @SpringBootTest for integration tests
  • Mock database connections with HSQLDB for unit tests