private boolean isJavaNonBlocking(T componentModel, ComponentExecutor<T> executor) { if (componentModel instanceof OperationModel && !((OperationModel) componentModel).isBlocking()) { return executor instanceof ReflectiveMethodOperationExecutor; } else { return componentModel instanceof ConstructModel; } }
@Override public ProcessingType getProcessingType() { ProcessingType processingType = asProcessingType(componentModel.getExecutionType()); if (processingType == CPU_LITE && !componentModel.isBlocking()) { // If processing type is CPU_LITE and operation is non-blocking then use CPU_LITE_ASYNC processing type so that the Flow can // return processing to a Flow thread. return CPU_LITE_ASYNC; } else { return processingType; } }
private OperationModel mockOperation(boolean blocking) { OperationModel operationModel = mock(OperationModel.class); when(operationModel.isBlocking()).thenReturn(blocking); return operationModel; }
@Override protected void onOperation(OperationModel operation) { String operationName = operation.getName(); assertThat(operation.isBlocking(), is(!nonBlockingOperations.contains(operationName))); if (operationName.equals("approve")) { assertThat(operation.getExecutionType(), is(CPU_INTENSIVE)); cpuIntensive.set(true); } else if (operation.requiresConnection()) { assertThat(operation.getExecutionType(), is(BLOCKING)); blocking.set(true); } else { assertThat(operation.getExecutionType(), is(CPU_LITE)); } } }.walk(heisenbergExtension);
@Test public void nonBlockingExecutionType() { ExtensionModel extensionModel = loadExtension(MarvelExtension.class); OperationModel operation = extensionModel.getConfigurationModel(CONFIG_NAME).get().getOperationModel("fireMissile").get(); assertThat(operation.isBlocking(), is(false)); assertThat(operation.getExecutionType(), is(CPU_LITE)); assertThat(operation.getOutput().getType(), instanceOf(StringType.class)); assertThat(operation.getOutputAttributes().getType(), equalTo(typeLoader.load(void.class))); }
private boolean isJavaNonBlocking(T componentModel, ComponentExecutor<T> executor) { if (componentModel instanceof OperationModel && !((OperationModel) componentModel).isBlocking()) { return executor instanceof ReflectiveMethodOperationExecutor; } else { return componentModel instanceof ConstructModel; } }
when(extensionModel.getConfigurationModels()).thenReturn(asList(configurationModel)); when(operationModel.getName()).thenReturn(getClass().getName()); when(operationModel.isBlocking()).thenReturn(true); when(extensionModel.getXmlDslModel()).thenReturn(XmlDslModel.builder().setPrefix("test-extension").build()); when(operationModel.getOutput())
@Override public void visit(OperationModel operationModel) { OutputModel typedOutputModel = resolveOutputModelType(operationModel.getOutput(), outputMetadataDescriptor.getPayloadMetadata()); OutputModel typedAttributesModel = resolveOutputModelType(operationModel.getOutputAttributes(), outputMetadataDescriptor.getAttributesMetadata()); typedModel.set((T) new ImmutableOperationModel(operationModel.getName(), operationModel.getDescription(), resolveParameterGroupModelType( operationModel.getParameterGroupModels(), inputMetadataDescriptor.getAllParameters()), operationModel.getNestedComponents(), typedOutputModel, typedAttributesModel, operationModel.isBlocking(), operationModel.getExecutionType(), operationModel.requiresConnection(), operationModel.isTransactional(), operationModel.supportsStreaming(), operationModel.getDisplayModel().orElse(null), operationModel.getErrorModels(), operationModel.getStereotype(), operationModel.getModelProperties(), operationModel.getNotificationModels(), operationModel.getDeprecationModel().orElse(null))); }
@Override public ProcessingType getProcessingType() { ProcessingType processingType = asProcessingType(componentModel.getExecutionType()); if (processingType == CPU_LITE && !componentModel.isBlocking()) { // If processing type is CPU_LITE and operation is non-blocking then use CPU_LITE_ASYNC processing type so that the Flow can // return processing to a Flow thread. return CPU_LITE_ASYNC; } else { return processingType; } }
@Override public void visit(OperationModel operationModel) { OutputModel typedOutputModel = resolveOutputModelType(operationModel.getOutput(), outputMetadataDescriptor.getPayloadMetadata()); OutputModel typedAttributesModel = resolveOutputModelType(operationModel.getOutputAttributes(), outputMetadataDescriptor.getAttributesMetadata()); typedModel.set((T) new ImmutableOperationModel(operationModel.getName(), operationModel.getDescription(), resolveParameterGroupModelType( operationModel.getParameterGroupModels(), inputMetadataDescriptor.getAllParameters()), operationModel.getNestedComponents(), typedOutputModel, typedAttributesModel, operationModel.isBlocking(), operationModel.getExecutionType(), operationModel.requiresConnection(), operationModel.isTransactional(), operationModel.supportsStreaming(), operationModel.getDisplayModel().orElse(null), operationModel.getErrorModels(), operationModel.getStereotype(), operationModel.getModelProperties(), operationModel.getNotificationModels())); }