public void undeploy(final DeploymentUnit context) {
}
private void addService(final ServiceTarget target, final JBossServiceConfig serviceConfig, final Value<ClassLoader> classLoaderValue) {
final String codeName = serviceConfig.getCode();
final Value<Class<?>> classValue = cached(new LookupClassValue(codeName, classLoaderValue));
final List<Value<?>> constructorArguments = new ArrayList<Value<?>>();
final List<Value<Class<?>>> constructorSignature = new ArrayList<Value<Class<?>>>();
final JBossServiceConstructorConfig constructorConfig = serviceConfig.getConstructorConfig();
if(constructorConfig != null) {
final JBossServiceConstructorConfig.Argument[] arguments = constructorConfig.getArguments();
for(JBossServiceConstructorConfig.Argument argument : arguments) {
final Value<Class<?>> attributeTypeValue = cached(new LookupClassValue(argument.getType(), classLoaderValue));
constructorArguments.add(cached(new ArgumentValue(attributeTypeValue, argument.getValue())));
constructorSignature.add(attributeTypeValue);
}
}
final Value<Constructor<?>> constructorValue = cached(new LookupConstructorValue(classValue, constructorSignature));
final Value<Object> constructedValue = cached(new ConstructedValue(constructorValue, constructorArguments));
final CreateDestroyService<Object> createDestroyService = new CreateDestroyService<Object>(constructedValue);
final StartStopService<Object> startStopService = new StartStopService<Object>(constructedValue);
final String serviceName = serviceConfig.getName();
final ServiceName createDestroyServiceName = convert(serviceName).append(CREATE_SUFFIX);
final ServiceBuilder<?> createDestroyServiceBuilder = target.addService(createDestroyServiceName, createDestroyService);
final ServiceName startStopServiceName = convert(serviceName).append(START_SUFFIX);
final ServiceBuilder<?> startStopServiceBuilder = target.addService(startStopServiceName, startStopService);
startStopServiceBuilder.addDependency(createDestroyServiceName);
final JBossServiceDependencyConfig[] dependencyConfigs = serviceConfig.getDependencyConfigs();
if(dependencyConfigs != null) {
for(JBossServiceDependencyConfig dependencyConfig : dependencyConfigs) {
final ServiceName dependencyCreateDestroyServiceName = convert(dependencyConfig.getDependencyName()).append(CREATE_SUFFIX);
final ServiceName dependencyStartStopServiceName = convert(dependencyConfig.getDependencyName()).append(START_SUFFIX);
final String optionalAttributeName = dependencyConfig.getOptionalAttributeName();
if(optionalAttributeName != null) {
createDestroyServiceBuilder.addDependency(dependencyCreateDestroyServiceName, getPropertyInjector(classValue, optionalAttributeName, createDestroyService, Values.injectedValue()));
} else {
createDestroyServiceBuilder.addDependency(dependencyCreateDestroyServiceName);
}
startStopServiceBuilder.addDependency(dependencyStartStopServiceName);
}
}
final JBossServiceAttributeConfig[] attributeConfigs = serviceConfig.getAttributeConfigs();
if(attributeConfigs != null) {
for(JBossServiceAttributeConfig attributeConfig : attributeConfigs) {
final String attributeName = attributeConfig.getName();
final JBossServiceAttributeConfig.Inject inject = attributeConfig.getInject();
final JBossServiceAttributeConfig.ValueFactory valueFactory = attributeConfig.getValueFactory();
if(inject != null) {
final String propertyName = inject.getPropertyName();
Value<?> valueToInject = Values.injectedValue();
if(propertyName != null) {
valueToInject = cached(new MethodValue<Object>(new LookupGetMethodValue(classValue, propertyName), valueToInject, Values.<Object>emptyList()));
}
createDestroyServiceBuilder.addDependency(convert(inject.getBeanName()).append(CREATE_SUFFIX), getPropertyInjector(classValue, attributeName, createDestroyService, valueToInject));
startStopServiceBuilder.addDependencies(convert(inject.getBeanName()).append(START_SUFFIX));
} else if(valueFactory != null) {
final String methodName = valueFactory.getMethodName();
final JBossServiceAttributeConfig.ValueFactoryParameter[] parameters = valueFactory.getParameters();
final List<Value<Class<?>>> paramTypes = new ArrayList<Value<Class<?>>>(parameters.length);
final List<Value<?>> paramValues = new ArrayList<Value<?>>(parameters.length);
for(JBossServiceAttributeConfig.ValueFactoryParameter parameter : parameters) {
final Value<Class<?>> attributeTypeValue = cached(new LookupClassValue(parameter.getType(), classLoaderValue));
paramTypes.add(attributeTypeValue);
paramValues.add(cached(new ArgumentValue(attributeTypeValue, parameter.getValue())));
}
final Value<?> valueToInject = cached(new MethodValue(new LookupMethodValue(classValue, methodName, paramTypes), Values.injectedValue(), paramValues));
createDestroyServiceBuilder.addDependency(convert(valueFactory.getBeanName()).append(CREATE_SUFFIX), getPropertyInjector(classValue, attributeName, createDestroyService, valueToInject));