title: Data is not saved in DB when using Transaction annotation in JUnit test
body: <p>Colleagues, I can not solve a problem with a transactions in Spring more than week. 
  I have created quite similar post (<a href="https://stackoverflow.com/questions/39317601/why-data-wasnt-saved-when-i-use-transactional-annotation">Why data wasn&#39;t saved when I use @Transactional annotation?</a>), but could't to solve the problem in it; of course i took into account the recommendations who gave @Florian Schaetz. I kindly ask you to help me.</p>
  
  <p>So, I have the test class:</p>
  
  <pre><code>@RunWith(SpringJUnit4ClassRunner.class)
  @ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class)
  @Transactional
  
  public class OdValuesServiceTest {
      static final Logger LOG = Logger.getLogger(OdValuesServiceTest.class.getName());
  
      @Autowired
      OdValuesService odValuesService;
      @Autowired
      DBCommonsService dbCommonsService;
  
      @Transactional ("txManagerDU")
      @Test
      @Commit
  
      public void addOdValue() throws Exception {
  
  
                  OdValuesEntity odValuesEntity = new OdValuesEntity();
                  odValuesEntity.setId(dbCommonsService.getNextDocOD("OD_VALUES_ID_GEN"));
                  odValuesEntity.setSysname("Name" + DataGenerator.getRandomISIN());
                  odValuesEntity.setName("Name");
                  odValuesEntity.setIsIn((short) 1);
                  odValuesEntity.setvType(2);
                  odValuesEntity.setMfu((short) 0);
                  odValuesEntity.setIsin("AU000A0JP922");
                  odValuesEntity.setCfi("");
  
                  odValuesService.addOdValue(odValuesEntity);
      }
  }
  </code></pre>
  
  <p>Interface class <code>addOdValue</code> looks like:</p>
  
  <pre><code>public interface OdValuesDAO {
  
      public void addOdValue (OdValuesEntity odValuesEntity);
  
  }
  </code></pre>
  
  <p>And DAO implementation class is :</p>
  
  <pre><code>@Component
  public class OdValuesDAOImpl implemets OdValuesDAO  
  {
  
      static final Logger LOG = Logger.getLogger(OdValuesDAO.class.getName());
  
  
      @Autowired
      @Qualifier("emDU")
      private EntityManager em;
  
      public void addOdValue (OdValuesEntity odValuesEntity) {
          LOG.info(odValuesEntity.toString());
  
          LOG.info("Transaction is active:" + em.getTransaction().isActive());
          //em.getTransaction().begin();
          em.persist(odValuesEntity);
          //em.getTransaction().commit();
  
      }
  
  }
  </code></pre>
  
  <p>Spring context, as config file, is:</p>
  
  <pre><code>@Configuration
  @EnableTransactionManagement
  @ComponentScan
  
  public class AppConfig {
  
  static final Logger LOG = Logger.getLogger(AppConfig.class.getName());
  
  
  /*There are some beans to work with properties file*/
  
      @Bean
      public BasicDataSource primaryDuDataSource() {
          BasicDataSource primaryDuDataSource = new BasicDataSource();
          primaryDuDataSource.setDriverClassName("org.firebirdsql.jdbc.FBDriver");
          primaryDuDataSource.setUrl(primaryDuDbUrl);
          primaryDuDataSource.setUsername(primaryDuDbUser);
          primaryDuDataSource.setPassword(primaryDuDbPassword);
          primaryDuDataSource.setMaxIdle(30);
          primaryDuDataSource.setMaxWaitMillis(10000);
  
          primaryDuDataSource.setValidationQuery("select 1 from rdb$database");
          primaryDuDataSource.setTestOnBorrow(false);
          primaryDuDataSource.setTestWhileIdle(true);
          primaryDuDataSource.setDefaultAutoCommit(true);
  
          return primaryDuDataSource;
      }
  
  
      @Bean
  
      public BasicDataSource secondaryDataSource() {
          BasicDataSource secondaryDataSource = new BasicDataSource();
          secondaryDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
          secondaryDataSource.setUrl(scndsysDbUrl);
          secondaryDataSource.setUsername(scndsysDbUser);
          secondaryDataSource.setPassword(scndsysDbPassword);
          secondaryDataSource.setMaxIdle(2);
          secondaryDataSource.setMaxWaitMillis(10000);
          secondaryDataSource.setValidationQuery("select 1");
          secondaryDataSource.setTestOnBorrow(true);
          secondaryDataSource.setTestWhileIdle(true);
          secondaryDataSource.setDefaultAutoCommit(true);
          return secondaryDataSource;
      }
  
  
      @Bean
      public  LocalContainerEntityManagerFactoryBean entityManagerFactory (@Qualifier("secondaryDataSource") BasicDataSource secondaryDataSource) {
          LocalContainerEntityManagerFactoryBean localConnectionFactoryBean = new LocalContainerEntityManagerFactoryBean();
          localConnectionFactoryBean.setPersistenceXmlLocation("classpath:META-INF/persistence.xml");
          localConnectionFactoryBean.setDataSource(secondaryDataSource);
          localConnectionFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
          return localConnectionFactoryBean;
      }
  
  
      @Bean
      public LocalContainerEntityManagerFactoryBean entityManagerFactoryprmsys (@Qualifier("primaryDuDataSource")BasicDataSource primaryDuDataSource) {
          LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
          emf.setPersistenceXmlLocation("classpath:META-INF/persistence.xml");
          emf.setDataSource(primaryDuDataSource);
          Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();
          properties.put("hibernate.dialect", "org.hibernate.dialect.FirebirdDialect");
          emf.setJpaPropertyMap(properties);
          HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
          hibernateJpaVendorAdapter.setGenerateDdl(true);
          hibernateJpaVendorAdapter.setShowSql(true);
          emf.setJpaVendorAdapter(hibernateJpaVendorAdapter);
  
          return emf;
      }
  
  
      @Bean
      public EntityManager emDU (@Qualifier("entityManagerFactoryprmsys") EntityManagerFactory entityManagerFactoryprmsys) {
          return entityManagerFactoryprmsys.createEntityManager();
      }
  
  
      @Bean
      public EntityManager emscndsys (@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory ) {
          return entityManagerFactory.createEntityManager();
      }
  
  
  
  
      @Bean
      public  JpaTransactionManager txManagerDU (@Qualifier("entityManagerFactoryprmsys") EntityManagerFactory entityManagerFactoryprmsys) {
           JpaTransactionManager txManager = new JpaTransactionManager();
           txManager.setEntityManagerFactory(entityManagerFactoryprmsys);
           return txManager;
      }
  
  
      @Bean
      public  JpaTransactionManager txManagerscndsys (@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
          JpaTransactionManager txManager = new JpaTransactionManager();
          txManager.setEntityManagerFactory(entityManagerFactory);
          return txManager;
      }
  
  }
  </code></pre>
  
  <p>Stacktrace is :</p>
  
  <pre><code>&gt;     "C:\Program Files\Java\jdk1.8.0_77\bin\java" -ea
  &gt;     -Didea.launcher.port=7537 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.1.3\bin"
  &gt;     -Didea.junit.sm_runner
  &gt;     -Dfile.encoding=UTF-8 -classpath "jars"
  &gt;     com.intellij.rt.execution.application.AppMain
  &gt;     com.intellij.rt.execution.junit.JUnitStarter -ideVersion5
  &gt;     au.acap.app.JpaEntities.Service.OdValuesServiceTest,addOdValue
  &gt;     log4j:WARN Continuable parsing error 86 and column 23 log4j:WARN The
  &gt;     content of element type "log4j:configuration" must match
  &gt;     "(renderer*,throwableRenderer?,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)". INFO : [sep-16 15:08:48,172]
  &gt;     context.support.DefaultTestContextBootstrapper - Loaded default
  &gt;     TestExecutionListener class names from location
  &gt;     [META-INF/spring.factories]:
  &gt;     [org.springframework.test.context.web.ServletTestExecutionListener,
  &gt;     org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener,
  &gt;     org.springframework.test.context.support.DependencyInjectionTestExecutionListener,
  &gt;     org.springframework.test.context.support.DirtiesContextTestExecutionListener,
  &gt;     org.springframework.test.context.transaction.TransactionalTestExecutionListener,
  &gt;     org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
  &gt;     INFO : [sep-16 15:08:48,213]
  &gt;     context.support.DefaultTestContextBootstrapper - Could not instantiate
  &gt;     TestExecutionListener
  &gt;     [org.springframework.test.context.web.ServletTestExecutionListener].
  &gt;     Specify custom listener classes or make the default listener classes
  &gt;     (and their required dependencies) available. Offending class:
  &gt;     [org/springframework/web/context/request/RequestAttributes] INFO :
  &gt;     [sep-16 15:08:48,215] context.support.DefaultTestContextBootstrapper -
  &gt;     Using TestExecutionListeners:
  &gt;     [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@67784306,
  &gt;     org.springframework.test.context.support.DependencyInjectionTestExecutionListener@335eadca,
  &gt;     org.springframework.test.context.support.DirtiesContextTestExecutionListener@210366b4,
  &gt;     org.springframework.test.context.transaction.TransactionalTestExecutionListener@eec5a4a,
  &gt;     org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@2b2948e2]INFO
  &gt;     : [sep-16 15:08:48,402] context.support.GenericApplicationContext -
  &gt;     Refreshing
  &gt;     org.springframework.context.support.GenericApplicationContext@3712b94:
  &gt;     startup date [Fri Sep 16 15:08:48 MSK 2016]; root of context hierarchy
  &gt;     INFO : [sep-16 15:08:48,956] app.Commons.QortCommons - StartDate:
  &gt;         24.06.2016 00:00:00 INFO : [sep-16 15:08:48,958] app.Commons.QortCommons - EndDate: 11.08.2016 23:59:59 INFO : [sep-16
  &gt;     15:08:48,970] acap.app.AppConfig -  mainClassLocation:
  &gt;     /C:/Users/maya/Documents/GIT/qort-integration/prmsys/target/classes/
  &gt;     INFO : [sep-16 15:08:48,971] acap.app.AppConfig - Properties will read
  &gt;     from:
  &gt;     /C:/Users/maya/Documents/GIT/qort-integration/prmsys/target/classes/application.properties
  &gt;     INFO : [sep-16 15:08:49,238]
  &gt;     orm.jpa.LocalContainerEntityManagerFactoryBean - Building JPA
  &gt;     container EntityManagerFactory for persistence unit 'PersistenceUnit'
  &gt;     INFO : [sep-16 15:08:50,587]
  &gt;     orm.jpa.LocalContainerEntityManagerFactoryBean - Building JPA
  &gt;     container EntityManagerFactory for persistence unit 'PersistenceUnit'
  &gt;     Hibernate: create table HT_OD_A_SHARES (SHARE integer not null,
  &gt;     hib_sess_id CHAR(36)) Hibernate: create table HT_OD_DOLS (ID integer
  &gt;     not null, hib_sess_id CHAR(36)) Hibernate: create table HT_OD_VALUES
  &gt;     (ID integer not null, hib_sess_id CHAR(36)) .... INFO : [sep-16
  &gt;     15:08:52,350] java.sql.DatabaseMetaData - HHH000262: Table not found:
  &gt;     ...... ERROR: [sep-16 15:08:52,442] tool.hbm2ddl.SchemaUpdate -
  &gt;     HHH000388: Unsuccessful: create table ..... ERROR: [sep-16
  &gt;     15:08:52,444] tool.hbm2ddl.SchemaUpdate - GDS Exception. 335544569.
  &gt;     Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column
  &gt;     17 . ERROR: [sep-16 15:08:52,449] tool.hbm2ddl.SchemaUpdate -
  &gt;     HHH000388: Unsuccessful: create table .....
  &gt;     INFO : [sep-16 15:08:52,741] context.transaction.TransactionContext - Began transaction (1) for
  &gt;     test context [DefaultTestContext@222afc67 testClass =
  &gt;     OdValuesServiceTest, testInstance =
  &gt;     au.acap.app.JpaEntities.Service.OdValuesServiceTest@4c2fb9dd,
  &gt;     testMethod = addOdValue@OdValuesServiceTest, testException = [null],
  &gt;     mergedContextConfiguration = [MergedContextConfiguration@58cf8f94
  &gt;     testClass = OdValuesServiceTest, locations = '{}', classes = '{class
  &gt;     au.acap.app.AppConfig}', contextInitializerClasses = '[]',
  &gt;     activeProfiles = '{}', propertySourceLocations = '{}',
  &gt;     propertySourceProperties = '{}', contextLoader =
  &gt;     'org.springframework.test.context.support.AnnotationConfigContextLoader',
  &gt;     parent = [null]]]; transaction manager
  &gt;     [org.springframework.orm.jpa.JpaTransactionManager@54f4a7f0]; rollback
  &gt;     [false] Hibernate: select gen_id(OD_VALUES_ID_GEN,1) as DOC_ID from
  &gt;     rdb$database INFO : [sep-16 15:08:52,872]
  &gt;     JpaEntities.Service.DBCommonsService - docId = 10465 INFO : [sep-16
  &gt;     15:08:52,931] app.DAO.OdValuesDAO -
  &gt;     au.acap.app.JpaEntities.OdValuesEntity@70c0a3d5[   id=10465  
  &gt;     sysname=NameJP3228600007   name=Name   vType=2   isin=AU000A0JP922  
  &gt;     mfu=0   isIn=1   cfi= ] INFO : [sep-16 15:08:52,933]
  &gt;     app.DAO.OdValuesDAO - Transaction is active:false Hibernate: insert
  &gt;     into OD_VALUES (B_DATE, BASE_VAL, CFI, IS_IN, ISIN, MFU, NAME,
  &gt;     SYSNAME, V_TYPE, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) INFO :
  &gt;     [sep-16 15:08:53,004] context.transaction.TransactionContext -
  &gt;     Committed transaction for test context [DefaultTestContext@222afc67
  &gt;     testClass = OdValuesServiceTest, testInstance =
  &gt;     au.acap.app.JpaEntities.Service.OdValuesServiceTest@4c2fb9dd,
  &gt;     testMethod = addOdValue@OdValuesServiceTest, testException = [null],
  &gt;     mergedContextConfiguration = [MergedContextConfiguration@58cf8f94
  &gt;     testClass = OdValuesServiceTest, locations = '{}', classes = '{class
  &gt;     au.acap.app.AppConfig}', contextInitializerClasses = '[]',
  &gt;     activeProfiles = '{}', propertySourceLocations = '{}',
  &gt;     propertySourceProperties = '{}', contextLoader =
  &gt;     'org.springframework.test.context.support.AnnotationConfigContextLoader',
  &gt;     parent = [null]]]. INFO : [sep-16 15:08:53,007]
  &gt;     context.support.GenericApplicationContext - Closing
  &gt;     org.springframework.context.support.GenericApplicationContext@3712b94:
  &gt;     startup date [Fri Sep 16 15:08:48 MSK 2016]; root of context hierarchy
  &gt;     INFO : [sep-16 15:08:53,013]
  &gt;     orm.jpa.LocalContainerEntityManagerFactoryBean - Closing JPA
  &gt;     EntityManagerFactory for persistence unit 'PersistenceUnit' INFO :
  &gt;     [sep-16 15:08:53,030] orm.jpa.LocalContainerEntityManagerFactoryBean -
  &gt;     Closing JPA EntityManagerFactory for persistence unit 'PersistenceUnit'
  &gt;     Process finished with exit code 0
  </code></pre>
  
  <p>The problem is that transaction is not commited. Please, help me to save data in DB during the test. Thank you. </p>
  
  <p><strong>Update:</strong>
  Help still needed!</p>
  
  <p>May be problem in my imports?</p>
  
  <pre><code>import org.springframework.batch.item.database.JdbcCursorItemReader;
  import org.springframework.beans.factory.annotation.Qualifier;
  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.ComponentScan;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
  import org.springframework.orm.jpa.JpaTransactionManager;
  import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
  import org.springframework.transaction.annotation.EnableTransactionManagement;
  
  
  import javax.persistence.EntityManager;
  import javax.persistence.EntityManagerFactory;
  </code></pre>