Hi, I have a case of a transaction problem using "@JpaEntityManagerFactory" on hibernate.
In the example below, when "@Transactional ( TransactionMode.DISABLED )" is uncommented everything works fine. Any other transaction mode even default results in org.unitils.core.UnitilsException. Caused by: java.lang.UnsupportedOperationException: Not supported by BasicDataSource at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:899)
the complete stack trace is in the end after the case.
public void customerExists ( )
{
Customer customer = new Customer( "user", "pass" );
assert customer.exists( );
}
}
--------------- FULL STACK TRACE : ---------------
org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method public void order.model.TestCustomer.wrongPassword()
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:157)
at org.unitils.dbunit.DbUnitModule$DbUnitListener.beforeTestSetUp(DbUnitModule.java:540)
at org.unitils.core.Unitils$UnitilsTestListener.beforeTestSetUp(Unitils.java:281)
at org.unitils.UnitilsTestNG.unitilsBeforeTestSetUp(UnitilsTestNG.java:62)
Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.UnsupportedOperationException: Not supported by BasicDataSource
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:375)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:377)
at org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.doStartTransaction(DefaultUnitilsTransactionManager.java:121)
at org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.activateTransactionIfNeeded(DefaultUnitilsTransactionManager.java:112)
at org.unitils.database.DatabaseModule.activateTransactionIfNeeded(DatabaseModule.java:234)
at org.unitils.database.DatabaseModule.getDataSourceAndActivateTransactionIfNeeded(DatabaseModule.java:218)
at org.unitils.dbunit.DbUnitModule.getDefaultDbSupport(DbUnitModule.java:511)
at org.unitils.dbunit.DbUnitModule.getDataSetFactory(DbUnitModule.java:483)
at org.unitils.dbunit.DbUnitModule.getDataSetFactory(DbUnitModule.java:471)
at org.unitils.dbunit.DbUnitModule.getDataSet(DbUnitModule.java:294)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:148)
... 27 more
Caused by: java.lang.UnsupportedOperationException: Not supported by BasicDataSource
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:899)
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:43)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:70)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:52)
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:330)
... 37 more
... Removed 24 stack frames
FAILED CONFIGURATION: @AfterMethod unitilsAfterTestTearDown(public void order.model.TestCustomer.wrongPassword())
java.lang.NullPointerException
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:771)
at org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.rollback(DefaultUnitilsTransactionManager.java:159)
at org.unitils.database.DatabaseModule.rollbackTransaction(DatabaseModule.java:432)
at org.unitils.database.DatabaseModule.endTransactionForTestMethod(DatabaseModule.java:398)
at org.unitils.database.DatabaseModule$DatabaseTestListener.afterTestTearDown(DatabaseModule.java:540)
at org.unitils.core.Unitils$UnitilsTestListener.afterTestTearDown(Unitils.java:323)
at org.unitils.UnitilsTestNG.unitilsAfterTestTearDown(UnitilsTestNG.java:79)
... Removed 24 stack frames
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
As a correction from the previous post, using "@Transactional ( TransactionMode.DISABLED )" the "factory" annotated attribute isn't initialized. which means testing with jpa in unitils doesn't work at all for me.
I tried many configurations which leads to the same exception.. so I don't know what to do..
I decided to paste my persistence.xml in case that someone may identify if I am making any mistake.
thanks for any help.
<?xml version="1.0" encoding="UTF-8"?>
<!-- example of a default persistence.xml -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
Hi, I have a case of a transaction problem using "@JpaEntityManagerFactory" on hibernate.
In the example below, when "@Transactional ( TransactionMode.DISABLED )" is uncommented everything works fine. Any other transaction mode even default results in org.unitils.core.UnitilsException. Caused by: java.lang.UnsupportedOperationException: Not supported by BasicDataSource at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:899)
the complete stack trace is in the end after the case.
thanks for any help.
--------------- CASE : ---------------
import java.sql.SQLException;
import javax.persistence.EntityManagerFactory;
import org.testng.annotations.Test;
import org.unitils.UnitilsTestNG;
import org.unitils.database.annotations.Transactional;
import org.unitils.database.util.TransactionMode;
import org.unitils.dbunit.annotation.DataSet;
import org.unitils.dbunit.datasetloadstrategy.impl.RefreshLoadStrategy;
import org.unitils.orm.jpa.annotation.JpaEntityManagerFactory;
@Test
//@Transactional ( TransactionMode.DISABLED )
@Transactional ( TransactionMode.ROLLBACK )
@DataSet ( loadStrategy = RefreshLoadStrategy.class , value = { "dataset/customers.xml" } )
public class TestCustomer extends UnitilsTestNG
{
@JpaEntityManagerFactory ( persistenceUnit = "order" )
EntityManagerFactory factory;
public void customerExists ( )
{
Customer customer = new Customer( "user", "pass" );
assert customer.exists( );
}
}
--------------- FULL STACK TRACE : ---------------
org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method public void order.model.TestCustomer.wrongPassword()
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:157)
at org.unitils.dbunit.DbUnitModule$DbUnitListener.beforeTestSetUp(DbUnitModule.java:540)
at org.unitils.core.Unitils$UnitilsTestListener.beforeTestSetUp(Unitils.java:281)
at org.unitils.UnitilsTestNG.unitilsBeforeTestSetUp(UnitilsTestNG.java:62)
Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.UnsupportedOperationException: Not supported by BasicDataSource
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:375)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:377)
at org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.doStartTransaction(DefaultUnitilsTransactionManager.java:121)
at org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.activateTransactionIfNeeded(DefaultUnitilsTransactionManager.java:112)
at org.unitils.database.DatabaseModule.activateTransactionIfNeeded(DatabaseModule.java:234)
at org.unitils.database.DatabaseModule.getDataSourceAndActivateTransactionIfNeeded(DatabaseModule.java:218)
at org.unitils.dbunit.DbUnitModule.getDefaultDbSupport(DbUnitModule.java:511)
at org.unitils.dbunit.DbUnitModule.getDataSetFactory(DbUnitModule.java:483)
at org.unitils.dbunit.DbUnitModule.getDataSetFactory(DbUnitModule.java:471)
at org.unitils.dbunit.DbUnitModule.getDataSet(DbUnitModule.java:294)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:148)
... 27 more
Caused by: java.lang.UnsupportedOperationException: Not supported by BasicDataSource
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:899)
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:43)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:70)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:52)
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:330)
... 37 more
... Removed 24 stack frames
FAILED CONFIGURATION: @AfterMethod unitilsAfterTestTearDown(public void order.model.TestCustomer.wrongPassword())
java.lang.NullPointerException
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:771)
at org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.rollback(DefaultUnitilsTransactionManager.java:159)
at org.unitils.database.DatabaseModule.rollbackTransaction(DatabaseModule.java:432)
at org.unitils.database.DatabaseModule.endTransactionForTestMethod(DatabaseModule.java:398)
at org.unitils.database.DatabaseModule$DatabaseTestListener.afterTestTearDown(DatabaseModule.java:540)
at org.unitils.core.Unitils$UnitilsTestListener.afterTestTearDown(Unitils.java:323)
at org.unitils.UnitilsTestNG.unitilsAfterTestTearDown(UnitilsTestNG.java:79)
... Removed 24 stack frames
As a correction from the previous post, using "@Transactional ( TransactionMode.DISABLED )" the "factory" annotated attribute isn't initialized. which means testing with jpa in unitils doesn't work at all for me.
I tried many configurations which leads to the same exception.. so I don't know what to do..
I decided to paste my persistence.xml in case that someone may identify if I am making any mistake.
thanks for any help.
<?xml version="1.0" encoding="UTF-8"?>
<!-- example of a default persistence.xml -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="order" >
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.hbm2ddl.auto" value="none"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.username" value="XXX"/>
<property name="hibernate.connection.password" value="XXX"/>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost/YYY"/>
</properties>
</persistence-unit>
</persistence>
Ok.. I am really sorry..
first my problem was already understood in this thread : https://sourceforge.net/forum/message.php?msg_id=4889266
And an persistence.xml example for spring+jpa was in the http://unitils.org/cookbook.html