MyISAM tabulky nejsou transakcni, coz je zdroj vasich problemu.
Jinak to zamykani objektu bych resil pres session.lock (kdyz uz tu instanci
mate).

Nejsem si jisty, ze session.get udela to same na jiz jednou natazenou
instanci.
Rozhodne je to necitelny zpusob, jak v tomto pripade zamykat.

  Lukas


2009/6/19 Pavel Nemec <neme...@gmail.com>

> Dne 19. Ĩerven 2009 16:25 Podlesak Kamil <kamil.podle...@ips-ag.net>
> napsal(a):
> > Zdravim,
> >
> > Nejak jsem to v celem vlaknu nenasel, takze se explicitne zeptam:
> > Jsou vsechny ty tabulky InnoDB? Pro jistotu to peclive overte, default je
> MyISAM!
>
> Jsemsi temer jist ze jsou default tj MyISAM.
>
> Posilam kod, ktery pouzivam na testovani konkurencniho pristupu
>
>
> >
> > Kamil Podlesak
> >
> >
>
>                        Session session =
> HibernateUtil.getSessionFactory().openSession();
>
>                        Transaction tx = session.beginTransaction();
>                        List  list = session.createQuery("from
> ServerMessage").list();
>
>                        ServerMessage sm = (ServerMessage) list.get(0);
>                        ServerMessage smLocked = (ServerMessage)
> session.get(ServerMessage.class,sm.getId(),LockMode.UPGRADE);
>                        session.flush();
>
> // v tuto chvili zkontroluji db, a provedu zmenu na radce se stejnym id,
> uspesne
>                        session.save(smLocked);
>                        session.flush();
>                        sm = (ServerMessage) list.get(1);
>                        smLocked = (ServerMessage)
> session.get(ServerMessage.class,sm.getId(),LockMode.UPGRADE);
>                        logger.info("smazan objekt: "+smLocked.getFlag());
>                        session.delete(smLocked);
>                        sm = (ServerMessage) list.get(2);
>                        smLocked = (ServerMessage)
> session.get(ServerMessage.class,sm.getId(),LockMode.UPGRADE);
>                        logger.info("smazan objekt: "+smLocked.getFlag());
>                        session.delete(smLocked);
>                        sm = (ServerMessage) list.get(3);
>                        smLocked = (ServerMessage)
> session.get(ServerMessage.class,sm.getId(),LockMode.UPGRADE);
>                        logger.info("smazan objekt: "+smLocked.getFlag());
>                        session.delete(smLocked);
>
>                        session.flush();
>
> // v tuto chvili vsechny tri objekty jiz nejsou v db !
>
>                        tx.rollback();
> // rollback nevrati zmeny, v db jsou stale zmazany vsechny objekty
>
>                        if(session.isOpen())session.close();
>

Odpovedet emailem