-->
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: "No global transaction exists to commit" error
PostPosted: Fri Dec 16, 2005 11:39 am 
Newbie

Joined: Fri Dec 16, 2005 10:51 am
Posts: 4
hi,
i'm having this problem since last week, i cannot resolve it and my boss is getting really tired about this issue.

I've identified that my main trouble is with this "No global transaction exists to commit" error.

It appears every time the code tries to commit a transaction that should commit a saving operation.

I'm currently working with Websphere 5.1.1.7 and Hibernate 2.1
I assure you that the piece of code that invokes the HibernateUtil.beginTransaction susessfully executes.
The application works with only one database.

Here i present my code files and log files (altough you will read the logs in spanish, but the error is in english):
hibernate.cfg.xml
HibernateUtil.java
GuardarRecursoAction and TransactionAction (application files)
seguridad.log (which is the application log):



Hibernate.cfg.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>
<session-factory>

<property name="transaction.factory_class">net.sf.hibernate.transaction.JTATransactionFactory</property>
<property name="dialect">net.sf.hibernate.dialect.SQLServerDialect</property>
<property name="transaction.manager_lookup_class">net.sf.hibernate.transaction.WebSphereTransactionManagerLookup</property>
<property name="connection.datasource">jdbc/wfSeguridadInformatica</property>

<property name="show_sql">false</property>
<property name="use_outer_join">true</property>


<!-- mapping files -->
<mapping resource="SolicitudRecursos.hbm.xml"/>
<mapping resource="OpcionPerfil.hbm.xml"/>
<mapping resource="Valor.hbm.xml"/>
<mapping resource="ValorOpcion.hbm.xml"/>
<mapping resource="Dll.hbm.xml"/>
<mapping resource="ParametroEditableItem.hbm.xml"/>
<mapping resource="ParametroListaItem.hbm.xml"/>
<mapping resource="ErrorDll.hbm.xml"/>
<mapping resource="Ayuda.hbm.xml"/>
<mapping resource="Formato.hbm.xml"/>
<mapping resource="CampoItem.hbm.xml"/>

<mapping resource="Ambito.hbm.xml"/>
<mapping resource="AmbitoGrupoGD.hbm.xml"/>
<mapping resource="Atributo.hbm.xml"/>
<mapping resource="Archivo.hbm.xml"/>
<mapping resource="Combo.hbm.xml"/>
<mapping resource="ComboItem.hbm.xml"/>
<mapping resource="Grupo.hbm.xml"/>
<mapping resource="Opcion.hbm.xml"/>
<mapping resource="Perfil.hbm.xml"/>
<mapping resource="Recurso.hbm.xml"/>
<mapping resource="RecursoGrupoGDPropioUsuario.hbm.xml"/>
<mapping resource="RecursoGrupoGDOtrosUsuarios.hbm.xml"/>
<mapping resource="Texto.hbm.xml"/>
<mapping resource="OpcionGrupoGDPropioUsuario.hbm.xml"/>
<mapping resource="OpcionGrupoGDOtrosUsuarios.hbm.xml"/>


<!--mapping resource="SolicitudRecursosOpcion.hbm.xml"/-->
<!--mapping resource="Usuario.hbm.xml"/-->

<!-- Módulo usuario -->
<mapping resource="Comentario.hbm.xml"/>
<mapping resource="SolicitudPerfil.hbm.xml"/>
<mapping resource="OpcionEjecutada.hbm.xml"/>


<!-- Audit -->
<mapping resource="ar/com/bgba/ecompany/commons/AuditLogRecord.hbm.xml"/>
</session-factory>
</hibernate-configuration>




HibernateUtil.java:
package ar.com.bgba.ecompany.commons;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.sql.SQLException;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import net.sf.hibernate.FlushMode;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.cfg.Configuration;

import org.apache.log4j.Logger;

/**
* @author L0740284
*/
public class HibernateUtil {
/**
* Logger for this class
*/
private static final Log logger = LogFactory.getLog(HibernateUtil.class);

/*
* ****************************************************
* Atributes
* *****************************************************
*/
//private static final Logger logger = Logger.getLogger(HibernateUtil.class);
private static final SessionFactory sessionFactory;

/**
* Key utilizada para buscar una session en el Map de Hibernate
*/
public static final String SESSION_KEY = "session";

/**
* Key utilizada para buscar una transaccion en el Map de Hibernate
*/
public static final String TRANSACTION_KEY = "transaction";

/**
* La session a utilizar en un tread particular
*/

static {
try {
Configuration configuration = new Configuration();

sessionFactory = configuration.configure().buildSessionFactory();
//new SchemaExport(cfg).create(false, true);
} catch (HibernateException ex) {
logger.error(ex.getMessage(), ex);
throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage());
}
}

