2017-02-06 3 views
1

Как исправить мой тест Spring для Atomikos JTA и Hibernate?Как исправить мою конфигурацию Spring для Atomicos JTA и Hibernate?

Исключение трассировки стека:

2017-02-06 16:03:22.944 [TRACE] [main] [org.hibernate.service.internal.AbstractServiceRegistryImpl:224] Initializing service [role=org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform] 
2017-02-06 16:03:22.953 [WARN] [main] [org.springframework.context.support.GenericApplicationContext:549] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hudsonTradeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.opessoftware.platinum.oms.webservice.TradeService com.opessoftware.platinum.oms.controller.HudsonTradeController.tradeService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tradeServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.opessoftware.platinum.oms.db.OrderManagementSystemDao com.opessoftware.platinum.oms.webservice.TradeServiceImpl.orderDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderManagementSystemDaoJpa': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.opessoftware.platinum.oms.configuration.PersistenceConfiguration: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
2017-02-06 16:03:22.964 [ERROR] [main] [org.springframework.test.context.TestContextManager:231] Caught exception while allowing TestExecutionListener [org.springframewor[email protected]a96d56c] to prepare test instance [[email protected]ab4a5b] 
java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) 
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hudsonTradeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.opessoftware.platinum.oms.webservice.TradeService com.opessoftware.platinum.oms.controller.HudsonTradeController.tradeService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tradeServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.opessoftware.platinum.oms.db.OrderManagementSystemDao com.opessoftware.platinum.oms.webservice.TradeServiceImpl.orderDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderManagementSystemDaoJpa': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.opessoftware.platinum.oms.configuration.PersistenceConfiguration: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:778) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:843) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:125) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261) 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) 
    ... 31 common frames omitted 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.opessoftware.platinum.oms.webservice.TradeService com.opessoftware.platinum.oms.controller.HudsonTradeController.tradeService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tradeServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.opessoftware.platinum.oms.db.OrderManagementSystemDao com.opessoftware.platinum.oms.webservice.TradeServiceImpl.orderDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderManagementSystemDaoJpa': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.opessoftware.platinum.oms.configuration.PersistenceConfiguration: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) 
    ... 47 common frames omitted 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tradeServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.opessoftware.platinum.oms.db.OrderManagementSystemDao com.opessoftware.platinum.oms.webservice.TradeServiceImpl.orderDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderManagementSystemDaoJpa': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.opessoftware.platinum.oms.configuration.PersistenceConfiguration: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1199) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1123) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1021) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) 
    ... 49 common frames omitted 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.opessoftware.platinum.oms.db.OrderManagementSystemDao com.opessoftware.platinum.oms.webservice.TradeServiceImpl.orderDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderManagementSystemDaoJpa': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.opessoftware.platinum.oms.configuration.PersistenceConfiguration: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) 
    ... 60 common frames omitted 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderManagementSystemDaoJpa': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.opessoftware.platinum.oms.configuration.PersistenceConfiguration: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:357) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1219) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1199) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1123) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1021) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) 
    ... 62 common frames omitted 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.opessoftware.platinum.oms.configuration.PersistenceConfiguration: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:575) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:541) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:707) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:680) 
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:354) 
    ... 73 common frames omitted 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:953) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:883) 
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:340) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:319) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579) 
    ... 86 common frames omitted 
Caused by: java.lang.NullPointerException: null 
    at org.hibernate.resource.transaction.backend.jta.internal.DdlTransactionIsolatorJtaImpl.<init>(DdlTransactionIsolatorJtaImpl.java:34) 
    at org.hibernate.tool.schema.internal.Helper.buildDefaultDdlTransactionIsolator(Helper.java:145) 
    at org.hibernate.tool.schema.internal.HibernateSchemaManagementTool.getDdlTransactionIsolator(HibernateSchemaManagementTool.java:162) 
    at org.hibernate.tool.schema.internal.HibernateSchemaManagementTool.buildGenerationTargets(HibernateSchemaManagementTool.java:122) 
    at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:109) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:137) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:65) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:459) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:880) 
    ... 91 common frames omitted 

Atomikos ЕТА конфигурации:

@Configuration 
@EnableTransactionManagement 
public class AtomikosJtaTransactionManagerConfiguration { 

    @Autowired 
    private ApplicationEnvironmentProperties applicationProperties; 

    @Bean 
    public UserTransaction userTransaction() throws Throwable { 
     final UserTransactionImp userTransaction = new UserTransactionImp(); 
     userTransaction.setTransactionTimeout(1000); 

     AtomikosJtaPlatform.transaction = userTransaction; 

     return userTransaction; 
    } 

