CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-ops4j-pax-exam--pax-exam-container-karaf

Integration testing framework for OSGi applications running in Apache Karaf containers

Pending
Overview
Eval results
Files

feature-management.mddocs/

Feature Management

Installation and configuration of Karaf features from repositories during test setup. This capability enables comprehensive testing of feature-based OSGi applications by programmatically installing features and their dependencies in the test container.

Capabilities

Feature Installation

Install Karaf features from feature repositories during test container startup.

/**
 * Install features from a repository URL
 * @param repositoryUrl URL to the features repository XML
 * @param features Names of features to install
 * @return Feature installation option
 */
public static KarafFeaturesOption features(String repositoryUrl, String... features);

/**
 * Install features using a URL reference
 * @param repositoryUrl URL reference to the features repository
 * @param features Names of features to install  
 * @return Feature installation option
 */
public static KarafFeaturesOption features(UrlReference repositoryUrl, String... features);

Usage Examples:

import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.*;

// Install features from Maven repository
Option webFeatures = features(
    "mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
    "http", "jetty", "webconsole"
);

// Install custom features
Option customFeatures = features(
    "mvn:com.example/example-features/1.0.0/xml/features",
    "example-core", "example-rest"
);

// Install single feature
Option scrFeature = features(
    "mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
    "scr"
);

// Using file URL for local features repository
Option localFeatures = features(
    "file:///opt/features/my-features.xml",
    "my-feature-1", "my-feature-2"
);

Features Option

Configuration option for feature installation with repository and feature management.

/**
 * Feature installation option implementing both Option and UrlReference
 */
class KarafFeaturesOption implements Option, UrlReference {
    
    public KarafFeaturesOption(String repositoryUrl, String... features);
    public KarafFeaturesOption(UrlReference repositoryUrl, String... features);
    
    public String[] getFeatures();
    public String getURL(); // From UrlReference interface
}

Usage Examples:

// Create and inspect features option
KarafFeaturesOption featuresOpt = features(
    "mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
    "http", "jetty"
);

String[] installedFeatures = featuresOpt.getFeatures(); // ["http", "jetty"]
String repoUrl = featuresOpt.getURL(); // Repository URL

Common Feature Repositories

Standard Karaf Features

Standard Apache Karaf features repository containing core OSGi and Karaf features:

// Standard features repository URL pattern
String standardFeatures = "mvn:org.apache.karaf.features/standard/{karaf-version}/xml/features";

// Common standard features
Option commonFeatures = features(standardFeatures,
    "scr",              // Declarative Services
    "http",             // HTTP Service
    "jetty",            // Jetty Web Server
    "webconsole",       // Web Management Console
    "ssh",              // SSH Shell
    "management",       // JMX Management
    "scheduler",        // Scheduler Service
    "eventadmin",       // Event Admin Service
    "log",              // Logging Service
    "config",           // Configuration Admin
    "region",           // Karaf Regions
    "package",          // Package Admin
    "kar",              // Karaf Archive
    "wrap"              // Bundle Wrap Service
);

Enterprise Features

Apache Karaf enterprise features for advanced capabilities:

String enterpriseFeatures = "mvn:org.apache.karaf.features/enterprise/4.2.0/xml/features"; 

Option enterpriseFeatures = features(enterpriseFeatures,
    "transaction",      // JTA Transaction Manager
    "jndi",            // JNDI Service
    "jms",             // JMS Support
    "jpa",             // JPA Support
    "application-without-isolation", // Application deployment
    "obr"              // OSGi Bundle Repository
);

Spring Features

Spring framework integration features:

String springFeatures = "mvn:org.apache.karaf.features/spring/4.2.0/xml/features";

Option springFeatures = features(springFeatures,
    "spring",           // Spring Framework
    "spring-aspects",   // Spring AOP
    "spring-instrument", // Spring Instrumentation
    "spring-jdbc",      // Spring JDBC
    "spring-jms",       // Spring JMS
    "spring-struts",    // Spring Struts Integration
    "spring-web",       // Spring Web
    "spring-webmvc"     // Spring Web MVC
);

