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);