cancel
Showing results for 
Search instead for 
Did you mean: 

Activiti 5.13 with Spring Java config

sriramks
Champ in-the-making
Champ in-the-making
Hi,

I am new to Activiti Engine

My Project setup is

1. Spring MVC
2. Spring Ioc
3. Spring Security
4. Activiti Engine
5. JPA

The configuration in use is Java based configuration


package com.hrms.config;

import java.util.HashMap;
import java.util.Map;

import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaDialect;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.vask.mp.LeaveTypeService;


@Configuration
@EnableTransactionManagement
@EnableAspectJAutoProxy
@PropertySource({"/vask.hrms.properties","/vask.hrms.messages"})
@ComponentScan(basePackages = {"com.hrms.config","com.vask.hrms.tlm.service.impl","com.vask.hrms.dao","com.vask.hrms.organization.service","com.vask.hrms.security.service"})
public class ComponentConfig {

   @Autowired
   private DatasourceConfig dataSourceConfiguration;

   @Autowired
   private Environment environment;
   
   @Bean
   public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
      LocalContainerEntityManagerFactoryBean lemb = new LocalContainerEntityManagerFactoryBean();
      lemb.setDataSource(dataSourceConfiguration.getDataSource());
      lemb.setJpaVendorAdapter(jpaVendorAdapter());
      lemb.setJpaPropertyMap(jpaPropertyMap());
      lemb.setJpaDialect(new HibernateJpaDialect());
      lemb.setPackagesToScan(new String[] { "com.vask.hrms" });
      return lemb;

   }

   @Bean
   public PlatformTransactionManager transactionManager() {
      JpaTransactionManager jpaTransactionManager = new JpaTransactionManager(entityManagerFactory().getObject());
      Map<String, String> jpaProperties = new HashMap<String, String>();
      jpaProperties.put("transactionTimeout", "43200");
      jpaTransactionManager.setJpaPropertyMap(jpaProperties);
      return jpaTransactionManager;
   }
   
   @Bean
   public SpringProcessEngineConfiguration springProcessEngineConfiguration(LeaveTypeService leaveTypeService,PlatformTransactionManager txManager) {
      SpringProcessEngineConfiguration speconfig = new SpringProcessEngineConfiguration();
      speconfig.setDatabaseType("mysql");
      speconfig.setJdbcDriver("com.mysql.jdbc.Driver");
      speconfig.setJdbcUrl("jdbc:mysql://localhost/activiti");
      speconfig.setJdbcUsername("root");
      speconfig.setJdbcPassword("");
      speconfig.setDataSource(dataSourceConfiguration.getDataSource());
      speconfig.setTransactionManager(txManager);
      speconfig.setDatabaseSchemaUpdate("true");
      speconfig.setJobExecutorActivate(false);
      Resource[] resources = new Resource[1];
      resources[0]=new ClassPathResource("diagrams/tlm/LeaveApproval.bpmn");
      speconfig.setDeploymentResources(resources);
      Map<Object, Object> beans = new HashMap<>();
      beans.put("leaveTypeServiceImpl", leaveTypeService);
      speconfig.setBeans(beans);
      return speconfig;
   }
   
   @Bean
   public ProcessEngineFactoryBean processEngineFactoryBean(SpringProcessEngineConfiguration spec){
      ProcessEngineFactoryBean pefbean = new ProcessEngineFactoryBean();
      pefbean.setProcessEngineConfiguration(spec);
      return pefbean;
      
   }
   
   @Bean
   public RepositoryService repositoryService(ProcessEngineFactoryBean pefb) throws Exception{
      return pefb.getObject().getRepositoryService();
   }
   
   @Bean
   public RuntimeService runtimeService(ProcessEngineFactoryBean pefb) throws Exception {
      return pefb.getObject().getRuntimeService();
   }
   
   @Bean
   public HistoryService historyService(ProcessEngineFactoryBean pefb) throws Exception {
      return pefb.getObject().getHistoryService();
   }
   
   @Bean
   public ManagementService managementService(ProcessEngineFactoryBean pefb) throws Exception {
      return pefb.getObject().getManagementService();
   }
   
   @Bean
   public IdentityService identityService(ProcessEngineFactoryBean pefb) throws Exception {
      return pefb.getObject().getIdentityService();
   }
   
   @Bean
   public FormService formService(ProcessEngineFactoryBean pefb) throws Exception {
      return pefb.getObject().getFormService();
   }
   
   @Bean
   public TaskService taskService(ProcessEngineFactoryBean pefb) throws Exception {
      return pefb.getObject().getTaskService();
   }
   
   

   public JpaVendorAdapter jpaVendorAdapter() {
      HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
      jpaVendorAdapter.setShowSql(false);
      jpaVendorAdapter.setGenerateDdl(true);
      jpaVendorAdapter.setDatabase(Database.MYSQL);
      return jpaVendorAdapter;
   }

   public Map<String, String> jpaPropertyMap() {
      Map<String, String> map = new HashMap<String, String>();
      // map.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, "none");
      map.put("hibernate.connection.provider_class",
            "org.hibernate.connection.C3P0ConnectionProvider");
      map.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
      map.put("hibernate.c3p0.min_size", "5");
      map.put("hibernate.c3p0.max_size", "20");
      map.put("hibernate.c3p0.timeout", "360000");
      map.put("hibernate.dialect",
            "org.hibernate.dialect.MySQL5InnoDBDialect");
      map.put("hibernate.connection.url", "jdbc:mysql://localhost/nemo");
      map.put("hibernate.connection.username", "root");
      map.put("hibernate.connection.password", "");
      map.put("hibernate.c3p0.max_statements", "30");

      return map;
   }
}

