Skip to content

Eclipse Daanse Probe Application โ€‹

What is Eclipse Daanse Probe? โ€‹

Eclipse Daanse Probe is a rapid development and testing platform for OLAP (Online Analytical Processing) catalogs and multidimensional data analysis. It's designed as the perfect tool for:

  • ๐Ÿš€ Fast Catalog Development: Quickly create, test, and iterate OLAP catalog designs
  • ๐ŸŽญ Mock Data Creation: Build realistic test scenarios with CSV-based data simulation
  • ๐Ÿ“š OLAP Learning: Comprehensive tutorial collection for mastering multidimensional analysis concepts
  • ๐Ÿ”ง Prototyping: Rapid prototyping of business intelligence solutions

Full OLAP Analysis Server โ€‹

Probe is not just a development toolโ€”it's a complete OLAP analysis server that implements the full Eclipse Daanse server stack:

XMLA Protocol Support โ€‹

  • โœ… Full XMLA Compatibility: Implements XML for Analysis (XMLA) web services
  • ๐Ÿ“Š Excel Integration: Direct connectivity with Microsoft Excel pivot tables
  • ๐Ÿ”— BI Tool Support: Compatible with any XMLA-capable business intelligence tool

Excel Connection โ€‹

Connect Microsoft Excel directly to your Probe server:

  1. Open Excel โ†’ Data โ†’ Get Data โ†’ From Other Sources โ†’ From Analysis Services
  2. Use Excel's Analysis Services connector with endpoint: http://localhost:8080/xmla
  3. Or use OLEDB - Connection String: Provider=MSOLAP;Data Source=http://localhost:8080/xmla

Enterprise-Grade Features โ€‹

  • Multidimensional Queries: Full MDX (Multidimensional Expressions) query support
  • Cube Operations: Drill-down, slice, dice, and pivot operations
  • Calculated Members: Dynamic measure and dimension calculations
  • Security: Role-based access control and data security
  • Caching: Intelligent query result caching for performance

Development-Focused Design โ€‹

Live Catalog Reloading โ€‹

  • ๐Ÿ”„ Hot Reload: Modify catalogs and data files while the server is running
  • ๐Ÿ“ File Watching: Automatic detection of catalog changes
  • โšก Instant Feedback: See changes immediately without restarts

Tutorial-Rich Environment โ€‹

Daanse Server Tutorials ships with 80+ tutorial scenarios covering:

  • Basic cube and dimension modeling
  • Advanced aggregation strategies
  • Parent-child hierarchies and time dimensions
  • Security and access control patterns
  • KPI and calculated member examples
  • Virtual cubes and writeback functionality

Download the Full Tutorial Pack or Learn in our Tutorials Online

Features โ€‹

  • OLAP Analytics Server: Full-featured multidimensional analysis capabilities
  • Tutorial Datasets: Extensive collection of educational examples including:
    • Access control tutorials (catalog, column, cube, dimension, hierarchy, member, table)
    • Aggregation examples (aggregate tables, exclusions)
    • Calculated members and KPI definitions
    • Drill-through actions and data exploration
    • Parent-child hierarchies and time dimensions
    • Virtual cubes and writeback functionality
  • Security: Runs as non-root user (UID/GID 1000)
  • Logging: Configurable logging with logback
  • Data Catalogs: Support for XMI catalog mappings and CSV data files

Running the Probe Server โ€‹

Eclipse Daanse Probe can be run in multiple ways depending on your needs and environment.

Container-Based Execution โ€‹

Use containers for production deployments, isolated environments, and easy distribution.

Quick Start with Containers โ€‹

bash
# Docker
docker run --name probe \
  --userns=keep-id \
  -v ~/temp/probe/catalog:/app/catalog/:rw,Z \
  -v ~/temp/probe/output:/app/output/:rw,Z \
  -p 8095:8080 \
  -it eclipsedaanse/probe:snapshot
Container Parameters Explained โ€‹
  • --name probe: Container name
  • -v ~/temp/probe/catalog:/app/catalog/:rw,Z: Mount local catalog directory ( read-write with SELinux context)
  • -v ~/temp/probe/output:/app/output/:rw,Z mount the output folder e.g. for documnetation
  • -p 8095:8080: Map host port 8095 to container port 8080
  • -d: Run in detached mode
  • eclipsedaanse/probe:snapshot: Container image

