From 8bdccfe44755e4e899f2c124f7a026ec7e1ed593 Mon Sep 17 00:00:00 2001 From: Stefan Bischof Date: Sun, 30 Aug 2026 20:36:44 +0200 Subject: [PATCH] feat: playground two-database default, drop inert context props Give the playground a working default: one catalog on PostgreSQL and one on Oracle behind the same XMLA endpoint, with the rowset provider bundles and the role resolution the endpoint needs. Remove the inert context config props (DAANSE_CONTEXT_NAME/DESCRIPTION, probe name/description/catalog.path) that no component declares or reads. Signed-off-by: Stefan Bischof --- application/pivot/common/README.container.md | 2 -- .../pivot/common/BasicContextConfigs.java | 3 -- .../pivot/common/ServerConstants.java | 4 --- application/playground/.gitignore | 4 ++- application/playground/README.md | 35 +++++++++++++++++++ .../playground/catalog/catalog.oracle.xmi | 19 ++++++++++ .../playground/catalog/catalog.postgres.xmi | 19 ++++++++++ .../playground/daanse.playground.bndrun | 13 +++++-- ....jdbc.datasource.oracle.DataSource-ora.cfg | 6 ++++ ...source.pools.hikari.ConnectionPool-ora.cfg | 3 ++ ...asource.pools.hikari.ConnectionPool-pg.cfg | 3 ++ ...bc.datasource.postgresql.DataSource-pg.cfg | 8 +++++ ...aanse.olap.core.BasicContextGroup-main.cfg | 2 ++ ....xmla.connector.OlapXmlaConnector-main.cfg | 2 ++ .../daanse.rolap.core.BasicContext-ora.cfg | 5 +++ .../daanse.rolap.core.BasicContext-pg.cfg | 5 +++ ....model.provider.EmfMappingProvider-ora.cfg | 2 ++ ...g.model.provider.EmfMappingProvider-pg.cfg | 2 ++ ...er.whiteboard.servlet.XmlaServlet-main.cfg | 2 ++ .../application/probe/ProbeFileListener.java | 10 ------ 20 files changed, 127 insertions(+), 22 deletions(-) create mode 100644 application/playground/catalog/catalog.oracle.xmi create mode 100644 application/playground/catalog/catalog.postgres.xmi create mode 100644 application/playground/load/daanse.jdbc.datasource.oracle.DataSource-ora.cfg create mode 100644 application/playground/load/daanse.jdbc.datasource.pools.hikari.ConnectionPool-ora.cfg create mode 100644 application/playground/load/daanse.jdbc.datasource.pools.hikari.ConnectionPool-pg.cfg create mode 100644 application/playground/load/daanse.jdbc.datasource.postgresql.DataSource-pg.cfg create mode 100644 application/playground/load/daanse.olap.core.BasicContextGroup-main.cfg create mode 100644 application/playground/load/daanse.olap.xmla.connector.OlapXmlaConnector-main.cfg create mode 100644 application/playground/load/daanse.rolap.core.BasicContext-ora.cfg create mode 100644 application/playground/load/daanse.rolap.core.BasicContext-pg.cfg create mode 100644 application/playground/load/daanse.rolap.mapping.model.provider.EmfMappingProvider-ora.cfg create mode 100644 application/playground/load/daanse.rolap.mapping.model.provider.EmfMappingProvider-pg.cfg create mode 100644 application/playground/load/org.eclipse.daanse.xmla.server.whiteboard.servlet.XmlaServlet-main.cfg diff --git a/application/pivot/common/README.container.md b/application/pivot/common/README.container.md index 0b2f902..9fc20e2 100644 --- a/application/pivot/common/README.container.md +++ b/application/pivot/common/README.container.md @@ -87,8 +87,6 @@ split over several cross-referencing files, point |---|---|---| | `DAANSE_CATALOG_RESOURCE` | `/app/catalog/catalog.xmi` | Primary catalog mapping file (EMF XMI with a Catalog root element) | | `DAANSE_CATALOG_ADDITIONAL_GLOBS` | *(unset)* | Comma separated glob patterns for additional mapping resources | -| `DAANSE_CONTEXT_NAME` | `daanse` | Name of the OLAP context | -| `DAANSE_CONTEXT_DESCRIPTION` | `Daanse XMLA Server` | Description of the OLAP context | | `DAANSE_USE_AGGREGATES` | `false` | Use aggregate tables | | `DAANSE_XMLA_PATH` | `/xmla` | Servlet pattern of the XMLA endpoint | | `DAANSE_CORS_ENABLED` | `true` | Register the CORS filter | diff --git a/application/pivot/common/src/main/java/org/eclipse/daanse/server/application/pivot/common/BasicContextConfigs.java b/application/pivot/common/src/main/java/org/eclipse/daanse/server/application/pivot/common/BasicContextConfigs.java index 6bd2a8b..55f32de 100644 --- a/application/pivot/common/src/main/java/org/eclipse/daanse/server/application/pivot/common/BasicContextConfigs.java +++ b/application/pivot/common/src/main/java/org/eclipse/daanse/server/application/pivot/common/BasicContextConfigs.java @@ -66,9 +66,6 @@ public static Configuration createEnvBasicContext(ConfigurationAdmin ca, String filter(ServerConstants.PROP_IDENT, ServerConstants.IDENT_MAPPING)); props.put(Constants.BASIC_CONTEXT_REF_NAME_DIALECT_FACTORY + ServerConstants.TARGET_EXT, filter(DaanseDialectConstants.DIALECT_NAME_PROPERTY, dialectName)); - props.put("name", Env.get(ServerConstants.ENV_CONTEXT_NAME, ServerConstants.DEFAULT_CONTEXT_NAME)); - props.put("description", - Env.get(ServerConstants.ENV_CONTEXT_DESCRIPTION, ServerConstants.DEFAULT_CONTEXT_DESCRIPTION)); props.put("useAggregates", Env.get(ServerConstants.ENV_USE_AGGREGATES, false)); configuration.update(props); diff --git a/application/pivot/common/src/main/java/org/eclipse/daanse/server/application/pivot/common/ServerConstants.java b/application/pivot/common/src/main/java/org/eclipse/daanse/server/application/pivot/common/ServerConstants.java index 012af47..7fefbcc 100644 --- a/application/pivot/common/src/main/java/org/eclipse/daanse/server/application/pivot/common/ServerConstants.java +++ b/application/pivot/common/src/main/java/org/eclipse/daanse/server/application/pivot/common/ServerConstants.java @@ -81,8 +81,6 @@ private ServerConstants() { public static final String ENV_CATALOG_RESOURCE = "DAANSE_CATALOG_RESOURCE"; public static final String ENV_CATALOG_ADDITIONAL_GLOBS = "DAANSE_CATALOG_ADDITIONAL_GLOBS"; - public static final String ENV_CONTEXT_NAME = "DAANSE_CONTEXT_NAME"; - public static final String ENV_CONTEXT_DESCRIPTION = "DAANSE_CONTEXT_DESCRIPTION"; public static final String ENV_USE_AGGREGATES = "DAANSE_USE_AGGREGATES"; public static final String ENV_XMLA_PATH = "DAANSE_XMLA_PATH"; public static final String ENV_CORS_ENABLED = "DAANSE_CORS_ENABLED"; @@ -91,7 +89,5 @@ private ServerConstants() { public static final String ENV_CORS_ALLOW_CREDENTIALS = "DAANSE_CORS_ALLOW_CREDENTIALS"; public static final String DEFAULT_CATALOG_RESOURCE = "/app/catalog/catalog.xmi"; - public static final String DEFAULT_CONTEXT_NAME = "daanse"; - public static final String DEFAULT_CONTEXT_DESCRIPTION = "Daanse XMLA Server"; public static final String DEFAULT_XMLA_PATH = "/xmla"; } diff --git a/application/playground/.gitignore b/application/playground/.gitignore index 6cfd5c7..c039eac 100644 --- a/application/playground/.gitignore +++ b/application/playground/.gitignore @@ -3,4 +3,6 @@ log/* catalog/* !catalog/.keep load/* -!load/.keep \ No newline at end of file +!load/.keep +!load/*.cfg +!catalog/*.xmi diff --git a/application/playground/README.md b/application/playground/README.md index 8a8ea52..d4d18f7 100644 --- a/application/playground/README.md +++ b/application/playground/README.md @@ -54,6 +54,41 @@ The playground application source can be found at: - Java development environment - Understanding of security implications +## Default configuration + +The `load/` directory is watched by Felix FileInstall (its default directory) and ships a +working two-database default: one catalog served from **PostgreSQL** and one from +**Oracle**, both published on the **same XMLA endpoint**. + +| File(s) | Purpose | +|---|---| +| `daanse.jdbc.datasource.{postgresql,oracle}.DataSource-*.cfg` | one DataSource per database, tagged `daanse.ident=ds-pg` / `ds-ora` | +| `daanse.jdbc.datasource.pools.hikari.ConnectionPool-*.cfg` | one connection pool per DataSource | +| `daanse.rolap.mapping.model.provider.EmfMappingProvider-*.cfg` | one mapping per catalog XMI (`catalog/catalog.postgres.xmi`, `catalog/catalog.oracle.xmi`) | +| `daanse.rolap.core.BasicContext-*.cfg` | one context per catalog: pool + mapping + dialect (`POSTGRESQL` / `ORACLE`) | +| `daanse.olap.core.BasicContextGroup-main.cfg` | groups both contexts (`context.target=(daanse.ident=ctx-*)`) | +| `daanse.olap.xmla.connector.OlapXmlaConnector-main.cfg` | XMLA service over the group | +| `org.eclipse.daanse.xmla.server.whiteboard.servlet.XmlaServlet-main.cfg` | servlet at `/xmla` | + +The endpoint is `http://localhost:8090/xmla` (HTTP port from the bndrun). Both catalogs — +`Playground Postgres` (cube `CubePostgres`) and `Playground Oracle` (cube `CubeOracle`) — +appear in `DBSCHEMA_CATALOGS` of that one endpoint; each expects a table +`fact("key","value")` / `FACT("KEY","VALUE")`. + +Matching local databases: + +```bash +podman run -d --name playground-pg -e POSTGRES_USER=daanse -e POSTGRES_PASSWORD=daanse \ + -e POSTGRES_DB=daanse -p 5432:5432 docker.io/library/postgres:17-alpine +podman run -d --name playground-ora -e ORACLE_PASSWORD=admin -e APP_USER=daanse \ + -e APP_USER_PASSWORD=daanse -p 1521:1521 docker.io/gvenzl/oracle-free:23-slim +``` + +Then create/seed the fact tables (`fact` lowercase in PostgreSQL, `FACT` uppercase in +Oracle service `FREEPDB1`) and start the server with `./start` (or +`java -jar target/daanse.playground.jar` from this directory — FileInstall resolves +`./load` and the mappings resolve `./catalog` relative to the working directory). + ## Important Notes ⚠️ **Security Warning**: This application should only be used in development environments due to the increased attack surface from the comprehensive component set. diff --git a/application/playground/catalog/catalog.oracle.xmi b/application/playground/catalog/catalog.oracle.xmi new file mode 100644 index 0000000..76d61d9 --- /dev/null +++ b/application/playground/catalog/catalog.oracle.xmi @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/application/playground/catalog/catalog.postgres.xmi b/application/playground/catalog/catalog.postgres.xmi new file mode 100644 index 0000000..3781953 --- /dev/null +++ b/application/playground/catalog/catalog.postgres.xmi @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/application/playground/daanse.playground.bndrun b/application/playground/daanse.playground.bndrun index 18ff681..1755ade 100644 --- a/application/playground/daanse.playground.bndrun +++ b/application/playground/daanse.playground.bndrun @@ -17,8 +17,7 @@ -runproperties: \ org.slf4j.simpleLogger.defaultLogLevel=error,\ org.osgi.service.http.port=8090,\ - logback.configurationFile=${.}/logback.xml,\ - daanse.probe.catalog.dir=${.}/catalog + logback.configurationFile=${.}/logback.xml -runpath: \ ch.qos.logback.classic,\ @@ -33,7 +32,12 @@ bnd.identity;id='org.glassfish.hk2.osgi-resource-locator',\ bnd.identity;id='org.apache.felix.metatype',\ bnd.identity;id='org.eclipse.daanse.olap.xmla.connector',\ + bnd.identity;id='org.eclipse.daanse.olap.xmla.connector.multidimensional',\ + bnd.identity;id='org.eclipse.daanse.olap.xmla.connector.relational',\ + bnd.identity;id='org.eclipse.daanse.olap.xmla.connector.relational.oledb',\ bnd.identity;id='org.eclipse.daanse.xmla.server.whiteboard.servlet',\ + bnd.identity;id='org.eclipse.daanse.xmla.server.auth.roles',\ + bnd.identity;id='org.eclipse.daanse.xmla.server.auth.dummy',\ bnd.identity;id='ch.qos.logback.classic',\ bnd.identity;id='org.eclipse.daanse.sql.jdbc.impl',\ bnd.identity;id='org.eclipse.daanse.mdx.parser.api',\ @@ -121,6 +125,9 @@ org.eclipse.daanse.olap.spi;version='[0.0.1,0.0.2)',\ org.eclipse.daanse.olap.util.format;version='[0.0.1,0.0.2)',\ org.eclipse.daanse.olap.xmla.connector;version='[0.0.1,0.0.2)',\ + org.eclipse.daanse.olap.xmla.connector.multidimensional;version='[0.0.1,0.0.2)',\ + org.eclipse.daanse.olap.xmla.connector.relational;version='[0.0.1,0.0.2)',\ + org.eclipse.daanse.olap.xmla.connector.relational.oledb;version='[0.0.1,0.0.2)',\ org.eclipse.daanse.rolap.core;version='[0.0.1,0.0.2)',\ org.eclipse.daanse.rolap.mapping.model;version='[0.0.1,0.0.2)',\ org.eclipse.daanse.server.application.playground;version='[0.0.1,0.0.2)',\ @@ -163,6 +170,8 @@ org.eclipse.daanse.xmla.model.soap;version='[0.0.1,0.0.2)',\ org.eclipse.daanse.xmla.model.xmla;version='[0.0.1,0.0.2)',\ org.eclipse.daanse.xmla.server.adapter.emf;version='[0.0.1,0.0.2)',\ + org.eclipse.daanse.xmla.server.auth.dummy;version='[0.0.1,0.0.2)',\ + org.eclipse.daanse.xmla.server.auth.roles;version='[0.0.1,0.0.2)',\ org.eclipse.daanse.xmla.server.whiteboard.servlet;version='[0.0.1,0.0.2)',\ org.eclipse.emf.common;version='[2.44.0,2.44.1)',\ org.eclipse.emf.ecore;version='[2.41.0,2.41.1)',\ diff --git a/application/playground/load/daanse.jdbc.datasource.oracle.DataSource-ora.cfg b/application/playground/load/daanse.jdbc.datasource.oracle.DataSource-ora.cfg new file mode 100644 index 0000000..5c0ddba --- /dev/null +++ b/application/playground/load/daanse.jdbc.datasource.oracle.DataSource-ora.cfg @@ -0,0 +1,6 @@ +daanse.ident = "ds-ora" +serverName = "localhost" +portNumber = I"1521" +serviceName = "FREEPDB1" +user = "daanse" +.password = "daanse" diff --git a/application/playground/load/daanse.jdbc.datasource.pools.hikari.ConnectionPool-ora.cfg b/application/playground/load/daanse.jdbc.datasource.pools.hikari.ConnectionPool-ora.cfg new file mode 100644 index 0000000..e587a94 --- /dev/null +++ b/application/playground/load/daanse.jdbc.datasource.pools.hikari.ConnectionPool-ora.cfg @@ -0,0 +1,3 @@ +daanse.ident = "pool-ora" +dataSource.target = "(daanse.ident=ds-ora)" +poolName = "playground-ora" diff --git a/application/playground/load/daanse.jdbc.datasource.pools.hikari.ConnectionPool-pg.cfg b/application/playground/load/daanse.jdbc.datasource.pools.hikari.ConnectionPool-pg.cfg new file mode 100644 index 0000000..1c1ff4e --- /dev/null +++ b/application/playground/load/daanse.jdbc.datasource.pools.hikari.ConnectionPool-pg.cfg @@ -0,0 +1,3 @@ +daanse.ident = "pool-pg" +dataSource.target = "(daanse.ident=ds-pg)" +poolName = "playground-pg" diff --git a/application/playground/load/daanse.jdbc.datasource.postgresql.DataSource-pg.cfg b/application/playground/load/daanse.jdbc.datasource.postgresql.DataSource-pg.cfg new file mode 100644 index 0000000..a14baf3 --- /dev/null +++ b/application/playground/load/daanse.jdbc.datasource.postgresql.DataSource-pg.cfg @@ -0,0 +1,8 @@ +daanse.ident = "ds-pg" +host = "localhost" +port = i[ \ + "5432", \ + ] +dbname = "daanse" +user = "daanse" +.password = "daanse" diff --git a/application/playground/load/daanse.olap.core.BasicContextGroup-main.cfg b/application/playground/load/daanse.olap.core.BasicContextGroup-main.cfg new file mode 100644 index 0000000..57dffb1 --- /dev/null +++ b/application/playground/load/daanse.olap.core.BasicContextGroup-main.cfg @@ -0,0 +1,2 @@ +daanse.ident = "group-main" +context.target = "(daanse.ident=ctx-*)" diff --git a/application/playground/load/daanse.olap.xmla.connector.OlapXmlaConnector-main.cfg b/application/playground/load/daanse.olap.xmla.connector.OlapXmlaConnector-main.cfg new file mode 100644 index 0000000..cda53ed --- /dev/null +++ b/application/playground/load/daanse.olap.xmla.connector.OlapXmlaConnector-main.cfg @@ -0,0 +1,2 @@ +daanse.ident = "xmla-main" +contextGroup.target = "(daanse.ident=group-main)" diff --git a/application/playground/load/daanse.rolap.core.BasicContext-ora.cfg b/application/playground/load/daanse.rolap.core.BasicContext-ora.cfg new file mode 100644 index 0000000..0c587d8 --- /dev/null +++ b/application/playground/load/daanse.rolap.core.BasicContext-ora.cfg @@ -0,0 +1,5 @@ +daanse.ident = "ctx-ora" +connectionPool.target = "(daanse.ident=pool-ora)" +catalogMappingSuppier.target = "(daanse.ident=map-ora)" +dialectFactory.target = "(org.eclipse.daanse.dialect.name=ORACLE)" +useAggregates = B"false" diff --git a/application/playground/load/daanse.rolap.core.BasicContext-pg.cfg b/application/playground/load/daanse.rolap.core.BasicContext-pg.cfg new file mode 100644 index 0000000..2e18a13 --- /dev/null +++ b/application/playground/load/daanse.rolap.core.BasicContext-pg.cfg @@ -0,0 +1,5 @@ +daanse.ident = "ctx-pg" +connectionPool.target = "(daanse.ident=pool-pg)" +catalogMappingSuppier.target = "(daanse.ident=map-pg)" +dialectFactory.target = "(org.eclipse.daanse.dialect.name=POSTGRESQL)" +useAggregates = B"false" diff --git a/application/playground/load/daanse.rolap.mapping.model.provider.EmfMappingProvider-ora.cfg b/application/playground/load/daanse.rolap.mapping.model.provider.EmfMappingProvider-ora.cfg new file mode 100644 index 0000000..e88ae36 --- /dev/null +++ b/application/playground/load/daanse.rolap.mapping.model.provider.EmfMappingProvider-ora.cfg @@ -0,0 +1,2 @@ +daanse.ident = "map-ora" +resource.url = "./catalog/catalog.oracle.xmi" diff --git a/application/playground/load/daanse.rolap.mapping.model.provider.EmfMappingProvider-pg.cfg b/application/playground/load/daanse.rolap.mapping.model.provider.EmfMappingProvider-pg.cfg new file mode 100644 index 0000000..1902a50 --- /dev/null +++ b/application/playground/load/daanse.rolap.mapping.model.provider.EmfMappingProvider-pg.cfg @@ -0,0 +1,2 @@ +daanse.ident = "map-pg" +resource.url = "./catalog/catalog.postgres.xmi" diff --git a/application/playground/load/org.eclipse.daanse.xmla.server.whiteboard.servlet.XmlaServlet-main.cfg b/application/playground/load/org.eclipse.daanse.xmla.server.whiteboard.servlet.XmlaServlet-main.cfg new file mode 100644 index 0000000..255e8f7 --- /dev/null +++ b/application/playground/load/org.eclipse.daanse.xmla.server.whiteboard.servlet.XmlaServlet-main.cfg @@ -0,0 +1,2 @@ +osgi.http.whiteboard.servlet.pattern = "/xmla" +requirePrincipal = B"false" diff --git a/application/probe/src/main/java/org/eclipse/daanse/server/application/probe/ProbeFileListener.java b/application/probe/src/main/java/org/eclipse/daanse/server/application/probe/ProbeFileListener.java index d07b35e..1c02d46 100644 --- a/application/probe/src/main/java/org/eclipse/daanse/server/application/probe/ProbeFileListener.java +++ b/application/probe/src/main/java/org/eclipse/daanse/server/application/probe/ProbeFileListener.java @@ -227,16 +227,6 @@ private void createContext(Path path, String matcherKey) throws IOException { props.put(BASIC_CONTEXT_REF_NAME_DIALECT_FACTORY + TARGET_EXT, "(org.eclipse.daanse.dialect.name=DUCKDB)"); props.put(BASIC_CONTEXT_REF_NAME_CATALOG_MAPPING_SUPPLIER + TARGET_EXT, filterOfMatcherKey(matcherKey)); - String catalog_path = path.toString(); - String theDescription = "theDescription for " + catalog_path; - - String name = path.toString(); - if (name == null || name.isEmpty()) { - name = "not_set" + UUID.randomUUID().toString(); - } - props.put("name", name); - props.put("description", theDescription); - props.put("catalog.path", catalog_path); props.put("useAggregates", true); props.put(KEY_FILE_CONTEXT_MATCHER, matcherKey); configContext.update(props);