Skip to content

Commit

Permalink
[WFLY-5255] Implement ejb3 transformers for EAP 6.4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
kabir committed Sep 1, 2015
1 parent 501462a commit 3f8f2ef
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 84 deletions.
Expand Up @@ -36,6 +36,9 @@
import org.jboss.as.controller.operations.validation.StringLengthValidator;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.transform.description.DiscardAttributeChecker;
import org.jboss.as.controller.transform.description.RejectAttributeChecker;
import org.jboss.as.controller.transform.description.ResourceTransformationDescriptionBuilder;
import org.jboss.as.ejb3.timerservice.persistence.TimerPersistence;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
Expand Down Expand Up @@ -111,4 +114,12 @@ public void registerAttributes(ManagementResourceRegistration resourceRegistrati
resourceRegistration.registerReadWriteAttribute(attr, null, new ReloadRequiredWriteAttributeHandler(attr));
}
}

static void registerTransformers1_3_0(ResourceTransformationDescriptionBuilder parent) {
ResourceTransformationDescriptionBuilder db = parent.addChildResource(EJB3SubsystemModel.DATABASE_DATA_STORE_PATH);
db.getAttributeBuilder()
.setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(-1)), REFRESH_INTERVAL)
.setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(true)), ALLOW_EXECUTION)
.addRejectCheck(RejectAttributeChecker.DEFINED, REFRESH_INTERVAL, ALLOW_EXECUTION);
}
}
Expand Up @@ -168,6 +168,10 @@ public class EJB3SubsystemRootResourceDefinition extends SimpleResourceDefinitio
private final boolean registerRuntimeOnly;
private final PathManager pathManager;

private static final ModelVersion VERSION_1_2_1 = ModelVersion.create(1, 2, 1);
private static final ModelVersion VERSION_1_3_0 = ModelVersion.create(1, 3, 0);
private static final ModelVersion VERSION_3_0_0 = ModelVersion.create(3, 0, 0);