Docker Compose โ€‹

Use Docker Compose for multi-service setups with databases, reverse proxies, and monitoring:

yaml
version: '3.8'

services:
  probe:
    image: eclipsedaanse/probe:snapshot
    container_name: daanse-probe
    ports:
      - "8095:8080"
    volumes:
      - type: bind
        source: ~/temp/probe/catalog
        target: /app/catalog/
        bind:
          selinux: Z
      - type: bind
        source: ~/temp/probe/output
        target: /app/output/
        bind:
          selinux: Z
      - type: bind
        source: ./logs
        target: /app/log/
        bind:
          selinux: Z
    networks:
      - daanse-network
    user: "1000:1000"

networks:
  daanse-network:
    driver: bridge
    name: daanse-network

Start services

text
docker-compose -f compose/docker-compose.yml up -d

Directory Structure โ€‹

text
/app/
โ”œโ”€โ”€ daanse.probe.jar          # Main application JAR
โ”œโ”€โ”€ start                     # Startup script
โ”œโ”€โ”€ logback.xml              # Logging configuration
โ”œโ”€โ”€ catalog/                 # Data catalogs and mappings
โ”‚   โ”œโ”€โ”€ */data/             # CSV data files
โ”‚   โ””โ”€โ”€ */mapping/          # XMI catalog definitions
โ”œโ”€โ”€ output/                 # Output folder e.g.documentation
โ””โ”€โ”€ log/                    # Application logs

Catalog Folder Structure โ€‹

The /app/catalog/ directory is the core of the Eclipse Daanse Probe system. It contains OLAP catalogs that define multidimensional data models and their associated data files.

Catalog Organization โ€‹

Each catalog is organized in its own subdirectory with the following structure:

text
catalog/
โ”œโ”€โ”€ my-catalog/                    # Catalog name (directory)
โ”‚   โ”œโ”€โ”€ mapping/
โ”‚   โ”‚   โ””โ”€โ”€ catalog.xmi           # XMI mapping definition
โ”‚   โ””โ”€โ”€ data/                     # Database simulation
โ”‚       โ”œโ”€โ”€ table1.csv            # Default schema tables
โ”‚       โ”œโ”€โ”€ table2.csv
โ”‚       โ””โ”€โ”€ schema1/              # Named schema
โ”‚           โ”œโ”€โ”€ table3.csv        # Tables in schema1
โ”‚           โ””โ”€โ”€ table4.csv

XMI Mapping Files โ€‹

The mapping/catalog.xmi file describes the OLAP model structure:

  • Cubes: Multidimensional data structures
  • Dimensions: Ways to slice and analyze data
  • Measures: Numeric values to be aggregated
  • Database Schema: Logical table and column definitions
  • Table Mappings: Relationships between logical and physical data

Data Files (CSV Format) โ€‹

The data/ folder simulates database tables using a special CSV format:

CSV File Structure โ€‹

csv
"Column1","Column2","Column3"      # Line 1: Header (column names)
VARCHAR,INTEGER,DECIMAL           # Line 2: Data types
"Value1",42,123.45               # Line 3+: Data rows
"Value2",84,246.90

Important: Line 2 contains the database column types, not data values.

Supported Data Types โ€‹

  • VARCHAR - String values
  • INTEGER - Whole numbers
  • DECIMAL - Decimal numbers
  • BIGINT - Large integers
  • BOOLEAN - True/false values
  • DATE - Date values
  • TIMESTAMP - Date and time values

Schema Organization โ€‹

  • Default Schema: CSV files directly in data/ folder
  • Named Schemas: CSV files in data/schema-name/ subfolders
  • Schema Names: Subfolder names become database schema names

Example: Minimal Cube Catalog โ€‹

Here's a complete example of the tutorial.cube.minimal catalog:

Directory Structure โ€‹

text
tutorial.cube.minimal/
โ”œโ”€โ”€ mapping/
โ”‚   โ””โ”€โ”€ catalog.xmi
โ””โ”€โ”€ data/
    โ””โ”€โ”€ Fact.csv

Mapping Definition (catalog.xmi) โ€‹

