You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ke...@apache.org on 2013/01/27 14:35:15 UTC

[1/2] git commit: ISIS-268: Fixed tests to run with-out errors. - Added @FixMethodOrder(MethodSorters.NAME_ASCENDING) annotation to force tests to run in alphabetical order - Tests need to run in a specific order to test full life-cycle of nothing, cre

ISIS-268: Fixed tests to run with-out errors.
 - Added @FixMethodOrder(MethodSorters.NAME_ASCENDING) annotation to force tests to run in alphabetical order
 - Tests need to run in a specific order to test full life-cycle of nothing, create, test - with the database being closed and re-opened between tests.
 - added @BeforeClass on deleteHsqlDbFiles to remove hsqldb files before test suite (clears all residual database files)


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/bac67aae
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/bac67aae
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/bac67aae

Branch: refs/heads/master
Commit: bac67aaecb25f809df199552572c9fa9bee6a9d8
Parents: a23e6e7
Author: Kevin <ke...@apache.org>
Authored: Sat Jan 26 21:08:16 2013 +0100
Committer: Kevin <ke...@apache.org>
Committed: Sat Jan 26 21:08:16 2013 +0100

----------------------------------------------------------------------
 .../org/apache/isis/objectstore/sql/Defaults.java  |    6 +
 .../org/apache/isis/objectstore/sql/Results.java   |    3 +
 .../isis/objectstore/sql/SqlObjectStore.java       |   33 ++--
 .../isis/objectstore/sql/jdbc/JdbcConnector.java   |   70 +++++-----
 .../objectstore/sql/jdbc/JdbcImageValueMapper.java |  116 +++++++++++++++
 .../isis/objectstore/sql/jdbc/JdbcResults.java     |   10 ++
 .../JdbcFieldMappingFactoryInstaller.java          |    6 +
 component/objectstore/sql/sql-tests-common/pom.xml |    2 +-
 .../sql/common/SqlIntegrationTestCommonBase.java   |    3 +
 .../sql/common/SqlIntegrationTestData.java         |   64 +++++----
 .../sql/common/SqlIntegrationTestFixtures.java     |   83 +++++------
 .../src/test/config/hsql-poly.properties           |    3 +
 .../src/test/config/hsql.properties                |    4 +
 .../org/apache/isis/objectstore/sql/HsqlTest.java  |   12 +-
 .../isis/objectstore/sql/PolymorphismTest.java     |    3 +
 .../sql/crosscheck/InMemoryPersistenceTest.java    |    4 +
 16 files changed, 293 insertions(+), 129 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Defaults.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Defaults.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Defaults.java