/*
* ****************************************************
* Public Static Methods
* *****************************************************
*/

/**
* Devuelve la session actual
* @return la session de hibernate
* @throws HibernateException
*/
public static Session currentSession() throws HibernateException {

Session session = getSession();//sessionFactory.openSession();


try {
session.connection().setAutoCommit(false);
} catch (SQLException e) {
logger.debug("error al intentar desactivar el autocommit :(");
logger.error(e.getMessage(), e);
}

// Agregado para módulo usuario
threadSession.set(session);
// Fin Agregado para módulo usuario

return session;
}

/**
* Intenta obtener una session de Hibernate del contexto
* utilizando un nombre de session
*
* @param request
* @param sessionName
* @return retorna la session o null si no la encuentra
*/
public static Session currentSession(HttpServletRequest request, String sessionName) {

Map sessionMap = (Map) request.getSession().getAttribute(sessionName);

if (sessionMap == null) return null;

Session session = setearAutocommitVerdadero(sessionMap);
// Agregado para módulo usuario
threadSession.set(session);
// Fin Agregado para módulo usuario

return session;
}

/**
* @param sessionMap
* @return
*/
private static Session setearAutocommitVerdadero(Map sessionMap) {
Session session = (Session) sessionMap.get(SESSION_KEY);
try {
if (!session.isConnected()) {
session.reconnect();
}
session.connection().setAutoCommit(false);
} catch (SQLException e) {
logger.debug("error al intentar desactivar el autocommit :(");
logger.error(e.getMessage(), e);
} catch (HibernateException e) {
logger.debug("error al intentar desactivar el autocommit :(");
logger.error(e.getMessage(), e);
}
return session;
}

/**
* Intenta obtener una transaccion de Hibernate del contexto
* utilizando un nombre de session
*
* @param request
* @param sessionName
* @return retorna la transaction o null si no la encuentra
*/
public static Transaction currentTransaction(HttpServletRequest request, String sessionName) {

Map sessionMap = (Map) request.getSession().getAttribute(sessionName);

if (sessionMap == null) return null;

setearAutocommitVerdadero(sessionMap);


Session hSession = (Session)sessionMap.get(HibernateUtil.SESSION_KEY);
Transaction tr = null;
try{
tr = hSession.beginTransaction();
}catch( Exception e)
{
logger.debug(e.getMessage());
}
return tr;


}

/*
* Para el módulo usuario
*/
private static final ThreadLocal threadSession = new ThreadLocal();
private static final ThreadLocal threadTransaction = new ThreadLocal();

// Este metodo se hizo publico solo por el hecho de necesitar
// ciertos workarounds alrededor de bugs de Hibernate.
// Por lo tanto debe ser usado solo si es ESTRICTAMENTE NECESARIO
public static Session openSession()
{
Session s = null;
try {
s = (Session) sessionFactory.openSession();
}
catch( HibernateException e )
{
logger.debug("HibernateUtil.openSession:" + e.getMessage());
}
return s;

}
public static Session getSession() {
logger.debug("Inicio de HibernateUtil.getSession()");
Session s = (Session) threadSession.get();
// Open a new Session, if this thread has none yet
try {
if (s == null) {
logger.debug("HibernateUtil.getSession: sesion nula. Procediendo a sessionFactory.openSession");
s = sessionFactory.openSession();
threadSession.set(s);
}
//Checking if the session is connected
if (!s.isConnected())
{
s.reconnect();
logger.debug("HibernateUtil.getSession: session reconectada");
}


//s.connection().setAutoCommit(false);
//s.setFlushMode(FlushMode.NEVER);
} catch (HibernateException e) {
throw new InfrastructureException(e);
}
// catch (SQLException e) {
// throw new InfrastructureException(e);
// }
logger.debug("Fin de HibernateUtil.getSession()");
return s;
}

public static void closeSession() {
try {
Session s = (Session) threadSession.get();
threadSession.set(null);
if (s != null && s.isOpen()) {
s.close();
}
} catch (HibernateException e) {
throw new InfrastructureException(e);
}
}