xml
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:roma="https://www.daanse.org/spec/org.eclipse.daanse.rolap.mapping">
  
  <!-- Catalog definition -->
  <roma:Catalog id="_catalog_minimal" name="Cube - Minimal" 
                cubes="_cube_minimal" dbschemas="_databaseSchema_minimal"/>
  
  <!-- Database schema with physical table -->
  <roma:DatabaseSchema id="_databaseSchema_minimal">
    <tables xsi:type="roma:PhysicalTable" id="_table_fact" name="Fact">
      <columns xsi:type="roma:PhysicalColumn" id="_column_fact_key" name="KEY"/>
      <columns xsi:type="roma:PhysicalColumn" id="_column_fact_value" name="VALUE" type="Integer"/>
    </tables>
  </roma:DatabaseSchema>
  
  <!-- Table query -->
  <roma:TableQuery id="_query_fact" table="_table_fact"/>
  
  <!-- Physical cube with measures -->
  <roma:PhysicalCube id="_cube_minimal" name="MinimalCube" query="_query_fact">
    <measureGroups>
      <measures xsi:type="roma:SumMeasure" id="_measure_sum" 
                name="Measure-Sum" column="_column_fact_value"/>
    </measureGroups>
  </roma:PhysicalCube>
</xmi:XMI>

Data File (data/Fact.csv) โ€‹

csv
"KEY","VALUE"
VARCHAR,INTEGER
A,42
B,21

This creates:

  • A cube named "MinimalCube"
  • A fact table "Fact" with KEY and VALUE columns
  • A sum measure aggregating the VALUE column
  • Two data rows with keys A/B and values 42/21

Schema Example โ€‹

For catalogs with multiple schemas like tutorial.database.schema:

text
tutorial.database.schema/
โ”œโ”€โ”€ mapping/
โ”‚   โ””โ”€โ”€ catalog.xmi
โ””โ”€โ”€ data/
    โ”œโ”€โ”€ theTable.csv              # Default schema
    โ”œโ”€โ”€ theschema/
    โ”‚   โ””โ”€โ”€ theTable.csv          # "theschema" schema
    โ””โ”€โ”€ nonref/
        โ””โ”€โ”€ theTable.csv          # "nonref" schema

Each subfolder (theschema, nonref) becomes a database schema containing the CSV files within it.

Creating Custom Catalogs โ€‹

To create your own catalog:

  1. Create the directory structure:

    bash
    mkdir -p my-catalog/{mapping,data}
  2. Define the XMI mapping in my-catalog/mapping/catalog.xmi

  3. Add CSV data files in my-catalog/data/

Runtime Catalog Management โ€‹

๐Ÿ”„ Important: The Eclipse Daanse Probe server provides live catalog monitoring and automatic reloading capabilities:

Dynamic Catalog Updates โ€‹

  • File Monitoring: The server continuously watches the /app/catalog/ directory and all subdirectories
  • Automatic Reloading: Any changes to catalog files trigger automatic reloading into the internal database
  • Hot Deployment: No container restart required for catalog updates

Supported Runtime Changes โ€‹

  • XMI Mapping Files: Modify catalog.xmi files to update cube definitions, measures, dimensions
  • CSV Data Files: Add, modify, or delete CSV files to update table data
  • New Catalogs: Add complete new catalog directories
  • Schema Changes: Create/modify schema folders and their contents
  • File Deletions: Remove catalogs or data files

Development Workflow โ€‹

  1. Mount catalog directory with write access (remove :ro flag for development):

    bash
    # Docker/Podman - Development mode
    podman run -v ~/temp/probe/catalog:/app/catalog/:Z -v ~/temp/probe/output:/app/output/:Z -p 8095:8080 eclipsedaanse/probe:snapshot
  2. Edit catalogs using any text editor or IDE

  3. Observe automatic reloading in the container logs:

    bash
    # Docker/Podman - Watch logs
    podman logs -f probe
    docker logs -f probe
    # Watch for catalog reload messages
  4. Verify Documentation - verify the docs in output/documentation folder

  5. Test changes immediately - no restart needed, connect via odc file in output/odc

