Author: tchemit Date: 2011-10-14 16:08:09 +0200 (Fri, 14 Oct 2011) New Revision: 2355 Url: http://nuiton.org/repositories/revision/topia/2355 Log: Evolution #1776: add a executeSQL in TopiaContext + little clean in TopiaContextImpl Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2011-10-14 14:02:01 UTC (rev 2354) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2011-10-14 14:08:09 UTC (rev 2355) @@ -363,4 +363,12 @@ */ boolean isClosed(); + /** + * Execute a given sql code inside this transaction. + * + * @param sqlScript the sql script to execute + * @throws TopiaException if any problem occurs while executing the sql script. + */ + void executeSQL(String sqlScript) throws TopiaException; + } //TopiaContext 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 2011-10-14 14:02:01 UTC (rev 2354) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2011-10-14 14:08:09 UTC (rev 2355) @@ -53,6 +53,7 @@ import org.hibernate.event.PreInsertEventListener; import org.hibernate.event.PreLoadEventListener; import org.hibernate.event.PreUpdateEventListener; +import org.hibernate.jdbc.Work; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.hbm2ddl.SchemaUpdate; import org.nuiton.topia.TopiaContext; @@ -80,6 +81,9 @@ import java.io.Reader; import java.io.Writer; import java.lang.reflect.Field; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -715,7 +719,7 @@ _("topia.persistence.error.null.param", "entityClass", "getDAO")); } - if (this == getRootContext()) { + if (equals(getRootContext())) { throw new TopiaException( _("topia.persistence.error.rootContext.access")); } @@ -742,7 +746,7 @@ try { Class<TopiaDAO<E>> daoClass = (Class<TopiaDAO<E>>) Class.forName(daoClassname); - TopiaDAO<E> spe = daoClass.newInstance(); + TopiaDAO<E> spe = daoClass.getConstructor().newInstance(); result = spe; } catch (Exception eee) { log.warn("specialized DAO " + daoClassname + @@ -814,7 +818,7 @@ @Override public void commitTransaction() throws TopiaException { - if (getRootContext() == this) { + if (equals(getRootContext())) { throw new TopiaException(_( "topia.persistence.error.unsupported.operation.on.root.context", "commit")); @@ -945,6 +949,16 @@ return closed; } + @Override + public void executeSQL(String sqlScript) throws TopiaException { + SQLWork sqlWork = new SQLWork(sqlScript); + try { + getHibernate().doWork(sqlWork); + } catch (HibernateException e) { + throw new TopiaException("Could not execute sql code", e); + } + } + protected void checkClosed(String message) throws TopiaException { if (closed) { throw new TopiaException(message); @@ -968,7 +982,7 @@ } @Override - public List findByQuery(TopiaQuery query) throws TopiaException { + public List<?> findByQuery(TopiaQuery query) throws TopiaException { return query.execute(this); } @@ -979,7 +993,7 @@ } @Override - public List find(String hql, Object... args) throws TopiaException { + public List<?> find(String hql, Object... args) throws TopiaException { checkClosed(_( "topia.persistence.error.unsupported.operation.on.closed.context", "find")); @@ -1330,7 +1344,7 @@ // read header to see if is compressed file int b = in.read(); // redundant cast : int magic = ((int) in.read() << 8) | b; - int magic = (in.read() << 8) | b; + int magic = in.read() << 8 | b; in.reset(); if (magic == GZIPInputStream.GZIP_MAGIC) { @@ -1523,7 +1537,7 @@ // si entityAndcondition est vide alors il faut le remplir // avec toutes les entités du mapping (class, null) if (entityAndCondition.length == 0) { - Map classMetadata = getHibernateFactory().getAllClassMetadata(); + Map<?,?> classMetadata = getHibernateFactory().getAllClassMetadata(); entityAndCondition = new Object[classMetadata.size() * 2]; int i = 0; for (Object className : classMetadata.keySet()) { @@ -1587,5 +1601,22 @@ } } + 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(); + } + } + } } //TopiaContextImpl
participants (1)
-
tchemit@users.nuiton.org