Skip to content

feat: microkernel architecture pattern (#1086) - #3610

Open
KishalayP wants to merge 13 commits into
iluwatar:masterfrom
KishalayP:feature/#1086-microkernel-architecture-pattern
Open

KishalayP wants to merge 13 commits into
iluwatar:masterfrom
KishalayP:feature/#1086-microkernel-architecture-pattern

Conversation

@KishalayP

Copy link
Copy Markdown
Contributor

#1086: Implementation of the Microkernel Architecture Pattern as described in the issue

What does this PR do?

This PR introduces a complete, interactive implementation of the Microkernel Architecture Pattern (also known as the Plug-in architecture) to the repository. It uses a text editor simulation to demonstrate how to effectively separate a minimal core system from optional, specialized processing features.

This implementation demonstrates:

  • Core System & IPC: A centralized MicroKernel that controls the state (a document buffer) and an IpcRouter that dispatches messages between the core and isolated plugins.
  • Dynamic Plugin Management: A PluginCatalog (acting as a factory/store) and a PluginRegistry to handle the installation, tracking, and uninstallation of active plugins at runtime.
  • Distinct Plugin Lifecycles: Abstract base classes demonstrating two types of plugins:
    • Lifecycle-driven plugins that execute automatically upon installation (e.g., NeonThemePlugin).
    • Event-driven (On-demand) plugins that wait for explicit IPC messages to execute (e.g., UppercasePlugin, RemoveSpacesPlugin).
  • Clear Separation: An interactive CommandLineInterface (CLI) that is entirely decoupled from the core logic, allowing users to dynamically install/uninstall plugins and transform text and see the pattern working.
  • The PR also includes comprehensive Unit Tests for all components, a complete README.md, and PlantUML diagrams illustrating the structural architecture and message-routing process flow.

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

PR Summary

Started implementation of the Microkernel Architecture Pattern as a new module. Adds a Core MicroKernel with IPC-based plugin communication, a PluginCatalog for dynamic plugin creation, a PluginRegistry, lifecycle abstractions, built-in plugins, a CLI, and comprehensive tests and documentation. Includes architecture diagrams and README to illustrate concepts and usage.

Changes

File Summary
microkernel-architecture/README.md Documentation describing the Microkernel Architecture pattern, its motivation, components, usage, and references. Includes architecture diagrams and references.
microkernel-architecture/etc/microkernel-architecture.png New architecture diagram image illustrating class roles and relationships.
microkernel-architecture/etc/microkernel-architecture.puml PlantUML diagram of the architecture's class structure and component interactions.
microkernel-architecture/etc/microkernel-flow.png Flow diagram image showing runtime message flow between kernel, CLI, registry, and plugins.
microkernel-architecture/etc/microkernel-flow.puml PlantUML flow diagram detailing message routing in the microkernel.
microkernel-architecture/pom.xml Defines a new Maven module with build plugins, dependencies, and Java 21 compatibility.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/App.java Main entry that wires MicroKernel and CommandLineInterface and starts the CLI.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/cli/CommandLineInterface.java CLI to install/uninstall plugins, open a text editor, and transform text via the IPC router.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/AbstractLifecyclePlugin.java Abstract base for lifecycle plugins providing start/stop hooks.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/AbstractOnDemandPlugin.java Abstract base for on-demand plugins that react to IPC messages.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/MicroKernel.java Core component managing plugin registry, IPC, and a document buffer; supports load/start/unload and transform.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/Plugin.java Plugin contract interface defining lifecycle and message handling.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/ipc/IpcRouter.java IPC router dispatching messages to registered, started plugins with fault isolation.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/ipc/Message.java Record representing a message exchanged between kernel and plugins.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/JavaLanguagePlugin.java On-demand plugin applying Java-like formatting for TRANSFORM actions.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/NeonThemePlugin.java Lifecycle plugin that applies neon theme on start and resets on stop.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/PluginCatalog.java Catalog providing plugin metadata and factories; creates fresh plugin instances.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/RemoveSpacesPlugin.java On-demand plugin removing whitespace in TRANSFORM payloads.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/UppercasePlugin.java On-demand plugin converting text to uppercase for TRANSFORM actions.
microkernel-architecture/src/main/java/com/iluwatar/microkernel/registry/PluginRegistry.java Registry to store and look up plugins by name.
microkernel-architecture/src/test/java/com/iluwatar/microkernel/AppTest.java Tests verifying App can be instantiated and starts/exits.
microkernel-architecture/src/test/java/com/iluwatar/microkernel/cli/CommandLineInterfaceTest.java CLI tests covering install, uninstall, and document editing/transform flow.
microkernel-architecture/src/test/java/com/iluwatar/microkernel/core/MicroKernelTest.java Tests for loading, starting, transforming, and unloading plugins in MicroKernel.
microkernel-architecture/src/test/java/com/ iluwatar/microkernel/ipc/IpcRouterTest.java IpcRouter tests for missing recipient, stopped plugin, success, and fault isolation.
microkernel-architecture/src/test/java/com/iluwatar/microkernel/plugins/PluginCatalogTest.java Tests listing built-in plugins and creating fresh plugin instances.
microkernel-architecture/src/test/java/com/iluwatar/microkernel/plugins/PluginImplementationsTest.java Tests for plugin implementations including lifecycle and transform behavior.
microkernel-architecture/src/test/java/com/iluwatar/microkernel/registry/PluginRegistryTest.java Tests for registry operations including replace and deregister.
pom.xml Root pom.xml updated to include the microkernel-architecture module in the build.

autogenerated by presubmit.ai

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 Pull request needs attention.

Review Summary

Commits Considered (12)
  • ddba2f6: Adding Details for microkernel-architecture
  • 6b1a0d8: Adding Plugin
  • 6d7d86a: Reformatted as per style guide
  • 29f5c0d: Reformatted as per style guide
  • 24387f9: Adding Unit Tests
  • b1dea43: Adding CLI and main app
  • a9b0455: Adding Plugins
  • 812b14f: Adding Core Plugin Functions
  • d03adea: Adding Core Functions
  • a16a161: Merge branch 'iluwatar:master' into #1086-microkernel-architecture-pattern
  • 29d82bb: Merge branch 'iluwatar:master' into master
  • e48fdf3: #1086: Init commit adding module
Files Processed (28)
  • microkernel-architecture/README.md (1 hunk)
  • microkernel-architecture/etc/microkernel-architecture.png (0 hunks)
  • microkernel-architecture/etc/microkernel-architecture.puml (1 hunk)
  • microkernel-architecture/etc/microkernel-flow.png (0 hunks)
  • microkernel-architecture/etc/microkernel-flow.puml (1 hunk)
  • microkernel-architecture/pom.xml (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/App.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/cli/CommandLineInterface.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/AbstractLifecyclePlugin.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/AbstractOnDemandPlugin.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/MicroKernel.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/Plugin.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/ipc/IpcRouter.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/ipc/Message.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/JavaLanguagePlugin.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/NeonThemePlugin.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/PluginCatalog.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/RemoveSpacesPlugin.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/UppercasePlugin.java (1 hunk)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/registry/PluginRegistry.java (1 hunk)
  • microkernel-architecture/src/test/java/com/iluwatar/microkernel/AppTest.java (1 hunk)
  • microkernel-architecture/src/test/java/com/iluwatar/microkernel/cli/CommandLineInterfaceTest.java (1 hunk)
  • microkernel-architecture/src/test/java/com/iluwatar/microkernel/core/MicroKernelTest.java (1 hunk)
  • microkernel-architecture/src/test/java/com/iluwatar/microkernel/ipc/IpcRouterTest.java (1 hunk)
  • microkernel-architecture/src/test/java/com/iluwatar/microkernel/plugins/PluginCatalogTest.java (1 hunk)
  • microkernel-architecture/src/test/java/com/iluwatar/microkernel/plugins/PluginImplementationsTest.java (1 hunk)
  • microkernel-architecture/src/test/java/com/iluwatar/microkernel/registry/PluginRegistryTest.java (1 hunk)
  • pom.xml (1 hunk)
Actionable Comments (3)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/ipc/IpcRouter.java [51-80]

    best_practice: "Logger naming consistency"

  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/JavaLanguagePlugin.java [49-54]

    best_practice: "Consistency: logger naming for JavaLanguagePlugin"

  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/UppercasePlugin.java [46-52]

    best_practice: "Consistency: logger naming for UppercasePlugin"

Skipped Comments (3)
  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/MicroKernel.java [0-0]

    best_practice: "Logging consistency across core module"

  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/core/AbstractLifecyclePlugin.java [0-0]

    best_practice: "Lifecycle hooks idempotency"

  • microkernel-architecture/src/main/java/com/iluwatar/microkernel/plugins/RemoveSpacesPlugin.java [32-36]

    best_practice: "Logger usage consistency in RemoveSpacesPlugin"

@KishalayP
KishalayP marked this pull request as ready for review September 27, 2026 19:39
@codecov

codecov Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 99.58848% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 84.31%. Comparing base (4cabb20) to head (46ce10a).

Files with missing lines Patch % Lines
...ava/com/iluwatar/microkernel/core/MicroKernel.java 96.96% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##             master    #3610      +/-   ##
============================================
+ Coverage     84.06%   84.31%   +0.24%     
- Complexity     4353     4449      +96     
============================================
  Files          1133     1146      +13     
  Lines         15400    15643     +243     
  Branches        739      759      +20     
============================================
+ Hits          12946    13189     +243     
+ Misses         2158     2156       -2     
- Partials        296      298       +2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@KishalayP KishalayP changed the title Feature/#1086 microkernel architecture pattern feat: #1086 microkernel architecture pattern Sep 28, 2026
@KishalayP KishalayP changed the title feat: #1086 microkernel architecture pattern feat: microkernel architecture pattern (#1086) Sep 28, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM!

Review Summary

Commits Considered (1)
Files Processed (0)
Actionable Comments (0)
Skipped Comments (0)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant