cancel
Showing results for 
Search instead for 
Did you mean: 

Using Spring Beans

msatti
Champ in-the-making
Champ in-the-making

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

1 REPLY 1

msatti
Champ in-the-making
Champ in-the-making

The reason it didn't work it because I didn't set up my process engine correctly. The following got it working for me:

@Configurationpublic 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();     }}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