Skip to content

Resource shell SPI #320

Description

@hpehl

Overview

The ResourceShell provides a composable framework for CRUD operations on arbitrary WildFly management resources. The ModelBrowser is currently the most prominent consumer. While the generic UX works well for the vast majority of resources, some resources benefit from a more specialized UI.

This umbrella issue tracks all SPI contracts for the resource shell. Each SPI contract is a separate sub-issue that can be designed and implemented independently.

Design Decisions

  1. Separate registries per concern — each SPI contract has its own registry rather than one monolithic interface. This keeps concerns decoupled and allows incremental adoption.
  2. Registration key — providers register against a combination of Environment (which provides operation mode, stability level, product version, etc.) and an AddressTemplate (which can contain wildcards). This allows providers to be scoped by resource type and conditional on server capabilities.
  3. CDI-based discovery — providers are CDI beans discovered at startup. External modules can contribute providers by placing implementation JARs on the classpath — no compile-time dependency on the provider is required.

SPI Contracts

Current Architecture

The ResourceShell is a pure layout container that composes optional children:

ResourceShell
├── Sticky header group
│   ├── ResourceBreadcrumb (optional)
│   └── ResourceHeader (optional)
└── Content section
    ├── ResourceTabs (option A)
    │   ├── Data tab → ResourceData → Pipeline → ResourceView / ResourceForm
    │   ├── Attributes tab → AttributesTable
    │   ├── Operations tab → OperationsTable
    │   └── Capabilities tab → CapabilitiesTable
    └── ResourceList (option B)
        └── DataList of child resources

All intelligence lives in the composed children. The shell itself has no behavior and no data loading.

Package

All SPI contracts live in org.jboss.hal.ui.resource.spi.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions