-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Utiliser des transactions longues avec JBOSS
PostPosted: Wed Aug 31, 2005 11:09 am 
Regular
Regular

Joined: Sat May 15, 2004 4:27 am
Posts: 79
Bonjour à tous,

je travaille avec Hibernate 2.1.6/Oracle9i/Jboss 3.2.5. Dans le libre de Gavin
et Christian. Pour implémenter les transactions longues. Ils utilisent
httpSession. Normal car leur application fonctionne sous tomcat. Je bosse
sur une application qui n'utilise pas pas du tout Tomcat. Mon application
fonctionne sous Jboss. J'ai pris Jboss uniquement pour le Jndi. Je cherche
donc à savoir comment faire pour utiliser des transactions longues quand
je suis sous jboss. Mon application n'utilise pas de servlet donc je ne peux
pas utilise httpSession. Voici le code ma factory de session :

public class HibernateFactory {

private static final String JNDI_RSC = "java:/hibernate/HibernateFactory";
private static HibernateFactory instance = null;
private static Boolean loaded = Boolean.FALSE;
private static SessionFactory sessionFactory = null;
private static ThreadLocal thrSession = new ThreadLocal();
private static ThreadLocal thrTransaction = new ThreadLocal();


/**
* Constructeur privé
*/
private HibernateFactory() {
super();
}

public static HibernateFactory getInstance() {
Context ctx = null;

if (loaded == Boolean.FALSE) {
synchronized (loaded) {
try {
ctx = new InitialContext();
sessionFactory = (SessionFactory) ctx.lookup(JNDI_RSC);
} catch (NamingException ne) {
//
}

if (null != sessionFactory) {
instance = new HibernateFactory();
loaded = Boolean.TRUE;
}
}
}

return instance;
}

public static HibernateFactory getInstanceStandalone() {

try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (HibernateException he) {
//
}
instance = new HibernateFactory();

return instance;
}

public Session currentSession() throws DataAccessException {

Session s = (Session) thrSession.get();

try {
if (null == s) {
s = sessionFactory.openSession();
thrSession.set(s);
}
} catch (HibernateException e) {
//
}

return s;
}

public void closeSession() throws DataAccessException {

try {
Session s = (Session) thrSession.get();

thrSession.set(null);
if ((null != s) && (s.isOpen())) {
s.close();
}
} catch (HibernateException e) {
//
}
}

public void flushSession() throws DataAccessException {

try {
Session s = (Session) thrSession.get();

if (null != s) {
s.flush();
}
} catch (HibernateException e) {
//
}
}

public void beginTransaction() throws DataAccessException {

Transaction tx = (Transaction) thrTransaction.get();

try {
if (null == tx) {
tx = currentSession().beginTransaction();
thrTransaction.set(tx);
}
} catch (Exception e) {
//
}
}

public void commitTransaction() throws DataAccessException {

Transaction tx = (Transaction) thrTransaction.get();

try {
if ((null != tx) && !tx.wasCommitted() && !tx.wasRolledBack()) {
tx.commit();
}
thrTransaction.set(null);
}
catch (HibernateException e) {
rollbackTransaction();
//
}
}

public void rollbackTransaction() throws DataAccessException {

Transaction tx = (Transaction) thrTransaction.get();

try {
thrTransaction.set(null);
if ((null != tx) && !tx.wasCommitted() && !tx.wasRolledBack()) {
tx.rollback();
}
} catch (HibernateException e) {
//
} finally {
//
}
}
}

Ayant un prb d'accès concourant à résoudre, je m'oriente vers cette
solution. Je ne sais pas si l'utilisation d'un EJB Session peut me servir. Je
n'ai jamais travaillé avec des EJB.

Cette transaction me permettrait à deux transactions différentes d'avoir
accès aux mêmes infos. Et ne plus avoir l'exception

net.sf.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) for persistance.dao.hibernate.Transfert instance with identifier: 362
at net.sf.hibernate.persister.AbstractEntityPersister.check(AbstractEntityPersister.java:506)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:687)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:642)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2418)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2372)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2240)
at persistance.dao.hibernate.HibernateFactory.flushSession(HibernateFactory.java:181)
at transverse.session.SessionManager.flushSession(SessionManager.java:146)
at persistance.ListeTacheAutomateEntiteHibernate.sauvegarderIdService(ListeTacheAutomateEntiteHibernate.java:149)
at domaine.ListeTacheAutomateMetier.sauvegarderIdService(ListeTacheAutomateMetier.java:78)
at service.planification.automate.ListeTacheAutomateImpl.setIdService(ListeTacheAutomateImpl.java:181)
at service.planification.automate.ListeTacheAutomate.setIdService(ListeTacheAutomate.java:56)
at sun.reflect.GeneratedMethodAccessor420.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:402)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:309)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:333)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:150)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:120)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:481)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:323)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:854)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:72)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:423)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 01, 2005 7:18 am 
Hibernate Team
Hibernate Team

Joined: Thu Dec 18, 2003 9:55 am
Posts: 1977
Location: France
http://trailblazer.demo.jboss.com/EJB3T ... index.html

cependant c'est avec EJB3.0 + EntityManager :(

_________________
Anthony,
Get value thanks to your skills: http://www.redhat.com/certification


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 01, 2005 8:26 am 
Regular
Regular

Joined: Sat May 15, 2004 4:27 am
Posts: 79
@anthony

dans ton bouquin, j'ai vu que pour gérer les transactions d'application tu
utilises un threadLocal aussi. Tu utilises un filtre pour gérer la transaction
longue. Pour mon cas de figure, je dois utiliser un EJB pour le faire ?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.