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