Extension 实现

WildFly 中的任意一个 subsystem 都必需对应一个 Extension 实现,

WildFly Controller API: Extension

Extension 实现必需遵循如下规则:

  1. Extension 实现类的构造方法不能有参数

  2. Extension 实现类应的类加载 Module 必需包含一个 META-INF/services/org.jboss.as.controller.Extension 文件,并且该文件内容为Extension 实现类,参照代码-1

  3. WildFly 配置文件中必需有 extension 的相应配置,且 extension 的 module 属性指向 Extension 实现类对应的类加载 Module,参照代码-2

  4. initialize() 实现需要注册 Subsystem Root ResourceDefinition 及 XML 写操作解析器,initializeParsers() 实现需要设定 XML 读操作解析器,参照代码-3

代码-1
com.acme.corp.tracker.extension.TrackerExtension
代码-2
<extensions>
    ...
    <extension module="com.acme.corp.tracker"/>
</extensions>

TrackerExtension initializeParsers(), initialize() 实现如下

代码-3
@Override
public void initializeParsers(ExtensionParsingContext context) {
    context.setSubsystemXmlMapping(SUBSYSTEM_NAME, NAMESPACE_1_0, parser);
}

@Override
public void initialize(ExtensionContext context) {

    TrackerSubsystemDefinition resourceDefinition = new TrackerSubsystemDefinition(parameters);
    final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, CURRENT_VERSION);
    subsystem.registerSubsystemModel(resourceDefinition);
    subsystem.registerXMLElementWriter(parser);
}

完整实现代码参照 TrackerExtension.java, 详细关于XML 解析器的实现参照 模型结构.