public static void beginTransaction() {
Transaction tx = (Transaction) threadTransaction.get();
try {
if (tx == null) {

tx = getSession().beginTransaction();
threadTransaction.set(tx);
}
} catch (HibernateException e) {
throw new InfrastructureException(e);
}
}

public static void commitTransaction() {
logger.debug("HibernateUtil.commitTransaction: Comenzando el metodo");
Transaction tx = (Transaction) threadTransaction.get();
try {
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
logger.debug("HibernateUtil.commitTransaction: antes de tx.commit");
tx.commit();
logger.debug("HibernateUtil.commitTransaction: después de tx.commit");
threadTransaction.set(null);
}
} catch (HibernateException e) {
logger.debug("HibernateUtil.commitTransaction: entro por el catch");
rollbackTransaction();
throw new InfrastructureException(e);
}
logger.debug("HibernateUtil.commitTransaction: Finalizando el metodo");
}

public static void rollbackTransaction() {
logger.debug("HibernateUtil.rollbackTransaction(): comenzando el método");
Transaction tx = (Transaction) threadTransaction.get();
try {
threadTransaction.set(null);
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
logger.debug("HibernateUtil.rollbackTransaction(): antes de tx.rollback()");
tx.rollback();
logger.debug("HibernateUtil.rollbackTransaction(): despues de tx.rollback()");
}
} catch (HibernateException e) {
logger.debug("HibernateUtil.rollbackTransaction():entró por el catch()");
throw new InfrastructureException(e);
} finally {
closeSession();
}
logger.debug("HibernateUtil.rollbackTransaction(): finalizando el método");
}

public static void reconnectSession(Session session)
{
try
{
if( session != null)
{
if(!session.isConnected())
{
session.reconnect();
}
}
else
{
logger.debug("la session es nula en HibernateUtil.reconnectSession");
logger.debug("HibernateUtil.reconnectSession: procediendo a setear la session");
session = getSession();
if(!session.isConnected())
{
session.reconnect();
}
}

}
catch(HibernateException e)
{
throw new InfrastructureException(e);
}
// threadSession.set(session);
}

public static Session disconnectSession() {
Session session = HibernateUtil.getSession();
try {
threadSession.set(null);
if (session.isConnected() && session.isOpen()) {
session.disconnect();
}
} catch (HibernateException e) {
throw new InfrastructureException(e);
}
return session;
}

public static void newApplicationTx() {
HibernateUtil.beginTransaction();
}

public static void registerInterceptor() {

}
/**
* @return Returns the sessionFactory.
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}



GuardarRecursoAction.java:
/*
* Created on 30-mar-2004
*
* $Id$
*/
package ar.com.bgba.ecompany.wfsi.admin.action;

import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;

import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import ar.com.bgba.ecompany.commons.struts.StrutsUtils;
import ar.com.bgba.ecompany.commons.struts.TransactionAction;
import ar.com.bgba.ecompany.wfsi.AmbitoGrupoGD;
import ar.com.bgba.ecompany.wfsi.Grupo;
import ar.com.bgba.ecompany.wfsi.Recurso;
import ar.com.bgba.ecompany.wfsi.RecursoGrupoGDOtrosUsuarios;
import ar.com.bgba.ecompany.wfsi.RecursoGrupoGDPropioUsuario;
import ar.com.bgba.ecompany.wfsi.Usuario;
import ar.com.bgba.ecompany.wfsi.admin.forms.RecursoForm;
import ar.com.bgba.ecompany.wfsi.dao.GrupoDAO;
import ar.com.bgba.ecompany.wfsi.helper.SessionHelper;
import ar.com.bgba.ecompany.wfsi.manager.UsuarioManager;
import ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants;
import ar.com.bgba.ecompany.wfsi.usuario.view.vo.UsuarioVO;

