Einführung

Nukleus ist ein Java-Framework zur Modellierung von Domänenmodellen und wird in der Programmiersprache (Degree) für Datentypen und Typsysteme verwendet. Zentraler Aspekt von Nukleus ist die Trennung zwischen der textuellen Repräsentation und Validierung von Daten. Nukleus verfolgt keinen objektorientiert Ansatz, sondern stellt eine Taxonomie der Datentypen anhand von Teilmengenrelationen auf. Dabei können Daten eines spezifischen Typs auch in die jeweiligen Obermengen (sogenannte Supertypes) überführt werden. Die Validierung von Werten eines Datentyps erfolgt primär durch die Prüfregeln des jeweiligen Datentyps (in Java-Notation). Weiterhin werden aber auch die Prüfungen aller definierten Obermengen durchgeführt, um die Einhaltung der Teilmengenrelation zu garantieren. Die Prüfregeln werden zur Laufzeit in Bytecode übersetzt und nicht interpretiert. Neben den Prüfregeln kann der Zugriff auf Daten über Nutzungsrichtlinien (Usage Control) gesteuert werden. Die Evaluierung solcher Policies erfolgt durch eine interne ECA-Engine (Event-Condition-Action) und reagiert auf Datentyp und die gewünschte Operation. Alle Daten können jederzeit wahlweise in JSON, XML oder YAML serialisiert werden. Eine effiziente Darstellung von Binärdaten oder hochfrequente Änderungen stehen nicht im Fokus von Nukleus.

Wesentliche Eigenschaften von Nukleus sind:

  • Domänen-spezifisch: Nukleus erlaubt die Definition einer Vielzahl von Datentypen für unterschiedlichen Anwendungsdomänen
  • Byte Code Validation: Die Prüfung von Daten anhand von generiertem Java Bytecode ist die Grundlage der Validierung in Nukleus
  • Erweiterbarkeit: Über die Nukleus Registry kann auf existierende Domänenmodelle zurückgegriffen und diese erweitert werden
  • Einfachheit: Für die Modellierung eines Domänenmodells werden nur geringe Programmierkenntnisse vorausgesetzt
  • Überschaubarkeit: Die Nukleus Runtime benötigt nur sehr wenige Bibliotheken und hat daher eine geringe Größe
  • Ausführbarkeit: Ein generiertes Domänenmodell kann zusammen mit der Nukleus Runtime einfach in andere Software integriert werden
  • All-in-one: Nukleus vereinigt in einem Domänenmodell Typdefinitionen zusammen mit Dokumentation und Testfällen
  • Serialisierung: Alle wesentlichen Nukleus Objekte können automatisch in JSON, YAML oder XML (de-) serialisiert werden

Links und Repositories

ServiceURL
Source-Repository (GIT)https://gitlab.cc-asp.fraunhofer.de/rnagel/nukleus 
Maven-Repositoryhttps://mvn.ids.isst.fraunhofer.de/nexus/repository/ids-public 
Bookhttps://nukleus.ids.isst.fraunhofer.de/book/de 
API-Dochttps://nukleus.ids.isst.fraunhofer.de/apidocs 
Issueshttps://gitlab.cc-asp.fraunhofer.de/rnagel/nukleus/-/issues
Nukleus-Repositoryhttps://nukleus.ids.isst.fraunhofer.de/ 
Container-Registryhttps://gitlab.cc-asp.fraunhofer.de/rnagel/nukleus/container_registry 

Releases

VersionDateDescription
Version 103/2018
  • Erstes Release als module in (data-app-lang)
Version 206/2019
  • Erstes Release als eigenständiges Framework mit eigener Roadmap
  • Codebasis verkleinert durch erste Maven-Dependencies
  • Serialisierung auf Jackson umgestellt
  • Einführung von Kardinalitäten für Typen
  • Codegenerator für Instanzklassen mit Maven-Plugin
    Version 2.208/2019
    Version 2.308/2019
    • Maven Plugin und Codegenerator Erweiterung für Typsystem Dokumentation als Wikidoc
    Version 2.408/2019
    • Neuer EventBus für die Verarbeitung von Primitive & Composite-Instanzen Events
    Version 2.502/2020
    • Entity Annotation und AnnotationParser zur Generierung von TypeSystem aus Entity-Klassen
    • Maven Plugin und Codegenerator Erweiterung für Entity Annotationen
    • Hierarchische Importe in Typsystemen
    Version 3.007/2020
    • Umstellung der Validierungssprache von Javascript zu Java
    • Neues Policysystem für Nutzungsbedingungen
    • Unterstützung von JSON-LD Serialisierung
    Version 3.109/2020
    • Umstellung von Events, Policy und Validatoren auf den neuen CommonContext
    • Beispiele der IDS Policymuster
    • Einführung des Nukleus Mappers für Java Objekte und JSON
    • PolicyConverter für IDS ODRL-Fragmente
    Version 4.010/2020
    • Vollständige Neuimplementierung von Nukleus+ auf Basis von Groovy
    • PlusServer für die RMI Ausführung von Aktivitäten
    Version 4.111/2020
    • Reimplementierung des PolicyContext zur Zusammenarbeit mit D°
    • Nutzung von Jedis (Redis Client) für PolicyContext
    • Mapping Erweiterungen für Java LocalDateTime and Enums
    Version 4.201/2021
    • Integration von PlusServer als Endpoint in Apache Camel
    • Unterschiedliche LogLevel in Mapper
    • Docker Container für PlusServer
    Version 5.002/2021
    Version 5.103/2021
    • Einführung der Pattern-Language (PatLang) für descriptive Validator Definitionen
    • Portierung des PlusServer als Web Archive (WAR) z.B. für Tomcat
    • Unterstützung von OpenAPI durch den PlusServer

    Autor und Kontakt

    Ralf Nagel

    Fraunhofer-Institut für Software- und Systemtechnik ISST
    Emil-Figge-Str. 91
    44227 Dortmund
    Germany

    Contributors

    Fabian Bruckner
    Fraunhofer-Institut für Software- und Systemtechnik ISST
    D° Use-Case (Degree Data-App-Language)

    Jan-Peter Meyer
    Fraunhofer-Institut für Software- und Systemtechnik ISST
    IntelliJ IDEA-Plugin