2016-05-17 107 views
0

我有一個問題。我將我的應用程序與Activiti(在同一個數據庫中)集成在一起。當我插入,更新或刪除Dao類的實體(不是實體的Activiti)時,使用了@Transactional,但沒有任何關於保存到數據庫的例外。與Activiti集成我的應用程序

這裏是我的config來整合:

@Configuration 
public class ActivitiEngineConfiguration { 

    private final Logger log = LoggerFactory.getLogger(ActivitiEngineConfiguration.class); 

    @Autowired 
    protected Environment environment; 

    @Bean 
    public DataSource dataSource() { 
    SimpleDriverDataSource ds = new SimpleDriverDataSource(); 

    try { 
     @SuppressWarnings("unchecked") 
     Class<? extends Driver> driverClass = (Class<? extends Driver>) Class.forName(environment.getProperty("jdbc.driver", "org.postgresql.Driver")); 
     ds.setDriverClass(driverClass); 

    } catch (Exception e) { 
     log.error("Error loading driver class", e); 
    } 

    ds.setUrl(environment.getProperty("spring.datasource.url")); 
    ds.setUsername(environment.getProperty("spring.datasource.username")); 
    ds.setPassword(environment.getProperty("spring.datasource.password")); 

    return ds; 
    } 


    @Bean(name = "transactionManager") 
    public PlatformTransactionManager annotationDrivenTransactionManager() { 
    DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); 
    transactionManager.setDataSource(dataSource()); 
    System.out.println("transactionManager: "+transactionManager); 
    return transactionManager; 
    } 


    @Bean(name="processEngineFactoryBean") 
    public ProcessEngineFactoryBean processEngineFactoryBean() { 
    ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean(); 
    factoryBean.setProcessEngineConfiguration(processEngineConfiguration()); 
    return factoryBean; 
    } 

    @Bean(name="processEngine") 
    public ProcessEngine processEngine() { 
    // Safe to call the getObject() on the @Bean annotated processEngineFactoryBean(), will be 
    // the fully initialized object instanced from the factory and will NOT be created more than once 
    try { 
     return processEngineFactoryBean().getObject(); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
    } 

    @Bean(name="processEngineConfiguration") 
    public ProcessEngineConfigurationImpl processEngineConfiguration() { 
    SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration(); 
    processEngineConfiguration.setDataSource(dataSource()); 
    processEngineConfiguration.setDatabaseSchemaUpdate(environment.getProperty("engine.schema.update", "true")); 
    processEngineConfiguration.setTransactionManager(annotationDrivenTransactionManager()); 
    processEngineConfiguration.setJobExecutorActivate(Boolean.valueOf(
     environment.getProperty("engine.activate.jobexecutor", "false"))); 
    processEngineConfiguration.setAsyncExecutorEnabled(Boolean.valueOf(
     environment.getProperty("engine.asyncexecutor.enabled", "true"))); 
    processEngineConfiguration.setAsyncExecutorActivate(Boolean.valueOf(
     environment.getProperty("engine.asyncexecutor.activate", "true"))); 
    processEngineConfiguration.setHistory(environment.getProperty("engine.history.level", "full")); 

    String mailEnabled = environment.getProperty("engine.email.enabled"); 
    if ("true".equals(mailEnabled)) { 
     processEngineConfiguration.setMailServerHost(environment.getProperty("engine.email.host")); 
     int emailPort = 1025; 
     String emailPortProperty = environment.getProperty("engine.email.port"); 
     if (StringUtils.isNotEmpty(emailPortProperty)) { 
     emailPort = Integer.valueOf(emailPortProperty); 
     } 
     processEngineConfiguration.setMailServerPort(emailPort); 
     String emailUsernameProperty = environment.getProperty("engine.email.username"); 
     if (StringUtils.isNotEmpty(emailUsernameProperty)) { 
     processEngineConfiguration.setMailServerUsername(emailUsernameProperty); 
     } 

     String emailPasswordProperty = environment.getProperty("engine.email.password"); 
     if (StringUtils.isNotEmpty(emailPasswordProperty)) { 
     processEngineConfiguration.setMailServerPassword(emailPasswordProperty); 
     } 
    } 

//  List<AbstractFormType> formTypes = new ArrayList<AbstractFormType>(); 
//  formTypes.add(new UserFormType()); 
//  formTypes.add(new ProcessDefinitionFormType()); 
//  formTypes.add(new MonthFormType()); 
//  processEngineConfiguration.setCustomFormTypes(formTypes); 

    return processEngineConfiguration; 
    } 

    @Bean 
    public RepositoryService repositoryService() { 
    return processEngine().getRepositoryService(); 
    } 

    @Bean 
    public RuntimeService runtimeService() { 
    return processEngine().getRuntimeService(); 
    } 

    @Bean 
    public TaskService taskService() { 
    return processEngine().getTaskService(); 
    } 

    @Bean 
    public HistoryService historyService() { 
    return processEngine().getHistoryService(); 
    } 

    @Bean 
    public FormService formService() { 
    return processEngine().getFormService(); 
    } 

    @Bean 
    public IdentityService identityService() { 
    return processEngine().getIdentityService(); 
    } 

    @Bean 
    public ManagementService managementService() { 
    return processEngine().getManagementService(); 
    } 
} 

DAO層:

@Autowired 
private SessionFactory sessionFactory; 

@Override 
@Transactional 
public void save(MyEntity obj) { 
    sessionFactory.getCurrentSession().saveOrUpdate(loaiDanhMuc); 
} 

謝謝大家!

回答

0

我猜@Transactional是不是在這種情況下

工作請檢查下面以下幾件事:

  1. 檢查<tx:annotation-driven />在Spring XML文件中定義。
+0

shankarsh15。但是我使用了插入,所以如何解決我的問題?幫助我 – KhanhSpring

+0

@EnableTransactionManagement – shankarsh15