Hi all,
I'm fairly new to Activiti so apologies if this is basic.
I have a class implementing the JavaDelegate interface, but it also has an @Autowired bean inside it (it is a class annotated with @Service). I read that since I am autowiring, you can't specify it as an activiti:class inside the service task, you have to bind it using activiti:delegateExpression.
I have my implemented class as:
@Component("myDelegate")
class MyDelegate implements JavaDelegate {
@Autowired
MyCustomService myCustomService;
...
}
and I have defined the service task as:
<serviceTask id="servicetask1" name="Service Task 1" activiti:delegateExpression="${myDelegate}"></serviceTask>
However when I go to run the process, I get a runtime error saying:
org.activiti.engine.ActivitiException: Unknown property used in expression: ${myDelegate}
Is there something else I need to do?
If possible, I was hoping there was a solution that only used annotations rather than .xml bean definitions
The reason it didn't work it because I didn't set up my process engine correctly. The following got it working for me:
@Configuration
public class ProcessEngineConfig {
@Value("classpath*:*.bpmn")
private Resource resources[];
@Bean
public DataSource dataSource() {
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setUsername("sa");
dataSource.setPassword("");
dataSource.setUrl("jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000");
dataSource.setDriverClass(org.h2.Driver.class);
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager) {
SpringProcessEngineConfiguration engineConfiguration = new SpringProcessEngineConfiguration();
engineConfiguration.setDataSource(dataSource);
engineConfiguration.setTransactionManager(transactionManager);
engineConfiguration.setDatabaseSchemaUpdate(SpringProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
engineConfiguration.setAsyncExecutorActivate(false);
engineConfiguration.setDeploymentResources(resources);
return engineConfiguration;
}
@Bean
public ProcessEngineFactoryBean processEngine(SpringProcessEngineConfiguration springProcessEngineConfiguration) {
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration(springProcessEngineConfiguration);
return processEngineFactoryBean;
}
@Bean
public RepositoryService repositoryService(ProcessEngine processEngine) {
return processEngine.getRepositoryService();
}
@Bean
public RuntimeService runtimeService(ProcessEngine processEngine) {
return processEngine.getRuntimeService();
}
@Bean
public HistoryService historyService(ProcessEngine processEngine) {
return processEngine.getHistoryService();
}
@Bean
public ManagementService managementService(ProcessEngine processEngine) {
return processEngine.getManagementService();
}
@Bean
public TaskService taskService(ProcessEngine processEngine) {
return processEngine.getTaskService();
}
}
Ask for and offer help to other Alfresco Process Services and Activiti Users and members of the Alfresco team.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.