(hibernate 3.0)
I've the error : "AssertionFailure : possible nonthreadsafe access" in the next method that import record in a table oracle from a source file ascii.
The error occur random; sometimes when commit(), save(), rollback(). I don't understand why!
Thanks for attention.
...
Session sexhib = HibernateUtil.getSessionHbm( this.getIdSessioneJeco() );
tx = sexhib.beginTransaction();
...
while( (i_letti = this.leggeRiga( fr, buff )) >= 0 ) {
TracciatoRecordImportDati tra = this.getTracciatiRecord().get( this.nomiFileDaImportare[0] );
tra.setRecord( buff.toString() );
// decido se cancellare fisicamente
app = this.getValoreCampo( this.nomiFileDaImportare[0], "AGGIO_CANC" );
idart = this.getValoreCampo( this.nomiFileDaImportare[0], "ID_ARTICOLO" );
trovato = false;
Articolo art = (Articolo)sexhib.get( Articolo.class, idart, LockMode.UPGRADE );
if( art == null )
art = new Articolo();
else
trovato = true;
boolean errore_record = false;
try {
if( ! fareDelete ) {
descrizione = this.getValoreCampo( this.nomiFileDaImportare[0], "DESCRIZ" );
descbreve = this.getValoreCampo( this.nomiFileDaImportare[0], "DESCRIZ_BREVE" );
idset = this.getValoreCampo( this.nomiFileDaImportare[0], "ID_SETTOREMAG" );
...
SettoreMag setmag = null;
if( idset != null )
setmag = (SettoreMag)sexhib.get( SettoreMag.class, idset, LockMode.READ );
...
art.setIdArticolo(idart);
art.setDescrizioneDefault( descrizione );
art.setDescrizioneBreve( descbreve );
art.setSettoreMag( setmag );
if( !trovato )
sexhib.save( art );
else
sexhib.update( art );
sexhib.flush();
} catch( HibernateException hex ) {
errore_record = true;
errore = true;
giornale.error( "hibernate:save/update/delete articolo " + idart + " : " + hex.getMessage() );
} catch ( Exception ex ) {
errore_record = true;
errore = true;
this.giornale.error( "ciclo di import: articolo " + idart + ": " + ex.getMessage() );
} finally {
if( errore_record ) // && trovato )
sexhib.evict( art );
ret ++;
}
// -------------------------
// COMMITTO la transazione
// -------------------------
if( this.fareCommit( ret ) ) {
boolean fai_rollback = false;
try {
tx.commit();
this.giornale.info("Commit OK : aggiornati "+l_conta_aggiornati+" records");
} catch ( HibernateException hex ) {
fai_rollback = true;
errore = true;
this.giornale.error("commit ERRORE (rollback) nei pressi dell'articolo " + idart + ": " + hex.getMessage() );
} catch ( Throwable exth ) {
fai_rollback = true;
errore = true;
this.giornale.error("commit ERRORE (rollback) nei pressi dell'articolo " + idart, exth );
} finally {
if( fai_rollback )
if( tx != null )
tx.rollback();
sexhib.clear();
l_conta_aggiornati = 0L;
tx = sexhib.beginTransaction();
}
}
}
[/i]
|