/**
* @author l0740098
*
* Guarda un recurso en la BD
*/
public class GuardarRecursoAction extends TransactionAction {

/**
* @param sessionName
*/
public GuardarRecursoAction() {
super("SESSION-RECURSO");
}

/*
* ****************************************************
* Attributes
* *****************************************************
*/
private static final Logger logger = Logger
.getLogger(GuardarRecursoAction.class);

/*
* ****************************************************
* Private Methods
* *****************************************************
*/
/**
* @param strings
* @param session
* @return
*/
private Set getGrupos(String[] strings, Session session) {
// Importante! Eliminar los UIDs o traerá 2 instancias de grupos de UID iguales pero con otro hashcode!
LinkedList listaGrupos = new LinkedList();
CollectionUtils.addAll(listaGrupos, strings);
Set gruposSinRepeticion = new HashSet();
gruposSinRepeticion.addAll(listaGrupos);

Set grupos = new HashSet();
for (Iterator iter = gruposSinRepeticion.iterator(); iter.hasNext();) {
String grupoString = (String) iter.next();
try {
Grupo grupo = GrupoDAO.getInstance().loadGrupo(
new Long(grupoString), session);
grupos.add(grupo);
} catch (NumberFormatException e) {
// Do nothing
} catch (HibernateException e) {
logger.debug("Error cargando grupos: ", e);
break;
}

}

return grupos;
}

/*
* ****************************************************
* Public Methods
* *****************************************************
*/
/* (non-Javadoc)
* @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse arg3,
Session session) throws Exception {

RecursoForm recursoForm = (RecursoForm) form;
Recurso recurso = recursoForm.getRecurso();
Set grupos = this.getGrupos(recursoForm.getGrupos(), session);

// Obtengo el alcance que corresponda con id_alcance
//y lo seteo a recurso.

logger.debug("Recurso a guardar: " + recurso);

if (recurso.getUid() == 0)
{
recurso.setFechaAlta(new Date());
recurso.setDisponible(true);
}
recurso.setFechaUltimaModificacion(new Date());
recurso.setGrupos(grupos);

// Guardar los owners
Collection coleccionOwnerVOs = (Collection) request.getSession().getAttribute(Constants.KEY_OWNERS);
Collection owners = UsuarioManager.INSTANCE.buildDomainObjects(coleccionOwnerVOs);
recurso.getOwners().clear();
recurso.addAllToOwners(owners);

// Guardar el Responsable
logger.debug("Storing person in charge");
Collection coleccionResponsablesVOs = (Collection) request.getSession().getAttribute(Constants.KEY_RESPONSABLES);
if(coleccionResponsablesVOs != null)
{
if(coleccionResponsablesVOs.size() > 0)
{
Usuario responsable = UsuarioManager.INSTANCE.buildDomainObject((UsuarioVO)coleccionResponsablesVOs.iterator().next());
logger.debug("User in charge: [" + responsable.getLegajo() + "], " + responsable.getNombreCompleto());
recurso.setResponsable(responsable);
}
}

//Save the author only if i´m creating a resource. Otherwise, update the field ModifiedBy
if(recurso.getUid() == 0)
{
logger.debug("Saving Author.");
recurso.setAutor(SessionHelper.getInstance().getUsuario(request.getSession()));
logger.debug("Author saved.");
}
else
{
//I´m modifying, then i´ll update the field modificadoPor
logger.debug("Saving Modified by");
recurso.setModificadoPor(SessionHelper.getInstance().getUsuario(request.getSession()));
logger.debug("Modified by saved.");
}

//Save groups that belong to the responsables of the OWN user
java.util.Iterator iterTemp = null;
logger.debug("Getting own user´s groups from session.");
Collection gruposDeResponsable = (Collection)request.getSession().getAttribute(ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants.KEY_GRUPOS_PROPIO_USUARIO);
logger.debug("Groups retrieved: " + gruposDeResponsable);
if(gruposDeResponsable != null)
{
iterTemp = gruposDeResponsable.iterator();

while(iterTemp.hasNext())
{
AmbitoGrupoGD group = (AmbitoGrupoGD)iterTemp.next();
RecursoGrupoGDPropioUsuario groupToAdd = new RecursoGrupoGDPropioUsuario();
groupToAdd.setGrupo(group.getGrupo());
logger.debug("Group to add: " + groupToAdd);
//Let´s check if the group is not already in the set (this applies when we are modifying)
Iterator iter = recurso.getGruposPropioUsuario().iterator();
boolean addIt = true;
while(iter.hasNext() && addIt)
{
if(groupToAdd.getGrupo().equals( ((RecursoGrupoGDPropioUsuario)iter.next()).getGrupo() ))
{
addIt = false;
}
}
if(addIt)
{
logger.debug("Adding");
recurso.addToGruposPropioUsuario(groupToAdd);
}
}
}
//Save groups that belong to the responsables of the OTHER users
logger.debug("Getting other users´ groups from session.");
gruposDeResponsable = (Collection)request.getSession().getAttribute(ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants.KEY_GRUPOS_OTROS_USUARIOS);
logger.debug("Groups retrieved: " + gruposDeResponsable);
if(gruposDeResponsable != null)
{
iterTemp = gruposDeResponsable.iterator();

while(iterTemp.hasNext())
{
AmbitoGrupoGD group = (AmbitoGrupoGD)iterTemp.next();
RecursoGrupoGDOtrosUsuarios groupToAdd = new RecursoGrupoGDOtrosUsuarios();
groupToAdd.setGrupo(group.getGrupo());
logger.debug("Group to add: " + groupToAdd);
//Let´s check if the group is not already in the set (this applies when we are modifying)
Iterator iter = recurso.getGruposOtrosUsuarios().iterator();
boolean addIt = true;
while(iter.hasNext() && addIt)
{
if(groupToAdd.getGrupo().equals( ((RecursoGrupoGDOtrosUsuarios)iter.next()).getGrupo() ))
{
addIt = false;
}
}
if(addIt)
{
logger.debug("Adding");
recurso.addToGruposOtrosUsuarios(groupToAdd);
}
}
}

//SAVE the only responsable of the resource (it´s a groupGD)
gruposDeResponsable = (Collection)request.getSession().getAttribute(ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants.KEY_GRUPOS_RESPONSABLE);
if(gruposDeResponsable != null)
{
iterTemp = gruposDeResponsable.iterator();

while(iterTemp.hasNext())
{
AmbitoGrupoGD group = (AmbitoGrupoGD)iterTemp.next();
recurso.setGrupoResponsable(group.getGrupo());
}
}

if (recursoForm.getDisponible() != null)
{
recurso.setDisponible(true);
}

logger.debug("Before saving");
session.saveOrUpdate(recurso);

logger.debug("After saving");
this.confirmarSession(request);

logger.debug("Removing groups from the session");
request.getSession().removeAttribute(ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants.KEY_GRUPOS_PROPIO_USUARIO);
request.getSession().removeAttribute(ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants.KEY_GRUPOS_OTROS_USUARIOS);
request.getSession().removeAttribute(ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants.KEY_OWNERS);
request.getSession().removeAttribute(ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants.KEY_RESPONSABLES);
request.getSession().removeAttribute(ar.com.bgba.ecompany.wfsi.usuario.view.form.Constants.KEY_GRUPOS_RESPONSABLE);

return StrutsUtils.getInstance().addParameter(mapping.findForward("ok"),
"uid", String.valueOf(recurso.getUid()));

}

}



TransactionAction.java:
/*
* Created on 31-may-2004 : l0740098
*
*
*/
package ar.com.bgba.ecompany.commons.struts;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import ar.com.bgba.ecompany.commons.HibernateUtil;

/**
* @author l0740098 31-may-2004 12:10:14
*
* TransactionAction
*/
public abstract class TransactionAction extends AbstractTransactionAction
{
/**
* Logger for this class
*/
private static final Log logger = LogFactory
.getLog(TransactionAction.class);

/*
* **************************************************** Public Methods *****************************************************
*/

/**
* Nombre del forward que se ejecuta si la session expiro
*/
public static final String SESSION_EXPIRED = "expired";

//private static final Logger logger = Logger.getLogger(TransactionAction.class);

/*
* **************************************************** Constructor *****************************************************
*/
/**
* Default constructor
*
* @param sessionName
* un string que identifica a esta transaccion en particular en el contexto
*/
public TransactionAction(String sessionName)
{
super(sessionName);
}

/*
* **************************************************** Protected Methods *****************************************************
*/

/*
* **************************************************** Public Methods *****************************************************
*/
/*
* (non-Javadoc)
*
* @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm,
* javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
{

String hibernateSessionName = getHibernateSessionName();

///Session session = HibernateUtil.currentSession(request, hibernateSessionName);
logger.debug("TransactionAction.execute: antes de Session session = HibernateUtil.getSession();");
Session session = HibernateUtil.getSession();
logger.debug("TransactionAction.execute: despues de Session session = HibernateUtil.getSession();");
setSession(session);

/*
* if(session == null)
{
logger.debug("if session==null");
logger.debug("No existe una session previa con el ID: " + hibernateSessionName);
//return mapping.findForward(SESSION_EXPIRED);
session = HibernateUtil.currentSession();//TODO agregado ahora
} *
*/

if(!session.isConnected())
{
session.reconnect();
}

///Transaction transaction = HibernateUtil.currentTransaction(request, hibernateSessionName);
logger.debug("TransactionAction.execute: antes de HibernateUtil.beginTransaction();");
HibernateUtil.beginTransaction();
logger.debug("TransactionAction.execute: despues de HibernateUtil.beginTransaction();");

///logger.debug("Despues de Transaction transaction = HibernateUtil.currentTransaction(request, hibernateSessionName);");
///setTransaction(transaction);
///logger.debug("despues de setTransaction(transaction);");

if(session==null)
{
logger.debug("session es null");
}
else
{
logger.debug("session está conectada? -->" + session.isConnected());
logger.debug("session está abierta? -->" + session.isOpen());
}

/*
*
*if(getTransaction() == null)
{
logger.debug("entró por if getTransaction()==null");
logger.debug("No existe una transaccion previa con el ID: " + hibernateSessionName);

//return mapping.findForward(SESSION_EXPIRED);
Object obj = mapping.findForward(SESSION_EXPIRED);
if( obj == null )
{
logger.debug("mapping.findForward(SESSION_EXPIRED) es null\nVoy a abrir una transaction!!!");
transaction = session.beginTransaction();
setTransaction(transaction);//TODO aca agregue begintransaction!!!
}
else
{
logger.debug("mapping.findForward(SESSION_EXPIRED):" + obj.toString());
return (ActionForward)obj;
}

}*
*/

try
{
logger.debug("I´m going to the EXECUTE OF THE CHILD CLASS");
ActionForward actionForward = execute(mapping, form, request, response, session);
logger.debug("I came back from the EXECUTE OF THE CHILD CLASS");
logger.debug("actionForward returned from the EXECUTE OF THE CHILD CLASS: " + actionForward.toString());
if(session.isConnected() && session.isOpen())
{
// El usuario NO hizo commit => desconectar
///logger.debug("antes del transaction.commit();");
///transaction.commit();
logger.debug("TransactionAction.execute: antes de HibernateUtil.commitTransaction();");
HibernateUtil.commitTransaction();
logger.debug("TransactionAction.execute: despues de HibernateUtil.commitTransaction();");
///logger.debug("despues del transaction.commit();");
///session.disconnect();
logger.debug("TransactionAction.execute: antes de HibernateUtil.closeSession();");
HibernateUtil.closeSession();
logger.debug("TransactionAction.execute: despues de HibernateUtil.closeSession();");
}
logger.debug("session está conectada? " + session.isConnected());
logger.debug("session está abierta? " + session.isOpen());
logger.debug("ESTADO de la transaction");
logger.debug("transaction " + this.getTransaction());

return actionForward;
}
catch(HibernateException e)
{
request.removeAttribute(hibernateSessionName);

logger.error(e.getMessage(), e);

///if(transaction != null) transaction.rollback();
///logger.debug("luego de if(transaction != null) transaction.rollback();");
if(session != null) session.close();

throw e;
}

}
}