Feature Installation Patterns

Sequential Feature Installation

Install features in dependency order:

@Configuration
public Option[] config() {
    return new Option[] {
        karafDistributionConfiguration(),
        
        // Install base features first
        features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                "scr", "http", "log"),
        
        // Then install dependent features
        features("mvn:org.apache.karaf.features/enterprise/4.2.0/xml/features",
                "transaction", "jndi"),
        
        // Finally install application features
        features("mvn:com.example/app-features/1.0.0/xml/features",
                "app-core", "app-web")
    };
}

Multiple Repository Installation

Install features from multiple repositories:

@Configuration  
public Option[] config() {
    return new Option[] {
        karafDistributionConfiguration(),
        
        // Karaf standard features
        features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                "scr", "http", "webconsole"),
        
        // Third-party features
        features("mvn:org.apache.cxf.karaf/apache-cxf/3.2.0/xml/features", 
                "cxf-core", "cxf-jaxws"),
        
        // Application features  
        features("mvn:com.example/example-features/1.0.0/xml/features",
                "example-api", "example-impl")
    };
}

Conditional Feature Installation

Install features based on test conditions:

private Option[] getFeatures() {
    List<Option> options = new ArrayList<>();
    
    // Always install base features
    options.add(features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                        "scr", "log"));
    
    // Conditionally install web features
    if (isWebTest()) {
        options.add(features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                            "http", "jetty", "webconsole"));
    }
    
    // Conditionally install enterprise features
    if (isEnterpriseTest()) {
        options.add(features("mvn:org.apache.karaf.features/enterprise/4.2.0/xml/features",
                            "transaction", "jpa"));
    }
    
    return options.toArray(new Option[0]);
}

Feature Repository Types

Maven Repository References

Most common pattern using Maven coordinates:

// Standard Maven GAV pattern
"mvn:groupId/artifactId/version/type/classifier"

// Examples
"mvn:org.apache.karaf.features/standard/4.2.0/xml/features"
"mvn:com.example/custom-features/1.2.3/xml/features"
"mvn:org.apache.cxf.karaf/apache-cxf/3.2.0/xml/features"

File URLs

Local feature repository files:

// Absolute file path
"file:///opt/karaf/features/custom-features.xml"

// Relative to project
"file://src/test/resources/test-features.xml"

HTTP URLs

Remote feature repositories:

// HTTP URL
"http://example.com/features/my-features.xml"

// HTTPS URL  
"https://repository.example.com/features/enterprise-features.xml"

Integration with Configuration

Combine feature installation with configuration management:

@Configuration
public Option[] config() {
    return new Option[] {
        karafDistributionConfiguration(),
        
        // Configure feature repositories in features.cfg
        editConfigurationFilePut(FeaturesCfg.REPOSITORIES,
            "mvn:org.apache.karaf.features/standard/4.2.0/xml/features," +
            "mvn:com.example/example-features/1.0.0/xml/features"),
        
        // Configure boot features
        editConfigurationFilePut(FeaturesCfg.BOOT,
            "config,ssh,management"),
        
        // Install additional features programmatically
        features("mvn:org.apache.karaf.features/standard/4.2.0/xml/features",
                "http", "webconsole")
    };
}

Error Handling

Feature installation operations may throw exceptions for:

  • Invalid repository URLs
  • Inaccessible Maven artifacts
  • Missing feature dependencies
  • Network connectivity issues
  • Invalid feature names
  • Repository parsing errors

Feature installation failures typically occur during container startup and will cause test failure with detailed error messages about missing dependencies or invalid feature definitions.

Install with Tessl CLI

npx tessl i tessl/maven-org-ops4j-pax-exam--pax-exam-container-karaf

docs

configuration-management.md

distribution-configuration.md

feature-management.md

index.md

runtime-configuration.md

security-console.md

tile.json