r2549 - in trunk: topia-persistence/src/main/java/org/nuiton/topia topia-persistence/src/main/java/org/nuiton/topia/framework topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence topia-service-migration/src/main/java/org/nuiton/topia/migration topia-service-migration/src/main/java/org/nuiton/topia/migration/mappings topia-service-migration/src/main/resources/i18n topia-service-security
Author: athimel Date: 2012-05-29 16:14:36 +0200 (Tue, 29 May 2012) New Revision: 2549 Url: http://nuiton.org/repositories/revision/topia/2549 Log: Create TopiaSQLWork in replacment of org.hibernate.jdbc.Work Fix topia-migration-service Added: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLWork.java Modified: trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernatePersistenceProvider.java trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernateSpecificUtil.java trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContextFactory.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLQuery.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSpecificUtil.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/AbstractTopiaMigrationCallback.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/mappings/TMSVersionDAO.java trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_en_GB.properties trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_es_ES.properties trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_fr_FR.properties trunk/topia-service-security/pom.xml Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -34,6 +34,7 @@ import org.nuiton.topia.event.TopiaTransactionVetoable; import org.nuiton.topia.framework.TopiaH2Util; import org.nuiton.topia.framework.TopiaQuery; +import org.nuiton.topia.framework.TopiaSQLWork; import org.nuiton.topia.framework.TopiaService; import org.nuiton.topia.persistence.TopiaEntity; @@ -413,11 +414,28 @@ */ void executeSQL(String sqlScript) throws TopiaException; + /** + * Runs the given SQL work on the current context + * + * @param sqlWork the SQL work instance to execute + */ + void doSQLWork(TopiaSQLWork sqlWork); + /* -------------------- SCHEMA MANAGMENT -----------------------------*/ /** - * Detect if the table is created on storage for a given persistent class. + * Detects if the db associated to the current context contains at least one + * entity table. * + * @return {@code true} if there is no schema for any of the dealed entities, + * {@code false} otherwise. + * @since 3.0 + */ + boolean isSchemaEmpty(); + + /** + * Detects if the table is created on storage for a given persistent class. + * * @param clazz the researched class * @return true if the table exists on storage * @throws TopiaException if the context is not initialized @@ -425,6 +443,12 @@ boolean isSchemaExist(Class<?> clazz) throws TopiaException; /** + * @return the current schema name + * @since 3.0 + */ + String getSchemaName(); + + /** * Triggers database schema creation * * @throws TopiaException if any exception Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContextFactory.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContextFactory.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContextFactory.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -60,7 +60,7 @@ new ReferenceMap(AbstractReferenceMap.HARD, AbstractReferenceMap.SOFT); -// public final static String CONFIG_DEFAULT_SCHEMA = Environment.DEFAULT_SCHEMA; + public final static String CONFIG_DEFAULT_SCHEMA = "topia.default_schema"; // public final static String CONFIG_DIALECT = Environment.DIALECT; // Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -64,6 +64,7 @@ import javax.persistence.PersistenceException; import javax.persistence.Query; import javax.persistence.metamodel.EntityType; +import javax.persistence.metamodel.Metamodel; import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; @@ -945,39 +946,51 @@ } } - // TODO AThimel 23/05/2012 Work not supported anymore ? -// public static class SQLWork implements Work { -// private final String script; -// -// public SQLWork(String script) { -// this.script = script; -// } -// -// @Override -// public void execute(Connection connection) throws SQLException { -// PreparedStatement sta = connection.prepareStatement(script); -// try { -// sta.execute(); -// } finally { -// sta.close(); -// } -// } -// } + @Override + public void doSQLWork(TopiaSQLWork sqlWork) { + getSpecificUtil().doSQLWork(this, sqlWork); + } - /* -------------------- SCHEMA MANAGMENT -----------------------------*/ @Override + public boolean isSchemaEmpty() { + try { + Metamodel metamodel = getEntityManager().getMetamodel(); + Set<EntityType<?>> entities = metamodel.getEntities(); + for (EntityType<?> entity : entities) { + String entityName = entity.getName(); + Class entityClass = Class.forName(entityName); + if (isSchemaExist(entityClass)) { + return false; + } + } + return true; + } catch (TopiaException te) { + throw new TopiaRuntimeException( + "Unable to detect if schema is empty", te); + } catch (ClassNotFoundException cnfe) { + throw new TopiaRuntimeException( + "Unable to detect if schema is empty", cnfe); + } + } + + @Override public boolean isSchemaExist(Class<?> clazz) throws TopiaException { checkClosed("isSchemaExist"); - boolean result = getSpecificUtil().isSchemaExist(clazz); + boolean result = getSpecificUtil().isTableExists(clazz); return result; } @Override + public String getSchemaName() { + return getConfig().getProperty(TopiaContextFactory.CONFIG_DEFAULT_SCHEMA); + } + + @Override public void createSchema() throws TopiaException { try { boolean showSchema = log.isDebugEnabled(); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLQuery.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLQuery.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLQuery.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -24,6 +24,7 @@ */ package org.nuiton.topia.framework; +import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaRuntimeException; @@ -39,8 +40,8 @@ /** * An executor of sql query which permits to obtain a single result via - * the method {@link #findSingleResult(TopiaContextImplementor)} - * or a multiple result with method {@link #findMultipleResult(TopiaContextImplementor)}. + * the method {@link #findSingleResult(TopiaContext)} + * or a multiple result with method {@link #findMultipleResult(TopiaContext)}. * * @param <O> the type of result data * @since 2.5 @@ -72,28 +73,27 @@ * @return the single result or {@code null} if none found. * @throws TopiaException for any pb */ - public O findSingleResult(TopiaContextImplementor tx) throws TopiaException { + public O findSingleResult(TopiaContext tx) throws TopiaException { final List<O> result = new ArrayList<O>(); -// tx.getEntityManager().doWork(new Work() { -// -// @Override -// public void execute(Connection connection) throws SQLException { -// -// PreparedStatement ps = prepareQuery(connection); -// -// try { -// ResultSet set = ps.executeQuery(); -// -// findSingleResult(result, set); -// -// } catch (Exception e) { -// throw new TopiaRuntimeException("Could not execute query", e); -// } finally { -// ps.close(); -// } -// } -// }); + tx.doSQLWork(new TopiaSQLWork() { + @Override + public void execute(Connection connection) throws SQLException { + + PreparedStatement ps = prepareQuery(connection); + + try { + ResultSet set = ps.executeQuery(); + + findSingleResult(result, set); + + } catch (Exception e) { + throw new TopiaRuntimeException("Could not execute query", e); + } finally { + ps.close(); + } + } + }); return result.isEmpty() ? null : result.get(0); } @@ -104,27 +104,27 @@ * @return the list of results (the list is empty if non result is found). * @throws TopiaException for any pb */ - public List<O> findMultipleResult(TopiaContextImplementor tx) throws TopiaException { + public List<O> findMultipleResult(TopiaContext tx) throws TopiaException { final List<O> result = new ArrayList<O>(); -// tx.getEntityManager().doWork(new Work() { -// -// @Override -// public void execute(Connection connection) throws SQLException { -// -// PreparedStatement ps = prepareQuery(connection); -// try { -// ResultSet set = ps.executeQuery(); -// -// findMultipleResult(result, set); -// -// } catch (Exception e) { -// throw new TopiaRuntimeException("Could not execute query", e); -// } finally { -// ps.close(); -// } -// } -// }); + tx.doSQLWork(new TopiaSQLWork() { + + @Override + public void execute(Connection connection) throws SQLException { + + PreparedStatement ps = prepareQuery(connection); + try { + ResultSet set = ps.executeQuery(); + + findMultipleResult(result, set); + + } catch (Exception e) { + throw new TopiaRuntimeException("Could not execute query", e); + } finally { + ps.close(); + } + } + }); return result; } Added: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLWork.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLWork.java (rev 0) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLWork.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -0,0 +1,48 @@ +/* + * #%L + * ToPIA :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2004 - 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package org.nuiton.topia.framework; + +import java.sql.Connection; +import java.sql.SQLException; + +/** + * Interface used for any native SQL batch. This interface is highly inspired + * of org.hibernate.jdbc.Work. + * + * @author Arnaud Thimel <thimel@codelutin.com> + * @since 3.0 + */ +public interface TopiaSQLWork { + + /** + * Execute the discrete work encapsulated by this work instance using the + * supplied connection. + * + * @param connection The connection on which to perform the work. + * @throws SQLException Thrown during execution of the underlying JDBC + * interaction. + */ + void execute(Connection connection) throws SQLException; + +} Property changes on: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSQLWork.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSpecificUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSpecificUtil.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaSpecificUtil.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -35,6 +35,7 @@ * by ToPIA * * @author Arnaud Thimel <thimel@codelutin.com> + * @since 3.0 */ public interface TopiaSpecificUtil { @@ -47,7 +48,7 @@ * @return true if the table exists on storage * @see TopiaContext#isSchemaExist(Class) */ - boolean isSchemaExist(Class<?> clazz); + boolean isTableExists(Class<?> clazz); /** * Implementation-dependent method to create the schema on storage. This is @@ -108,4 +109,11 @@ @Deprecated void importXML(TopiaContextImplementor context, List<Element> elements); + /** + * Runs the given SQL work on the current context + * + * @param sqlWork the SQL work instance to execute + */ + void doSQLWork(TopiaContextImplementor context, TopiaSQLWork sqlWork); + } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -190,150 +190,4 @@ return ids; } -// /** -// * Test si une entite donnee correspondant a une configuration existe en -// * base. -// * -// * @param configuration la configuration hibernate -// * @param entityName le nom de l'entite a tester -// * @return <tt>true</tt> si le schema de la table existe -// */ -// public static boolean isSchemaExist(Configuration configuration, -// String entityName) { -// -// boolean exist = false; -// -// try { -// PersistentClass classMapping = -// configuration.getClassMapping(entityName); -// if (classMapping == null) { -// if (log.isInfoEnabled()) { -// Iterator<?> itr = configuration.getClassMappings(); -// while (itr.hasNext()) { -// log.info("available mapping " + itr.next()); -// } -// } -// throw new IllegalArgumentException( -// "could not find entity with name " + entityName); -// } -// Table testTable = classMapping.getTable(); -// -// if (testTable == null) { -// throw new IllegalArgumentException( -// "could not find entity with name " + entityName); -// } -// ConnectionProvider connectionProvider = -// ConnectionProviderFactory.newConnectionProvider( -// configuration.getProperties()); -// -// Dialect dialect = Dialect.getDialect(configuration.getProperties()); -// -// Connection connection = null; -// try { -// connection = connectionProvider.getConnection(); -// -// DatabaseMetadata meta = new DatabaseMetadata(connection, dialect); -// -// TableMetadata tmd = meta.getTableMetadata( -// testTable.getName(), testTable.getSchema(), -// testTable.getCatalog(), testTable.isQuoted()); -// -// if (tmd != null) { -// //table exist -// exist = true; -// } -// } finally { -// if (connection != null) { -// connection.close(); -// } -// } -// -// } catch (SQLException e) { -// log.error("Cant connect to database", e); -// } -// -// return exist; -// } -// -// /** -// * Test if the db associated to the given {@code configuration} contaisn any of -// * the dealed entities. -// * -// * @param configuration hibernate db configuration -// * @return {@code true} if there is no schema for any of the dealed entities, -// * {@code false} otherwise. -// * @since 2.5.3 -// */ -// public static boolean isSchemaEmpty(Configuration configuration) { -// -// try { -// -// ConnectionProvider connectionProvider = -// ConnectionProviderFactory.newConnectionProvider( -// configuration.getProperties()); -// -// Dialect dialect = Dialect.getDialect(configuration.getProperties()); -// -// Connection connection = null; -// try { -// connection = connectionProvider.getConnection(); -// -// DatabaseMetadata meta = new DatabaseMetadata(connection, dialect); -// -// Iterator<?> itr = configuration.getClassMappings(); -// while (itr.hasNext()) { -// PersistentClass classMapping = (PersistentClass) itr.next(); -// Table testTable = classMapping.getTable(); -// -// if (testTable == null) { -// throw new IllegalArgumentException( -// "could not find entity with name " + -// classMapping.getClassName()); -// } -// -// -// TableMetadata tmd = meta.getTableMetadata( -// testTable.getName(), testTable.getSchema(), -// testTable.getCatalog(), testTable.isQuoted()); -// -// if (tmd != null) { -// //table exist -// -// -// if (log.isDebugEnabled()) { -// log.debug("Existing table found " + -// testTable.getName() + " for entity " + -// classMapping.getClassName() + -// ", db is not empty."); -// } -// -// return false; -// } -// } -// -// } finally { -// if (connection != null) { -// connection.close(); -// } -// } -// -// } catch (SQLException e) { -// log.error("Cant connect to database", e); -// } -// -// return true; -// } - - /** - * Return hibernate schema name - * - * @param config of hibernate - * @return schema name - */ - public static String getSchemaName() { - return "azerty"; - } -// public static String getSchemaName(Configuration config) { -// return config.getProperty(TopiaContextFactory.CONFIG_DEFAULT_SCHEMA); -// } } Modified: trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernatePersistenceProvider.java =================================================================== --- trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernatePersistenceProvider.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernatePersistenceProvider.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -110,10 +110,10 @@ Map<String, Object> hibernateProperties = Maps.newHashMap(properties); boolean useHibernateMapping = false; - // Convert everything from topia.connection.* to hibernate.connection.* + // Convert everything from topia.* to hibernate.* // and find out if use orm (jpa) or legacy hibernate mapping files for (String key : properties.keySet()) { - if (key.startsWith("topia.connection.")) { + if (key.startsWith("topia.")) { Object value = properties.get(key); String hibernateKey = "hibernate." + key.substring(6); hibernateProperties.put(hibernateKey, value); Modified: trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernateSpecificUtil.java =================================================================== --- trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernateSpecificUtil.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/persistence/TopiaHibernateSpecificUtil.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -32,6 +32,7 @@ import org.hibernate.cfg.Configuration; import org.hibernate.dialect.Dialect; import org.hibernate.ejb.EntityManagerImpl; +import org.hibernate.jdbc.Work; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.tool.hbm2ddl.DatabaseMetadata; @@ -41,6 +42,7 @@ import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaRuntimeException; import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.framework.TopiaSQLWork; import org.nuiton.topia.framework.TopiaSpecificUtil; import javax.persistence.EntityManager; @@ -86,7 +88,7 @@ } @Override - public boolean isSchemaExist(Class<?> clazz) { + public boolean isTableExists(Class<?> clazz) { String entityName = clazz.getName(); boolean result = false; @@ -157,6 +159,9 @@ if (entityManager instanceof EntityManagerImpl) { Session session = ((EntityManagerImpl) entityManager).getSession(); session.replicate(entity, ReplicationMode.EXCEPTION); + } else { + throw new UnsupportedOperationException( + "Cannot find Hibernate session to receive replicated entity"); } } catch (TopiaException te) { throw new TopiaRuntimeException("Unable to receive replicated entity", te); @@ -215,4 +220,28 @@ // throw new TopiaRuntimeException("Unable to export elements to XML", te); // } } + + @Override + public void doSQLWork(TopiaContextImplementor context, final TopiaSQLWork sqlWork) { + Work hibernateWork = new Work() { + + @Override + public void execute(Connection connection) throws SQLException { + sqlWork.execute(connection); + } + }; + + try { + EntityManager entityManager = context.getEntityManager(); + if (entityManager instanceof EntityManagerImpl) { + Session session = ((EntityManagerImpl) entityManager).getSession(); + session.doWork(hibernateWork); + } else { + throw new UnsupportedOperationException( + "Cannot find Hibernate session to run the SQL work"); + } + } catch (TopiaException te) { + throw new TopiaRuntimeException("Unable to run SQL work", te); + } + } } Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/AbstractTopiaMigrationCallback.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/AbstractTopiaMigrationCallback.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/AbstractTopiaMigrationCallback.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -26,10 +26,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.hibernate.jdbc.Work; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.framework.TopiaSQLWork; import org.nuiton.util.StringUtil; import org.nuiton.util.Version; @@ -146,7 +146,7 @@ return doMigrate; } - public void executeSQL(TopiaContextImplementor tx, String... sqls) + public void executeSQL(TopiaContext tx, String... sqls) throws TopiaException { executeSQL(tx, false, false, sqls); } @@ -161,14 +161,14 @@ * @throws TopiaException if any pb * @since 2.3.0 */ - public void executeSQL(TopiaContextImplementor tx, + public void executeSQL(TopiaContext tx, final boolean showSql, final boolean showProgression, final String... sqls) throws TopiaException { if (log.isInfoEnabled()) { - log.info(_("topia.migration.start.sqls", sqls.length)); + log.info(String.format("Will execute %d requests...", sqls.length)); } if (showSql) { StringBuilder buffer = new StringBuilder(); @@ -183,8 +183,9 @@ "--------------------------------------------------------------------------------\n" ); } - tx.getEntityManager().doWork(new Work() { + tx.doSQLWork(new TopiaSQLWork() { + @Override public void execute(Connection connection) throws SQLException { int index = 0; @@ -196,7 +197,7 @@ String message = ""; if (showProgression) { - message = _("topia.migration.start.sql", index, max); + message = String.format("Executing request [%d/%d]", index, max); } if (showSql) { message += "\n" + sql; @@ -214,7 +215,7 @@ } if (log.isDebugEnabled()) { String message; - message = _("topia.migration.end.sql", index, max, StringUtil.convertTime(System.nanoTime() - t0)); + message = String.format("Request [%d/%d] executed in %ss.", index, max, StringUtil.convertTime(System.nanoTime() - t0)); log.debug(message); } } Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/TopiaMigrationEngine.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -31,7 +31,6 @@ import org.hibernate.cfg.Configuration; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaNotFoundException; import org.nuiton.topia.TopiaRuntimeException; import org.nuiton.topia.event.TopiaContextAdapter; import org.nuiton.topia.event.TopiaContextEvent; @@ -39,7 +38,6 @@ import org.nuiton.topia.event.TopiaTransactionEvent; import org.nuiton.topia.event.TopiaTransactionVetoable; import org.nuiton.topia.framework.TopiaContextImplementor; -import org.nuiton.topia.framework.TopiaUtil; import org.nuiton.topia.migration.mappings.TMSVersion; import org.nuiton.topia.migration.mappings.TMSVersionDAO; import org.nuiton.util.Version; @@ -533,10 +531,9 @@ try { // on detecte si la table de versionning existe - versionTableExist = - TopiaUtil.isSchemaExist(versionConfiguration, - TMSVersion.class.getName()); + versionTableExist = rootContext.isSchemaExist(TMSVersion.class); + // check if at least one class exists in db @@ -554,34 +551,10 @@ log.warn("Version not found on table " + TMSVersionDAO.TABLE_NAME); } } - return; } - // try with legacy table tmsVersion - Configuration conf = new Configuration(); - conf.addXML(TMSVersionDAO.LEGACY_MAPPING); - - legacyVersionConfiguration = createHibernateConfiguration(conf); - legacyVersionTableExist = - TopiaUtil.isSchemaExist(legacyVersionConfiguration, - TMSVersion.class.getName()); - - if (legacyVersionTableExist) { - - if (log.isDebugEnabled()) { - log.debug("Legacy : detected " + TMSVersionDAO.LEGACY_TABLE_NAME + " table"); - } - - // recuperation de la version de la base - v = getVersion(legacyVersionTableExist, TMSVersionDAO.LEGACY_TABLE_NAME); - - if (v != null) { - - if (log.isDebugEnabled()) { - log.debug("Legacy : " + _("topia.migration.detected.db.version", v)); - } - } - } + } catch (TopiaException te) { + log.error("Unable to detect version", te); } finally { if (v == null) { @@ -609,20 +582,8 @@ * @since 2.5.3 */ protected boolean detectDbEmpty() { - - - try { - boolean result; - // get db real hibernate configuration - Configuration rootConfiguration = - rootContext.getHibernateConfiguration(); - - result = TopiaUtil.isSchemaEmpty(rootConfiguration); - return result; - } catch (TopiaNotFoundException e) { - throw new RuntimeException(e); - } - + boolean result = rootContext.isSchemaEmpty(); + return result; } protected Version getVersion(boolean versionTableExist, String tableName) { Modified: trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/mappings/TMSVersionDAO.java =================================================================== --- trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/mappings/TMSVersionDAO.java 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-service-migration/src/main/java/org/nuiton/topia/migration/mappings/TMSVersionDAO.java 2012-05-29 14:14:36 UTC (rev 2549) @@ -26,21 +26,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.hibernate.Criteria; import org.hibernate.HibernateException; -import org.hibernate.Session; import org.hibernate.cfg.Configuration; -import org.hibernate.jdbc.Work; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaRuntimeException; import org.nuiton.topia.framework.TopiaContextImplementor; -import org.nuiton.topia.framework.TopiaUtil; +import org.nuiton.topia.framework.TopiaSQLWork; import org.nuiton.util.Version; import org.nuiton.util.VersionUtil; import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -62,19 +59,21 @@ public static final String TABLE_NAME = "tms_version"; - public static TMSVersion get(TopiaContext tx) throws TopiaException { +// public static TMSVersion get(TopiaContext tx) throws TopiaException { +// +// try { +// EntityManager session = ((TopiaContextImplementor) tx).getEntityManager(); +// TypedQuery<TMSVersion> query = session.createQuery( +// "from " + TMSVersion.class.getName(), TMSVersion.class); +// +// List<TMSVersion> list = query.getResultList(); +// TMSVersion result = list.isEmpty() ? null : list.get(0); +// return result; +// } catch (HibernateException e) { +// throw new TopiaException("Could not obtain version", e); +// } +// } - try { - EntityManager session = ((TopiaContextImplementor) tx).getEntityManager(); - Criteria criteria = session.createCriteria(TMSVersion.class); - List<?> list = criteria.list(); - TMSVersion result = list.isEmpty() ? null : (TMSVersion) list.get(0); - return result; - } catch (HibernateException e) { - throw new TopiaException("Could not obtain version", e); - } - } - public static void createTable(Configuration configuration) { // creer le schema en base // dans la configuration il n'y a que la table version @@ -116,9 +115,11 @@ public static void deleteAll(TopiaContext tx) throws TopiaException { try { EntityManager session = ((TopiaContextImplementor) tx).getEntityManager(); - Criteria criteria = session.createCriteria(TMSVersion.class); - List<?> list = criteria.list(); - for (Object o : list) { + TypedQuery<TMSVersion> query = session.createQuery( + "from " + TMSVersion.class.getName(), TMSVersion.class); + + List<TMSVersion> list = query.getResultList(); + for (TMSVersion o : list) { session.remove(o); } } catch (HibernateException e) { @@ -126,33 +127,18 @@ } } - public static final String LEGACY_MAPPING = - "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + - "<!DOCTYPE hibernate-mapping PUBLIC \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\" \"classpath://org/hibernate/hibernate-mapping-3.0.dtd\">\n" + - "<hibernate-mapping>\n" + - " <class name=\"" + TMSVersion.class.getName() + "\" table=\"" + LEGACY_TABLE_NAME + "\">\n" + - " <id column=\"" + TMSVersion.PROPERTY_VERSION + "\" name=\"" + TMSVersion.PROPERTY_VERSION + "\"/>\n" + - " </class>\n" + - "</hibernate-mapping>"; - public static Version getVersion(TopiaContext tx, String tableName) { - try { - TopiaContextImplementor txImpl = (TopiaContextImplementor) tx; - Configuration hibernateConfiguration = txImpl.getHibernateConfiguration(); - // Get schema name - String schemaName = TopiaUtil.getSchemaName(hibernateConfiguration); + // Get schema name + String schemaName = tx.getSchemaName(); - GetVersionWork work = new GetVersionWork(schemaName, tableName); - txImpl.getEntityManager().doWork(work); - Version v = work.getVersion(); - return v; - } catch (TopiaException e) { - throw new TopiaRuntimeException("Can't obtain dbVersion for reason " + e.getMessage(), e); - } + GetVersionWork work = new GetVersionWork(schemaName, tableName); + tx.doSQLWork(work); + Version v = work.getVersion(); + return v; } - public static class GetVersionWork implements Work { + public static class GetVersionWork implements TopiaSQLWork { protected Version version; Modified: trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_en_GB.properties =================================================================== --- trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_en_GB.properties 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_en_GB.properties 2012-05-29 14:14:36 UTC (rev 2549) @@ -1,7 +1,6 @@ topia.migration.available.versions=Available versions \: %1$s topia.migration.db.not.versionned=Database version not found, so database schema is considered as V0 topia.migration.detected.db.version=detected database version \: %1$s -topia.migration.end.sql=Request [%1$-4s/%2$-4s] executed in %3$s. topia.migration.migrate.versions=Versions to apply \: %1$s topia.migration.migration.incomplete=Database migration not succesfully ended \! topia.migration.saving.db.version=Saving new database version \: %1$s @@ -10,5 +9,3 @@ topia.migration.skip.migration.no.version.to.apply=No version to apply, no migration needed. topia.migration.start.migrate=Start migration to version %1$s topia.migration.start.migration=Starting Topia Migration Service - Application version \: %1$s, Database version \: %2$s -topia.migration.start.sql=Executing request [%1$-4s/%2$-4s] -topia.migration.start.sqls=Will execute %1$s requests... Modified: trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_es_ES.properties =================================================================== --- trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_es_ES.properties 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_es_ES.properties 2012-05-29 14:14:36 UTC (rev 2549) @@ -1,7 +1,6 @@ topia.migration.available.versions=Versiones detectadas \: %1$s topia.migration.db.not.versionned=La base de datos no tiene versión, se considera como la versión 0. topia.migration.detected.db.version=Versión de la base \: %1$s -topia.migration.end.sql=Consulta [%1$-4s/%2$-4s] ejecutada en %3$s. topia.migration.migrate.versions=Actualización para instalar \: %1$s topia.migration.migration.incomplete=\\u00a1La migración de la base de datos ha fallado o se ha cancelado\! topia.migration.saving.db.version=Copia de seguridad de la nueva versión de la base \: %1$s @@ -10,5 +9,3 @@ topia.migration.skip.migration.no.version.to.apply=No hay versión a aplicar, no es necesaria ninguna migración. topia.migration.start.migrate=Inicio de la actualización hacia la versión %1$s topia.migration.start.migration=Inicio del servicio de actualización - versión de la aplicación \: %1$s, versión de la base \: %2$s -topia.migration.start.sql=Ejecución de la consulta [%1$-4s/%2$-4s] -topia.migration.start.sqls=Se va a ejecutar %1$s consulta(s)... Modified: trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_fr_FR.properties =================================================================== --- trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_fr_FR.properties 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-service-migration/src/main/resources/i18n/topia-service-migration_fr_FR.properties 2012-05-29 14:14:36 UTC (rev 2549) @@ -1,7 +1,6 @@ topia.migration.available.versions=Versions détectées \: %1$s topia.migration.db.not.versionned=La base de données n'est pas versionnée, elle sera considérée en version 0. topia.migration.detected.db.version=Version de base détectée \: %1$s -topia.migration.end.sql=Requête [%1$-4s/%2$-4s] exécutée en %3$s. topia.migration.migrate.versions=Mises à jour à installer \: %1$s topia.migration.migration.incomplete=La migration de la base s'est mal déroulée ou a été annulée\! topia.migration.saving.db.version=Sauvegarde de la nouvelle version de la base \: %1$s @@ -10,5 +9,3 @@ topia.migration.skip.migration.no.version.to.apply=Aucune version à appliquer, aucune migration nécessaire. topia.migration.start.migrate=Démarrage de la mise à jour vers la version %1$s topia.migration.start.migration=Démarrage du service de mise à jour - version de l'application \: %1$s, version de la base \: %2$s -topia.migration.start.sql=Execution de la requête [%1$-4s/%2$-4s] -topia.migration.start.sqls=Va executer %1$s requête(s)... Modified: trunk/topia-service-security/pom.xml =================================================================== --- trunk/topia-service-security/pom.xml 2012-05-29 14:08:35 UTC (rev 2548) +++ trunk/topia-service-security/pom.xml 2012-05-29 14:14:36 UTC (rev 2549) @@ -45,16 +45,16 @@ <!-- Sibling dependencies --> <dependency> <groupId>${project.groupId}</groupId> - <artifactId>topia-persistence</artifactId> + <artifactId>topia-persistence-hibernate</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>topia-persistence</artifactId> - <version>${project.version}</version> - <classifier>tests</classifier> - </dependency> + <!--<dependency>--> + <!--<groupId>${project.groupId}</groupId>--> + <!--<artifactId>topia-persistence</artifactId>--> + <!--<version>${project.version}</version>--> + <!--<classifier>tests</classifier>--> + <!--</dependency>--> <dependency> <groupId>org.nuiton</groupId> @@ -157,6 +157,12 @@ <version>${project.version}</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-jpa_2.0_spec</artifactId> + <version>1.1</version> + <scope>compile</scope> + </dependency> </dependencies> </plugin>
participants (1)
-
athimel@users.nuiton.org