hi paul, it doesn't work due to [1].
regards, gerhard [1] https://issues.apache.org/jira/browse/DELTASPIKE-259 2015-12-14 9:59 GMT+01:00 Paul Wills <[email protected]>: > The EntityManager is injected into the test case like so > @Inject @Database(Instance.APP) private EntityManager entityManager; > > The database producer creates entity managers for 2 database instances (APP > and VAULT). I originally had the getAppEntityManager() method annotated > with TransactionScoped but removing it made no difference to the flushing > problem. All other test cases which use the entity manager work fine, but > they are rather simple, ie no reading back from the database before > commiting. > > Here is the producer for the EntityManager(s). > ---- > @ApplicationScoped > public class DatabaseProducer { > // ~---- Static Variables and Methods > ------------------------------------------ > private static Logger LOGGER = > LoggerFactory.getLogger(DatabaseProducer.class); > > // ~---- Instance Variables > ---------------------------------------------------- > @Inject @PersistenceUnitName("app") private EntityManagerFactory > appEntityManagerFactory; > @Inject @PersistenceUnitName("vault") private EntityManagerFactory > vaultEntityManagerFactory; > private EntityManager appEntityManager; > private EntityManager vaultEntityManager; > private DataSource appDataSource; > private DataSource vaultDataSource; > > // ~---- Public > Interface----------------------------------------------------- > @Produces @PicketLink > private EntityManager getSecuriyEntityManager() { > return getAppEntityManager(); > } > > @Produces @Database(Instance.APP) > private EntityManager getAppEntityManager() { > final EntityManager em = getEntityManager(Instance.APP, false); > em.setFlushMode(FlushModeType.AUTO); > return em; > } > > @Produces @Database(Instance.VAULT) > private EntityManager getVaultEntityManager() { > return getEntityManager(Instance.VAULT, false); > } > > private EntityManager getEntityManager(final Instance instance, final > boolean transactionScoped) { > EntityManager returnValue = null; > switch(instance) { > case APP: > if (transactionScoped) { > returnValue = > appEntityManagerFactory.createEntityManager(); > > } else { > if (appEntityManager == null) { > appEntityManager = > appEntityManagerFactory.createEntityManager(); > logDatabaseConnectionInfo(instance); > } > returnValue = appEntityManager; > } > break; > > case VAULT: > if (transactionScoped) { > returnValue = > vaultEntityManagerFactory.createEntityManager(); > > } else { > if (vaultEntityManager == null) { > vaultEntityManager = > vaultEntityManagerFactory.createEntityManager(); > logDatabaseConnectionInfo(instance); > } > returnValue = vaultEntityManager; > } > break; > } > > return returnValue; > } > > ---- > > Regards, > Paul > > On 14 December 2015 at 16:42, Mark Struberg <[email protected]> wrote: > > > And how is the entity manager being created? > > > > LieGrue, > > Strub > > > > > Am 14.12.2015 um 04:25 schrieb John D. Ament <[email protected]>: > > > > > > Paul, > > > > > > Could you show us what your test looks like, including how it injects > the > > > bean that is used here. > > > > > > John > > > > > > On Sun, Dec 13, 2015 at 10:09 PM Paul Wills <[email protected]> > > > wrote: > > > > > >> I can confirm the Transactional annotation is being imported as > follows > > >> > > >> *import* org.apache.deltaspike.jpa.api.transaction.Transactional; > > >> > > >> Regards, > > >> > > >> Paul > > >> > > >> > > >>> On 10 December 2015 at 15:06, Paul Wills <[email protected]> > > wrote: > > >>> > > >>> Whilst the following method is called in a test case, run with > > >>> CdiTestRunner, the entityManager.flush() call causes a > > >>> TransactionRequiredException. > > >>> > > >>> @Transactional > > >>> public void saveAndFetchUser() { > > >>> // Given - a new user > > >>> final User randomUser = createRandomUser(false); > > >>> > > >>> // When - saved > > >>> final User savedUser = userService.saveUser(randomUser); > > >>> // Then - user is saved as well as history and can be retrieved by > > id > > >>> and username > > >>> assertThat(savedUser.getRoles(), hasSize(greaterThan(0))); > > >>> > > >>> entityManager.flush(); // manually flush as UaiCriteriaQueries > > >> aren't > > >>> flushed automatically > > >>> final Paged<UserHistory> pagedHistory = > > >>> findUserHistoryMostRecentFirst(randomUser.getUsername()); > > >>> assertThat(pagedHistory.getDerivedTotal(), equalTo(1)); > > >>> assertThat(pagedHistory.getList(), hasSize(1)); > > >>> > > >>> ... > > >>> } > > >>> > > >>> Is this a bug, or is there another way to flush the changes to the > > >>> database? > > >>> > > >>> Environment: > > >>> weld: 2.3.1.Final > > >>> deltaspike: 1.5.1.Final > > >>> deltaspike dependencies > > >>> > > >>> <dependency> > > >>> > > >>> <groupId>org.apache.deltaspike.modules</groupId> > > >>> > > >>> <artifactId>*deltaspike*-*jpa*-module-*api*</artifactId> > > >>> > > >>> <version>${deltaspike.version}</version> > > >>> > > >>> <scope>compile</scope> > > >>> > > >>> </dependency> > > >>> > > >>> <dependency> > > >>> > > >>> <groupId>org.apache.deltaspike.modules</groupId> > > >>> > > >>> <artifactId>*deltaspike*-*jpa*-module-*impl*</artifactId> > > >>> > > >>> <version>${deltaspike.version}</version> > > >>> > > >>> <scope>compile</scope> > > >>> > > >>> </dependency> > > >>> > > >>> <dependency> > > >>> > > >>> <groupId>org.apache.deltaspike.core</groupId> > > >>> > > >>> <artifactId>*deltaspike*-core-*api*</artifactId> > > >>> > > >>> *<version>${deltaspike.version}</version>* > > >>> > > >>> <scope>compile</scope> > > >>> > > >>> </dependency> > > >>> > > >>> <dependency> > > >>> > > >>> <groupId>org.apache.deltaspike.core</groupId> > > >>> > > >>> <artifactId>*deltaspike*-core-*impl*</artifactId> > > >>> > > >>> *<version>${deltaspike.version}</version>* > > >>> > > >>> <scope>compile</scope> > > >>> > > >>> </dependency> > > >>> > > >>> <dependency> > > >>> > > >>> <groupId>org.apache.deltaspike.cdictrl</groupId> > > >>> > > >>> <artifactId>*deltaspike*-*cdictrl*-weld</artifactId> > > >>> > > >>> <version>${deltaspike.version}</version> > > >>> > > >>> <scope>test</scope> > > >>> > > >>> </dependency> > > >>> > > >>> <dependency> > > >>> > > >>> <groupId>org.jboss.weld.se</groupId> > > >>> > > >>> <artifactId>weld-*se*-core</artifactId> > > >>> > > >>> *<version>${weld.version}</version>* > > >>> > > >>> <scope>test</scope> > > >>> > > >>> </dependency> > > >>> > > >>> Regards, > > >>> Paul Wills > > >> > > >