EJB3SubsystemRootResourceDefinition(boolean registerRuntimeOnly, PathManager pathManager) {
super(PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, EJB3Extension.SUBSYSTEM_NAME),
EJB3Extension.getResourceDescriptionResolver(EJB3Extension.SUBSYSTEM_NAME),
Expand Down Expand Up @@ -274,15 +278,20 @@ public void registerChildren(ManagementResourceRegistration subsystemRegistratio

static void registerTransformers(SubsystemRegistration subsystemRegistration) {
registerTransformers_1_2_1(subsystemRegistration);
registerTransformers_1_3_0(subsystemRegistration);
registerTransformers_3_0_0(subsystemRegistration);
}


private static void registerTransformers_1_2_1(SubsystemRegistration subsystemRegistration) {
registerTransformers1_2(subsystemRegistration, ModelVersion.create(1, 2, 1));
registerTransformers1_2_1_and_1_3_0(subsystemRegistration, VERSION_1_2_1);
}

private static void registerTransformers_1_3_0(SubsystemRegistration subsystemRegistration) {
registerTransformers1_2_1_and_1_3_0(subsystemRegistration, VERSION_1_3_0);
}

private static void registerTransformers1_2(SubsystemRegistration subsystemRegistration, ModelVersion subsystem12) {
private static void registerTransformers1_2_1_and_1_3_0(SubsystemRegistration subsystemRegistration, ModelVersion version) {
final ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
builder.getAttributeBuilder().addRejectCheck(RejectAttributeChecker.DEFINED, EJB3SubsystemRootResourceDefinition.DEFAULT_SFSB_PASSIVATION_DISABLED_CACHE);
builder.getAttributeBuilder().setDiscard(DiscardAttributeChecker.UNDEFINED, EJB3SubsystemRootResourceDefinition.DEFAULT_SFSB_PASSIVATION_DISABLED_CACHE);
Expand All @@ -294,20 +303,25 @@ private static void registerTransformers1_2(SubsystemRegistration subsystemRegis
// a legacy slave can't have that subsystem in its profile.
builder.getAttributeBuilder().setDiscard(new DiscardAttributeChecker.DiscardAttributeValueChecker(new ModelNode(false)), EJB3SubsystemRootResourceDefinition.DISABLE_DEFAULT_EJB_PERMISSIONS);
//builder.getAttributeBuilder().setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode("hornetq-ra"), true), EJB3SubsystemRootResourceDefinition.DEFAULT_RESOURCE_ADAPTER_NAME);
PassivationStoreResourceDefinition.registerTransformers_1_2_0(builder);
TimerServiceResourceDefinition.registerTransformers_1_2_0(builder);

PassivationStoreResourceDefinition.registerTransformers_1_2_1_and_1_3_0(builder);
builder.rejectChildResource(PathElement.pathElement(EJB3SubsystemModel.REMOTING_PROFILE));
TransformationDescription.Tools.register(builder.build(), subsystemRegistration, subsystem12);
if (version.equals(VERSION_1_2_1)) {
TimerServiceResourceDefinition.registerTransformers_1_2_0(builder);
} else if (version.equals(VERSION_1_3_0)) {
TimerServiceResourceDefinition.registerTransformers_1_3_0(builder);

}

TransformationDescription.Tools.register(builder.build(), subsystemRegistration, version);
}

private static void registerTransformers_3_0_0(SubsystemRegistration subsystemRegistration) {
ModelVersion subsystem200 = ModelVersion.create(3, 0, 0);

final ResourceTransformationDescriptionBuilder builder = TransformationDescriptionBuilder.Factory.createSubsystemInstance();
builder.getAttributeBuilder()
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode("hornetq-ra"), true), EJB3SubsystemRootResourceDefinition.DEFAULT_RESOURCE_ADAPTER_NAME)
.end();
TransformationDescription.Tools.register(builder.build(), subsystemRegistration, subsystem200);
.end();
TransformationDescription.Tools.register(builder.build(), subsystemRegistration, VERSION_3_0_0);
}

private static class EJB3ThreadFactoryResolver extends ThreadFactoryResolver.SimpleResolver {
Expand Down
Expand Up @@ -78,30 +78,13 @@ public void registerAttributes(ManagementResourceRegistration resourceRegistrati
* - sets appropriate defaults for IDLE_TIMEOUT, IDLE_TIMEOUT_UNIT, PASSIVATE_EVENTS_ON_REPLICATE, and CLIENT_MAPPINGS_CACHE
*/
@SuppressWarnings("deprecation")
static void registerTransformers_1_1_0(ResourceTransformationDescriptionBuilder parent) {
static void registerTransformers_1_2_1_and_1_3_0(ResourceTransformationDescriptionBuilder parent) {

ResourceTransformationDescriptionBuilder child = parent.addChildRedirection(INSTANCE.getPathElement(), PathElement.pathElement(EJB3SubsystemModel.CLUSTER_PASSIVATION_STORE));
child.getAttributeBuilder()
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode(true), true), EJB3SubsystemModel.PASSIVATE_EVENTS_ON_REPLICATE)
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode("default"), true), EJB3SubsystemModel.CLIENT_MAPPINGS_CACHE)
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode().set(Integer.MAX_VALUE), true), EJB3SubsystemModel.IDLE_TIMEOUT)
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode().set(TimeUnit.SECONDS.name()), true), EJB3SubsystemModel.IDLE_TIMEOUT_UNIT)
;
}

/*
* This transformer does the following:
* - maps <passivation-store/> to <cluster-passivation-store/>
* - sets appropriate defaults for IDLE_TIMEOUT, IDLE_TIMEOUT_UNIT, PASSIVATE_EVENTS_ON_REPLICATE, and CLIENT_MAPPINGS_CACHE
*/
@SuppressWarnings("deprecation")
static void registerTransformers_1_2_0(ResourceTransformationDescriptionBuilder parent) {

ResourceTransformationDescriptionBuilder child = parent.addChildRedirection(INSTANCE.getPathElement(), PathElement.pathElement(EJB3SubsystemModel.CLUSTER_PASSIVATION_STORE));
child.getAttributeBuilder()
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode(true), true), EJB3SubsystemModel.PASSIVATE_EVENTS_ON_REPLICATE)
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode("default"), true), EJB3SubsystemModel.CLIENT_MAPPINGS_CACHE)
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode().set(Integer.MAX_VALUE), true), EJB3SubsystemModel.IDLE_TIMEOUT)
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode().set(Long.valueOf(Integer.MAX_VALUE)), true), EJB3SubsystemModel.IDLE_TIMEOUT)
.setValueConverter(AttributeConverter.Factory.createHardCoded(new ModelNode().set(TimeUnit.SECONDS.name()), true), EJB3SubsystemModel.IDLE_TIMEOUT_UNIT)
;
}
Expand Down
Expand Up @@ -24,9 +24,7 @@

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationFailedException;
Expand All @@ -38,7 +36,6 @@
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.SimpleResourceDefinition;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.logging.ControllerLogger;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.registry.OperationEntry;
Expand All @@ -52,7 +49,6 @@
import org.jboss.as.controller.transform.TransformationContext;
import org.jboss.as.controller.transform.TransformationTarget;
import org.jboss.as.controller.transform.description.DiscardAttributeChecker;
import org.jboss.as.controller.transform.description.RejectAttributeChecker;
import org.jboss.as.controller.transform.description.ResourceTransformationDescriptionBuilder;
import org.jboss.as.ejb3.logging.EjbLogger;
import org.jboss.dmr.ModelNode;
Expand Down Expand Up @@ -112,19 +108,14 @@ public void registerChildren(final ManagementResourceRegistration resourceRegist
resourceRegistration.registerSubModel(DatabaseDataStoreResourceDefinition.INSTANCE);
}