seguridad.log:
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 136]- Storing person in charge
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 151]- Saving Author.
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.helper.SessionHelper() [line 87]- Obteniendo usuario
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.helper.SessionHelper() [line 90]- Obteniendo usuario ahora => L0749001 - Lambolay, Marcos Santiago
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.helper.SessionHelper() [line 94]- Obteniendo usuario despues => L0749001 - Lambolay, Marcos Santiago
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 153]- Author saved.
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 165]- Getting own user´s groups from session.
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 167]- Groups retrieved: [AmbitoGrupoGD - uId: [0], Name: [0C0C1241ECompany], Description: [\\Fscorp1\Grupales\Sistemas\Cc1241\Ecompany]]
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 177]- Group to add: RecursoGrupoGDPropioUsuario - uId: [0], Name: [0C0C1241ECompany]
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 190]- Adding
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 196]- Getting other users´ groups from session.
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 198]- Groups retrieved: [AmbitoGrupoGD - uId: [0], Name: [0C0C1241ECompany], Description: [\\Fscorp1\Grupales\Sistemas\Cc1241\Ecompany]]
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 208]- Group to add: RecursoGrupoGDOtrosUsuarios - uId: [0], Name: [0C0C1241ECompany]
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 221]- Adding
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 245]- Before saving
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction() [line 248]- After saving
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.commons.struts.AbstractTransactionAction() [line 133]- AbstractTransactionAction.comfirmarSession: antes de HibernateUtil.commitTransaction();
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.commons.HibernateUtil() [line 244]- HibernateUtil.commitTransaction: Comenzando el metodo
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.commons.HibernateUtil() [line 248]- HibernateUtil.commitTransaction: antes de tx.commit
ERROR Servlet.Engine.Transports : 2 net.sf.hibernate.transaction.JTATransaction() [line 59]- Commit failed
java.lang.IllegalStateException: No Global Transaction exists to commit.
at com.ibm.ws.Transaction.JTA.UserTransactionImpl.commit(UserTransactionImpl.java:225)
at net.sf.hibernate.transaction.JTATransaction.commit(JTATransaction.java:55)
at ar.com.bgba.ecompany.commons.HibernateUtil.commitTransaction(HibernateUtil.java:249)
at ar.com.bgba.ecompany.commons.struts.AbstractTransactionAction.confirmarSession(AbstractTransactionAction.java:134)
at ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction.execute(GuardarRecursoAction.java:249)
at ar.com.bgba.ecompany.commons.struts.TransactionAction.execute(TransactionAction.java:148)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.ServicingServletState.service(StrictLifecycleServlet.java:333)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1171)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:676)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:203)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:320)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1171)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:676)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:203)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:125)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:300)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:120)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:250)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:652)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:458)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:936)
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.commons.HibernateUtil() [line 254]- HibernateUtil.commitTransaction: entro por el catch
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.commons.HibernateUtil() [line 262]- HibernateUtil.rollbackTransaction(): comenzando el método
DEBUG Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.commons.HibernateUtil() [line 277]- HibernateUtil.rollbackTransaction(): finalizando el método
ERROR Servlet.Engine.Transports : 2 ar.com.bgba.ecompany.wfsi.admin.action.ExceptionHandler() [line 43]- Commit failed with exception:
ar.com.bgba.ecompany.commons.InfrastructureException: Commit failed with exception:
at ar.com.bgba.ecompany.commons.HibernateUtil.commitTransaction(HibernateUtil.java:256)
at ar.com.bgba.ecompany.commons.struts.AbstractTransactionAction.confirmarSession(AbstractTransactionAction.java:134)
at ar.com.bgba.ecompany.wfsi.admin.action.GuardarRecursoAction.execute(GuardarRecursoAction.java:249)
at ar.com.bgba.ecompany.commons.struts.TransactionAction.execute(TransactionAction.java:148)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.ServicingServletState.service(StrictLifecycleServlet.java:333)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1171)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:676)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:203)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:320)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:1171)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:676)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:203)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:125)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:300)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:120)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:250)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:652)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:458)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:936)


