You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2004/02/10 16:28:18 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/odmg TransactionImpl.java
arminw 2004/02/10 07:28:18
Modified: src/java/org/apache/ojb/odmg TransactionImpl.java
Log:
add more logging info
Revision Changes Path
1.53 +88 -60 db-ojb/src/java/org/apache/ojb/odmg/TransactionImpl.java
Index: TransactionImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/odmg/TransactionImpl.java,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- TransactionImpl.java 8 Feb 2004 13:19:46 -0000 1.52
+++ TransactionImpl.java 10 Feb 2004 15:28:18 -0000 1.53
@@ -54,6 +54,16 @@
* <http://www.apache.org/>.
*/
+import javax.transaction.Status;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.apache.commons.lang.SystemUtils;
import org.apache.ojb.broker.Identity;
import org.apache.ojb.broker.ManageableCollection;
import org.apache.ojb.broker.OJBRuntimeException;
@@ -62,9 +72,9 @@
import org.apache.ojb.broker.PersistenceBrokerException;
import org.apache.ojb.broker.PersistenceBrokerFactory;
import org.apache.ojb.broker.PersistenceBrokerSQLException;
-import org.apache.ojb.broker.core.ValueContainer;
import org.apache.ojb.broker.accesslayer.IndirectionHandler;
import org.apache.ojb.broker.accesslayer.MaterializationListener;
+import org.apache.ojb.broker.core.ValueContainer;
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.metadata.CollectionDescriptor;
import org.apache.ojb.broker.metadata.FieldDescriptor;
@@ -86,15 +96,6 @@
import org.odmg.TransactionAbortedException;
import org.odmg.TransactionNotInProgressException;
-import javax.transaction.Status;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Vector;
-import java.util.Arrays;
-
/**
*
* Implementation of Transaction for org.odmg.Transaction.
@@ -316,7 +317,7 @@
if broker isn't in PB-tx, start tx
*/
if (log.isDebugEnabled()) log.debug("call beginTransaction() on PB instance");
- if(!getBroker().isInTransaction()) broker.beginTransaction();
+ if (!getBroker().isInTransaction()) broker.beginTransaction();
// Notify objects of impending commits.
Enumeration enum = objectEnvelopeTable.elements();
@@ -428,7 +429,7 @@
e.printStackTrace();
}
}
- if(broker != null && !broker.isClosed())
+ if (broker != null && !broker.isClosed())
{
try
{
@@ -467,7 +468,7 @@
}
catch (Throwable t)
{
- log.error("checkpoint failed",t);
+ log.error("checkpoint failed", t);
try
{
doAbort();
@@ -481,10 +482,10 @@
{
throw (TransactionAbortedException) t;
}
- if (t instanceof LockNotGrantedException)
- {
- throw (LockNotGrantedException) t;
- }
+ if (t instanceof LockNotGrantedException)
+ {
+ throw (LockNotGrantedException) t;
+ }
else
{
throw new TransactionAbortedExceptionOJB(t);
@@ -519,10 +520,10 @@
{
throw (TransactionAbortedException) t;
}
- if (t instanceof LockNotGrantedException)
- {
- throw (LockNotGrantedException) t;
- }
+ if (t instanceof LockNotGrantedException)
+ {
+ throw (LockNotGrantedException) t;
+ }
else
{
throw new TransactionAbortedExceptionOJB(t);
@@ -664,11 +665,11 @@
throw e;
}
catch (PersistenceBrokerSQLException pbse)
- {
- log.error("Could not prepare for commit: " + pbse.getMessage());
- m_txStatus = Status.STATUS_MARKED_ROLLBACK;
- throw pbse;
- }
+ {
+ log.error("Could not prepare for commit: " + pbse.getMessage());
+ m_txStatus = Status.STATUS_MARKED_ROLLBACK;
+ throw pbse;
+ }
return true;
}
@@ -682,13 +683,13 @@
/*
do nothing if already rolledback
*/
- if(m_txStatus == Status.STATUS_ROLLEDBACK)
+ if (m_txStatus == Status.STATUS_ROLLEDBACK)
{
return;
}
if (m_txStatus != Status.STATUS_ACTIVE && m_txStatus != Status.STATUS_PREPARED &&
m_txStatus != Status.STATUS_MARKED_ROLLBACK)
- throw new IllegalStateException("persist.noTransaction");
+ throw new IllegalStateException("Illegal state for abort call, state was '" + TxUtil.getStatusString(m_txStatus) + "'");
log.info("Abort transaction was called on tx " + this + ", associated PB was " + broker);
try
{
@@ -828,7 +829,7 @@
// no Proxy:
if (objectToRegister == null)
- return;
+ return;
ObjectEnvelope envelope = objectEnvelopeTable.getByIdentity(new Identity(objectToRegister, getBroker()));
if ((envelope == null) || envelope.needsDelete())
{
@@ -867,7 +868,7 @@
{
if (!ProxyHelper.isProxy(obj) && (ref != null))
{
- Object refInstance = ProxyHelper.getRealObject(ref);
+ Object refInstance = ProxyHelper.getRealObject(ref);
ClassDescriptor objCld = this.getBroker().getClassDescriptor(obj.getClass());
org.apache.ojb.broker.metadata.FieldDescriptor[] objFkFields = rds.getForeignKeyFieldDescriptors(objCld);
@@ -875,13 +876,13 @@
ValueContainer[] refPkValues;
if (refInstance != null)
{
- ClassDescriptor refCld = this.getBroker().getClassDescriptor(refInstance.getClass());
- refPkValues = getBroker().serviceBrokerHelper().getKeyValues(refCld, refInstance, false);
+ ClassDescriptor refCld = this.getBroker().getClassDescriptor(refInstance.getClass());
+ refPkValues = getBroker().serviceBrokerHelper().getKeyValues(refCld, refInstance, false);
}
else
{
- refPkValues = new ValueContainer[objFkFields.length];
- Arrays.fill(refPkValues, null);
+ refPkValues = new ValueContainer[objFkFields.length];
+ Arrays.fill(refPkValues, null);
}
/**
@@ -970,36 +971,62 @@
*/
if (itemFkFields != null)
{
- while (colIterator.hasNext())
+ Object item = null;
+ try
{
- Object item = colIterator.next();
- IndirectionHandler handler = ProxyHelper.getIndirectionHandler(item);
- if (handler != null)
+ while (colIterator.hasNext())
{
- if (!handler.alreadyMaterialized())
+ item = colIterator.next();
+ IndirectionHandler handler = ProxyHelper.getIndirectionHandler(item);
+ if (handler != null)
{
- continue;
+ if (!handler.alreadyMaterialized())
+ {
+ continue;
+ }
+ else
+ {
+ item = handler.getRealSubject();
+ }
}
- else
+ //if itemCld refers to an interface the foreignKeyFieldDescriptors
+ //have to be computed again for each concrete class
+ if (itemCld.isInterface())
{
- item = handler.getRealSubject();
+ ClassDescriptor concreteItemCld = getBroker().getClassDescriptor(item.getClass());
+ itemFkFields = cds.getForeignKeyFieldDescriptors(concreteItemCld);
}
+ // provide all items in collection attributes
+ // with foreign key information before locking them!
+ for (int j = 0; j < itemFkFields.length; j++)
+ {
+ FieldDescriptor fld = itemFkFields[j];
+ fld.getPersistentField().set(item, objPkValues[j].getValue());
+ }
+ lock(item, lockMode);
}
- //if itemCld refers to an interface the foreignKeyFieldDescriptors
- //have to be computed again for each concrete class
- if (itemCld.isInterface())
- {
- ClassDescriptor concreteItemCld = getBroker().getClassDescriptor(item.getClass());
- itemFkFields = cds.getForeignKeyFieldDescriptors(concreteItemCld);
- }
- // provide all items in collection attributes
- // with foreign key information before locking them!
- for (int j = 0; j < itemFkFields.length; j++)
- {
- FieldDescriptor fld = itemFkFields[j];
- fld.getPersistentField().set(item, objPkValues[j].getValue());
- }
- lock(item, lockMode);
+ }
+ catch (PersistenceBrokerException e)
+ {
+ String eol = SystemUtils.LINE_SEPARATOR;
+ log.error("Error while set FK in collection references[" +
+ eol + "current reference descriptor:" +
+ eol + cds.toXML() +
+ eol + "current item object: " + item +
+ eol + "main object class: " + newTxObject.getClass().getName() +
+ eol + "]", e);
+ throw e;
+ }
+ catch (LockNotGrantedException e)
+ {
+ String eol = SystemUtils.LINE_SEPARATOR;
+ log.error("Lock not granted, while set FK in collection references[" +
+ eol + "current reference descriptor:" +
+ eol + cds.toXML() +
+ eol + "object to lock: " + item +
+ eol + "main object class: " + newTxObject.getClass().getName() +
+ eol + "]", e);
+ throw e;
}
}
else
@@ -1036,7 +1063,7 @@
if (refObj != null)
{
if (ProxyHelper.isProxy(refObj))
- {
+ {
lock(refObj, lockMode);
}
else if (!registeredForLock.contains(refObj))
@@ -1194,11 +1221,12 @@
useWriteLocks = odmgConfig.lockAssociationAsWrites();
useImplicitLocking = odmgConfig.useImplicitLocking();
}
+
/**
* @see org.apache.ojb.odmg.TransactionExt#setImplicitLocking(boolean)
*/
public synchronized void setImplicitLocking(boolean value)
{
- useImplicitLocking = value;
+ useImplicitLocking = value;
}
-}
\ No newline at end of file
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org