static void registerTransformers_1_1_0(ResourceTransformationDescriptionBuilder parent) {
ResourceTransformationDescriptionBuilder timerService = parent.addChildResource(EJB3SubsystemModel.TIMER_SERVICE_PATH);
registerDataStoreTransformers(timerService, true);
}

static void registerTransformers_1_2_0(ResourceTransformationDescriptionBuilder parent) {
ResourceTransformationDescriptionBuilder timerService = parent.addChildResource(EJB3SubsystemModel.TIMER_SERVICE_PATH);
registerDataStoreTransformers(timerService, false);
registerDataStoreTransformers(timerService);
}

private static void registerDataStoreTransformers(ResourceTransformationDescriptionBuilder timerService, boolean rejectPathExpressions) {
private static void registerDataStoreTransformers(ResourceTransformationDescriptionBuilder timerService) {

DataStoreTransformer dataStoreTransformer = new DataStoreTransformer(rejectPathExpressions);
DataStoreTransformer dataStoreTransformer = new DataStoreTransformer();
timerService.getAttributeBuilder()
.setDiscard(DiscardAttributeChecker.ALWAYS, EJB3SubsystemModel.DEFAULT_DATA_STORE)//this is ok, as default-data-store only has any sense with new model, but it is always set!
.end();
Expand All @@ -138,26 +129,21 @@ public PathAddress transform(PathElement current, Builder builder) {
}
});

if (rejectPathExpressions) {
fileDataStore = fileDataStore.getAttributeBuilder()
.addRejectCheck(RejectAttributeChecker.SIMPLE_EXPRESSIONS, FileDataStoreResourceDefinition.PATH)
.end();
}
fileDataStore.addOperationTransformationOverride(ModelDescriptionConstants.ADD)
.inheritResourceAttributeDefinitions()
.setCustomOperationTransformer(dataStoreTransformer)
.end();

}

