délai d'expiration de transaction ne fonctionne pas sur hibernate, oracle
Je vais avoir des problème de réglage du délai d'expiration de transaction pour hibernate sur oracle. Il ne fonctionne pas.Quelqu'un peut-il aider?
Le "SaveOrUpdate" ne sera pas de retour dans les 10 secondes. Il va s'accrocher pour un temps très long.
Je suis de l'utilisation d'Oracle 10r2.
Hibernate Fichier de Configuration
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@9.9.9.9:1521:orcl</property>
<property name="connection.username">foouser</property>
<property name="connection.password">foopass</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Mapping files -->
<mapping resource="foo.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Hibernate classe
public class foo implements Serializable
{
...
public void save() throws Exception
{
Session dbSession = null;
Transaction tran = null;
try
{
dbSession = PersistenceMgr.getPersistenceMgr().getDbSession();
tran = dbSession.beginTransaction();
tran.setTimeout(10); // 10 seconds
dbSession.saveOrUpdate(this);
tran.commit();
}
catch (HibernateException e)
{
if(tran!=null)
{
try{tran.rollback();}
catch(HibernateException he){}
}
...
}
finally
{
if( dbSession != null )
{
try{dbSession.close();}
catch(HibernateException e){}
}
}
}
}
Vous devez vous connecter pour publier un commentaire.
Le délai d'attente doit être réglée avant la transaction est démarrée.
au lieu de
essayer
Vous pouvez voir à: http://community.jboss.org/wiki/TransactionTimeout.
Est-ce à l'aide de JTA? Si non, JDBC lui-même n'a pas d'API pour définir un délai d'expiration de transaction ainsi, au lieu d'Hibernate tente de gérer que par le suivi de la façon dont beaucoup de la période de temps spécifiée reste lors de l'exécution d'un JDBC Instruction de la transaction et le réglage de la Déclaration.setQueryTimeout. Il se pourrait qu'il y est un bug dans cette logique ou que l'Oracle JDBC driver a un bug concernant la mise en déclaration de délai d'attente.
Si vous trouvez qu'il est Hibernate bug, https://hibernate.onjira.com