committing / rollback question + entitymanager

View: New views
5 Messages — Rating Filter:   Alert me  

committing / rollback question + entitymanager

by Leon Derks-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello

I have a problem with the rollback of my transaction. For some reason
the entities are saved in the db while the transaction has not committed.

These are the steps:

try{
    logger.debug(" Starting a transaction");
    entityManager.getTransaction().begin();
            //here do some entityManager.persist(entities);
           //then throw a runtime exception to fake an exception.
     logger.debug("Committing the transaction");
     entityManager.getTransaction().commit();
catch(Exception e) {
    logger.error(e);
}
finally {
     if (entityManager != null &&
entityManager.getTransaction().isActive()) {
                logger.debug("Rolling back the transaction");
                entityManager.getTransaction().rollback();
}

This is my logging info:
Starting a transaction
        exception stacktrace...........
Rolling back the transaction

As you can see the transaction is not committed but rolled back. However
there are entities in my db.

How is this possible?
Leon
           

_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Re: committing / rollback question + entitymanager

by James Sutherland :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

My guess would be that you have configured EclipseLink with a JTA DataSource, but the DataSource that you are using is not JTA.

Otherwise something very odd is occurring.   Perhaps include your persistence.xml, and enable logging on finest to see when your transaction is begun/committed, it seems your connection is somehow being left in auto-commit mode, or perhaps your database does not support transactions.


Leon Derks-2 wrote:
Hello

I have a problem with the rollback of my transaction. For some reason
the entities are saved in the db while the transaction has not committed.

These are the steps:

try{
    logger.debug(" Starting a transaction");
    entityManager.getTransaction().begin();
            //here do some entityManager.persist(entities);
           //then throw a runtime exception to fake an exception.
     logger.debug("Committing the transaction");
     entityManager.getTransaction().commit();
catch(Exception e) {
    logger.error(e);
}
finally {
     if (entityManager != null &&
entityManager.getTransaction().isActive()) {
                logger.debug("Rolling back the transaction");
                entityManager.getTransaction().rollback();
}

This is my logging info:
Starting a transaction
        exception stacktrace...........
Rolling back the transaction

As you can see the transaction is not committed but rolled back. However
there are entities in my db.

How is this possible?
Leon

Re: committing / rollback question + entitymanager

by Leon Derks-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello

I use a datasource.

Here are pieces of my persistence.xml:

<persistence-unit name="application-web" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:comp/env/jdbc/myDS</non-jta-data-source>
<property name="eclipselink.target-database"
value="org.eclipse.persistence.platform.database.oracle.Oracle10Platform" />

Here is my datasource definition in the tomcat context.xml
<Resource name="jdbc/myDS" auth="Container"
        type="oracle.jdbc.pool.OracleDataSource"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        factory="oracle.jdbc.pool.OracleDataSourceFactory"
        url="jdbc:oracle:thin:@//localhost:1521/XE" user="test"
password="test"
        connectionCachingEnabled="true" connectionCacheName="AppCache"
        connectionCacheProperties="{MaxStatementsLimit=40, MinLimit=0,
InitialLimit=0,
            ValidateConnection=true, ConnectionWaitTimeout=10,
MaxLimit=20}" />

web.xml:
 <resource-ref>
        <description>Resource reference to the application
Datasource</description>
        <res-ref-name>jdbc/myDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

Is there something wrong with this configuration?

Leon

James Sutherland wrote:

> My guess would be that you have configured EclipseLink with a JTA DataSource,
> but the DataSource that you are using is not JTA.
>
> Otherwise something very odd is occurring.   Perhaps include your
> persistence.xml, and enable logging on finest to see when your transaction
> is begun/committed, it seems your connection is somehow being left in
> auto-commit mode, or perhaps your database does not support transactions.
>
>
>
> Leon Derks-2 wrote:
>  
>> Hello
>>
>> I have a problem with the rollback of my transaction. For some reason
>> the entities are saved in the db while the transaction has not committed.
>>
>> These are the steps:
>>
>> try{
>>     logger.debug(" Starting a transaction");
>>     entityManager.getTransaction().begin();
>>             //here do some entityManager.persist(entities);
>>            //then throw a runtime exception to fake an exception.
>>      logger.debug("Committing the transaction");
>>      entityManager.getTransaction().commit();
>> catch(Exception e) {
>>     logger.error(e);
>> }
>> finally {
>>      if (entityManager != null &&
>> entityManager.getTransaction().isActive()) {
>>                 logger.debug("Rolling back the transaction");
>>                 entityManager.getTransaction().rollback();
>> }
>>
>> This is my logging info:
>> Starting a transaction
>>         exception stacktrace...........
>> Rolling back the transaction
>>
>> As you can see the transaction is not committed but rolled back. However
>> there are entities in my db.
>>
>> How is this possible?
>> Leon
>>
>>    
>
>
> -----
> ---
> http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
> http://www.eclipse.org/eclipselink/
>  EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
> TopLink
> Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink ,
> http://wiki.oracle.com/page/TopLink TopLink
> Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
> http://www.nabble.com/EclipseLink-f26430.html EclipseLink
> Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
>  

_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Re: committing / rollback question + entitymanager

by James Sutherland :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Your config looks correct.

Are you setting a server platform (target-server) or transaction controller in EclipseLink?

What server are you running on?


Leon Derks-2 wrote:
Hello

I use a datasource.

Here are pieces of my persistence.xml:

<persistence-unit name="application-web" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:comp/env/jdbc/myDS</non-jta-data-source>
<property name="eclipselink.target-database"
value="org.eclipse.persistence.platform.database.oracle.Oracle10Platform" />

Here is my datasource definition in the tomcat context.xml
<Resource name="jdbc/myDS" auth="Container"
        type="oracle.jdbc.pool.OracleDataSource"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        factory="oracle.jdbc.pool.OracleDataSourceFactory"
        url="jdbc:oracle:thin:@//localhost:1521/XE" user="test"
password="test"
        connectionCachingEnabled="true" connectionCacheName="AppCache"
        connectionCacheProperties="{MaxStatementsLimit=40, MinLimit=0,
InitialLimit=0,
            ValidateConnection=true, ConnectionWaitTimeout=10,
MaxLimit=20}" />

web.xml:
 <resource-ref>
        <description>Resource reference to the application
Datasource</description>
        <res-ref-name>jdbc/myDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

Is there something wrong with this configuration?

Leon

James Sutherland wrote:
> My guess would be that you have configured EclipseLink with a JTA DataSource,
> but the DataSource that you are using is not JTA.
>
> Otherwise something very odd is occurring.   Perhaps include your
> persistence.xml, and enable logging on finest to see when your transaction
> is begun/committed, it seems your connection is somehow being left in
> auto-commit mode, or perhaps your database does not support transactions.
>
>
>
> Leon Derks-2 wrote:
>  
>> Hello
>>
>> I have a problem with the rollback of my transaction. For some reason
>> the entities are saved in the db while the transaction has not committed.
>>
>> These are the steps:
>>
>> try{
>>     logger.debug(" Starting a transaction");
>>     entityManager.getTransaction().begin();
>>             //here do some entityManager.persist(entities);
>>            //then throw a runtime exception to fake an exception.
>>      logger.debug("Committing the transaction");
>>      entityManager.getTransaction().commit();
>> catch(Exception e) {
>>     logger.error(e);
>> }
>> finally {
>>      if (entityManager != null &&
>> entityManager.getTransaction().isActive()) {
>>                 logger.debug("Rolling back the transaction");
>>                 entityManager.getTransaction().rollback();
>> }
>>
>> This is my logging info:
>> Starting a transaction
>>         exception stacktrace...........
>> Rolling back the transaction
>>
>> As you can see the transaction is not committed but rolled back. However
>> there are entities in my db.
>>
>> How is this possible?
>> Leon

Re: committing / rollback question + entitymanager

by Jan Vissers :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi James,

No - no transaction controller configured. We're running Tomcat6 and
Oracle database 10.1.0.4.2 on Linux.

On a different note:
We're using the JPA's underlying JDBC connection to insert data into
another schema for which we've been given grants.

-J.

On Mon, 2008-06-09 at 06:13 -0700, James Sutherland wrote:

> Your config looks correct.
>
> Are you setting a server platform (target-server) or transaction controller
> in EclipseLink?
>
> What server are you running on?
>
>
>
> Leon Derks-2 wrote:
> >
> > Hello
> >
> > I use a datasource.
> >
> > Here are pieces of my persistence.xml:
> >
> > <persistence-unit name="application-web"
> > transaction-type="RESOURCE_LOCAL">
> > <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
> > <non-jta-data-source>java:comp/env/jdbc/myDS</non-jta-data-source>
> > <property name="eclipselink.target-database"
> > value="org.eclipse.persistence.platform.database.oracle.Oracle10Platform"
> > />
> >
> > Here is my datasource definition in the tomcat context.xml
> > <Resource name="jdbc/myDS" auth="Container"
> >         type="oracle.jdbc.pool.OracleDataSource"
> >         driverClassName="oracle.jdbc.driver.OracleDriver"
> >         factory="oracle.jdbc.pool.OracleDataSourceFactory"
> >         url="jdbc:oracle:thin:@//localhost:1521/XE" user="test"
> > password="test"
> >         connectionCachingEnabled="true" connectionCacheName="AppCache"
> >         connectionCacheProperties="{MaxStatementsLimit=40, MinLimit=0,
> > InitialLimit=0,
> >             ValidateConnection=true, ConnectionWaitTimeout=10,
> > MaxLimit=20}" />
> >
> > web.xml:
> >  <resource-ref>
> >         <description>Resource reference to the application
> > Datasource</description>
> >         <res-ref-name>jdbc/myDS</res-ref-name>
> >         <res-type>javax.sql.DataSource</res-type>
> >         <res-auth>Container</res-auth>
> >     </resource-ref>
> >
> > Is there something wrong with this configuration?
> >
> > Leon
> >
> > James Sutherland wrote:
> >> My guess would be that you have configured EclipseLink with a JTA
> >> DataSource,
> >> but the DataSource that you are using is not JTA.
> >>
> >> Otherwise something very odd is occurring.   Perhaps include your
> >> persistence.xml, and enable logging on finest to see when your
> >> transaction
> >> is begun/committed, it seems your connection is somehow being left in
> >> auto-commit mode, or perhaps your database does not support transactions.
> >>
> >>
> >>
> >> Leon Derks-2 wrote:
> >>  
> >>> Hello
> >>>
> >>> I have a problem with the rollback of my transaction. For some reason
> >>> the entities are saved in the db while the transaction has not
> >>> committed.
> >>>
> >>> These are the steps:
> >>>
> >>> try{
> >>>     logger.debug(" Starting a transaction");
> >>>     entityManager.getTransaction().begin();
> >>>             //here do some entityManager.persist(entities);
> >>>            //then throw a runtime exception to fake an exception.
> >>>      logger.debug("Committing the transaction");
> >>>      entityManager.getTransaction().commit();
> >>> catch(Exception e) {
> >>>     logger.error(e);
> >>> }
> >>> finally {
> >>>      if (entityManager != null &&
> >>> entityManager.getTransaction().isActive()) {
> >>>                 logger.debug("Rolling back the transaction");
> >>>                 entityManager.getTransaction().rollback();
> >>> }
> >>>
> >>> This is my logging info:
> >>> Starting a transaction
> >>>         exception stacktrace...........
> >>> Rolling back the transaction
> >>>
> >>> As you can see the transaction is not committed but rolled back. However
> >>> there are entities in my db.
> >>>
> >>> How is this possible?
> >>> Leon
> >
>
>
> -----
> ---
> http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
> http://www.eclipse.org/eclipselink/
>  EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
> TopLink
> Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink ,
> http://wiki.oracle.com/page/TopLink TopLink
> Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
> http://www.nabble.com/EclipseLink-f26430.html EclipseLink
> Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence

_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users