    @Bean(initMethod = "init", destroyMethod = "close") 
    public TransactionManager transactionManager() throws Throwable { 
     final UserTransactionManager userTransactionManager = new UserTransactionManager(); 
     userTransactionManager.setForceShutdown(false); 

     AtomikosJtaPlatform.transactionManager = userTransactionManager; 

     return userTransactionManager; 
    } 

    @Bean 
    public PlatformTransactionManager platformTransactionManager(TransactionManager transactionManager, 
      UserTransaction userTransaction) throws Throwable { 
     return new JtaTransactionManager(userTransaction, transactionManager); 
    } 

    @Bean 
    public XAConnectionFactory xaConnectionFactory(RedeliveryPolicy redeliveryPolicy) { 
     final ActiveMQXAConnectionFactory xaConnectionFactory = new ActiveMQXAConnectionFactory(); 
     xaConnectionFactory.setBrokerURL(this.applicationProperties.getJmsBrokerUrl()); 
     xaConnectionFactory.setPassword(this.applicationProperties.getJmsBrokerPassword()); 
     xaConnectionFactory.setRedeliveryPolicy(redeliveryPolicy); 
     xaConnectionFactory.setTrustAllPackages(true); 
     xaConnectionFactory.setUserName(this.applicationProperties.getJmsBrokerUserName()); 
     return xaConnectionFactory; 
    } 

    @Bean(initMethod = "init", destroyMethod = "close") 
    public ConnectionFactory connectionFactory(XAConnectionFactory xaConnectionFactory) { 
     final AtomikosConnectionFactoryBean atomikosConnectionFactory = new AtomikosConnectionFactoryBean(); 
     atomikosConnectionFactory.setUniqueResourceName("xamq"); 
     atomikosConnectionFactory.setLocalTransactionMode(false); 
     atomikosConnectionFactory.setXaConnectionFactory(xaConnectionFactory); 

     final PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(); 
     pooledConnectionFactory.setMaxConnections(3); 
     pooledConnectionFactory.setConnectionFactory(new CachingConnectionFactory(atomikosConnectionFactory)); 
     return atomikosConnectionFactory; 
    } 
} 

public class AtomikosJtaPlatform extends AbstractJtaPlatform { 

    private static final long serialVersionUID = 7364400174741027431L; 

    static UserTransaction transaction; 

    static TransactionManager transactionManager; 

    @Override 
    protected TransactionManager locateTransactionManager() { 
     return transactionManager; 
    } 

    @Override 
    protected UserTransaction locateUserTransaction() { 
     return transaction; 
    } 
} 

конфигурации JPA:

@Configuration 
@Import({CommonConfiguration.class}) 
public class PersistenceConfiguration { 

    @Autowired 
    private ApplicationEnvironmentProperties applicationProperties; 

    @Autowired 
    private HibernateProperties hibernateProperties; 

    @Bean 
    public DataSource derbyDataSource() { 
     final BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver"); 
     dataSource.setPassword(this.applicationProperties.getJdbcConnectionPassword()); 
     dataSource.setUsername(this.applicationProperties.getJdbcConnectionUserName()); 
     dataSource.setUrl(this.applicationProperties.getJdbcConnectionUrl()); 
     return dataSource; 
    } 

    @Bean 
    public AbstractEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, 
      JpaVendorAdapter jpaVendorAdapter) { 
     final LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean(); 
     entityManagerFactory.setDataSource(dataSource); 
     entityManagerFactory.setJpaVendorAdapter(jpaVendorAdapter); 
     entityManagerFactory.setPackagesToScan("com.opessoftware.platinum.model"); 
     entityManagerFactory.setJpaProperties(this.hibernateProperties.getProperties()); 
     return entityManagerFactory; 
    } 

    @Bean 
    public JpaVendorAdapter hibernateJpaVendorAdapter() { 
     final HibernateJpaVendorAdapter jpaAdapter = new HibernateJpaVendorAdapter(); 
     jpaAdapter.setShowSql(true); 
     jpaAdapter.setGenerateDdl(true); 
     return jpaAdapter; 
    } 

    @Bean 
    public OrderManagementSystemDao orderManagementSystemDaoJpa() { 
     return new OrderManagementSystemDaoJpa(); 
    } 
} 

конфигурации спящего режима (свойства) для Atomikos:

public class AtomikosJtaHibernateConfiguration { 
    @Bean 
    public HibernateProperties hibernateProperties() { 
     return new AtomikosJtaHibernateProperties(new DefaultHibernateProperties()); 
    } 
} 

Hibernate свойства:

public class AtomikosJtaHibernateProperties implements HibernateProperties { 

     private final HibernateProperties hibernateProperties; 

