sql >> Databasteknik >  >> RDS >> Mysql

hibernate, mysql, glassfish v3 och JTA datakälla

Det verkar som att för din konfiguration används containerhanterade transaktioner som standard. I det här fallet måste du definiera ett sätt för transaktionssynkronisering så att beständighetslagret meddelas (och kan till exempel uppdatera 2:a nivåns cache). Så du måste definiera manager_lookup_class egenskap enligt följande:

// For GlassFish:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.SunONETransactionManagerLookup
// For WebSpere:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.WebSphereExtendedJTATransactionLookup
// For JBoss:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
// For OpenEJB:
hibernate.transaction.manager_lookup_class=org.apache.openejb.hibernate.TransactionManagerLookup

Du måste också markera affärsmetoder som kommer åt datalagret som "transaktionella". För det måste du markera dem med @javax.ejb.TransactionAttribute(REQUIRED) (se här för mer information om denna kommentar).

Du har också möjlighet att byta till bönhanterade transaktioner. Du kan göra det genom att säga:

hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory

Sedan är bönan ansvarig för att starta/sluta transaktionen:

org.hibernate.Session session = ...;
org.hibernate.Transaction tx = null;
try {
    tx = session.beginTransaction();
    session.createQuery(...); // do some staff
    tx.commit();
} catch (HibernateException e)
{
    if (tx != null) {
        tx.rollback();
    }
}



  1. PLS-00103:Påträffade symbolen CREATE

  2. Tidszonnamn med identiska egenskaper ger olika resultat när de tillämpas på tidsstämpel

  3. SQL-användningskolumn från underval i where-sats

  4. Jquery datepicker med Ajax fungerar inte