Module RelayOSGi runtime fieldbook
OSGi · Dynamic Module SystemsView Markdown source

Core mental model: modules, lifecycle, and services

Three ideas define OSGi: module boundaries, managed lifecycle, and a dynamic service registry.

Modules

An OSGi bundle is a JAR with metadata in META-INF/MANIFEST.MF. The framework creates a class space from explicit imports and exports. A bundle sees its own private classes, selected Java platform packages, and packages wired by the resolver. It does not receive one flat application classpath.

Lifecycle

A bundle moves through states:

INSTALLED → RESOLVED → STARTING → ACTIVE → STOPPING → RESOLVED

UNINSTALLED is terminal for that bundle object. INSTALLED often means a requirement cannot be resolved. ACTIVE means the bundle's start operation completed—not that every business dependency is healthy.

Services

A service is an object registered under one or more interface names with properties. Consumers query by interface and LDAP-style filter. Services can arrive, be replaced, or disappear. Good code expresses this dynamics through Declarative Services instead of caching raw registry objects.

@Component(service = PricingService.class)
public final class DefaultPricingService implements PricingService {
  public Money price(Quote quote) { return quote.basePrice(); }
}

The DS runtime creates the component, publishes the service, binds references, and withdraws it safely.

Bundle versus component

A bundle is a deployment and class-loading unit. A DS component is a managed object inside a bundle. One bundle can contain many components; one component can publish several service contracts.

Static and dynamic

Package wiring is normally decided at resolve time and stays stable until a refresh. Service wiring is dynamic at runtime. Confusing those two timelines causes poor designs.

Feynman check

A package wire answers “where is this class loaded from?” A service reference answers “which object currently performs this job?” Explain why those are different questions.

Module RelayIndependent study material · verify runtime details in official project documentation