I want to use the bean named LeaveTypeService in my servicTask as expression but it throws exception


org.activiti.engine.ActivitiException: Unknown property used in expression: #{leaveTypeServiceImpl.print()}
   at org.activiti.engine.impl.el.JuelExpression.getValue(JuelExpression.java:53)
   at org.activiti.engine.impl.bpmn.behavior.ServiceTaskExpressionActivityBehavior.execute(ServiceTaskExpressionActivityBehavior.java:45)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationActivityExecute.execute(AtomicOperationActivityExecute.java:44)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerStart.eventNotificationsCompleted(AtomicOperationTransitionNotifyListenerStart.java:52)
   at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:49)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionCreateScope.execute(AtomicOperationTransitionCreateScope.java:49)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerTake.execute(AtomicOperationTransitionNotifyListenerTake.java:66)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionDestroyScope.execute(AtomicOperationTransitionDestroyScope.java:116)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerEnd.eventNotificationsCompleted(AtomicOperationTransitionNotifyListenerEnd.java:36)
   at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:49)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.take(ExecutionEntity.java:367)
   at org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior.performOutgoingBehavior(BpmnActivityBehavior.java:105)
   at org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior.performDefaultOutgoingBehavior(BpmnActivityBehavior.java:54)
   at org.activiti.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.leave(FlowNodeActivityBehavior.java:44)
   at org.activiti.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.execute(FlowNodeActivityBehavior.java:36)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationActivityExecute.execute(AtomicOperationActivityExecute.java:44)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationProcessStartInitial.eventNotificationsCompleted(AtomicOperationProcessStartInitial.java:46)
   at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.pvm.runtime.AtomicOperationProcessStart.eventNotificationsCompleted(AtomicOperationProcessStart.java:45)
   at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56)
   at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:87)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:532)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:527)
   at org.activiti.engine.impl.persistence.entity.ExecutionEntity.start(ExecutionEntity.java:322)
   at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:83)
   at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:36)
   at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
   at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:61)
   at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31)
   at org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceByKey(RuntimeServiceImpl.java:63)
   at org.activiti.designer.test.ProcessTestMyProcess.startProcess(ProcessTestMyProcess.java:40)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
   at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
   at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
   at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
   at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
   at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
   at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:53)
   at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
   at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
   at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
   at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
   at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
   at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
   at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
   at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
   at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
   at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
   at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
   at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
   at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
   at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
   at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.activiti.engine.impl.javax.el.PropertyNotFoundException: Cannot resolve identifier 'leaveTypeServiceImpl'
   at org.activiti.engine.impl.juel.AstIdentifier.eval(AstIdentifier.java:83)
   at org.activiti.engine.impl.juel.AstMethod.invoke(AstMethod.java:79)
   at org.activiti.engine.impl.juel.AstMethod.eval(AstMethod.java:75)
   at org.activiti.engine.impl.juel.AstEval.eval(AstEval.java:50)
   at org.activiti.engine.impl.juel.AstNode.getValue(AstNode.java:26)
   at org.activiti.engine.impl.juel.TreeValueExpression.getValue(TreeValueExpression.java:114)
   at org.activiti.engine.impl.delegate.ExpressionGetInvocation.invoke(ExpressionGetInvocation.java:33)
   at org.activiti.engine.impl.delegate.DelegateInvocation.proceed(DelegateInvocation.java:37)
   at org.activiti.engine.impl.delegate.DefaultDelegateInterceptor.handleInvocation(DefaultDelegateInterceptor.java:25)
   at org.activiti.engine.impl.el.JuelExpression.getValue(JuelExpression.java:48)
   … 91 more

Can you please help.

Thanks in Advance

Sriram
1 REPLY 1

jbarrez
Star Contributor
Star Contributor
I'm assuming your 'leaveTypeServiceImpl' bean needs to be a real bean in Spring, now you are passing it to the engine config, but it is now knows as a Spring managed bean.