From: Erik B. <ebe...@us...> - 2007-03-07 15:24:52
|
Update of /cvsroot/jpox/JPOX/Core/src/java/org/jpox/store/db4o In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv17306/src/java/org/jpox/store/db4o Modified Files: ConnectionFactoryImpl.java DB4OManager.java Log Message: avoid obtaining ManagedConnections by two persistence operations at same time Index: DB4OManager.java =================================================================== RCS file: /cvsroot/jpox/JPOX/Core/src/java/org/jpox/store/db4o/DB4OManager.java,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** DB4OManager.java 7 Mar 2007 11:51:27 -0000 1.63 --- DB4OManager.java 7 Mar 2007 15:24:45 -0000 1.64 *************** *** 296,300 **** supportClassInDB4O(conf, (AbstractClassMetaData)data.getMetaData()); } - activeObjectContainers.add(cont); } --- 296,299 ---- *************** *** 406,410 **** boolean principalObjectForInsert = false; ! ArrayList list = (ArrayList)currentInsertThreads.get(Thread.currentThread().getName()); if (list == null) { --- 405,409 ---- boolean principalObjectForInsert = false; ! List list = (List)currentInsertThreads.get(Thread.currentThread().getName()); if (list == null) { *************** *** 525,534 **** public void update(StateManager sm, int fieldNumbers[]) { ManagedConnection mconn = omfContext.getConnectionFactoryRegistry().lookupConnectionFactory("db4o").getConnection(sm.getObjectManager()); ObjectContainer cont = (ObjectContainer) mconn.getConnection(); try { - // Go through all fields to be updated and persist/attach any PC fields that need it (adding their StateManagers as required) - sm.provideFields(fieldNumbers, new PersistFieldManager(sm, false)); if (sm.getObjectManager().getTransaction().getOptimistic()) --- 524,534 ---- public void update(StateManager sm, int fieldNumbers[]) { + // Go through all fields to be updated and persist/attach any PC fields that need it (adding their StateManagers as required) + sm.provideFields(fieldNumbers, new PersistFieldManager(sm, false)); + ManagedConnection mconn = omfContext.getConnectionFactoryRegistry().lookupConnectionFactory("db4o").getConnection(sm.getObjectManager()); ObjectContainer cont = (ObjectContainer) mconn.getConnection(); try { if (sm.getObjectManager().getTransaction().getOptimistic()) *************** *** 596,604 **** } ! ManagedConnection mconn = omfContext.getConnectionFactoryRegistry().lookupConnectionFactory("db4o").getConnection(sm.getObjectManager()); ! ObjectContainer cont = (ObjectContainer) mconn.getConnection(); ! try { ! if (sm.getObjectManager().getTransaction().getOptimistic()) { // Optimistic transaction so perform version check before any delete --- 596,604 ---- } ! if (sm.getObjectManager().getTransaction().getOptimistic()) { ! ManagedConnection mconn = omfContext.getConnectionFactoryRegistry().lookupConnectionFactory("db4o").getConnection(sm.getObjectManager()); ! ObjectContainer cont = (ObjectContainer) mconn.getConnection(); ! try { // Optimistic transaction so perform version check before any delete *************** *** 609,619 **** } } ! try { - // Delete all reachable PC objects (due to dependent-field). Updates the StateManagers to be in deleted state - // TODO Only pass in fields with PC objects - sm.provideFields(sm.getClassMetaData().getAllFieldNumbers(), new DeleteFieldManager(sm)); - if (principalObjectForDelete) { --- 609,628 ---- } } ! finally ! { ! mconn.release(); ! } ! } ! ! try ! { ! // Delete all reachable PC objects (due to dependent-field). Updates the StateManagers to be in deleted state ! // TODO Only pass in fields with PC objects ! sm.provideFields(sm.getClassMetaData().getAllFieldNumbers(), new DeleteFieldManager(sm)); ! ! ManagedConnection mconn = omfContext.getConnectionFactoryRegistry().lookupConnectionFactory("db4o").getConnection(sm.getObjectManager()); ! ObjectContainer cont = (ObjectContainer) mconn.getConnection(); try { if (principalObjectForDelete) { *************** *** 630,634 **** JPOXLogger.DB4O_SET.debug(LOCALISER_DB4O.msg("DB4O.ExecutionTime", (System.currentTimeMillis() - startTime))); } ! // Debug info about the deleted objects if (JPOXLogger.DB4O.isDebugEnabled()) --- 639,643 ---- JPOXLogger.DB4O_SET.debug(LOCALISER_DB4O.msg("DB4O.ExecutionTime", (System.currentTimeMillis() - startTime))); } ! // Debug info about the deleted objects if (JPOXLogger.DB4O.isDebugEnabled()) *************** *** 650,663 **** finally { ! if (principalObjectForDelete) ! { ! // the delete process is complete for this thread so remove from the Map ! currentDeleteThreads.remove(Thread.currentThread().getName()); ! } } } finally { ! mconn.release(); } } --- 659,672 ---- finally { ! mconn.release(); } } finally { ! if (principalObjectForDelete) ! { ! // the delete process is complete for this thread so remove from the Map ! currentDeleteThreads.remove(Thread.currentThread().getName()); ! } } } Index: ConnectionFactoryImpl.java =================================================================== RCS file: /cvsroot/jpox/JPOX/Core/src/java/org/jpox/store/db4o/ConnectionFactoryImpl.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ConnectionFactoryImpl.java 7 Mar 2007 11:51:27 -0000 1.1 --- ConnectionFactoryImpl.java 7 Mar 2007 15:24:45 -0000 1.2 *************** *** 1,2 **** --- 1,19 ---- + /********************************************************************** + Copyright (c) 2007 Erik Bengtson and others. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Contributors: + ... + **********************************************************************/ package org.jpox.store.db4o; *************** *** 135,139 **** public ManagedConnection getConnection(ObjectManager om) { ! return omfContext.getConnectionManager().allocateConnection(this, om); } --- 152,159 ---- public ManagedConnection getConnection(ObjectManager om) { ! ManagedConnection mconn = omfContext.getConnectionManager().allocateConnection(this, om); ! ! ((DB4OManager)om.getStoreManager()).registerObjectContainer((ObjectContainer) mconn.getConnection()); ! return mconn; } |