Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] autocommit problem

Added some diagnostic information in the part that calls the (Oracle) Stored procedure:

        //Diagnostics
        try {
            AbstractSession session = (AbstractSession) ((JpaEntityManager) getEntityManager()).getActiveSession();
            Connection dbConnection = session.getAccessor().getConnection();
            logger.debug("Connection information: " + System.identityHashCode(dbConnection) + " - autocommit(" + dbConnection.getAutoCommit() + ")");
        } catch (SQLException e) {
            logger.error("Failed to get diagnostics for connection: " + e.getMessage());
        }

This diagnostic is printed from within a method call invoked by a
'worker' that sets 'stuff' like so:

            ((UnitOfWork) ((JpaEntityManager) entityManager).getActiveSession()).beginEarlyTransaction();
            AbstractSession session = (AbstractSession) ((JpaEntityManager) entityManager).getActiveSession();
            session.getAccessor().getConnection().setAutoCommit(false);
            if (!entityManager.getTransaction().isActive()) {
                entityManager.getTransaction().begin();
            }

What I'm seeing is that the 'dbConnection' - underlying connection is
the same instance as well as 'autocommit' being 'false'. So my basic
question is: provided we start by 'beginEarlyTransaction()' and finish
all by 'commit()' - why would EclipseLink issue a 'commit' by itself?

This issue has been going on for to long and I want to resolve it. All
the help is appreciated!

Thx,
-J.


On Tue, 2008-10-28 at 16:52 +0100, Jan Vissers wrote:
> This doesn't seem to work.
> 
> What we're seeing is that beginEarlyTransaction() stops the
> executeUpdate which is issued from the Stored procedure call from
> committing the first time, but after that every subsequent call to this
> Stored Procedure commits the operation.
> 
> I'm guessing that autocommit somehow is 'true' and therefor
> executeUpdate is issuing commit.
> 
> Does this make sense?
> -J.
> 
> On Mon, 2008-10-27 at 07:01 -0700, James Sutherland wrote:
> > By default EclipseLink uses a read connection pool to process read queries
> > until a flush or data modification query (or locking query) has been
> > executed.  A DataModifyQuery would can a transaction to start, but a
> > ValueReadQuery does not.  You can begin a transaction yourself through
> > getUnitOfWork().beginEarlyTransaction().
> > 
> > 
> > 
> > Leon Derks-2 wrote:
> > > 
> > > When I test the persistImageInfoIntoImageLibrary method, I noticed it 
> > > also works without beginning a transaction.
> > >        
> > >      ImageInfo imageInfo = getImageInfo();
> > >      imageDAO.persistImageInfoIntoImageLibrary(imageInfo);
> > > 
> > > The image is persisted in the table and I didn't started a transaction.
> > > How is this possible?
> > > 
> > > Can someone explain this to me?
> > > Leon
> > > 
> > > 
> > > Leon Derks wrote:
> > >> I want to store an image into another db schema, using a stored 
> > >> function call.
> > >>
> > >> I do this by getting the ActiveSession() from my EntityManager, see 
> > >> the Java code below:
> > >> In the logging I see the function is executed in eclipselink:
> > >>
> > >> The problem is that the image is already stored into the table, before 
> > >> the transaction has committed.
> > >> So when I use pl/sql developer and view the table I see that the image 
> > >> is stored without committing the transaction..
> > >>
> > >> The stored function call has no autonomous transaction. So how is this 
> > >> possible?
> > >> Does the getActiveSession() has an autocommit?
> > >>
> > >>
> > >> JAVA CODE:
> > >> public ImageInfo persistImageInfoIntoImageLibrary(ImageInfo imageInfo) {
> > >>        StoredFunctionCall functionCall = new StoredFunctionCall();
> > >>        functionCall.setProcedureName("til.cil_api.create_image");
> > >>        functionCall.addNamedArgument("p_image_id");
> > >>        functionCall.addNamedArgument("p_image_type_id");
> > >>        functionCall.addNamedArgument("p_collection_id");
> > >>        functionCall.addNamedArgument("p_description");
> > >>
> > >>        ValueReadQuery query = new ValueReadQuery(functionCall);
> > >>
> > >>        query.addArgument("p_image_id");
> > >>        query.addArgument("p_image_type_id");
> > >>        query.addArgument("p_collection_id");
> > >>        query.addArgument("p_description");
> > >>
> > >>        List args = new ArrayList();
> > >>        args.add(null);
> > >>        args.add(GuideControlConfiguration.getImageTypeId());
> > >>        args.add(GuideControlConfiguration.getImageCollectionId());
> > >>        args.add(imageInfo.getVisualElementId());
> > >>              functionCall.setResult("function_result", Integer.class);
> > >>
> > >>        Integer tangeloImageId = (Integer) 
> > >> getActiveSession().executeQuery(query, args);
> > >> }
> > >>
> > >> private Session getActiveSession() {
> > >>        return ((JpaEntityManager) getEntityManager()).getActiveSession();
> > >> }
> > > 
> > 
> > 
> > -----
> > ---
> > 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@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
> 



Back to the top