     public AtomikosJtaHibernateProperties(HibernateProperties defaultHibernateProperties) { 
      this.hibernateProperties = defaultHibernateProperties; 
      this.hibernateProperties.getProperties().setProperty("hibernate.transaction.jta.platform", 
        AtomikosJtaPlatform.class.getName()); 
      this.hibernateProperties.getProperties().setProperty("javax.persistence.transactionType", "JTA"); 
      this.hibernateProperties.getProperties().setProperty("hibernate.transaction.factory_class", 
        "org.hibernate.transaction.JTATransactionFactory"); 
      this.hibernateProperties.getProperties().setProperty("hibernate.transaction.manager_lookup_class", 
        "com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup"); 
     } 

     @Override 
     public Properties getProperties() { 
      return this.hibernateProperties.getProperties(); 
     } 
    } 

public class DefaultHibernateProperties implements HibernateProperties { 

    private final Properties hibernateProperties; 

    public DefaultHibernateProperties() { 
     this.hibernateProperties = new Properties(); 
     this.hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.DerbyDialect"); 
     this.hibernateProperties.setProperty("hibernate.format_sql", "true"); 
     this.hibernateProperties.setProperty("hibernate.jdbc.fetch_size", "50"); 
     this.hibernateProperties.setProperty("hibernate.hbm2ddl.auto", "create"); 
    } 

    @Override 
    public Properties getProperties() { 
     return this.hibernateProperties; 
    } 
} 

JDBC свойства соединения: конфигурация

jdbc.ConnectionDatabaseName=testdb 
jdbc.ConnectionPassword= 
jdbc.ConnectionPortNumber=0 
jdbc.ConnectionServerName=memory 
jdbc.ConnectionUrl=jdbc:derby:memory:testdb;create=true 
jdbc.ConnectionUserName=sa 

Программное обеспечение:

  • Atomikos 4.0.4
  • Hibernate 5.1.3.Final
  • Спринг 4.2.9.RELEASE
  • OpenJDK 1.8.0_121

Литература:

+0

На самом деле трудно сказать, что это неправильно, но я уверен, что 'AtomikosJtaPlatform' должен быть боб, и я не мог видеть, где вы создаете его. – Strelok

+0

Члены 'AtomikosJtaPlatform' являются' public static'. –

+0

не уверен, насколько это важно, строка кода, которая вам не подходит, кажется [здесь] (https://github.com/hibernate/hibernate-orm/blob/5.1.3/hibernate-core/src/main/ java/org/hibernate/resource/transaction/backend/jta/internal/DdlTransactionIsolatorJtaImpl.java # L34) и, вероятно, происходит, когда 'getService (JtaPlatform.class)' возвращает значение null. Вы можете использовать точку останова на этой линии и точно знать, какая часть является нулевой. – Strelok

ответ

0

После довольно много исследований и экспериментов с примером проект, который я создал под названием spring-jpa-atomikos-hibernate-activemq, мне удалось настроить Spring JPA, Atomicos JTA, Hibernate, d встроенный сервер HSQLDB. Обратите внимание, что в version 1.0.0 в модульном тесте PersonRepositoryAndMessengerTest вводится TransactionTemplate, для которого требуется PlatformTransactionManager, поэтому для конфигурации JPA не требуется аннотации @DependsOn для компонента менеджера транзакций, так как у меня было stated earlier.Тем не менее, я должен добавить @DependsOn({"brokerService"}) для того, чтобы заставить Spring создать встроенный ActiveMQ брокера:

@Configuration 
@Import({AtomikosJtaHsqlDatabaseConfiguration.class, AtomikosJtaTransactionManagerConfiguration.class, 
    CommonConfiguration.class, JpaConfiguration.class, MessageBrokerConfiguration.class, ServiceConfiguration.class, 
    TransactionTemplateConfiguration.class}) 
@DependsOn({"brokerService"}) 
public class GlobalTransactionManagerConfiguration { 
} 

Обратите внимание, что экземпляр EntityManagerFactory в JPA configuration устанавливает источник данных, не JTA, а не исходные данные JTA, которые подтверждает мой suggestion (и противоречит manish «s observation), по крайней мере, в этом случае, что можно по-прежнему использовать setDataSource вместо setJtaDataSource:

@Bean 
    public AbstractEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, 
      JpaVendorAdapter jpaVendorAdapter) { 
     final LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean(); 
     entityManagerFactory.setDataSource(dataSource); 
     entityManagerFactory.setJpaVendorAdapter(jpaVendorAdapter); 
     entityManagerFactory.setPackagesToScan("me.derekmahar.example.spring.model"); 
     entityManagerFactory.setJpaProperties(this.hibernateProperties.getProperties()); 
     return entityManagerFactory; 
    } 

Хотя только предупреждения, каждый тестовый модуль генерирует раздражает TransportDisposedIOException исключения, которые я еще не знаю, как устранить:

org.apache.activemq.transport.TransportDisposedIOException: peer (vm://test#3) stopped. 
Смежные вопросы