Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring HibernateTemplate.flush()方法上的TransactionRequiredException_Spring_Hibernate_Weblogic_Jta_Message Driven Bean - Fatal编程技术网

Spring HibernateTemplate.flush()方法上的TransactionRequiredException

Spring HibernateTemplate.flush()方法上的TransactionRequiredException,spring,hibernate,weblogic,jta,message-driven-bean,Spring,Hibernate,Weblogic,Jta,Message Driven Bean,创建了JTA全局事务,我通过MDB从jms队列获取员工的数据,从MDB调用insertEmployee()方法,并在HibernateTemplate.flush()方法上获取TransactionRequiredException。不确定这里缺少什么,代码如下 JTA事务管理器 @Configuration @EnableTransactionManagement public class JtaConfiguration { @Bean

创建了JTA全局事务,我通过MDB从jms队列获取员工的数据,从MDB调用insertEmployee()方法,并在HibernateTemplate.flush()方法上获取TransactionRequiredException。不确定这里缺少什么,代码如下

JTA事务管理器

 @Configuration
    @EnableTransactionManagement
    public class JtaConfiguration {
    
        @Bean
        public PlatformTransactionManager transactionManager() throws Throwable {
            WebLogicJtaTransactionManager transactionManager = new WebLogicJtaTransactionManager();
            transactionManager.setTransactionManagerName("javax.transaction.TransactionManager");
           
            return transactionManager;
        }
    }

@Bean
    @DependsOn("transactionManager")
    public LocalSessionFactoryBean sessionFactory() throws NamingException {
        sessionFactory =  new LocalSessionFactoryBean();//new AnnotationSessionFactoryBean();
        Properties props = new Properties();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setAnnotatedClasses(Employee.class);
        props.put(SHOW_SQL, "false");
        props.put("hibernate.format_sql", "true");
        props.put(HBM2DDL_AUTO, "none");
        props.put(DIALECT, "org.hibernate.dialect.Oracle10gDialect");
        props.put("javax.persistence.validation.mode", "none");
        props.put("hibernate.id.new_generator_mappings", "true");
        
        
        props.put("hibernate.transaction.jta.platform", WeblogicJtaPlatform.class.getName());
        props.put("javax.persistence.transactionType", "JTA");

        sessionFactory.setHibernateProperties(props);
        return sessionFactory;
    }

@Transactional(propagation =Propagation.REQUIRES_NEW, rollbackFor=Exception.class)
    public long insertEmployee(Data data) {
        Employee Employee = new Employee();
        Employee.setId(data.getId());
        Employee.setName(data.getName());
        Employee.setSalary(data.getSalary());
        try {
            getHibernateTemplate().save(Employee);
        } catch (DataIntegrityViolationException |ConstraintViolationException sqlEx) {
            logger.error("DUPLICATE MESSAGE" );
        } finally {
            try {
                getHibernateTemplate().flush();
            } catch (DataIntegrityViolationException sqlEx) {
            }
        }
        return Employee.getId();
    }
MDB

@TransactionManagement(TransactionManagementType.CONTAINER)
public class DataReceiver implements MessageListener  {

@Override
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void onMessage(Message message) {
    //get data from message and insert using below method
        insertEmployee(Data data)
    }
}