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 2010/11/14 20:38:09 UTC
svn commit: r1035054 - in
/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore:
./ auto/ jdbc/
Author: kevin
Date: Sun Nov 14 19:38:08 2010
New Revision: 1035054
URL: http://svn.apache.org/viewvc?rev=1035054&view=rev
Log:
Extended use of prepared values array to WHERE clauses of INSERT and UPDATE. All values should now be passed in via "?" in SQL string.
Modified:
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IdMappingAbstract.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IntegerPrimaryKey.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/PrimaryKey.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/SqlObjectStore.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/StringPrimaryKey.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/TransientKey.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/VersionMapping.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoCollectionMapper.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoMapper.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/CombinedCollectionMapper.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcConnector.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceFieldMapping.java
incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceMapping.java
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IdMappingAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IdMappingAbstract.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IdMappingAbstract.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IdMappingAbstract.java Sun Nov 14 19:38:08 2010
@@ -38,11 +38,13 @@ public class IdMappingAbstract {
return column;
}
- public void appendWhereClause(StringBuffer sql, Oid oid) {
+ public void appendWhereClause(DatabaseConnector connector,
+ StringBuffer sql, Oid oid) {
sql.append(column);
- sql.append(" = ");
- String id = primaryKey(oid);
- sql.append(id);
+ connector.addToQueryValues(primaryKeyAsObject(oid));
+ sql.append(" = ?");
+ // String id = primaryKey(oid);
+ // sql.append(id);
}
public void appendCreateColumnDefinitions(StringBuffer sql) {
@@ -66,20 +68,18 @@ public class IdMappingAbstract {
if (object == null) {
sql.append(connector.addToQueryValues(null));
} else {
- sql.append(connector.addToQueryValues(primaryKeyAsInt(object
+ sql.append(connector.addToQueryValues(primaryKeyAsObject(object
.getOid())));
}
}
- public long primaryKeyAsInt(final Oid oid) {
+ /*
+ * This doesn't have to be an Int, it should be any object.
+ */
+ public Object primaryKeyAsObject(final Oid oid) {
if (oid instanceof SqlOid) {
- if (((SqlOid) oid).getPrimaryKey() instanceof IntegerPrimaryKey) {
- long i = ((IntegerPrimaryKey) ((SqlOid) oid).getPrimaryKey())
- .intValue();
- return i;
- } else {
- return 0;
- }
+ PrimaryKey pk = ((SqlOid) oid).getPrimaryKey();
+ return pk.naturalValue();
} else
return ((SerialOid) oid).getSerialNo();
}
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IntegerPrimaryKey.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IntegerPrimaryKey.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IntegerPrimaryKey.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/IntegerPrimaryKey.java Sun Nov 14 19:38:08 2010
@@ -60,4 +60,9 @@ public class IntegerPrimaryKey implement
return primaryKey;
}
+ @Override
+ public Object naturalValue() {
+ return intValue();
+ }
+
}
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/PrimaryKey.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/PrimaryKey.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/PrimaryKey.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/PrimaryKey.java Sun Nov 14 19:38:08 2010
@@ -17,13 +17,13 @@
* under the License.
*/
-
package org.apache.isis.extensions.sql.objectstore;
import java.io.Serializable;
-
public interface PrimaryKey extends Serializable {
- public String stringValue();
+ public String stringValue();
+
+ public Object naturalValue();
}
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/SqlObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/SqlObjectStore.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/SqlObjectStore.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/SqlObjectStore.java Sun Nov 14 19:38:08 2010
@@ -17,7 +17,6 @@
* under the License.
*/
-
package org.apache.isis.extensions.sql.objectstore;
import java.util.List;
@@ -46,312 +45,376 @@ import org.apache.isis.runtime.transacti
import org.apache.isis.runtime.transaction.updatenotifier.UpdateNotifier;
import org.apache.log4j.Logger;
-
public final class SqlObjectStore implements ObjectStore {
- private static final String TABLE_NAME = "no_services";
- private static final String ID_COLUMN = "id";
- private static final String PRIMARYKEY_COLUMN = "pk_id";
- public static final String BASE_NAME = "isis.persistence.sql";
- private static final Logger LOG = Logger.getLogger(SqlObjectStore.class);
- private DatabaseConnectorPool connectionPool;
- private ObjectMappingLookup objectMappingLookup;
- private boolean isInitialized;
-
- public void abortTransaction() {}
-
- public CreateObjectCommand createCreateObjectCommand(final ObjectAdapter object) {
- return new CreateObjectCommand() {
- public void execute(final PersistenceCommandContext context) {
- DatabaseConnector connection = ((SqlExecutionContext) context).getConnection();
- LOG.debug(" create object " + object);
- ObjectMapping mapping = objectMappingLookup.getMapping(object, connection);
- mapping.createObject(connection, object);
- }
-
- public ObjectAdapter onObject() {
- return object;
- }
-
- public String toString() {
- return "CreateObjectCommand [object=" + object + "]";
- }
- };
- }
-
- public DestroyObjectCommand createDestroyObjectCommand(final ObjectAdapter object) {
- return new DestroyObjectCommand() {
- public void execute(final PersistenceCommandContext context) {
- DatabaseConnector connection = ((SqlExecutionContext) context).getConnection();
- LOG.debug(" destroy object " + object);
- ObjectMapping mapping = objectMappingLookup.getMapping(object, connection);
- mapping.destroyObject(connection, object);
- }
-
- public ObjectAdapter onObject() {
- return object;
- }
-
- public String toString() {
- return "DestroyObjectCommand [object=" + object + "]";
- }
- };
- }
-
- public SaveObjectCommand createSaveObjectCommand(final ObjectAdapter object) {
- return new SaveObjectCommand() {
- public void execute(final PersistenceCommandContext context) {
- DatabaseConnector connection = ((SqlExecutionContext) context).getConnection();
- LOG.debug(" save object " + object);
- if (object.getSpecification().isCollectionOrIsAggregated()) {
- /*
- * ObjectAdapter parent = object.getSpecification().getAggregate(object);
- * LOG.debug("change to internal collection being persisted through parent");
- *
- * // TODO a better plan would be ask the mapper to save the collection // -
- * saveCollection(parent, collection) mapperLookup.getMapper(connection,
- * parent).save(connection, parent); connectionPool.release(connection);
- */
- throw new NotYetImplementedException(object.toString());
- } else {
- ObjectMapping mapping = objectMappingLookup.getMapping(object, connection);
- mapping.save(connection, object);
- connectionPool.release(connection);
- }
- }
-
- public ObjectAdapter onObject() {
- return object;
- }
-
- public String toString() {
- return "SaveObjectCommand [object=" + object + "]";
- }
-
- };
- }
-
- public void debugData(final DebugString debug) {
- debug.appendln("initialised", isInitialized);
- debug.appendln("connection pool", connectionPool);
- debug.appendln("Database:");
- debug.indent();
- connectionPool.debug(debug);
- debug.unindent();
- objectMappingLookup.debugData(debug);
- }
-
- public String debugTitle() {
- return null;
- }
-
- public void endTransaction() {}
-
- public void execute(final List<PersistenceCommand> commands) {
- DatabaseConnector connector = connectionPool.acquire();
- connector.begin();
-
- IsisTransactionManager transactionManager = IsisContext.getTransactionManager();
- MessageBroker messageBroker = IsisContext.getMessageBroker();
- UpdateNotifier updateNotifier = IsisContext.getUpdateNotifier();
- SqlExecutionContext context = new SqlExecutionContext(connector, transactionManager, messageBroker, updateNotifier);
- try {
- for (PersistenceCommand command : commands) {
- command.execute(context);
- }
- connector.commit();
- } catch (IsisException e) {
- LOG.warn("Failure during execution", e);
- connector.rollback();
- throw e;
- } finally {
- connectionPool.release(connector);
- }
- }
-
- public boolean flush(final PersistenceCommand[] commands) {
- return false;
- }
-
- public ObjectAdapter[] getInstances(final PersistenceQuery query) {
- if (query instanceof PersistenceQueryFindByTitle) {
- return findByTitle((PersistenceQueryFindByTitle) query);
- } else if (query instanceof PersistenceQueryFindAllInstances) {
- return getAllInstances((PersistenceQueryFindAllInstances) query);
- } else if (query instanceof PersistenceQueryFindByPattern) {
- return findByPattern((PersistenceQueryFindByPattern) query);
- } else {
- throw new SqlObjectStoreException("Query type not supported: " + query);
- }
- }
-
- private ObjectAdapter[] findByPattern(final PersistenceQueryFindByPattern query) {
- ObjectSpecification specification = query.getSpecification();
- DatabaseConnector connector = connectionPool.acquire();
- ObjectMapping mapper = objectMappingLookup.getMapping(specification, connector);
- ObjectAdapter instances[] = mapper.getInstances(connector, specification, query);
- connectionPool.release(connector);
- return instances;
- }
-
- private ObjectAdapter[] getAllInstances(final PersistenceQueryFindAllInstances criteria) {
- ObjectSpecification spec = criteria.getSpecification();
- return allInstances(spec);
- }
-
- private ObjectAdapter[] allInstances(ObjectSpecification spec) {
- DatabaseConnector connector = connectionPool.acquire();
- ObjectMapping mapper = objectMappingLookup.getMapping(spec, connector);
- ObjectAdapter[] instances = mapper.getInstances(connector, spec);
- Vector<ObjectAdapter> matchingInstances = new Vector<ObjectAdapter>();
- for (int i = 0; i < instances.length; i++) {
- matchingInstances.addElement(instances[i]);
- }
- connectionPool.release(connector);
- ObjectAdapter[] instanceArray = new ObjectAdapter[matchingInstances.size()];
- matchingInstances.copyInto(instanceArray);
- return instanceArray;
- }
-
- private ObjectAdapter[] findByTitle(final PersistenceQueryFindByTitle criteria) {
- ObjectSpecification spec = criteria.getSpecification();
- DatabaseConnector connector = connectionPool.acquire();
- ObjectMapping mapper = objectMappingLookup.getMapping(spec, connector);
-
- ObjectAdapter[] instances = mapper.getInstances(connector, spec, criteria.getTitle());
- connectionPool.release(connector);
- return instances;
- }
-
- public ObjectAdapter getObject(final Oid oid, final ObjectSpecification hint) {
- DatabaseConnector connection = connectionPool.acquire();
- ObjectMapping mapper = objectMappingLookup.getMapping(hint, connection);
- ObjectAdapter object = mapper.getObject(connection, oid, hint);
- connectionPool.release(connection);
- return object;
- }
-
- public Oid getOidForService(String name) {
- DatabaseConnector connector = connectionPool.acquire();
-
-
- StringBuffer sql = new StringBuffer();
- sql.append("select ");
- sql.append(Sql.identifier(PRIMARYKEY_COLUMN));
- sql.append(" from ");
- sql.append(Sql.identifier(TABLE_NAME));
- sql.append(" where ");
- sql.append(Sql.identifier(ID_COLUMN));
- sql.append(" = ");
- sql.append(Sql.escapeAndQuoteValue(name));
-
- Results results = connector.select(sql.toString());
- if (results.next()) {
- int key = results.getInt(PRIMARYKEY_COLUMN);
- connectionPool.release(connector);
- return SqlOid.createPersistent(name, new IntegerPrimaryKey(key));
- } else {
- connectionPool.release(connector);
- return null;
- }
- }
-
- public boolean hasInstances(final ObjectSpecification spec) {
- DatabaseConnector connection = connectionPool.acquire();
- ObjectMapping mapper = objectMappingLookup.getMapping(spec, connection);
- boolean hasInstances = mapper.hasInstances(connection, spec);
- connectionPool.release(connection);
- return hasInstances;
- }
-
- public boolean isFixturesInstalled() {
- return isInitialized;
- }
-
- public void open() {
- Sql.setMetaData(connectionPool.acquire().getMetaData());
-
- DebugString debug = new DebugString();
- connectionPool.debug(debug);
- LOG.info("Database: " + debug);
-
- objectMappingLookup.init();
-
- DatabaseConnector connector = connectionPool.acquire();
- isInitialized = connector.hasTable(Sql.identifier(TABLE_NAME));
- if (!isInitialized) {
- StringBuffer sql = new StringBuffer();
- sql.append("create table ");
- sql.append(Sql.identifier(TABLE_NAME));
- sql.append(" (");
- sql.append(Sql.identifier(PRIMARYKEY_COLUMN));
- sql.append(" int, ");
- sql.append(Sql.identifier(ID_COLUMN));
- sql.append(" varchar(255)");
- sql.append(")");
- connector.update(sql.toString());
- }
- }
-
- public String name() {
- return "SQL Object Store";
- }
-
- public void registerService(final String name, final Oid oid) {
- DatabaseConnector connector = connectionPool.acquire();
- String soid = ((SqlOid) oid).getPrimaryKey().stringValue();
-
- StringBuffer sql = new StringBuffer();
- sql.append("insert into ");
- sql.append(Sql.identifier(TABLE_NAME));
- sql.append(" (");
- sql.append(Sql.identifier(PRIMARYKEY_COLUMN));
- sql.append(", ");
- sql.append(Sql.identifier(ID_COLUMN));
- sql.append(") values (");
- sql.append(soid);
- sql.append(", ");
- sql.append(Sql.escapeAndQuoteValue(name));
- sql.append(")");
- connector.insert(sql.toString());
- connectionPool.release(connector);
- }
-
- public void reset() {}
-
- public void resolveField(final ObjectAdapter object, final ObjectAssociation field) {
- if (field.isOneToManyAssociation()) {
- DatabaseConnector connection = connectionPool.acquire();
- ObjectSpecification spec = object.getSpecification();
- ObjectMapping mapper = objectMappingLookup.getMapping(spec, connection);
- mapper.resolveCollection(connection, object, field);
- connectionPool.release(connection);
- } else {
- resolveImmediately(field.get(object));
- }
- }
-
- public void resolveImmediately(final ObjectAdapter object) {
- DatabaseConnector connector = connectionPool.acquire();
- ObjectMapping mapping = objectMappingLookup.getMapping(object, connector);
- mapping.resolve(connector, object);
- connectionPool.release(connector);
- }
-
- public void setConnectionPool(final DatabaseConnectorPool connectionPool) {
- this.connectionPool = connectionPool;
- }
-
- public void setMapperLookup(final ObjectMappingLookup mapperLookup) {
- this.objectMappingLookup = mapperLookup;
- }
-
- public void close() {
- objectMappingLookup.shutdown();
- // DatabaseConnector connection = connectionPool.acquire();
- // connection.update("SHUTDOWN");
- connectionPool.shutdown();
- }
-
- public void startTransaction() {}
+ private static final String TABLE_NAME = "no_services";
+ private static final String ID_COLUMN = "id";
+ private static final String PRIMARYKEY_COLUMN = "pk_id";
+ public static final String BASE_NAME = "isis.persistence.sql";
+ private static final Logger LOG = Logger.getLogger(SqlObjectStore.class);
+ private DatabaseConnectorPool connectionPool;
+ private ObjectMappingLookup objectMappingLookup;
+ private boolean isInitialized;
+
+ @Override
+ public void abortTransaction() {
+ }
+
+ @Override
+ public CreateObjectCommand createCreateObjectCommand(
+ final ObjectAdapter object) {
+ return new CreateObjectCommand() {
+ @Override
+ public void execute(final PersistenceCommandContext context) {
+ DatabaseConnector connection = ((SqlExecutionContext) context)
+ .getConnection();
+ LOG.debug(" create object " + object);
+ ObjectMapping mapping = objectMappingLookup.getMapping(object,
+ connection);
+ mapping.createObject(connection, object);
+ }
+
+ @Override
+ public ObjectAdapter onObject() {
+ return object;
+ }
+
+ @Override
+ public String toString() {
+ return "CreateObjectCommand [object=" + object + "]";
+ }
+ };
+ }
+
+ @Override
+ public DestroyObjectCommand createDestroyObjectCommand(
+ final ObjectAdapter object) {
+ return new DestroyObjectCommand() {
+ @Override
+ public void execute(final PersistenceCommandContext context) {
+ DatabaseConnector connection = ((SqlExecutionContext) context)
+ .getConnection();
+ LOG.debug(" destroy object " + object);
+ ObjectMapping mapping = objectMappingLookup.getMapping(object,
+ connection);
+ mapping.destroyObject(connection, object);
+ }
+
+ @Override
+ public ObjectAdapter onObject() {
+ return object;
+ }
+
+ @Override
+ public String toString() {
+ return "DestroyObjectCommand [object=" + object + "]";
+ }
+ };
+ }
+
+ @Override
+ public SaveObjectCommand createSaveObjectCommand(final ObjectAdapter object) {
+ return new SaveObjectCommand() {
+ @Override
+ public void execute(final PersistenceCommandContext context) {
+ DatabaseConnector connection = ((SqlExecutionContext) context)
+ .getConnection();
+ LOG.debug(" save object " + object);
+ if (object.getSpecification().isCollectionOrIsAggregated()) {
+ /*
+ * ObjectAdapter parent =
+ * object.getSpecification().getAggregate(object);
+ * LOG.debug(
+ * "change to internal collection being persisted through parent"
+ * );
+ *
+ * // TODO a better plan would be ask the mapper to save the
+ * collection // - saveCollection(parent, collection)
+ * mapperLookup.getMapper(connection,
+ * parent).save(connection, parent);
+ * connectionPool.release(connection);
+ */
+ throw new NotYetImplementedException(object.toString());
+ } else {
+ ObjectMapping mapping = objectMappingLookup.getMapping(
+ object, connection);
+ mapping.save(connection, object);
+ connectionPool.release(connection);
+ }
+ }
+
+ @Override
+ public ObjectAdapter onObject() {
+ return object;
+ }
+
+ @Override
+ public String toString() {
+ return "SaveObjectCommand [object=" + object + "]";
+ }
+
+ };
+ }
+
+ @Override
+ public void debugData(final DebugString debug) {
+ debug.appendln("initialised", isInitialized);
+ debug.appendln("connection pool", connectionPool);
+ debug.appendln("Database:");
+ debug.indent();
+ connectionPool.debug(debug);
+ debug.unindent();
+ objectMappingLookup.debugData(debug);
+ }
+
+ @Override
+ public String debugTitle() {
+ return null;
+ }
+
+ @Override
+ public void endTransaction() {
+ }
+
+ @Override
+ public void execute(final List<PersistenceCommand> commands) {
+ DatabaseConnector connector = connectionPool.acquire();
+ connector.begin();
+
+ IsisTransactionManager transactionManager = IsisContext
+ .getTransactionManager();
+ MessageBroker messageBroker = IsisContext.getMessageBroker();
+ UpdateNotifier updateNotifier = IsisContext.getUpdateNotifier();
+ SqlExecutionContext context = new SqlExecutionContext(connector,
+ transactionManager, messageBroker, updateNotifier);
+ try {
+ for (PersistenceCommand command : commands) {
+ command.execute(context);
+ }
+ connector.commit();
+ } catch (IsisException e) {
+ LOG.warn("Failure during execution", e);
+ connector.rollback();
+ throw e;
+ } finally {
+ connectionPool.release(connector);
+ }
+ }
+
+ public boolean flush(final PersistenceCommand[] commands) {
+ return false;
+ }
+
+ @Override
+ public ObjectAdapter[] getInstances(final PersistenceQuery query) {
+ if (query instanceof PersistenceQueryFindByTitle) {
+ return findByTitle((PersistenceQueryFindByTitle) query);
+ } else if (query instanceof PersistenceQueryFindAllInstances) {
+ return getAllInstances((PersistenceQueryFindAllInstances) query);
+ } else if (query instanceof PersistenceQueryFindByPattern) {
+ return findByPattern((PersistenceQueryFindByPattern) query);
+ } else {
+ throw new SqlObjectStoreException("Query type not supported: "
+ + query);
+ }
+ }
+
+ private ObjectAdapter[] findByPattern(
+ final PersistenceQueryFindByPattern query) {
+ ObjectSpecification specification = query.getSpecification();
+ DatabaseConnector connector = connectionPool.acquire();
+ ObjectMapping mapper = objectMappingLookup.getMapping(specification,
+ connector);
+ ObjectAdapter instances[] = mapper.getInstances(connector,
+ specification, query);
+ connectionPool.release(connector);
+ return instances;
+ }
+
+ private ObjectAdapter[] getAllInstances(
+ final PersistenceQueryFindAllInstances criteria) {
+ ObjectSpecification spec = criteria.getSpecification();
+ return allInstances(spec);
+ }
+
+ private ObjectAdapter[] allInstances(ObjectSpecification spec) {
+ DatabaseConnector connector = connectionPool.acquire();
+ ObjectMapping mapper = objectMappingLookup.getMapping(spec, connector);
+ ObjectAdapter[] instances = mapper.getInstances(connector, spec);
+ Vector<ObjectAdapter> matchingInstances = new Vector<ObjectAdapter>();
+ for (int i = 0; i < instances.length; i++) {
+ matchingInstances.addElement(instances[i]);
+ }
+ connectionPool.release(connector);
+ ObjectAdapter[] instanceArray = new ObjectAdapter[matchingInstances
+ .size()];
+ matchingInstances.copyInto(instanceArray);
+ return instanceArray;
+ }
+
+ private ObjectAdapter[] findByTitle(
+ final PersistenceQueryFindByTitle criteria) {
+ ObjectSpecification spec = criteria.getSpecification();
+ DatabaseConnector connector = connectionPool.acquire();
+ ObjectMapping mapper = objectMappingLookup.getMapping(spec, connector);
+
+ ObjectAdapter[] instances = mapper.getInstances(connector, spec,
+ criteria.getTitle());
+ connectionPool.release(connector);
+ return instances;
+ }
+
+ @Override
+ public ObjectAdapter getObject(final Oid oid, final ObjectSpecification hint) {
+ DatabaseConnector connection = connectionPool.acquire();
+ ObjectMapping mapper = objectMappingLookup.getMapping(hint, connection);
+ ObjectAdapter object = mapper.getObject(connection, oid, hint);
+ connectionPool.release(connection);
+ return object;
+ }
+
+ @Override
+ public Oid getOidForService(String name) {
+ DatabaseConnector connector = connectionPool.acquire();
+
+ StringBuffer sql = new StringBuffer();
+ sql.append("select ");
+ sql.append(Sql.identifier(PRIMARYKEY_COLUMN));
+ sql.append(" from ");
+ sql.append(Sql.identifier(TABLE_NAME));
+ sql.append(" where ");
+ sql.append(Sql.identifier(ID_COLUMN));
+ sql.append(" = ?");
+ // sql.append(Sql.escapeAndQuoteValue(name));
+ connector.addToQueryValues(name);
+
+ Results results = connector.select(sql.toString());
+ if (results.next()) {
+ int key = results.getInt(PRIMARYKEY_COLUMN);
+ connectionPool.release(connector);
+ return SqlOid.createPersistent(name, new IntegerPrimaryKey(key));
+ } else {
+ connectionPool.release(connector);
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasInstances(final ObjectSpecification spec) {
+ DatabaseConnector connection = connectionPool.acquire();
+ ObjectMapping mapper = objectMappingLookup.getMapping(spec, connection);
+ boolean hasInstances = mapper.hasInstances(connection, spec);
+ connectionPool.release(connection);
+ return hasInstances;
+ }
+
+ @Override
+ public boolean isFixturesInstalled() {
+ return isInitialized;
+ }
+
+ @Override
+ public void open() {
+ Sql.setMetaData(connectionPool.acquire().getMetaData());
+
+ DebugString debug = new DebugString();
+ connectionPool.debug(debug);
+ LOG.info("Database: " + debug);
+
+ objectMappingLookup.init();
+
+ DatabaseConnector connector = connectionPool.acquire();
+ isInitialized = connector.hasTable(Sql.identifier(TABLE_NAME));
+ if (!isInitialized) {
+ StringBuffer sql = new StringBuffer();
+ sql.append("create table ");
+ sql.append(Sql.identifier(TABLE_NAME));
+ sql.append(" (");
+ sql.append(Sql.identifier(PRIMARYKEY_COLUMN));
+ sql.append(" int, ");
+ sql.append(Sql.identifier(ID_COLUMN));
+ sql.append(" varchar(255)");
+ sql.append(")");
+ connector.update(sql.toString());
+ }
+ }
+
+ @Override
+ public String name() {
+ return "SQL Object Store";
+ }
+
+ @Override
+ public void registerService(final String name, final Oid oid) {
+ DatabaseConnector connector = connectionPool.acquire();
+ // String soid = ((SqlOid) oid).getPrimaryKey().stringValue();
+
+ StringBuffer sql = new StringBuffer();
+ sql.append("insert into ");
+ sql.append(Sql.identifier(TABLE_NAME));
+ sql.append(" (");
+ sql.append(Sql.identifier(PRIMARYKEY_COLUMN));
+ sql.append(", ");
+ sql.append(Sql.identifier(ID_COLUMN));
+ sql.append(") values (?,?)");
+ // sql.append(soid);
+ // sql.append(", ");
+ // sql.append(Sql.escapeAndQuoteValue(name));
+ // sql.append(")");
+
+ connector.addToQueryValues(((SqlOid) oid).getPrimaryKey()
+ .naturalValue());
+ connector.addToQueryValues(name);
+
+ connector.insert(sql.toString());
+ connectionPool.release(connector);
+ }
+
+ @Override
+ public void reset() {
+ }
+
+ @Override
+ public void resolveField(final ObjectAdapter object,
+ final ObjectAssociation field) {
+ if (field.isOneToManyAssociation()) {
+ DatabaseConnector connection = connectionPool.acquire();
+ ObjectSpecification spec = object.getSpecification();
+ ObjectMapping mapper = objectMappingLookup.getMapping(spec,
+ connection);
+ mapper.resolveCollection(connection, object, field);
+ connectionPool.release(connection);
+ } else {
+ resolveImmediately(field.get(object));
+ }
+ }
+
+ @Override
+ public void resolveImmediately(final ObjectAdapter object) {
+ DatabaseConnector connector = connectionPool.acquire();
+ ObjectMapping mapping = objectMappingLookup.getMapping(object,
+ connector);
+ mapping.resolve(connector, object);
+ connectionPool.release(connector);
+ }
+
+ public void setConnectionPool(final DatabaseConnectorPool connectionPool) {
+ this.connectionPool = connectionPool;
+ }
+
+ public void setMapperLookup(final ObjectMappingLookup mapperLookup) {
+ this.objectMappingLookup = mapperLookup;
+ }
+
+ @Override
+ public void close() {
+ objectMappingLookup.shutdown();
+ // DatabaseConnector connection = connectionPool.acquire();
+ // connection.update("SHUTDOWN");
+ connectionPool.shutdown();
+ }
+
+ @Override
+ public void startTransaction() {
+ }
}
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/StringPrimaryKey.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/StringPrimaryKey.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/StringPrimaryKey.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/StringPrimaryKey.java Sun Nov 14 19:38:08 2010
@@ -17,39 +17,47 @@
* under the License.
*/
-
package org.apache.isis.extensions.sql.objectstore;
public class StringPrimaryKey implements PrimaryKey {
- private static final long serialVersionUID = 1L;
- private final String primaryKey;
+ private static final long serialVersionUID = 1L;
+ private final String primaryKey;
- public StringPrimaryKey(final String primaryKey) {
- this.primaryKey = primaryKey;
- }
-
- public boolean equals(final Object obj) {
- if (obj == this) {
- return true;
- }
- if (obj instanceof StringPrimaryKey) {
- StringPrimaryKey o = ((StringPrimaryKey) obj);
- return primaryKey == o.primaryKey;
- }
- return false;
- }
-
- public int hashCode() {
- int hash = 17;
- hash = 37 * hash + primaryKey.hashCode();
- return hash;
- }
-
- public String stringValue() {
- return "" + primaryKey;
- }
-
- public String toString() {
- return "" + primaryKey;
- }
+ public StringPrimaryKey(final String primaryKey) {
+ this.primaryKey = primaryKey;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (obj instanceof StringPrimaryKey) {
+ StringPrimaryKey o = ((StringPrimaryKey) obj);
+ return primaryKey == o.primaryKey;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 17;
+ hash = 37 * hash + primaryKey.hashCode();
+ return hash;
+ }
+
+ @Override
+ public String stringValue() {
+ return "" + primaryKey;
+ }
+
+ @Override
+ public String toString() {
+ return "" + primaryKey;
+ }
+
+ @Override
+ public Object naturalValue() {
+ return stringValue();
+ }
}
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/TransientKey.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/TransientKey.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/TransientKey.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/TransientKey.java Sun Nov 14 19:38:08 2010
@@ -17,18 +17,23 @@
* under the License.
*/
-
package org.apache.isis.extensions.sql.objectstore;
public class TransientKey implements PrimaryKey {
- private static final long serialVersionUID = 1L;
- private long transientId;
+ private static final long serialVersionUID = 1L;
+ private final long transientId;
+
+ public TransientKey(final long id) {
+ transientId = id;
+ }
- public TransientKey(final long id) {
- transientId = id;
- }
+ @Override
+ public String stringValue() {
+ return "" + transientId;
+ }
- public String stringValue() {
- return "" + transientId;
- }
+ @Override
+ public Object naturalValue() {
+ return transientId;
+ }
}
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/VersionMapping.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/VersionMapping.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/VersionMapping.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/VersionMapping.java Sun Nov 14 19:38:08 2010
@@ -44,22 +44,21 @@ public class VersionMapping {
// TODO:KAM: here
public String insertValues(DatabaseConnector connector,
SerialNumberVersion version) {
- // String timestamp = new Timestamp(new Date().getTime()).toString();
- // return version.sequence() + ", '" + version.getUser() + "', '" +
- // timestamp + "'";
connector.addToQueryValues(version.getSequence());
connector.addToQueryValues(version.getUser());
connector.addToQueryValues(new Timestamp(new Date().getTime()));
return "?,?,?";
}
- public String whereClause(SerialNumberVersion version) {
- return versionColumn + " = " + version.getSequence();
+ public String whereClause(DatabaseConnector connector,
+ SerialNumberVersion version) {
+ connector.addToQueryValues(version.getSequence());
+ return versionColumn + " = ?";
}
public String updateAssigment(DatabaseConnector connector, long nextSequence) {
connector.addToQueryValues(nextSequence);
- return versionColumn + " = ?";// + nextSequence;
+ return versionColumn + " = ?";
}
public String appendSelectColumns() {
@@ -89,8 +88,10 @@ public class VersionMapping {
return sql.toString();
}
- public Object appendUpdateValues(long versionSequence) {
- return versionColumn + "=" + versionSequence;
+ public Object appendUpdateValues(DatabaseConnector connector,
+ long versionSequence) {
+ connector.addToQueryValues(versionSequence);
+ return versionColumn + "= ?";
}
public Version getLock(Results rs) {
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoCollectionMapper.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoCollectionMapper.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoCollectionMapper.java Sun Nov 14 19:38:08 2010
@@ -123,7 +123,7 @@ public class AutoCollectionMapper extend
sql.append("delete from ");
sql.append(tableName);
sql.append(" where ");
- idMapping.appendWhereClause(sql, parent.getOid());
+ idMapping.appendWhereClause(connector, sql, parent.getOid());
connector.update(sql.toString());
sql = new StringBuffer();
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoMapper.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoMapper.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/AutoMapper.java Sun Nov 14 19:38:08 2010
@@ -126,9 +126,9 @@ public class AutoMapper extends Abstract
final ObjectAdapter object) {
StringBuffer sql = new StringBuffer();
sql.append("delete from " + table + " where ");
- idMapping.appendWhereClause(sql, object.getOid());
+ idMapping.appendWhereClause(connector, sql, object.getOid());
sql.append(" and ");
- sql.append(versionMapping.whereClause((SerialNumberVersion) object
+ sql.append(versionMapping.whereClause(connector, (SerialNumberVersion) object
.getVersion()));
int updateCount = connector.update(sql.toString());
if (updateCount == 0) {
@@ -183,7 +183,7 @@ public class AutoMapper extends Abstract
final Oid oid, final ObjectSpecification hint) {
StringBuffer sql = createSelectStatement();
sql.append(" where ");
- idMapping.appendWhereClause(sql, oid);
+ idMapping.appendWhereClause(connector, sql, oid);
Results rs = connector.select(completeSelectStatement(sql));
if (rs.next()) {
return loadObject(connector, hint, rs);
@@ -290,7 +290,7 @@ public class AutoMapper extends Abstract
sql.append(",");
sql.append(versionMapping.appendSelectColumns());
sql.append(" from " + table + " where ");
- idMapping.appendWhereClause(sql, object.getOid());
+ idMapping.appendWhereClause(connector, sql, object.getOid());
Results rs = connector.select(sql.toString());
if (rs.next()) {
@@ -346,9 +346,9 @@ public class AutoMapper extends Abstract
sql.append(", ");
titleMapping.appendUpdateAssignment(connector, sql, object);
sql.append(" where ");
- idMapping.appendWhereClause(sql, object.getOid());
+ idMapping.appendWhereClause(connector, sql, object.getOid());
sql.append(" and ");
- sql.append(versionMapping.whereClause((SerialNumberVersion) object
+ sql.append(versionMapping.whereClause(connector, (SerialNumberVersion) object
.getVersion()));
int updateCount = connector.update(sql.toString());
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/CombinedCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/CombinedCollectionMapper.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/CombinedCollectionMapper.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/auto/CombinedCollectionMapper.java Sun Nov 14 19:38:08 2010
@@ -175,7 +175,7 @@ public class CombinedCollectionMapper ex
StringBuffer update = new StringBuffer(sql);
foreignKeyMapping.appendUpdateValues(connector, update, parent);
update.append(" where ");
- idMapping.appendWhereClause(update, element.getOid());
+ idMapping.appendWhereClause(connector, update, element.getOid());
connector.insert(update.toString());
}
}
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcConnector.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcConnector.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcConnector.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcConnector.java Sun Nov 14 19:38:08 2010
@@ -17,7 +17,6 @@
* under the License.
*/
-
package org.apache.isis.extensions.sql.objectstore.jdbc;
import java.sql.Connection;
@@ -39,281 +38,347 @@ import org.apache.isis.extensions.sql.ob
import org.apache.isis.runtime.context.IsisContext;
import org.apache.log4j.Logger;
-
public class JdbcConnector extends AbstractDatabaseConnector {
- private static final Logger LOG = Logger.getLogger(JdbcConnector.class);
- private Connection connection;
+ private static final Logger LOG = Logger.getLogger(JdbcConnector.class);
+ private Connection connection;
- public void close() {
- try {
- if (connection != null) {
- LOG.info("close");
- connection.close();
- }
- } catch (SQLException e) {
- throw new SqlObjectStoreException("Failed to close", e);
- }
- }
-
- public int count(final String sql) {
- LOG.debug("SQL: " + sql);
- PreparedStatement statement;
- try {
- statement = connection.prepareStatement(sql);
- ResultSet result = statement.executeQuery();
- result.next();
- int count = result.getInt(1);
- statement.close();
- return count;
- } catch (SQLException e) {
- throw new SqlObjectStoreException("Failed count", e);
- }
- }
-
- public void delete(final String sql) {
- update(sql);
- }
-
- public void open() {
- try {
- IsisConfiguration params = IsisContext.getConfiguration();
- String BASE = SqlObjectStore.BASE_NAME + ".jdbc.";
- String driver = params.getString(BASE + "driver");
- String url = params.getString(BASE + "connection");
- String user = params.getString(BASE + "user");
- String password = params.getString(BASE + "password");
-
- if (connection != null ) {
- throw new SqlObjectStoreException("Connection already established");
- }
-
- if (driver == null) {
- throw new SqlObjectStoreException("No driver specified for database connection");
- }
- if (url == null) {
- throw new SqlObjectStoreException("No connection URL specified to database");
- }
- if (user == null) {
- throw new SqlObjectStoreException("No user specified for database connection");
- }
- if (password == null) {
- throw new SqlObjectStoreException("No password specified for database connection");
- }
-
- Class.forName(driver);
- LOG.info("Connecting to " + url + " as " + user);
- connection = DriverManager.getConnection(url, user, password);
- if (connection == null) {
- throw new SqlObjectStoreException("No connection established to " + url);
- }
- } catch (SQLException e) {
- throw new SqlObjectStoreException("Failed to start", e);
- } catch (ClassNotFoundException e) {
- throw new SqlObjectStoreException("Could not find database driver", e);
- }
- }
-
- /*
- * 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());
- *
- * 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);
- *
- * 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]); }
- *
- * return new JdbcResults(statement); } catch (SQLException e) { throw new ObjectAdapterRuntimeException(e);
- * } }
- */
-
- public Results select(final String sql) {
- LOG.debug("SQL: " + sql);
- PreparedStatement statement;
- try {
- statement = connection.prepareStatement(sql);
- return new JdbcResults(statement.executeQuery());
- } catch (SQLException e) {
- throw new SqlObjectStoreException(e);
- }
- }
-
- public int update(final String sql) {
- LOG.debug("SQL: " + sql);
- PreparedStatement statement;
- try {
- statement = connection.prepareStatement(sql);
- if (queryValues.size() > 0){
- int i = 1;
- for (Object value : queryValues) {
- statement.setObject(i++, value);
- }
- }
- int updateCount = statement.executeUpdate();
-
- queryValues.clear();
-
- statement.close();
- return updateCount;
- } catch (SQLException e) {
- LOG.error("failed to execute " + sql, e);
- throw new SqlObjectStoreException("SQL error", e);
- }
- }
-
- public boolean hasTable(final String tableName) {
- try {
- ResultSet set = connection.getMetaData().getTables(null, null, tableName, null);
- if (set.next()) {
- LOG.debug("Found " + set.getString("TABLE_NAME"));
- set.close();
- return true;
- } else {
- set.close();
- return false;
- }
- } catch (SQLException e) {
- throw new SqlObjectStoreException(e);
- }
- }
-
- public boolean hasColumn(final String tableName, final String columnName) {
- try {
- ResultSet set = connection.getMetaData().getColumns(null, null, tableName, columnName);
- if (set.next()) {
- LOG.debug("Found " + set.getString("COLUMN_NAME") + " in " + set.getString("TABLE_NAME"));
- set.close();
- return true;
- } else {
- set.close();
- return false;
- }
- } catch (SQLException e) {
- throw new SqlObjectStoreException(e);
- }
- }
-
- public void insert(final String sql) {
- update(sql);
- }
-
- public void insert(final String sql, final Object oid) {
- LOG.debug("SQL: " + sql);
- PreparedStatement statement;
- try {
- statement = connection.prepareStatement(sql);
- statement.executeUpdate();
- /*
- * require 3.0 ResultSet rs = statement.getGeneratedKeys(); if(rs.next()) { int id = rs.getInt(1);
- * }
- */statement.close();
- } catch (SQLException e) {
- throw new SqlObjectStoreException("SQL error", e);
- }
- }
-
- public Connection getConnection() {
- return connection;
- }
-
- public void commit() {
- try {
- LOG.debug("commit");
- connection.commit();
- connection.setAutoCommit(true);
- } catch (SQLException e) {
- throw new SqlObjectStoreException("Commit error", e);
- }
- }
-
- public void begin() {
- try {
- LOG.debug("begin transaction");
- connection.setAutoCommit(false);
- queryValues.clear();
- } catch (SQLException e) {
- throw new SqlObjectStoreException("Rollback error", e);
- }
-
- }
-
-
- public void rollback() {
- try {
- LOG.debug("rollback");
- connection.rollback();
- connection.setAutoCommit(true);
- } catch (SQLException e) {
- throw new SqlObjectStoreException("Rollback error", e);
- }
- }
-
- public SqlMetaData getMetaData() {
- try {
- DatabaseMetaData metaData = connection.getMetaData();
- return new JdbcSqlMetaData(metaData);
- } catch (SQLException e) {
- throw new SqlObjectStoreException("Metadata error", e);
- }
- }
-
- public void debug(DebugString debug) {
- try {
- DatabaseMetaData metaData = connection.getMetaData();
- debug.appendln("Product", metaData.getDatabaseProductName() + " " + metaData.getDatabaseProductVersion());
- try {
- debug.appendln("Product Version", metaData.getDatabaseMajorVersion() + "." + metaData.getDatabaseMinorVersion());
- } catch (AbstractMethodError ignore) {}
- debug.appendln("Drive", metaData.getDriverName() + " " + metaData.getDriverVersion());
- debug.appendln("Driver Version", metaData.getDriverMajorVersion() + "." + metaData.getDriverMinorVersion());
- debug.appendln("Keywords", metaData.getSQLKeywords());
- debug.appendln("Date/Time functions", metaData.getTimeDateFunctions());
- debug.appendln("Date/Time functions", metaData.getTimeDateFunctions());
- debug.appendln("Mixed case identifiers", metaData.supportsMixedCaseIdentifiers());
- debug.appendln("Lower case identifiers", metaData.storesLowerCaseIdentifiers());
- debug.appendln("Lower case quoted", metaData.storesLowerCaseQuotedIdentifiers());
- debug.appendln("Mixed case identifiers", metaData.storesMixedCaseIdentifiers());
- debug.appendln("Mixed case quoted", metaData.storesMixedCaseQuotedIdentifiers());
- debug.appendln("Upper case identifiers", metaData.storesUpperCaseIdentifiers());
- debug.appendln("Upper case quoted", metaData.storesUpperCaseQuotedIdentifiers());
- } catch (SQLException e) {
- throw new SqlObjectStoreException("Metadata error", e);
- }
- }
-
- // TODO:KAM All insert/update call must add their values via this
- private List<Object> queryValues = new ArrayList<Object>();
- public String addToQueryValues(int i){
- queryValues.add(i);
- return "?";
- }
- public String addToQueryValues(String s){
- queryValues.add(s);
- return "?";
- }
- public String addToQueryValues(Object o){
- queryValues.add(o);
- return "?";
- }
+ @Override
+ public void close() {
+ try {
+ if (connection != null) {
+ LOG.info("close");
+ connection.close();
+ }
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("Failed to close", e);
+ }
+ }
+
+ @Override
+ public int count(final String sql) {
+ LOG.debug("SQL: " + sql);
+ PreparedStatement statement;
+ try {
+ statement = connection.prepareStatement(sql);
+ ResultSet result = statement.executeQuery();
+ result.next();
+ int count = result.getInt(1);
+ statement.close();
+ return count;
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("Failed count", e);
+ }
+ }
+
+ @Override
+ public void delete(final String sql) {
+ update(sql);
+ }
+
+ public void open() {
+ try {
+ IsisConfiguration params = IsisContext.getConfiguration();
+ String BASE = SqlObjectStore.BASE_NAME + ".jdbc.";
+ String driver = params.getString(BASE + "driver");
+ String url = params.getString(BASE + "connection");
+ String user = params.getString(BASE + "user");
+ String password = params.getString(BASE + "password");
+
+ if (connection != null) {
+ throw new SqlObjectStoreException(
+ "Connection already established");
+ }
+
+ if (driver == null) {
+ throw new SqlObjectStoreException(
+ "No driver specified for database connection");
+ }
+ if (url == null) {
+ throw new SqlObjectStoreException(
+ "No connection URL specified to database");
+ }
+ if (user == null) {
+ throw new SqlObjectStoreException(
+ "No user specified for database connection");
+ }
+ if (password == null) {
+ throw new SqlObjectStoreException(
+ "No password specified for database connection");
+ }
+
+ Class.forName(driver);
+ LOG.info("Connecting to " + url + " as " + user);
+ connection = DriverManager.getConnection(url, user, password);
+ if (connection == null) {
+ throw new SqlObjectStoreException(
+ "No connection established to " + url);
+ }
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("Failed to start", e);
+ } catch (ClassNotFoundException e) {
+ throw new SqlObjectStoreException("Could not find database driver",
+ e);
+ }
+ }
+
+ /*
+ * 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());
+ *
+ * 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);
+ *
+ * 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]); }
+ *
+ * return new JdbcResults(statement); } catch (SQLException e) { throw new
+ * ObjectAdapterRuntimeException(e); } }
+ */
+
+ @Override
+ public Results select(final String sql) {
+ LOG.debug("SQL: " + sql);
+ PreparedStatement statement;
+ try {
+ statement = connection.prepareStatement(sql);
+ addPreparedValues(statement);
+ return new JdbcResults(statement.executeQuery());
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException(e);
+ } finally {
+ clearPreparedValues();
+ }
+ }
+
+ @Override
+ public int update(final String sql) {
+ LOG.debug("SQL: " + sql);
+ PreparedStatement statement;
+ try {
+ statement = connection.prepareStatement(sql);
+ addPreparedValues(statement);
+ int updateCount = statement.executeUpdate();
+ statement.close();
+ return updateCount;
+ } catch (SQLException e) {
+ LOG.error("failed to execute " + sql, e);
+ throw new SqlObjectStoreException("SQL error", e);
+ } finally {
+ clearPreparedValues();
+ }
+ }
+
+ private void clearPreparedValues() {
+ queryValues.clear();
+ }
+
+ private void addPreparedValues(PreparedStatement statement)
+ throws SQLException {
+ if (queryValues.size() > 0) {
+ int i = 1;
+ for (Object value : queryValues) {
+ statement.setObject(i++, value);
+ }
+ }
+ }
+
+ @Override
+ public boolean hasTable(final String tableName) {
+ try {
+ ResultSet set = connection.getMetaData().getTables(null, null,
+ tableName, null);
+ if (set.next()) {
+ LOG.debug("Found " + set.getString("TABLE_NAME"));
+ set.close();
+ return true;
+ } else {
+ set.close();
+ return false;
+ }
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException(e);
+ }
+ }
+
+ @Override
+ public boolean hasColumn(final String tableName, final String columnName) {
+ try {
+ ResultSet set = connection.getMetaData().getColumns(null, null,
+ tableName, columnName);
+ if (set.next()) {
+ LOG.debug("Found " + set.getString("COLUMN_NAME") + " in "
+ + set.getString("TABLE_NAME"));
+ set.close();
+ return true;
+ } else {
+ set.close();
+ return false;
+ }
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException(e);
+ }
+ }
+
+ @Override
+ public void insert(final String sql) {
+ update(sql);
+ }
+
+ @Override
+ public void insert(final String sql, final Object oid) {
+ LOG.debug("SQL: " + sql);
+ PreparedStatement statement;
+ try {
+ statement = connection.prepareStatement(sql);
+ statement.executeUpdate();
+ /*
+ * require 3.0 ResultSet rs = statement.getGeneratedKeys();
+ * if(rs.next()) { int id = rs.getInt(1); }
+ */statement.close();
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("SQL error", e);
+ }
+ }
+
+ public Connection getConnection() {
+ return connection;
+ }
+
+ @Override
+ public void commit() {
+ try {
+ LOG.debug("commit");
+ connection.commit();
+ connection.setAutoCommit(true);
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("Commit error", e);
+ }
+ }
+
+ @Override
+ public void begin() {
+ try {
+ LOG.debug("begin transaction");
+ connection.setAutoCommit(false);
+ clearPreparedValues();
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("Rollback error", e);
+ }
+
+ }
+
+ @Override
+ public void rollback() {
+ try {
+ LOG.debug("rollback");
+ connection.rollback();
+ connection.setAutoCommit(true);
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("Rollback error", e);
+ }
+ }
+
+ @Override
+ public SqlMetaData getMetaData() {
+ try {
+ DatabaseMetaData metaData = connection.getMetaData();
+ return new JdbcSqlMetaData(metaData);
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("Metadata error", e);
+ }
+ }
+
+ @Override
+ public void debug(DebugString debug) {
+ try {
+ DatabaseMetaData metaData = connection.getMetaData();
+ debug.appendln("Product", metaData.getDatabaseProductName() + " "
+ + metaData.getDatabaseProductVersion());
+ try {
+ debug.appendln(
+ "Product Version",
+ metaData.getDatabaseMajorVersion() + "."
+ + metaData.getDatabaseMinorVersion());
+ } catch (AbstractMethodError ignore) {
+ }
+ debug.appendln(
+ "Drive",
+ metaData.getDriverName() + " "
+ + metaData.getDriverVersion());
+ debug.appendln("Driver Version", metaData.getDriverMajorVersion()
+ + "." + metaData.getDriverMinorVersion());
+ debug.appendln("Keywords", metaData.getSQLKeywords());
+ debug.appendln("Date/Time functions",
+ metaData.getTimeDateFunctions());
+ debug.appendln("Date/Time functions",
+ metaData.getTimeDateFunctions());
+ debug.appendln("Mixed case identifiers",
+ metaData.supportsMixedCaseIdentifiers());
+ debug.appendln("Lower case identifiers",
+ metaData.storesLowerCaseIdentifiers());
+ debug.appendln("Lower case quoted",
+ metaData.storesLowerCaseQuotedIdentifiers());
+ debug.appendln("Mixed case identifiers",
+ metaData.storesMixedCaseIdentifiers());
+ debug.appendln("Mixed case quoted",
+ metaData.storesMixedCaseQuotedIdentifiers());
+ debug.appendln("Upper case identifiers",
+ metaData.storesUpperCaseIdentifiers());
+ debug.appendln("Upper case quoted",
+ metaData.storesUpperCaseQuotedIdentifiers());
+ } catch (SQLException e) {
+ throw new SqlObjectStoreException("Metadata error", e);
+ }
+ }
+
+ // TODO:KAM All insert/update call must add their values via this
+ private final List<Object> queryValues = new ArrayList<Object>();
+
+ @Override
+ public String addToQueryValues(int i) {
+ queryValues.add(i);
+ return "?";
+ }
+
+ @Override
+ public String addToQueryValues(String s) {
+ queryValues.add(s);
+ return "?";
+ }
+
+ @Override
+ public String addToQueryValues(Object o) {
+ queryValues.add(o);
+ return "?";
+ }
}
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceFieldMapping.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceFieldMapping.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceFieldMapping.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceFieldMapping.java Sun Nov 14 19:38:08 2010
@@ -43,7 +43,7 @@ public class JdbcObjectReferenceFieldMap
public void appendWhereClause(DatabaseConnector connector, StringBuffer sql, ObjectAdapter object) {
ObjectAdapter fieldValue = field.get(object);
- appendWhereClause(sql, fieldValue.getOid());
+ appendWhereClause(connector, sql, fieldValue.getOid());
}
public JdbcObjectReferenceFieldMapping(ObjectAssociation field) {
Modified: incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceMapping.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceMapping.java?rev=1035054&r1=1035053&r2=1035054&view=diff
==============================================================================
--- incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceMapping.java (original)
+++ incubator/isis/trunk/alternatives/objectstore/sql/persistor/src/main/java/org/apache/isis/extensions/sql/objectstore/jdbc/JdbcObjectReferenceMapping.java Sun Nov 14 19:38:08 2010
@@ -17,7 +17,6 @@
* under the License.
*/
-
package org.apache.isis.extensions.sql.objectstore.jdbc;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -30,39 +29,42 @@ import org.apache.isis.extensions.sql.ob
import org.apache.isis.extensions.sql.objectstore.SqlObjectStoreException;
import org.apache.isis.extensions.sql.objectstore.mapping.ObjectReferenceMapping;
-
-public class JdbcObjectReferenceMapping extends IdMappingAbstract implements ObjectReferenceMapping {
- private ObjectSpecification specification;
-
- public JdbcObjectReferenceMapping(String columnName, ObjectSpecification specification) {
- this.specification = specification;
- String idColumn = Sql.sqlName("fk_" + columnName);
- setColumn(idColumn);
- }
-
- public void appendUpdateValues(DatabaseConnector connector, StringBuffer sql, ObjectAdapter object) {
- sql.append(getColumn());
- if (object == null) {
- sql.append("= NULL ");
- } else {
- sql.append("=");
- sql.append(primaryKey(object.getOid()));
- }
- }
-
- public ObjectAdapter initializeField(Results rs) {
- Oid oid = recreateOid(rs, specification);
- if (oid != null) {
- if (specification.isAbstract()) {
- throw new SqlObjectStoreException("NOT DEALING WITH POLYMORPHIC ASSOCIATIONS");
- } else {
- return getAdapter(specification, oid);
- }
- } else {
- return null;
- }
- }
-
+public class JdbcObjectReferenceMapping extends IdMappingAbstract implements
+ ObjectReferenceMapping {
+ private final ObjectSpecification specification;
+
+ public JdbcObjectReferenceMapping(String columnName,
+ ObjectSpecification specification) {
+ this.specification = specification;
+ String idColumn = Sql.sqlName("fk_" + columnName);
+ setColumn(idColumn);
+ }
+
+ @Override
+ public void appendUpdateValues(DatabaseConnector connector,
+ StringBuffer sql, ObjectAdapter object) {
+ sql.append(getColumn());
+ if (object == null) {
+ sql.append("= NULL ");
+ } else {
+ sql.append("= ?");
+ // sql.append(primaryKey(object.getOid()));
+ connector.addToQueryValues(primaryKeyAsObject(object.getOid()));
+ }
+ }
+
+ public ObjectAdapter initializeField(Results rs) {
+ Oid oid = recreateOid(rs, specification);
+ if (oid != null) {
+ if (specification.isAbstract()) {
+ throw new SqlObjectStoreException(
+ "NOT DEALING WITH POLYMORPHIC ASSOCIATIONS");
+ } else {
+ return getAdapter(specification, oid);
+ }
+ } else {
+ return null;
+ }
+ }
}
-