Skip to content
Switch branches/tags


The system development environment for Foilen Infra using the plugin system.

License: The MIT License (MIT)


  • foilen-infra-system-core-execute: Some Linux and Docker services for the executor.
  • foilen-infra-system-core-system-common: All the services definitions for plugins.
  • foilen-infra-system-core-system-junits: The junits for testing any system implementation.
  • foilen-infra-system-core-system-memory: An implementation of the services for pluging used in unit tests and standalone tests.
  • foilen-infra-system-core-system-mongodb: An implementation of the services for pluging that stores the information in MongoDB.
  • foilen-infra-system-app-test-docker: An application to generate sample resource files and run applications from files.



You can see the latest version and the Maven and Gradle settings here:


  • Use foilen-infra-system-core-system-common
  • Implement all the services:
    • com.foilen.infra.plugin.v1.core.service.IPPluginService
    • com.foilen.infra.plugin.v1.core.service.IPResourceService
    • com.foilen.infra.plugin.v1.core.service.MessagingService
    • com.foilen.infra.plugin.v1.core.service.TimerService
    • com.foilen.infra.plugin.v1.core.service.internal.InternalChangeService
    • com.foilen.infra.plugin.v1.core.service.internal.InternalIPResourceService
  • Init the system with InfraPluginCommonInit.init(commonServicesContext, internalServicesContext);

System test

  • Use foilen-infra-system-core-system-junits (can be in the same project, but in the "test" configuration)
  • Create a unit test that extends AbstractIPResourceServiceTest



  • The version number is in the format MAJOR.MINOR.BUGFIX (e.g 0.1.0).
  • The API in a MAJOR release is stable. Everything that will be removed in the next MAJOR release are marked as deprecated.

For changes/removals in the stable API:

  • When something is in the stable API, it will be there for all the releases in the same MAJOR version.
  • Everything that will be removed in the next MAJOR version is marked as @deprecated and the Javadoc will explain what to use instead if there is a workaround.

App Test Docker

Launch the application for testing in Docker (locally)

# Compile and create image

USER_ID=$(id -u)


# Download plugins
docker run -ti \
  --rm \
  --env PLUGINS_JARS=/plugins \
  --user $USER_ID \
  --volume $FOLDER_PLUGINS_JARS:/plugins \
  foilen-infra-system-app-test-docker:master-SNAPSHOT \
  download-latest-plugins \
  /plugins core

# Create sample data
docker run -ti \
  --rm \
  --env PLUGINS_JARS=/plugins \
  --user $USER_ID \
  --volume $FOLDER_SAMPLE:/data \
  --volume $FOLDER_PLUGINS_JARS:/plugins \
  foilen-infra-system-app-test-docker:master-SNAPSHOT \
  create-sample \

# Create files in "_import-resources"

# You can generate the files by using the web ui and export as a file or directory
docker run -ti \
  --rm \
  --env PLUGINS_JARS=/plugins \
  --user $USER_ID \
  --volume $FOLDER_IMPORT:/data \
  --volume $FOLDER_PLUGINS_JARS:/plugins \
  --publish 8080:8080 \
  foilen-infra-system-app-test-docker:master-SNAPSHOT \
  web \
  # Go on http://localhost:8080
# You can also add the environment FOILEN_PLUGIN_SKIP_UPDATE_EVENTS=true if you do not want to let the update handlers run. That is useful if you want to create the basic resources and export them to test the update handlers.

# Import files and execute applications in Docker
docker run -ti \
  --rm \
  --env HOSTFS=/hostfs/ \
  --env PLUGINS_JARS=/plugins \
  --volume $FOLDER_IMPORT:/data \
  --volume $FOLDER_PLUGINS_JARS:/plugins \
  --volume /etc:/hostfs/etc \
  --volume /home:/hostfs/home \
  --volume /usr/bin/docker:/usr/bin/docker \
  --volume /usr/lib/x86_64-linux-gnu/ \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --workdir /data \
  foilen-infra-system-app-test-docker:master-SNAPSHOT \
  start-resources \


The system development environment for Foilen Infra using the plugin system




No packages published