index 729bf7d..64309f2 100755
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Defaults.java
+++ b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Defaults.java
@@ -201,6 +201,7 @@ public class Defaults {
     static String PASSWORD_SEED;
     static Integer PASSWORD_ENC_LENGTH;
     static String TYPE_DEFAULT;
+    static String TYPE_BLOB;
 
     /**
      * Default SQL data types used to define the fields in the database. By providing this method, we allow the user an
@@ -211,6 +212,7 @@ public class Defaults {
      * @param baseName
      */
     private static void populateSqlDataTypes(final IsisConfiguration dataTypes, final String baseName) {
+        TYPE_BLOB = dataTypes.getString(baseName + "blob", "BLOB");
         TYPE_TIMESTAMP = dataTypes.getString(baseName + "timestamp", "DATETIME");
         TYPE_DATETIME = dataTypes.getString(baseName + "datetime", "DATETIME");
         TYPE_DATE = dataTypes.getString(baseName + "date", "DATE");
@@ -299,6 +301,10 @@ public class Defaults {
         return TYPE_TIME;
     }
 
+    public static String TYPE_BLOB() {
+        return TYPE_BLOB;
+    }
+
     // }}
 
     // {{ Versioning

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Results.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Results.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Results.java
index ecd638b..2361447 100644
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Results.java
+++ b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/Results.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.objectstore.sql;
 
+import java.io.InputStream;
 import java.sql.Time;
 import java.util.Calendar;
 import java.util.Date;
@@ -57,4 +58,6 @@ public interface Results {
 
     Object getAsType(String columnName, Class<?> clazz);
 
+    InputStream getStream(String column);
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/SqlObjectStore.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/SqlObjectStore.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/SqlObjectStore.java
index bf1c72a..d36cc83 100644
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/SqlObjectStore.java
+++ b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/SqlObjectStore.java
@@ -232,10 +232,11 @@ public final class SqlObjectStore implements ObjectStoreSpi {
                     final ObjectSpecification adapterSpec = adapter.getSpecification();
                     if (!adapterSpec.isParented()) {
                         saveRootAdapter(adapter, connection);
-                    } else if(adapterSpec.isParentedOrFreeCollection()) { 
+                    } else if (adapterSpec.isParentedOrFreeCollection()) {
                         saveParentedCollectionAdapter(adapter, connection);
                     } else {
-                        throw new NotYetImplementedException("cannot yet persist aggregated objects: " + adapter.toString());
+                        throw new NotYetImplementedException("cannot yet persist aggregated objects: "
+                            + adapter.toString());
                     }
                 } finally {
                     connectionPool.release(connection);
@@ -247,18 +248,19 @@ public final class SqlObjectStore implements ObjectStoreSpi {
                 mapping.save(connection, adapter);
             }
 
-            private void saveParentedCollectionAdapter(final ObjectAdapter collectionAdapter, final DatabaseConnector connection) {
+            private void saveParentedCollectionAdapter(final ObjectAdapter collectionAdapter,
+                final DatabaseConnector connection) {
                 final ObjectAdapter parent = collectionAdapter.getAggregateRoot();
                 LOG.debug("change to internal collection being persisted through parent");
-   
+
                 final Oid oid = collectionAdapter.getOid();
                 final CollectionOid collectionOid = (CollectionOid) oid;
                 if (!(oid instanceof CollectionOid)) {
                     throw new IsisAssertException("object should have a CollectionOid");
                 }
-                
+
                 final ObjectMapping mapping = objectMappingLookup.getMapping(parent, connection);
-                if (! mapping.saveCollection(connection, parent, collectionOid.getName()) ) {
+                if (!mapping.saveCollection(connection, parent, collectionOid.getName())) {
                     final ObjectMapping parentMapping = objectMappingLookup.getMapping(parent, connection);
                     parentMapping.save(connection, collectionAdapter);
                 }
@@ -277,7 +279,6 @@ public final class SqlObjectStore implements ObjectStoreSpi {
         };
     }
 
-
     @Override
     public void debugData(final DebugBuilder debug) {
         debug.appendln("initialised", isInitialized);
@@ -411,7 +412,6 @@ public final class SqlObjectStore implements ObjectStoreSpi {
         return instances;
     }
 
-
     @Override
     public ObjectAdapter loadInstanceAndAdapt(final TypedOid oid) {
         final DatabaseConnector connection = connectionPool.acquire();
@@ -440,10 +440,10 @@ public final class SqlObjectStore implements ObjectStoreSpi {
             final Results results = connector.select(sql.toString());
             if (!results.next()) {
                 return null;
-            } 
+            }
             final int id = results.getInt(Defaults.getPkIdLabel());
-            return RootOidDefault.create(serviceSpec.getSpecId(), ""+id);
-            
+            return RootOidDefault.create(serviceSpec.getSpecId(), "" + id);
+
         } finally {
             connectionPool.release(connector);
         }
@@ -479,9 +479,9 @@ public final class SqlObjectStore implements ObjectStoreSpi {
         connectionPool.release(connector);
     }
 
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
     // Dependencies (injected)
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
 
     public void setConnectionPool(final DatabaseConnectorPool connectionPool) {
         this.connectionPool = connectionPool;
@@ -491,11 +491,10 @@ public final class SqlObjectStore implements ObjectStoreSpi {
         this.objectMappingLookup = mapperLookup;
     }
 
-
-    ///////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////
     // Dependencies (from context)
-    ///////////////////////////////////////////////////////////
-    
+    // /////////////////////////////////////////////////////////
+
     protected AdapterManager getAdapterManager() {
         return IsisContext.getPersistenceSession().getAdapterManager();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcConnector.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcConnector.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcConnector.java
index 054b81d..fa61a1e 100644
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcConnector.java
+++ b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcConnector.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.objectstore.sql.jdbc;
 
+import java.io.InputStream;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.DriverManager;
@@ -130,8 +131,9 @@ public class JdbcConnector extends AbstractDatabaseConnector {
 
     }
 
-    private static Connection getConnection(final String url, final String user, final String password) throws SQLException {
-        if(user != null) {
+    private static Connection getConnection(final String url, final String user, final String password)
+        throws SQLException {
+        if (user != null) {
             LOG.info("Connecting to " + url + " as " + user);
             return DriverManager.getConnection(url, user, password);
         } else {
@@ -141,47 +143,36 @@ public class JdbcConnector extends AbstractDatabaseConnector {
     }
 
     /*
-     * public void executeStoredProcedure(final StoredProcedure storedProcedure)
-     * { Parameter[] parameters = storedProcedure.getParameters(); StringBuffer
-     * sql = new StringBuffer("{call "); sql.append(storedProcedure.getName());
-     * sql.append(" ("); for (int i = 0, no = parameters.length; i < no; i++) {
-     * sql.append(i == 0 ? "?" : ",?"); } sql.append(")}"); LOG.debug("SQL: " +
-     * sql);
+     * public void executeStoredProcedure(final StoredProcedure storedProcedure) { Parameter[] parameters =
+     * storedProcedure.getParameters(); StringBuffer sql = new StringBuffer("{call ");
+     * sql.append(storedProcedure.getName()); sql.append(" ("); for (int i = 0, no = parameters.length; i < no; i++) {
+     * sql.append(i == 0 ? "?" : ",?"); } sql.append(")}"); LOG.debug("SQL: " + sql);
      * 
-     * CallableStatement statement; try { statement =
-     * connection.prepareCall(sql.toString());
+     * CallableStatement statement; try { statement = connection.prepareCall(sql.toString());
      * 
-     * for (int i = 0; i < parameters.length; i++) { LOG.debug(" setup param " +
-     * i + " " + parameters[i]); parameters[i].setupParameter(i + 1,
-     * parameters[i].getName(), storedProcedure); } LOG.debug(" execute ");
-     * statement.execute(); for (int i = 0; i < parameters.length; i++) {
-     * parameters[i].retrieve(i + 1, parameters[i].getName(), storedProcedure);
-     * LOG.debug(" retrieve param " + i + " " + parameters[i]); } } catch
+     * for (int i = 0; i < parameters.length; i++) { LOG.debug(" setup param " + i + " " + parameters[i]);
+     * parameters[i].setupParameter(i + 1, parameters[i].getName(), storedProcedure); } LOG.debug(" execute ");
+     * statement.execute(); for (int i = 0; i < parameters.length; i++) { parameters[i].retrieve(i + 1,
+     * parameters[i].getName(), storedProcedure); LOG.debug(" retrieve param " + i + " " + parameters[i]); } } catch
      * (SQLException e) { throw new ObjectAdapterRuntimeException(e); }
      * 
      * }
      * 
      * 
-     * public MultipleResults executeStoredProcedure(final String name, final
-     * Parameter[] parameters) { StringBuffer sql = new StringBuffer("{call ");
-     * sql.append(name); sql.append(" ("); for (int i = 0; i <
-     * parameters.length; i++) { sql.append(i == 0 ? "?" : ",?"); }
-     * sql.append(")}"); LOG.debug("SQL: " + sql);
+     * public MultipleResults executeStoredProcedure(final String name, final Parameter[] parameters) { StringBuffer sql
+     * = new StringBuffer("{call "); sql.append(name); sql.append(" ("); for (int i = 0; i < parameters.length; i++) {
+     * sql.append(i == 0 ? "?" : ",?"); } sql.append(")}"); LOG.debug("SQL: " + sql);
      * 
-     * CallableStatement statement; try { statement =
-     * connection.prepareCall(sql.toString());
+     * CallableStatement statement; try { statement = connection.prepareCall(sql.toString());
      * 
      * StoredProcedure storedProcedure = new JdbcStoredProcedure(statement);
      * 
-     * for (int i = 0; i < parameters.length; i++) { LOG.debug(" setup param " +
-     * i + " " + parameters[i]); parameters[i].setupParameter(i + 1,
-     * parameters[i].getName(), storedProcedure); } LOG.debug(" execute ");
-     * statement.execute(); for (int i = 0; i < parameters.length; i++) {
-     * parameters[i].retrieve(i + 1, parameters[i].getName(), storedProcedure);
-     * LOG.debug(" retrieve param " + i + " " + parameters[i]); }
+     * for (int i = 0; i < parameters.length; i++) { LOG.debug(" setup param " + i + " " + parameters[i]);
+     * parameters[i].setupParameter(i + 1, parameters[i].getName(), storedProcedure); } LOG.debug(" execute ");
+     * statement.execute(); for (int i = 0; i < parameters.length; i++) { parameters[i].retrieve(i + 1,
+     * parameters[i].getName(), storedProcedure); LOG.debug(" retrieve param " + i + " " + parameters[i]); }
      * 
-     * return new JdbcResults(statement); } catch (SQLException e) { throw new
-     * ObjectAdapterRuntimeException(e); } }
+     * return new JdbcResults(statement); } catch (SQLException e) { throw new ObjectAdapterRuntimeException(e); } }
      */
 
     @Override
@@ -201,6 +192,9 @@ public class JdbcConnector extends AbstractDatabaseConnector {
 
     @Override
     public int update(final String sql) {
+        if (sql.length() == 0) {
+            return 0;
+        }
         LOG.debug("SQL: " + sql);
         PreparedStatement statement;
         try {
@@ -235,17 +229,21 @@ public class JdbcConnector extends AbstractDatabaseConnector {
                             // "undone"
                             final LocalDate localDate = (LocalDate) value;
                             final int millisOffset = -DateTimeZone.getDefault().getOffset(null);
-                            final java.util.Date javaDate = localDate.toDateTimeAtStartOfDay(DateTimeZone.forOffsetMillis(millisOffset)).toDate();
+                            final java.util.Date javaDate =
+                                localDate.toDateTimeAtStartOfDay(DateTimeZone.forOffsetMillis(millisOffset)).toDate();
 
                             statement.setObject(i, javaDate, java.sql.Types.DATE);
                         }
+                    } else if (value instanceof InputStream) {
+                        statement.setBlob(i, (InputStream) value);
                     } else {
                         statement.setObject(i, value);
                     }
                     i++;
                 }
             } catch (final SQLException e) {
-                LOG.error("Error adding prepared value " + i + " of type " + queryValues.get(i - 1).getClass().getSimpleName(), e);
+                LOG.error("Error adding prepared value " + i + " of type "
+                    + queryValues.get(i - 1).getClass().getSimpleName(), e);
                 throw e;
             }
         }
@@ -298,8 +296,7 @@ public class JdbcConnector extends AbstractDatabaseConnector {
             statement = connection.prepareStatement(sql);
             statement.executeUpdate();
             /*
-             * require 3.0 ResultSet rs = statement.getGeneratedKeys();
-             * if(rs.next()) { int id = rs.getInt(1); }
+             * require 3.0 ResultSet rs = statement.getGeneratedKeys(); if(rs.next()) { int id = rs.getInt(1); }
              */statement.close();
         } catch (final SQLException e) {
             throw new SqlObjectStoreException("SQL error", e);
@@ -360,7 +357,8 @@ public class JdbcConnector extends AbstractDatabaseConnector {
             final DatabaseMetaData metaData = connection.getMetaData();
             debug.appendln("Product", metaData.getDatabaseProductName() + "  " + metaData.getDatabaseProductVersion());
             try {
-                debug.appendln("Product Version", metaData.getDatabaseMajorVersion() + "." + metaData.getDatabaseMinorVersion());
+                debug.appendln("Product Version",
+                    metaData.getDatabaseMajorVersion() + "." + metaData.getDatabaseMinorVersion());
             } catch (final AbstractMethodError ignore) {
             }
             debug.appendln("Drive", metaData.getDriverName() + "  " + metaData.getDriverVersion());

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcImageValueMapper.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcImageValueMapper.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcImageValueMapper.java
new file mode 100644
index 0000000..f64bf24
--- /dev/null
+++ b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcImageValueMapper.java
@@ -0,0 +1,116 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.objectstore.sql.jdbc;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.isis.applib.PersistFailedException;
+import org.apache.isis.applib.value.Image;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.objectstore.sql.Results;
+import org.apache.isis.objectstore.sql.mapping.FieldMapping;
+import org.apache.isis.objectstore.sql.mapping.FieldMappingFactory;
+
+/**
+ * 
+ * 
+ * @version $Rev$ $Date$
+ */
+public class JdbcImageValueMapper extends AbstractJdbcMultiFieldMapping {
+
+    public static class Factory implements FieldMappingFactory {
+        private final String type_string; // A reference, e.g. file name
+        private final String type_blob; // The BLOB data
+
+        public Factory(final String string_type, final String type_blob) {
+            this.type_string = string_type;
+            this.type_blob = type_blob;
+        }
+
+        @Override
+        public FieldMapping createFieldMapping(final ObjectSpecification object, final ObjectAssociation field) {
+            return new JdbcImageValueMapper(field, type_string, type_blob);
+        }
+    }
+
+    public JdbcImageValueMapper(final ObjectAssociation field, final String type1, final String type2) {
+        super(field, 2, type1, type2);
+    }
+
+    @Override
+    protected Object preparedStatementObject(int index, Object o) {
+        if (o instanceof Image) {
+            if (index == 0) {
+                return "Image";
+            } else {
+                return getOutputStreamFromImage((Image) o);
+            }
+        } else {
+            throw new PersistFailedException("Invalid object type " + o.getClass().getCanonicalName()
+                + " for JdbcImageValueMapper");
+        }
+    }
+
+    private Object getOutputStreamFromImage(Image o) {
+        int[][] intArray = o.getImage();
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        final int height = o.getHeight();
+        final int width = o.getWidth();
+
+        stream.write(height);
+        stream.write(width);
+        for (int j = 0; j < height; j++) {
+            for (int i = 0; i < width; i++) {
+                // stream.write(o.getImage());
+                stream.write(intArray[j][i]);
+            }
+        }
+        return new ByteArrayInputStream(stream.toByteArray());
+    }
+
+    @Override
+    protected Object getObjectFromResults(Results results) {
+        // final String name = results.getString(columnName(0));
+        InputStream binaryStream = results.getStream(columnName(1));
+
+        int[][] intArray;
+        try {
+            int width = binaryStream.read();
+            int height = binaryStream.read();
+
+            intArray = new int[height][width];
+            for (int j = 0; j < height; j++) {
+                for (int i = 0; i < width; i++) {
+                    intArray[j][i] = binaryStream.read();
+                }
+            }
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            intArray = new int[0][0];
+        }
+
+        final Image object = new Image(intArray);
+
+        return object;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcResults.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcResults.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcResults.java
index 1980a8a..8fb81a8 100644
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcResults.java
+++ b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/JdbcResults.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.objectstore.sql.jdbc;
 
+import java.io.InputStream;
 import java.sql.CallableStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -219,4 +220,13 @@ public class JdbcResults implements Results {
             throw new SqlObjectStoreException(e);
         }
     }
+
+    @Override
+    public InputStream getStream(String column) {
+        try {
+            return set.getBinaryStream(column);
+        } catch (final SQLException e) {
+            throw new SqlObjectStoreException(e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/installer/JdbcFieldMappingFactoryInstaller.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/installer/JdbcFieldMappingFactoryInstaller.java b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/installer/JdbcFieldMappingFactoryInstaller.java
index 1cbbf24..62391bf 100644
--- a/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/installer/JdbcFieldMappingFactoryInstaller.java
+++ b/component/objectstore/sql/sql-impl/src/main/java/org/apache/isis/objectstore/sql/jdbc/installer/JdbcFieldMappingFactoryInstaller.java
@@ -22,6 +22,7 @@ package org.apache.isis.objectstore.sql.jdbc.installer;
 import org.apache.isis.applib.value.Color;
 import org.apache.isis.applib.value.Date;
 import org.apache.isis.applib.value.DateTime;
+import org.apache.isis.applib.value.Image;
 import org.apache.isis.applib.value.Money;
 import org.apache.isis.applib.value.Password;
 import org.apache.isis.applib.value.Percentage;
@@ -35,6 +36,7 @@ import org.apache.isis.objectstore.sql.jdbc.JdbcColorValueMapper;
 import org.apache.isis.objectstore.sql.jdbc.JdbcDateMapper;
 import org.apache.isis.objectstore.sql.jdbc.JdbcDateTimeMapper;
 import org.apache.isis.objectstore.sql.jdbc.JdbcGeneralValueMapper;
+import org.apache.isis.objectstore.sql.jdbc.JdbcImageValueMapper;
 import org.apache.isis.objectstore.sql.jdbc.JdbcMoneyValueMapper;
 import org.apache.isis.objectstore.sql.jdbc.JdbcObjectReferenceFieldMapping;
 import org.apache.isis.objectstore.sql.jdbc.JdbcObjectReferenceMappingFactory;
@@ -46,6 +48,10 @@ public class JdbcFieldMappingFactoryInstaller implements FieldMappingFactoryInst
 
     @Override
     public void load(final FieldMappingLookup lookup) {
+
+        lookup.addFieldMappingFactory(Image.class,
+            new JdbcImageValueMapper.Factory(Defaults.TYPE_STRING(), Defaults.TYPE_BLOB()));
+
         lookup.addFieldMappingFactory(Boolean.class, new JdbcBinaryValueMapper.Factory(Defaults.TYPE_BOOLEAN()));
         lookup.addFieldMappingFactory(Short.class, new JdbcBinaryValueMapper.Factory(Defaults.TYPE_SHORT()));
         lookup.addFieldMappingFactory(Integer.class, new JdbcBinaryValueMapper.Factory(Defaults.TYPE_INT()));

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/pom.xml
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/pom.xml b/component/objectstore/sql/sql-tests-common/pom.xml
index 6d99dc3..2b87e04 100644
--- a/component/objectstore/sql/sql-tests-common/pom.xml
+++ b/component/objectstore/sql/sql-tests-common/pom.xml
@@ -36,7 +36,7 @@
 		<relativeUrl>sql-tests-common/</relativeUrl>
 
         <xml-objectstore.version>1.0.0-SNAPSHOT</xml-objectstore.version>
-        <hsqldb.version>2.2.9</hsqldb.version>
+        <hsqldb.version>2.2.8</hsqldb.version>
     </properties>
 
     <!-- used in Site generation for relative references. -->

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestCommonBase.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestCommonBase.java b/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestCommonBase.java
index 3f43af4..883304e 100755
--- a/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestCommonBase.java
+++ b/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestCommonBase.java
@@ -28,7 +28,9 @@ import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.FixMethodOrder;
 import org.junit.Rule;
+import org.junit.runners.MethodSorters;
 
 import org.apache.isis.core.tck.dom.poly.ReferencingPolyTypesEntity;
 import org.apache.isis.core.tck.dom.sqlos.SqlDomainObjectRepository;
@@ -44,6 +46,7 @@ import org.apache.isis.objectstore.sql.common.SqlIntegrationTestFixtures.State;
  * 
  * @version $Rev$ $Date$
  */
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public abstract class SqlIntegrationTestCommonBase {
 
     @Rule

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestData.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestData.java b/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestData.java
index a561219..37a954b 100644
--- a/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestData.java
+++ b/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestData.java
@@ -29,11 +29,14 @@ import java.util.List;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.junit.FixMethodOrder;
 import org.junit.Test;
+import org.junit.runners.MethodSorters;
 
 import org.apache.isis.applib.value.Color;
 import org.apache.isis.applib.value.Date;
 import org.apache.isis.applib.value.DateTime;
+import org.apache.isis.applib.value.Image;
 import org.apache.isis.applib.value.Money;
 import org.apache.isis.applib.value.Password;
 import org.apache.isis.applib.value.Percentage;
@@ -59,6 +62,7 @@ import org.apache.isis.objectstore.sql.common.SqlIntegrationTestFixtures.State;
  * 
  * @version $Rev$ $Date$
  */
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public abstract class SqlIntegrationTestData extends SqlIntegrationTestCommonBase {
 
     private static final Logger LOG = Logger.getLogger(SqlIntegrationTestData.class);
@@ -163,6 +167,12 @@ public abstract class SqlIntegrationTestData extends SqlIntegrationTestCommonBas
                 simpleClassList2.add(simpleClass);
             }
         }
+
+        // Initialise Image
+        Image image = new Image(new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } });
+        sqlDataClass.setImage(image);
+
+        // Save
         factory.save(sqlDataClass);
 
         setFixtureInitializationState(State.DONT_INITIALIZE, "in-memory");
@@ -266,10 +276,6 @@ public abstract class SqlIntegrationTestData extends SqlIntegrationTestCommonBas
         if (!Data.applibDate.isEqualTo(sqlDataClass.getDate())) {
             fail("Applib date: Test '2010-3-5', expected " + Data.applibDate.toString() + ", but got "
                 + sqlDataClass.getDate().toString() + ". Check log for more info.");
-            // LOG.log(Level.INFO, "Applib date: Test '2011-3-5', expected " +
-            // applibDate.toString() + ", but got "
-            // +
-            // sqlDataClass.getDate().toString()+". Check log for more info.");
         } else {
             // LOG.log(Level.INFO,
             // "SQL applib.value.date: test passed! Woohoo!");
@@ -301,10 +307,6 @@ public abstract class SqlIntegrationTestData extends SqlIntegrationTestCommonBas
         if (Data.sqlDate.compareTo(sqlDataClass.getSqlDate()) != 0) {
             fail("SQL date: Test '2011-4-8', expected " + Data.sqlDate.toString() + ", but got "
                 + sqlDataClass.getSqlDate().toString() + ". Check log for more info.");
-            // LOG.log(Level.INFO, "SQL date: Test '2011-4-8', expected " +
-            // sqlDate.toString() + ", and got "
-            // + sqlDataClass.getSqlDate().toString()
-            // +". Check log for more info.");
         } else {
             // LOG.log(Level.INFO, "SQL date: test passed! Woohoo!");
         }
@@ -390,17 +392,34 @@ public abstract class SqlIntegrationTestData extends SqlIntegrationTestCommonBas
      * Test {@link Image} type.
      */
     // TODO: Images are not equal...
-    /*
-     * public void testImage(){ SqlDataClass sqlDataClass = SqlIntegrationTestSingleton.getPerson(); Image image2 =
-     * sqlDataClass.getImage(); assertEqual(image, image2); }
-     * 
-     * private void assertEqual(Image image2, Image image3) { assertEquals(image2.getHeight(), image3.getHeight());
-     * assertEquals(image2.getWidth(), image3.getWidth()); boolean same = true; int i=0,j=0; int p1=0, p2=0; String
-     * error = ""; int [][] i1 = image2.getImage(), i2 = image3.getImage(); for(i = 0; same &&
-     * i<image2.getHeight();i++){ int [] r1 = i1[i], r2 = i2[i]; for (j = 0; same && j < image2.getWidth(); j++){ if
-     * (r1[j] != r2[j]){ same = false; p1 = r1[j]; p2 = r2[j]; error = "Images differ at i = "+i+", j = "+j+", "+p1+
-     * " is not "+p2+"!"; break; } } } assertTrue(error, same); }
-     */
+    private void testImage() {
+        Image image1 = new Image(new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } });
+        Image image2 = sqlDataClass.getImage();
+        assertImagesEqual(image1, image2);
+    }
+
+    private void assertImagesEqual(Image image2, Image image3) {
+        assertEquals(image2.getHeight(), image3.getHeight());
+        assertEquals(image2.getWidth(), image3.getWidth());
+        boolean same = true;
+        int i = 0, j = 0;
+        int p1 = 0, p2 = 0;
+        String error = "";
+        int[][] i1 = image2.getImage(), i2 = image3.getImage();
+        for (i = 0; same && i < image2.getHeight(); i++) {
+            int[] r1 = i1[i], r2 = i2[i];
+            for (j = 0; same && j < image2.getWidth(); j++) {
+                p1 = r1[j];
+                p2 = r2[j];
+                if (p1 != p2) {
+                    same = false;
+                    error = "Images differ at i = " + i + ", j = " + j + ", " + p1 + " is not " + p2 + "!";
+                    break;
+                }
+            }
+        }
+        assertTrue(error, same);
+    }
 
     /**
      * Test {@link Password} type.
@@ -555,7 +574,6 @@ public abstract class SqlIntegrationTestData extends SqlIntegrationTestCommonBas
 
         final List<SimpleClass> collection = sqlDataClass.getSimpleClasses1();
         final SimpleClass simpleClass1 = collection.get(0);
-        // simpleClass1.setString(stringList1.get(3));
 
         collection.remove(simpleClass1);
 
@@ -592,10 +610,4 @@ public abstract class SqlIntegrationTestData extends SqlIntegrationTestCommonBas
             assertEquals(Data.stringList1.size() + 2, classes.size());
         }
     }
-
-    private void reinitializeFixtures() {
-        setFixtureInitializationState(State.INITIALIZE);
-        SqlIntegrationTestFixtures.recreate();
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestFixtures.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestFixtures.java b/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestFixtures.java
index d630bcc..ada7051 100644
--- a/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestFixtures.java
+++ b/component/objectstore/sql/sql-tests-common/src/main/java/org/apache/isis/objectstore/sql/common/SqlIntegrationTestFixtures.java
@@ -50,7 +50,7 @@ import org.apache.isis.objectstore.sql.SqlObjectStore;
  * 
  */
 public class SqlIntegrationTestFixtures {
-    
+
     static SqlIntegrationTestFixtures instance;
 
     public static SqlIntegrationTestFixtures getInstance() {
@@ -63,30 +63,30 @@ public class SqlIntegrationTestFixtures {
     public static void recreate() {
         instance = new SqlIntegrationTestFixtures();
     }
-    
+
     public enum State {
-        INITIALIZE,
-        DONT_INITIALIZE;
-        
-        public boolean isInitialize() { return this == INITIALIZE; }
+        INITIALIZE, DONT_INITIALIZE;
+
+        public boolean isInitialize() {
+            return this == INITIALIZE;
+        }
     }
-    
+
     private State state = State.INITIALIZE;
+
     public State getState() {
         return state;
     }
+
     public void setState(final State state) {
         this.state = state;
     }
 
-    
-    ///////////////////////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////////////////////
     //
-    ///////////////////////////////////////////////////////////////////////////
-    
-    
+    // /////////////////////////////////////////////////////////////////////////
+
     private IsisSystemWithFixtures system;
-    
 
     // JDBC
     private Connection conn = null;
@@ -96,7 +96,7 @@ public class SqlIntegrationTestFixtures {
 
         final Properties properties = new Properties();
         properties.load(new FileInputStream(propertiesDirectory + "/" + propertiesFileName));
-        
+
         initSystem(properties);
     }
 
@@ -108,30 +108,30 @@ public class SqlIntegrationTestFixtures {
         if (system != null) {
             system.tearDownSystem();
         }
-        
+
         final PersistenceMechanismInstallerAbstract persistorInstaller = Utils.createPersistorInstaller(configuration);
-        system = IsisSystemWithFixtures.builder().with(configuration).withServices(sqlDomainObjectRepository).with(Initialization.NO_INIT).with(persistorInstaller).build();
-        
+        system =
+            IsisSystemWithFixtures.builder().with(configuration).withServices(sqlDomainObjectRepository)
+                .with(Initialization.NO_INIT).with(persistorInstaller).build();
+
         system.setUpSystem();
 
         registerDriverAndConnect(configuration);
     }
 
-    
     public void shutDown() throws Exception {
         if (system != null) {
             system.tearDownSystem();
         }
     }
 
-    
-    ///////////////////////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////////////////////
     //
-    ///////////////////////////////////////////////////////////////////////////
-    
+    // /////////////////////////////////////////////////////////////////////////
 
     @SuppressWarnings("unchecked")
-    private void registerDriverAndConnect(final IsisConfiguration isisConfiguration) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
+    private void registerDriverAndConnect(final IsisConfiguration isisConfiguration) throws SQLException,
+        ClassNotFoundException, InstantiationException, IllegalAccessException {
         final String jdbcClassName = isisConfiguration.getString(SqlObjectStore.BASE_NAME + ".jdbc.driver");
         if (jdbcClassName == null) {
             conn = null;
@@ -143,13 +143,11 @@ public class SqlIntegrationTestFixtures {
         DriverManager.registerDriver(driver);
 
         // jdbc - connect to DB and drop tables.
-        conn = DriverManager.getConnection(isisConfiguration.getString(SqlObjectStore.BASE_NAME + ".jdbc.connection"), isisConfiguration.getString(SqlObjectStore.BASE_NAME + ".jdbc.user"), isisConfiguration.getString(SqlObjectStore.BASE_NAME + ".jdbc.password"));
+        conn =
+            DriverManager.getConnection(isisConfiguration.getString(SqlObjectStore.BASE_NAME + ".jdbc.connection"),
+                isisConfiguration.getString(SqlObjectStore.BASE_NAME + ".jdbc.user"),
+                isisConfiguration.getString(SqlObjectStore.BASE_NAME + ".jdbc.password"));
         stmt = conn.createStatement();
-
-        
-        // doesn't seem to be used...
-        
-        // dropTable(SqlObjectStore.getTableName());
     }
 
     public void dropTable(final String tableName) {
@@ -160,31 +158,31 @@ public class SqlIntegrationTestFixtures {
                     sqlDomainObjectRepository.delete(sqlDataClass);
                 }
                 return;
-            } 
+            }
             if (tableName.equalsIgnoreCase("simpleclass")) {
                 final List<SimpleClass> list = sqlDomainObjectRepository.allSimpleClasses();
                 for (final SimpleClass sqlClass : list) {
                     sqlDomainObjectRepository.delete(sqlClass);
                 }
                 return;
-            } 
+            }
             if (tableName.equalsIgnoreCase("simpleclasstwo")) {
                 final List<SimpleClassTwo> list = sqlDomainObjectRepository.allSimpleClassTwos();
                 for (final SimpleClassTwo sqlClass : list) {
                     sqlDomainObjectRepository.delete(sqlClass);
                 }
                 return;
-            } 
+            }
             if (tableName.equalsIgnoreCase("primitivevaluedentity")) {
                 final List<PrimitiveValuedEntity> list = sqlDomainObjectRepository.allPrimitiveValueEntities();
                 for (final PrimitiveValuedEntity pve : list) {
                     sqlDomainObjectRepository.delete(pve);
                 }
                 return;
-            } 
+            }
             throw new IsisException("Unknown table: " + tableName);
         }
-        
+
         try {
             String tableIdentifier = Utils.tableIdentifierFor(tableName);
             stmt.executeUpdate("DROP TABLE " + tableIdentifier);
@@ -193,43 +191,38 @@ public class SqlIntegrationTestFixtures {
             // e.printStackTrace();
         }
     }
-    
+
     public void sqlExecute(final String sqlString) throws SQLException {
         if (stmt != null) {
             stmt.executeUpdate(sqlString);
         }
     }
 
-
-
-    ///////////////////////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////////////////////
     //
-    ///////////////////////////////////////////////////////////////////////////
+    // /////////////////////////////////////////////////////////////////////////
 
     private SqlDomainObjectRepository sqlDomainObjectRepository = null;
-    
+
     private SqlDataClass sqlDataClass;
     private ReferencingPolyTypesEntity referencingPolyTypesEntity;
 
-    
     public SqlDomainObjectRepository getSqlDataClassFactory() {
         return sqlDomainObjectRepository;
     }
 
-
-    
     public SqlDataClass getSqlDataClass() {
         return sqlDataClass;
     }
+
     public void setSqlDataClass(SqlDataClass sqlDataClass) {
         this.sqlDataClass = sqlDataClass;
     }
 
-    
-    
     public ReferencingPolyTypesEntity getPolyTestClass() {
         return referencingPolyTypesEntity;
     }
+
     public void setPolyTestClass(final ReferencingPolyTypesEntity referencingPolyTypesEntity) {
         this.referencingPolyTypesEntity = referencingPolyTypesEntity;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/src/test/config/hsql-poly.properties
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/src/test/config/hsql-poly.properties b/component/objectstore/sql/sql-tests-common/src/test/config/hsql-poly.properties
index 1966071..cd5ea6e 100644
--- a/component/objectstore/sql/sql-tests-common/src/test/config/hsql-poly.properties
+++ b/component/objectstore/sql/sql-tests-common/src/test/config/hsql-poly.properties
@@ -24,3 +24,6 @@ isis.persistor.sql.jdbc.password=
 # testing
 isis.logging.objectstore=on
 isis.persistor.sql.default.command.beginTransaction=
+isis.persistor.sql.default.command.commitTransaction=
+isis.persistor.sql.default.command.abortTransaction=
+

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/src/test/config/hsql.properties
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/src/test/config/hsql.properties b/component/objectstore/sql/sql-tests-common/src/test/config/hsql.properties
index 9e4a262..22c9758 100644
--- a/component/objectstore/sql/sql-tests-common/src/test/config/hsql.properties
+++ b/component/objectstore/sql/sql-tests-common/src/test/config/hsql.properties
@@ -25,5 +25,9 @@ isis.persistor.sql.jdbc.password=
 isis.persistor.sql.datatypes.string=VARCHAR(70)
 isis.persistor.sql.default.password.seed=gfkhgdf76453fhgj#$
 isis.persistor.sql.default.command.beginTransaction=
+isis.persistor.sql.default.command.commitTransaction=
+isis.persistor.sql.default.command.abortTransaction=
+
+isis.persistor.sql.datatypes.blob=BLOB(1000)
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/HsqlTest.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/HsqlTest.java b/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/HsqlTest.java
index 2eb4b66..857fb81 100644
--- a/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/HsqlTest.java
+++ b/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/HsqlTest.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.objectstore.sql;
 
+import org.junit.FixMethodOrder;
+import org.junit.runners.MethodSorters;
+
 import org.apache.isis.core.unittestsupport.files.Files;
 import org.apache.isis.core.unittestsupport.files.Files.Recursion;
 import org.apache.isis.objectstore.sql.common.Data;
@@ -33,6 +36,7 @@ import org.apache.isis.objectstore.sql.common.SqlIntegrationTestFixtures;
  * 
  * @version $Rev$ $Date$
  */
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class HsqlTest extends SqlIntegrationTestData {
 
     @Override
@@ -49,10 +53,10 @@ public class HsqlTest extends SqlIntegrationTestData {
         super.testCreate();
     }
 
-    @Override
-    protected String getSqlSetupString() {
-        return "COMMIT;";
-    }
+    // @Override
+    // protected String getSqlSetupString() {
+    // return "COMMIT;";
+    // }
 
     @Override
     public String getPropertiesFilename() {

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/PolymorphismTest.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/PolymorphismTest.java b/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/PolymorphismTest.java
index d31c7d8..5837637 100755
--- a/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/PolymorphismTest.java
+++ b/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/PolymorphismTest.java
@@ -24,7 +24,9 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.List;
 
+import org.junit.FixMethodOrder;
 import org.junit.Test;
+import org.junit.runners.MethodSorters;
 
 import org.apache.isis.core.tck.dom.poly.Empty;
 import org.apache.isis.core.tck.dom.poly.EmptyEntityWithOwnProperty;
@@ -57,6 +59,7 @@ import org.apache.isis.objectstore.sql.common.SqlIntegrationTestFixtures.State;
  * @version $Rev$ $Date$
  */
 
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class PolymorphismTest extends SqlIntegrationTestCommonBase {
 
     private static final String IMPL_A_STRING = "Impl A String";

http://git-wip-us.apache.org/repos/asf/isis/blob/bac67aae/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/crosscheck/InMemoryPersistenceTest.java
----------------------------------------------------------------------
diff --git a/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/crosscheck/InMemoryPersistenceTest.java b/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/crosscheck/InMemoryPersistenceTest.java
index da61040..4885b77 100644
--- a/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/crosscheck/InMemoryPersistenceTest.java
+++ b/component/objectstore/sql/sql-tests-common/src/test/java/org/apache/isis/objectstore/sql/crosscheck/InMemoryPersistenceTest.java
@@ -24,10 +24,14 @@ package org.apache.isis.objectstore.sql.crosscheck;
 
 import java.util.Properties;
 
+import org.junit.FixMethodOrder;
+import org.junit.runners.MethodSorters;
+
 import org.apache.isis.objectstore.sql.common.SqlIntegrationTestData;
 import org.apache.isis.objectstore.sql.common.SqlIntegrationTestFixtures;
 import org.apache.isis.objectstore.sql.common.SqlIntegrationTestFixtures.State;
 
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class InMemoryPersistenceTest extends SqlIntegrationTestData {
 
     @Override