Author: tchemit Date: 2012-04-04 16:04:32 +0200 (Wed, 04 Apr 2012) New Revision: 488 Url: http://forge.codelutin.com/repositories/revision/echobase/488 Log: refs #1084: Apr?\195?\168s un import en erreur, impossible d'en recommencer un (am?\195?\169lioration) Removed: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseTopiaConnectionProvider.java Modified: trunk/echobase-entities/src/main/resources/topia-h2.properties trunk/echobase-services/src/main/resources/embedded/echobase.properties trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseTopiaTransactionFilter.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractWaitAndExecAction.java trunk/echobase-ui/src/main/resources/echobase.properties Deleted: trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseTopiaConnectionProvider.java =================================================================== --- trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseTopiaConnectionProvider.java 2012-04-04 11:06:54 UTC (rev 487) +++ trunk/echobase-entities/src/main/java/fr/ifremer/echobase/EchoBaseTopiaConnectionProvider.java 2012-04-04 14:04:32 UTC (rev 488) @@ -1,87 +0,0 @@ -/* - * #%L - * EchoBase :: Entities - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2011 - 2012 Ifremer, Codelutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ -package fr.ifremer.echobase; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.framework.TopiaConnectionProvider; - -import java.sql.Connection; -import java.sql.SQLException; - -/** - * To fix roolback errors. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.6 - */ -public class EchoBaseTopiaConnectionProvider extends TopiaConnectionProvider { - - /** Logger. */ - private static final Log log = LogFactory.getLog(EchoBaseTopiaConnectionProvider.class); - - @Override - public void closeConnection(Connection conn) throws SQLException { - - // if connection is already closed, nothing has to be done - // we can't keep this connection (and can not be push in pool) - - if (conn.isClosed()) { - - if (log.isDebugEnabled()) { - log.debug("Connection [" + conn + - "] alreay closed!, will not use it any longer "); - } - return; - } - - - // connection was not closed, can push it in the pool (if pool is not - // full) - - synchronized (getPool()) { - int currentSize = getPool().size(); - if (currentSize < getPoolSize()) { - if (log.isTraceEnabled()) { - log.trace("returning connection to pool, pool size: " + - (currentSize + 1)); - } - - // make sure connection is always rollback before keep it - conn.rollback(); - - getPool().add(conn); - return; - } - } - - // pool was full, must release the connection which will be loose - - if (log.isDebugEnabled()) { - log.debug("closing JDBC connection"); - } - - conn.close(); - } -} Modified: trunk/echobase-entities/src/main/resources/topia-h2.properties =================================================================== --- trunk/echobase-entities/src/main/resources/topia-h2.properties 2012-04-04 11:06:54 UTC (rev 487) +++ trunk/echobase-entities/src/main/resources/topia-h2.properties 2012-04-04 14:04:32 UTC (rev 488) @@ -28,5 +28,4 @@ hibernate.connection.driver_class=org.h2.Driver hibernate.connection.username=sa hibernate.connection.password=sa -hibernate.connection.provider_class=fr.ifremer.echobase.EchoBaseTopiaConnectionProvider -#hibernate.connection.provider_class=org.nuiton.topia.framework.TopiaConnectionProvider +hibernate.connection.provider_class=org.nuiton.topia.framework.TopiaConnectionProvider Modified: trunk/echobase-services/src/main/resources/embedded/echobase.properties =================================================================== --- trunk/echobase-services/src/main/resources/embedded/echobase.properties 2012-04-04 11:06:54 UTC (rev 487) +++ trunk/echobase-services/src/main/resources/embedded/echobase.properties 2012-04-04 14:04:32 UTC (rev 488) @@ -29,8 +29,8 @@ war.directory=${data.directory} -hibernate.dialect=org.hibernate.dialect.H2Dialect -hibernate.connection.username=sa -hibernate.connection.password=sa -hibernate.connection.driver_class=org.h2.Driver -hibernate.connection.url=jdbc:h2:file:${data.directory}/db/echobase +#hibernate.dialect=org.hibernate.dialect.H2Dialect +#hibernate.connection.username=sa +#hibernate.connection.password=sa +#hibernate.connection.driver_class=org.h2.Driver +#hibernate.connection.url=jdbc:h2:file:${data.directory}/db/echobase Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseTopiaTransactionFilter.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseTopiaTransactionFilter.java 2012-04-04 11:06:54 UTC (rev 487) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseTopiaTransactionFilter.java 2012-04-04 14:04:32 UTC (rev 488) @@ -26,9 +26,11 @@ import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hibernate.Transaction; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaRuntimeException; +import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.web.filter.TopiaTransactionFilter; import javax.servlet.ServletRequest; @@ -71,6 +73,10 @@ * @since 1.9.1 */ protected void onCloseTransaction(TopiaContext transaction) { + closeConnection(transaction); + } + + public static void closeConnection(TopiaContext transaction) { if (transaction == null) { if (log.isTraceEnabled()) { log.trace("no transaction to close"); @@ -85,6 +91,13 @@ } try { + Transaction tx = ((TopiaContextImplementor) transaction).getHibernate().getTransaction(); + if (!tx.wasCommitted() && !tx.wasRolledBack()) { + if (log.isDebugEnabled()) { + log.debug("rollback transaction!"); + } + tx.rollback(); + } transaction.closeContext(); } catch (TopiaException e) { throw new TopiaRuntimeException(e); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractWaitAndExecAction.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractWaitAndExecAction.java 2012-04-04 11:06:54 UTC (rev 487) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/AbstractWaitAndExecAction.java 2012-04-04 14:04:32 UTC (rev 488) @@ -26,6 +26,7 @@ import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.Preparable; import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; +import fr.ifremer.echobase.ui.EchoBaseTopiaTransactionFilter; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.framework.TopiaContextImplementor; @@ -96,7 +97,7 @@ } finally { try { - topiaContext.closeContext(); + EchoBaseTopiaTransactionFilter.closeConnection(topiaContext); } finally { closeAction(model); } Modified: trunk/echobase-ui/src/main/resources/echobase.properties =================================================================== --- trunk/echobase-ui/src/main/resources/echobase.properties 2012-04-04 11:06:54 UTC (rev 487) +++ trunk/echobase-ui/src/main/resources/echobase.properties 2012-04-04 14:04:32 UTC (rev 488) @@ -28,8 +28,7 @@ hibernate.hbm2ddl.auto=none hibernate.show_sql=false hibernate.dialect=org.hibernate.dialect.H2Dialect -hibernate.connection.provider_class=fr.ifremer.echobase.EchoBaseTopiaConnectionProvider -#hibernate.connection.provider_class=org.nuiton.topia.framework.TopiaConnectionProvider +hibernate.connection.provider_class=org.nuiton.topia.framework.TopiaConnectionProvider hibernate.connection.driver_class=org.h2.Driver hibernate.connection.url=jdbc:h2:file:${data.directory}/db/echobase