private static class DataStoreTransformer implements CombinedTransformer {

private final Pattern EXPRESSION_PATTERN = Pattern.compile(".*\\$\\{.*\\}.*");
public static void registerTransformers_1_3_0(ResourceTransformationDescriptionBuilder parent) {
ResourceTransformationDescriptionBuilder timerService = parent.addChildResource(EJB3SubsystemModel.TIMER_SERVICE_PATH);
DatabaseDataStoreResourceDefinition.registerTransformers1_3_0(timerService);
}

private final boolean rejectPathExpression;
private static class DataStoreTransformer implements CombinedTransformer {

private DataStoreTransformer(boolean rejectPathExpression) {
this.rejectPathExpression = rejectPathExpression;
private DataStoreTransformer() {
}

@Override
Expand Down Expand Up @@ -202,9 +188,6 @@ public void transformResource(ResourceTransformationContext context, PathAddress
}

ModelNode path = fileStore.get(EJB3SubsystemModel.PATH);
if (rejectPathExpression) {
rejectPathExpression(context, address, defaultDataStore, path);
}
transformed.get(EJB3SubsystemModel.PATH).set(path);
transformed.get(EJB3SubsystemModel.RELATIVE_TO).set(fileStore.get(EJB3SubsystemModel.RELATIVE_TO));

Expand All @@ -223,25 +206,6 @@ private void rejectIncompatibleDataStores(ResourceTransformationContext context,
}
}

private void rejectPathExpression(ResourceTransformationContext context, PathAddress address, String dataStoreName, ModelNode pathAttribute) throws OperationFailedException {

if (pathAttribute.getType() == ModelType.EXPRESSION
|| (pathAttribute.getType() == ModelType.STRING && EXPRESSION_PATTERN.matcher(pathAttribute.asString()).matches())) {

PathAddress fileStoreAddress =
PathAddress.pathAddress(address, PathElement.pathElement(EJB3SubsystemModel.FILE_DATA_STORE, dataStoreName));

TransformationTarget tgt = context.getTarget();
if (tgt.isIgnoredResourceListAvailableAtRegistration()) {
// Slave is 7.2.x or higher and we know this resource is not ignored
List<String> msg = Collections.singletonList(context.getLogger().getAttributeWarning(fileStoreAddress, null, ControllerLogger.ROOT_LOGGER.attributesDontSupportExpressions(), FileDataStoreResourceDefinition.PATH.getName()));
throw ControllerLogger.ROOT_LOGGER.rejectAttributesCoreModelResourceTransformer(fileStoreAddress, tgt.getHostName(), tgt.getVersion(), msg);
} else {
// 7.1.x slave; resource *may* be ignored so we can't fail; just log
context.getLogger().logAttributeWarning(fileStoreAddress, ControllerLogger.ROOT_LOGGER.attributesDontSupportExpressions(), FileDataStoreResourceDefinition.PATH.getName());
}
}
}
}

}
Expand Up @@ -104,7 +104,7 @@ public void testTransformerEAP620() throws Exception {
* @throws Exception
*/
private void testTransformer_1_2_x(ModelTestControllerVersion controllerVersion, int modelVersionMicro) throws Exception {
String subsystemXml = "transform_1_2_0.xml";
String subsystemXml = "transform_1_2_1.xml";
ModelVersion modelVersion = ModelVersion.create(1, 2, modelVersionMicro);
//Use the non-runtime version of the extension which will happen on the HC
KernelServicesBuilder builder = createKernelServicesBuilder(AdditionalInitialization.MANAGEMENT)
Expand Down Expand Up @@ -174,15 +174,15 @@ private void testRejectBadAttributes_1_2_0(ModelTestControllerVersion controller
private FailedOperationTransformationConfig getConfig_1_2_0() {
PathAddress subsystemAddress = PathAddress.pathAddress(EJB3Extension.SUBSYSTEM_PATH);
return new FailedOperationTransformationConfig()
.addFailedAttribute(subsystemAddress,
FailedOperationTransformationConfig.ChainedConfig.createBuilder(
EJB3SubsystemRootResourceDefinition.DEFAULT_SFSB_PASSIVATION_DISABLED_CACHE,
EJB3SubsystemRootResourceDefinition.DISABLE_DEFAULT_EJB_PERMISSIONS)
.addConfig(new FailedOperationTransformationConfig.NewAttributesConfig(EJB3SubsystemRootResourceDefinition.DEFAULT_SFSB_PASSIVATION_DISABLED_CACHE))
.addConfig(new CorrectFalseToTrue(EJB3SubsystemRootResourceDefinition.DISABLE_DEFAULT_EJB_PERMISSIONS)).build())
.addFailedAttribute(subsystemAddress.append(EJB3SubsystemModel.TIMER_SERVICE_PATH, PathElement.pathElement(EJB3SubsystemModel.FILE_DATA_STORE, "file-data-store-rejected")), FailedOperationTransformationConfig.REJECTED_RESOURCE)
.addFailedAttribute(subsystemAddress.append(EJB3SubsystemModel.TIMER_SERVICE_PATH, EJB3SubsystemModel.DATABASE_DATA_STORE_PATH), FailedOperationTransformationConfig.REJECTED_RESOURCE)
;
.addFailedAttribute(subsystemAddress,
FailedOperationTransformationConfig.ChainedConfig.createBuilder(
EJB3SubsystemRootResourceDefinition.DEFAULT_SFSB_PASSIVATION_DISABLED_CACHE,
EJB3SubsystemRootResourceDefinition.DISABLE_DEFAULT_EJB_PERMISSIONS)
.addConfig(new FailedOperationTransformationConfig.NewAttributesConfig(EJB3SubsystemRootResourceDefinition.DEFAULT_SFSB_PASSIVATION_DISABLED_CACHE))
.addConfig(new CorrectFalseToTrue(EJB3SubsystemRootResourceDefinition.DISABLE_DEFAULT_EJB_PERMISSIONS)).build())
.addFailedAttribute(subsystemAddress.append(EJB3SubsystemModel.TIMER_SERVICE_PATH, PathElement.pathElement(EJB3SubsystemModel.FILE_DATA_STORE, "file-data-store-rejected")), FailedOperationTransformationConfig.REJECTED_RESOURCE)
.addFailedAttribute(subsystemAddress.append(EJB3SubsystemModel.TIMER_SERVICE_PATH, EJB3SubsystemModel.DATABASE_DATA_STORE_PATH), FailedOperationTransformationConfig.REJECTED_RESOURCE)
;
}

private static final ModelFixer V_1_1_0_FIXER = new ModelFixer() {
Expand Down
@@ -1,4 +1,4 @@
<subsystem xmlns="urn:jboss:domain:ejb3:2.0">
<subsystem xmlns="urn:jboss:domain:ejb3:3.1">
<session-bean>
<stateless>
<bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
Expand Down

0 comments on commit 3f8f2ef

Please sign in to comment.