Hi,
the complete Method is (and this is executed):
protected boolean saveSelection(Selection sel, boolean asMarketingAction)
{
boolean ok = false;
PersistenceBroker broker = null;
try {
broker = BrokerFactory.getDefaultBroker();
broker.beginTransaction();
Action action = null;
broker.store(sel);
// Hack: ok state must be set after commit, but there is a
// unresolved NotInTransactionException which have to be
considered.
// Selection is saved anyhow
ok = true;
// 7. commit transaction
broker.commitTransaction();
//broker.close();
ok = true;
} catch (PersistenceBrokerException pbe) {
if (broker.isInTransaction()) {
broker.abortTransaction();
}
m_log.error("Selection could not be saved ! Transaction is
rolled back.", pbe);
} finally {
if (broker != null) {
//broker.close();
}
}
return ok;
} //end
I have debugged the code and the problem is broker.store(sel)
I'm currently using the DefaultSequenceMangerImpl which stores the MAX ID's
for each table in Object SequenceEntry, within the store-process a new
Identity is created for SequenceEntry with the construtor of Identity (only
the last lines ...)
else
{
broker =
PersistenceBrokerFactory.defaultPersistenceBroker();
ClassDescriptor cld =
broker.getClassDescriptor(objectToIdentitify.getClass());
// identities must be unique accross extents !
this.objectsClass =
broker.getExtentClass(objectToIdentitify.getClass());
this.objectsRealClass = objectToIdentitify.getClass();
this.pkValues = cld.getKeyValues(objectToIdentitify);
}
checkForPrimaryKeys();
<<<< passed and jump to finally >>>>
}
catch (Throwable t)
{
LoggerFactory.getDefaultLogger().error(t);
throw new ClassNotPersistenceCapableException(t.getMessage(),
t);
}
finally
{
if (broker != null)
{
broker.close();
}
}
The last statement is broker.close() which is the problem. It releases the
connection and the connectionManager used by the broker gets in state
inLocalTransaction = false that on the other Hand raises the exception
within ConnectionManager.localCommit()
<<<
public void localCommit()
{
// if (log.isDebugEnabled()) log.debug("commit was called");
if (!this.isInLocalTransaction)
{
throw new TransactionNotInProgressException("Not in transaction,
call begin() before commit()");
}
...
>>>>>
There's the problem. Hmm, I'm a little bit confused. The code says that
should happen every time i wanna use transactions with the PB API. In the
case a Identity is constructed with constructor Identity(Object) and not the
one getting a broker as second argument.
Is this a bug ? Related to the SequenceManager ? I think it is not related
to ODMG or PB API, isn't ?
Thanx for your help.
Thomas
> -----Ursprungliche Nachricht-----
> Von: Thomas Mahler [mailto:[EMAIL PROTECTED]]
> Gesendet: Dienstag, 3. September 2002 20:50
> An: OJB Users List
> Betreff: Re: TransactionNotInProgressException and AutoCommit Question
>
>
> Your stacktrace indicates that you have mixed PersistenceBroker and ODMG
> Transactions !
>
> The code you present here does IMHO not match to the stacktrace where we
> see a org.apache.ojb.odmg.TransactionImpl.abort() first.
> Your code snippet does not contain such a call???
>
> cheers,
> Thomas
>
>
> Thomas Fahrmeyer wrote:
> > Hi,
> >
> > If I try to save a new object I get the exeption
> >
> > ----- Root Cause -----
> > org.apache.ojb.broker.TransactionNotInProgressException
> > at
> >
> org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.abortTransact
> ion(Persis
> > tenceBrokerImpl.java:266)
> > at
> org.apache.ojb.odmg.TransactionImpl.abort(TransactionImpl.java:505)
> > at
> >
> de.virtualsolution.struts.actions.UpdateSelectionAction.updateSele
> ctionODMG(
> > UpdateSelectionAction.java:225)
> >
> > that happend with the following code:
> >
> >
> >>>>>snippet
> >>>>
> > broker.beginTransaction();
> >
> > // a new object
> > broker.store(sel);
> >
> > // 7. commit transaction
> > broker.commitTransaction();
> > } catch (PersistenceBrokerException pbe) {
> > if (broker.isInTransaction()) {
> > broker.abortTransaction();
> > }
> >
> > m_log.error("Selection could not be saved ! Transaction is
> > rolled back.", pbe);
> > } finally {
> > if (broker != null) {
> > broker.close();
> > }
> > }
> > <<<<< end
> >
> > the call to commitTransaction() raises this exception.
> >
> > The object is saved correctly anyway. Is that related to the autoCommit
> > Settings in OJB.properties ? Which settings should I use if I wanna use
> > begin- and commitTransaction() any time ?
> > I have tried to set the autoCommit-level to 2 in OJB.properties and even
> > ignoreAutoCommitException to true, but doesn't change anything.
> >
> > Can someone help me out (i'm convinced ;)
> >
> > bye
> > Thomas
> >
> >
> > --
> > To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>