I consider that the logs that goes before the the ones i put here are irrelevant

you should consider that TransactionAction is the file one should look at since i think there you can see what the problem could be, knowing that when TransactionAction calls the execute method that performs the execute method on GuardarRecursoAction the only thing this last method does is a simply save and commits a transaction

Any hel will be __REALLY__ appreciated


Top
 Profile  
 
 Post subject:
PostPosted: Sat Dec 17, 2005 12:23 am 
Beginner
Beginner

Joined: Thu Dec 01, 2005 7:07 pm
Posts: 21
Check for the following:
1) Change ur transaction factory from JTA to CMT
2) If the bean is an EJB then the container will do the txn management and the Hibernate Transaction will participate in the same. Ensure the EJB is deployed and transactions are taken care (test this probably without Hibernate)
3) Try setting transactional attributes (required) at EJB level.
4) Differences between communities like Hibernate and Organisations like IBM - these get minimised in improved versions - consider using Hibernate 3.1 and WAS6.

I hope either of these should lead to the solution. Keep the forum posted.


Top
 Profile  
 
 Post subject: "No global transaction exists to commit" work arou
PostPosted: Mon Dec 19, 2005 8:11 am 
Newbie

Joined: Fri Dec 16, 2005 10:51 am
Posts: 4
maybe i discovered a so-called "workaround" to this problem.
i took out from hibernate.cfg.xml the sections transaction.manager_lookup_class and transaction.factory_class and it seemed to begin working properly. However this fix has some secondary effects. The fact is i'm getting a new kind of error one that says:
"a different object with the same identifier value was already associated with the session".
I will search about this new problem, or post in case it's necessary


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.