π This is a fork of Apache Sling Starter for the Blockchain AEM project
This fork extends the Apache Sling Starter to support Blockchain AEM, a distributed content repository that bridges Ethereum smart contracts with Apache Jackrabbit Oak's immutable segment store.
This Sling Starter fork simulates AEM clients (authors and publishers) that connect to the global oak-chain validator network. It provides a test environment for:
- Multi-peer AEM instances: Multiple Sling authors connecting to different validators
- Read-only global content: Mounting the global oak-chain as a read-only composite NodeStore
- Wallet-based writes: Testing write operations that require Ethereum wallet signatures
- Validator network interaction: Demonstrating how AEM clients register and communicate with validators
This fork adds:
- Oak Blockchain Feature: Composite NodeStore configuration that mounts a read-only global oak-chain via HTTP segment transfer
- Wallet-Based Authentication: Integration with Ethereum wallet signatures for write operations
- Agentic Chat Interface: Embedded LLM assistant for natural language queries about Oak validators and system state
- Local Development Tools: Helper scripts for Docker-free development and testing
Note: In production, AEM instances (authors and publishers) would connect to the validator network similarly to how this Sling Starter connects. This fork provides a lightweight way to test and demonstrate the client-side integration without requiring full AEM installations.
This Sling Starter fork is part of the broader Blockchain AEM ecosystem:
jackrabbit-oak(feature/blockchain-aem-poc branch): Core Oak modules includingoak-segment-consensus,oak-segment-http, andoak-segment-agenticblockchain-aem-infra: Infrastructure scripts, Docker Compose configurations, and deployment automationBlockchain-AEM: Documentation, architecture designs, and project management
This module is part of the Apache Sling project.
The starter project produces feature artifacts that can be launched using the Feature Launcher.
It is not meant to be a production-ready setup, more as a way to facilitate experimenting and learning Sling.
See Releasing a new version of the Sling starter for how to create a release of this module.
Note This is a note "mvn clean" deletes the "launcher" work directory in the project base directory. It is advisable to use a work directory outside of the project directory.
-
Build the Sling Starter using
mvn clean install
in the current directory.
Hint You can defer stopping the instance after running the ITs with argument
-Dfeature-launcher.waitForInput=trueto do some manual checks. -
Start Sling backed by
-
Oak Blockchain (Composite NodeStore) with helper script:
./scripts/run-sling-local.sh 4502 http://localhost:8091
This runs Sling on port 4502 (AEM author port) and connects to validators.
- Port defaults to 4502 if not specified
- Global store URL defaults to http://localhost:8091 if not specified
- Requires validators to be running (see
blockchain-aem-infra/scripts/local-development/run-validators-local.sh)
Blockchain AEM: This configuration simulates an AEM client connecting to the global oak-chain validator network. It mounts a read-only global oak-chain via HTTP segment transfer. Writes require Ethereum wallet signatures and are routed through the validator network's Aeron Cluster consensus.
-
Oak SegmentStore with
target/dependency/org.apache.sling.feature.launcher/bin/launcher -f target/slingfeature-tmp/feature-oak_tar.json
If you are using Windows:
target\dependency\org.apache.sling.feature.launcher\bin\launcher.bat -f target\slingfeature-tmp\feature-oak_tar.json
-
Oak Blockchain manually (without helper script):
export OAK_GLOBAL_STORE_URL=http://localhost:8091 target/dependency/org.apache.sling.feature.launcher/bin/launcher \ -f target/slingfeature-tmp/feature-oak_blockchain.json \ -Dorg.osgi.service.http.port=4502 -
Oak MongoDB DocumentStore with
target/dependency/org.apache.sling.feature.launcher/bin/launcher -f target/slingfeature-tmp/feature-oak_mongo.json
If you are using Windows:
target\dependency\org.apache.sling.feature.launcher\bin\launcher.bat -f target\slingfeature-tmp\feature-oak_mongo.json
This expects a MongoDB server to be running, search for
mongodb://in the feature files for the expected URL (currentlymongodb://localhost:27017).
-
-
Browse Sling:
- Blockchain AEM: localhost:4502 (default with helper script)
- Standard: localhost:8080 (default port)
The following tags are supported
| Tag name | Supported platforms | Links |
|---|---|---|
12, latest |
amd64 |
Dockerfile, Release notes |
11 |
amd64 |
Dockerfile, Release notes |
10 |
amd64 |
Dockerfile, Release notes |
9 |
amd64 |
Dockerfile, Release notes |
snapshot |
amd64, arm64 |
Dockerfile |
- Start Sling Docker image backed by
- Oak SegmentStore with
docker volume create sling-launcher docker run --rm -p 8080:8080 -v sling-launcher:/opt/sling/launcher apache/sling:snapshot
- Oak MongoDB DocumentStore with
docker volume create sling-launcher docker run --rm -p 27017:27017 mongo:4.4.6 docker run --rm -p 8081:8080 -v sling-launcher:/opt/sling/launcher apache/sling:snapshot oak_mongo
- Oak SegmentStore with
The docker/ directory contains sample files related to container-based development.
The Sling Starter will execute two suites of tests using the maven-surefire-plugin:
- A small set of smoke tests, embedded in the project, that verify the basic functionality of the Starter
- An extensive set of end-to-end tests that verify the overall functionality of the Starter and the bundles that are embedded into it
By default, these are both executed when building the project against an Oak SegmentNodeStore backend.
Additionally, when the ci profile is enabled the smoke tests are also executed in against an Oak DocumentNodeStore backend. For technical resons, the full end-to-end tests are not executed.
The Sling Starter Docker image is only for testing/learning purposes. For your custom applications, please configure your Feature model and build your image with all dependencies and configurations built in.
Our example Docker image uses /opt/sling/bin/launch.sh script as the entrypoint. It supports the
following environment variables:
| Environment variable | Description | Example |
|---|---|---|
JAVA_DEBUG_PORT |
Run Sling Starter in Java debug mode | 5005 |
EXTRA_JAVA_OPTS |
Extra java options e.g Xmx or Xms. |
-Xms256m -Xmx2048m |
Example running Sling Starter in debug mode with custom memory settings
docker run -p 8080:8080 -p 5005:5005 -e JAVA_DEBUG_PORT=5005 -e EXTRA_JAVA_OPTS='-Xms256m -Xmx2048m' apache/sling:snapshotThis module can optionally build a Docker image. This is achieved by running a build with the -Ddocker.skip=false argument. By default, the image is built as apache/sling:snapshot. The tag can be overrriden using the docker.image.tag Maven property.
$ mvn clean package -Ddocker.skip=false -Ddocker.image.tag=local
$ docker run --rm -p 8080:8080 apache/sling:local
If you wish the extend the Sling Starter but would like to keep various application-level features out, you can
start with the nosample_base aggregate, which contains:
- all the base features
- Oak base features, without the NodeStore setup
- No applications ( Composum, Slingshot, etc )
For instance, launching an empty Sling Starter with segment persistence can be achieved by running
target/dependency/org.apache.sling.feature.launcher/bin/launcher -f target/slingfeature-tmp/feature-nosample_base.json,target/slingfeature-tmp/feature-oak_persistence_sns.json
Your own feature files can be added to the feature list.
The scripts directory contains helper scripts that will aid with local development by simplifying the use of tools external to the Sling Starter.
scripts/run-sling-local.sh: Launches Sling with Oak Blockchain feature, connecting to validator networkblockchain-aem-content/: Custom content modules including agentic chat interface servlets
For a complete setup guide, see the Blockchain AEM README and Quick Start Guide.
Quick Start (Simulating AEM Client Connection):
- Start validators:
cd ../blockchain-aem-infra/scripts/local-development && ./run-validators-local.sh start - Build Oak modules:
cd ../../../jackrabbit-oak && mvn clean install -pl oak-segment-consensus,oak-segment-http,oak-segment-agentic -am -DskipTests - Build Sling Starter:
cd ../sling-org-apache-sling-starter && mvn clean package -DskipTests - Start Sling (simulating AEM author):
./scripts/run-sling-local.sh 4502 http://localhost:8091 - Access: http://localhost:4502 (Sling/AEM client) and http://localhost:8091 (Validator Dashboard)
Multiple Clients: You can start multiple Sling instances on different ports to simulate multiple AEM authors/publishers connecting to the validator network. Each instance will mount the global oak-chain as read-only and can perform wallet-authenticated writes through the validator network.
- Architecture: See Blockchain AEM Architecture Documentation
- Development: See Development Guides
- Project Status: See Status Summary
