Author: tdraier
Date: Fri Sep 14 13:33:34 2007
New Revision: 18489
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18489&repname=
=3Djahia
Log:
added sql patcher (port 18356)
Modified:
trunk/core/src/java/org/jahia/version/GroovyPatcher.java
trunk/core/src/java/org/jahia/version/SqlPatcher.java
trunk/core/src/java/org/jahia/version/VersionService.java
Modified: trunk/core/src/java/org/jahia/version/GroovyPatcher.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/version/GroovyPatcher.java&rev=3D18489&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/version/GroovyPatcher.java (original)
+++ trunk/core/src/java/org/jahia/version/GroovyPatcher.java Fri Sep 14 13:=
33:34 2007
@@ -7,6 +7,7 @@
import org.jahia.services.events.JahiaGroovyEngine;
import org.jahia.hibernate.manager.SpringContextSingleton;
import org.jahia.bin.Jahia;
+import org.apache.log4j.Logger;
=
import java.io.File;
import java.io.IOException;
@@ -19,18 +20,19 @@
* To change this template use File | Settings | File Templates.
*/
public class GroovyPatcher implements Patcher {
+ private Logger logger =3D Logger.getLogger(GroovyPatcher.class);
private GroovyScriptEngine scriptEngine;
=
public GroovyPatcher() {
try {
scriptEngine =3D new GroovyScriptEngine(Jahia.getSettings().ge=
tJahiaEtcDiskPath() + File.separator + "patches");
} catch (IOException e) {
- e.printStackTrace(); //To change body of catch statement use =
File | Settings | File Templates.
+ logger.error("Cannot instantiate groovyt engine",e);
}
}
=
public boolean canHandlePatch(Patch patch, int lastVersion, int curren=
tVersion) {
- if ("groovy".equals(patch.getExt())) {
+ if ("groovy".equals(patch.getExt()) && scriptEngine !=3D null) {
return patch.getNumber() > lastVersion && patch.getNumber() < =
currentVersion;
}
return false;
@@ -41,10 +43,10 @@
Binding binding =3D new Binding();
scriptEngine.run(patch.getName(), binding);
} catch (ResourceException e) {
- e.printStackTrace(); //To change body of catch statement use =
File | Settings | File Templates.
+ logger.error("Resource exception",e);
return 1;
} catch (ScriptException e) {
- e.printStackTrace(); //To change body of catch statement use =
File | Settings | File Templates.
+ logger.error("Exception when executing script",e);
return 2;
}
=
Modified: trunk/core/src/java/org/jahia/version/SqlPatcher.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/version/SqlPatcher.java&rev=3D18489&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/version/SqlPatcher.java (original)
+++ trunk/core/src/java/org/jahia/version/SqlPatcher.java Fri Sep 14 13:33:=
34 2007
@@ -1,5 +1,21 @@
package org.jahia.version;
=
+import org.apache.log4j.Logger;
+import org.jahia.bin.Jahia;
+import org.jahia.admin.database.DatabaseScripts;
+import org.jahia.services.database.ConnectionDispenser;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Iterator;
+import java.io.File;
+import java.io.IOException;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.sql.Connection;
+import java.sql.Statement;
+import java.sql.SQLException;
+
/**
* Created by IntelliJ IDEA.
* User: toto
@@ -7,5 +23,71 @@
* Time: 10:44:44
* To change this template use File | Settings | File Templates.
*/
-public class SqlPatcher {
+public class SqlPatcher implements Patcher {
+ private Logger logger =3D Logger.getLogger(SqlPatcher.class);
+ private String dbSchema;
+ private DatabaseScripts scriptHelper =3D new DatabaseScripts();
+
+ public SqlPatcher() {
+ dbSchema =3D Jahia.getSettings().getPropertiesFile().getProperty("=
db_script");
+ dbSchema =3D dbSchema.substring(0, dbSchema.indexOf('.'));
+ }
+
+ public boolean canHandlePatch(Patch patch, int lastVersion, int curren=
tVersion) {
+ if ("sql".equals(patch.getExt())) {
+ String name =3D patch.getName();
+ if (name.indexOf('_') !=3D name.lastIndexOf('_')) {
+ String db =3D name.substring(name.indexOf('_')+1,name.last=
IndexOf('_'));
+ if (!db.equals(dbSchema)) {
+ return false;
+ }
+ }
+ return patch.getNumber() > lastVersion && patch.getNumber() < =
currentVersion;
+ }
+ return false;
+ }
+
+ public int execute(Patch patch) {
+ Connection c =3D null;
+ Statement stmt =3D null;
+ try {
+ c =3D ConnectionDispenser.getConnection();
+ stmt =3D c.createStatement();
+
+ List stmts =3D scriptHelper.getScriptFileStatements(patch.getF=
ile());
+ for (Iterator iterator =3D stmts.iterator(); iterator.hasNext(=
);) {
+ String line =3D (String) iterator.next();
+ try {
+ stmt.execute(line);
+ } catch (Exception e) {
+ // first let's check if it is a DROP TABLE query, if i=
t is,
+ // we will just fail silently.
+ String upperCaseLine =3D line.toUpperCase().trim();
+ if (!upperCaseLine.startsWith("DROP") && !upperCaseLin=
e.startsWith("ALTER TABLE")
+ && !upperCaseLine.startsWith("CREATE INDEX")) {
+ logger.error("Error while trying to execute query =
: " + line + " from script " + patch.getName(), e);
+ // continue to propagate the exception upwards.
+ return 1;
+ } else if(upperCaseLine.startsWith("CREATE INDEX")){
+ logger.warn("Error while trying to execute query :=
" + line, e);
+ }
+ }
+ }
+
+ } catch (Exception e) {
+ logger.error("Error when executing SQL script " + patch.getNam=
e(),e);
+ return 2;
+ } finally {
+ try {
+ if (c !=3D null) {
+ c.close();
+ }
+ } catch (SQLException e) {
+ logger.error("Cannot close connection",e);
+ }
+ }
+ return 0;
+ }
+ =
+
}
Modified: trunk/core/src/java/org/jahia/version/VersionService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/version/VersionService.java&rev=3D18489&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/version/VersionService.java (original)
+++ trunk/core/src/java/org/jahia/version/VersionService.java Fri Sep 14 13=
:33:34 2007
@@ -40,7 +40,8 @@
patchManager =3D (JahiaInstalledPatchManager) SpringContextSinglet=
on.getInstance().getContext().getBean(JahiaInstalledPatchManager.class.getN=
ame());
=
patchers.add(new GroovyPatcher());
-
+ patchers.add(new SqlPatcher());
+ =
File dir =3D new File(Jahia.getSettings().getJahiaEtcDiskPath() + =
File.separator + "patches");
File[] files =3D dir.listFiles();
=
_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list