Best Practices โ€‹

  • Backup Catalogs: Keep backup copies before making changes
  • Change Management: Use version control for catalog definitions
  • Performance Impact: Large catalog changes may cause temporary performance impact during reload
  • Consistent naming: Use descriptive catalog and table names
  • Schema organization: Group related tables in schemas
  • Data types: Match XMI column types with CSV type definitions
  • File encoding: Use UTF-8 encoding for international characters
  • Performance: Keep fact tables reasonably sized for tutorials
  • Development: Use writable mounts for development, read-only for production
  • Monitoring: Watch container logs for catalog reload confirmations

Usage โ€‹

XMLA Endpoint โ€‹

The Probe server exposes its XMLA (XML for Analysis) endpoint at:

Endpoint URL: http://localhost:8095/xmla

Connecting from Excel โ€‹

  1. Excel 2016+:

    • Data โ†’ Get Data โ†’ From Other Sources โ†’ From Analysis Services
    • Server: localhost:8095/xmla
    • Connection type: HTTP
    • Username: Any username (e.g., demo, testuser, or admin|role1|role2)
    • Password: Leave empty (no password required)
  2. Excel with OLEDB:

    • Data โ†’ Get Data โ†’ From Other Sources โ†’ From OLEDB
    • Connection string: Provider=MSOLAP;Data Source=http://localhost:8095/xmla;User ID=demo
    • Password: Leave empty
  3. Power BI Desktop:

    • Get Data โ†’ Analysis Services โ†’ Connect live
    • Server: localhost:8095/xmla
    • Username: Any username
    • Password: Leave empty

Connecting from Other BI Tools โ€‹

  • Tableau: Use "Microsoft Analysis Services" connector with localhost:8095/xmla
  • Power BI Service: Configure on-premises data gateway pointing to the XMLA endpoint
  • Custom Applications: Use any XMLA/OLEDB client library

Authentication & Role Testing โ€‹

Eclipse Daanse Probe uses a simplified authentication system designed for development and testing:

Basic Authentication โ€‹

  • Username: Any username (no validation required)
  • Password: Always leave empty (no password needed)
  • Purpose: Development-friendly authentication for quick testing

Role-Based Access Control Testing โ€‹

For testing catalog security and access control, you can specify roles directly in the username:

Username Format: username|role1|role2|role3|...

Examples โ€‹

  1. Basic User:

    text
    Username: demo
    Password: (empty)
    Result: Default access rights
  2. Single Role Testing:

    text
    Username: testuser|manager
    Password: (empty)  
    Result: Access with "manager" role permissions
  3. Multiple Roles Testing:

    text
    Username: admin|sales|finance|reporting
    Password: (empty)
    Result: Combined permissions from all specified roles

Role Testing Use Cases โ€‹

  • ๐Ÿ” Access Control Validation: Verify that cube and dimension security rules work correctly
  • ๐Ÿ‘ฅ Multi-Role Scenarios: Test users with multiple organizational roles
  • ๐Ÿงช Permission Testing: Validate that restricted data is properly filtered
  • ๐Ÿ“Š Catalog Security: Ensure tutorial catalogs demonstrate proper security patterns

Troubleshooting โ€‹

Common Issues โ€‹

  1. Port Already in Use

    bash
    # Use different host port (Docker/Podman)
    docker run -p 8096:8080 eclipsedaanse/probe:snapshot
    podman run -p 8096:8080 eclipsedaanse/probe:snapshot
  2. Permission Issues with Volumes

    bash
    # Ensure correct ownership
    sudo chown -R 1000:1000 /path/to/catalogs
  3. Memory Issues

    bash
    # Increase memory limit (Docker/Podman)
    docker run --memory=4g eclipsedaanse/probe:snapshot
    podman run --memory=4g eclipsedaanse/probe:snapshot

Requirements โ€‹

  • Java 21+ JRE or JDK
  • 512MB+ RAM (recommended: 1GB+)
  • Write permissions for log directory
  • Network access for XMLA endpoint (port 8080)

Security Considerations โ€‹

  • Container runs as non-root user (UID 1000)
  • Use read-only volume mounts for catalog data
  • Implement network policies in production
  • Regular security updates for base images

Support โ€‹

For issues and feature requests:

  • Eclipse Daanse Project: Eclipse Foundation
  • GitHub Issues: Report bugs and feature requests
  • Documentation: Check the projects Readme Files and (daanse.org)

License โ€‹

Eclipse Public License 2.0 (EPL-2.0)

Copyright (c) 2025 Contributors to the Eclipse Foundation