From f71bae8b69d5c76241a5b5f1c8cde1085f6ebbb1 Mon Sep 17 00:00:00 2001 From: cmuelder Date: Thu, 30 Sep 2010 21:20:58 +0000 Subject: [PATCH] ACT-187: fixed postgres scripts (postgres 8.4) --- modules/activiti-engine/pom.xml | 481 +++++++++--------- .../engine/impl/db/DbManagementSession.java | 13 + .../engine/impl/db/DbMetaDataHandler.java | 27 + .../engine/impl/db/DbSqlSessionFactory.java | 8 + .../impl/db/PostgresDbMetaDataHandler.java | 51 ++ .../engine/impl/db/StdDbMetaDataHandler.java | 34 ++ .../engine/impl/db/TableMetaDataCache.java | 23 + .../impl/db/TableMetaDataCacheHandler.java | 41 ++ .../activiti/db/ibatis/repository.mapping.xml | 18 + .../activiti/db/ibatis/variable.mapping.xml | 35 +- 10 files changed, 486 insertions(+), 245 deletions(-) create mode 100644 modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbMetaDataHandler.java create mode 100644 modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/PostgresDbMetaDataHandler.java create mode 100644 modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/StdDbMetaDataHandler.java create mode 100644 modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/TableMetaDataCache.java create mode 100644 modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/TableMetaDataCacheHandler.java diff --git a/modules/activiti-engine/pom.xml b/modules/activiti-engine/pom.xml index 033dbef2d9..d0ad37d3b6 100644 --- a/modules/activiti-engine/pom.xml +++ b/modules/activiti-engine/pom.xml @@ -1,252 +1,247 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - 4.0.0 + 4.0.0 - Activiti - Engine - org.activiti - activiti-engine + Activiti - Engine + org.activiti + activiti-engine - - org.activiti - activiti-root - ../.. - 5.0.rc1-SNAPSHOT - + + org.activiti + activiti-root + ../.. + 5.0.rc1-SNAPSHOT + - - - org.activiti - activiti-pvm - - - org.mybatis - mybatis - - - javax.el - el-api - - - de.odysseus.juel - juel-impl - - - org.codehaus.groovy - groovy-all - - - junit - junit - provided - - - org.apache.ant - ant - provided - - - com.h2database - h2 - test - - - org.mockito - mockito-core - test - - - - org.livetribe - livetribe-jsr223 - - - com.sun.xml.bind - jaxb-impl - - - wsdl4j - wsdl4j - - - javax.xml - jaxb-api - - - com.sun.xml.bind - jaxb-xjc - - - - - org.apache.commons - commons-email - - - org.subethamail - subethasmtp-wiser - test - - - - xerces - xercesImpl - - - - - - alfresco - http://maven.alfresco.com/nexus/content/groups/public - - - - + + + org.activiti + activiti-pvm + + + org.mybatis + mybatis + + + javax.el + el-api + + + de.odysseus.juel + juel-impl + + + org.codehaus.groovy + groovy-all + + + junit + junit + provided + + + org.apache.ant + ant + provided + + + com.h2database + h2 + test + + + org.mockito + mockito-core + test + + + + org.livetribe + livetribe-jsr223 + + + com.sun.xml.bind + jaxb-impl + + + wsdl4j + wsdl4j + + + javax.xml + jaxb-api + + + com.sun.xml.bind + jaxb-xjc + - - - checkspring - - true - - - - distro - - - - org.apache.maven.plugins - maven-source-plugin - 2.1.1 - - - attach-sources - package - - jar-no-fork - - - - - - - - - - - database - - - database - - - - - mysql - mysql-connector-java - 5.1.6 - test - - - postgresql - postgresql - 8.4-701.jdbc4 - - - - - - maven-antrun-plugin - - 1.4 - - - database-test-create-schema - process-test-classes - - run - - - - - - - - - - - - - - - - database-test-drop-schema - prepare-package - - run - - - - - - - - - - - - - - - - - - - oracle - - - database - oracle - - - - - com.oracle.jdbc - ojdbc5 - 11.2.0.1.0 - test - - - - + + + org.apache.commons + commons-email + + + org.subethamail + subethasmtp-wiser + test + - - - - org.apache.maven.plugins - maven-javadoc-plugin - - org.activiti.impl*,org.activiti.engine.impl* - - - - + + xerces + xercesImpl + + + + + + + alfresco + http://maven.alfresco.com/nexus/content/groups/public + + + + + + + + checkspring + + true + + + + distro + + + + org.apache.maven.plugins + maven-source-plugin + 2.1.1 + + + attach-sources + package + + jar-no-fork + + + + + + + + + + + database + + + database + + + + + mysql + mysql-connector-java + 5.1.6 + test + + + postgresql + postgresql + 8.4-701.jdbc4 + + + + + + maven-antrun-plugin + + 1.4 + + + database-test-create-schema + process-test-classes + + run + + + + + + + + + + + + + + + + database-test-drop-schema + prepare-package + + run + + + + + + + + + + + + + + + + + + + oracle + + + database + oracle + + + + + com.oracle.jdbc + ojdbc5 + 11.2.0.1.0 + test + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + org.activiti.impl*,org.activiti.engine.impl* + + + + diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbManagementSession.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbManagementSession.java index df54adb05b..077bb21e5b 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbManagementSession.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbManagementSession.java @@ -109,12 +109,25 @@ public class DbManagementSession implements ManagementSession, Session { .getSqlSession() .getConnection() .getMetaData(); + DbMetaDataHandler databaseMetaDataHandler = TableMetaDataCacheHandler.getInstance().getDatabaseHandler(metaData); + TableMetaData resultCached = null; + if( (resultCached = databaseMetaDataHandler.getFromCache(tableName)) != null) + { + return resultCached; + } + else + { + tableName = databaseMetaDataHandler.handleTableName(tableName); + } ResultSet resultSet = metaData.getColumns(null, null, tableName, null); while(resultSet.next()) { String name = resultSet.getString("COLUMN_NAME"); String type = resultSet.getString("TYPE_NAME"); result.addColumnMetaData(name, type); } + + databaseMetaDataHandler.addToCache(result); + } catch (SQLException e) { throw new ActivitiException("Could not retrieve database metadata: " + e.getMessage()); } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbMetaDataHandler.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbMetaDataHandler.java new file mode 100644 index 0000000000..d293da2870 --- /dev/null +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbMetaDataHandler.java @@ -0,0 +1,27 @@ +/* Licensed 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.activiti.engine.impl.db; + +import org.activiti.engine.management.TableMetaData; +/** + * @author Christian Mülder + */ +public interface DbMetaDataHandler { + + public String handleTableName(String table); + + public void addToCache(TableMetaData metaData); + + public TableMetaData getFromCache(String tableName); + +} diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbSqlSessionFactory.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbSqlSessionFactory.java index 2225c2379b..cf426976da 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbSqlSessionFactory.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/DbSqlSessionFactory.java @@ -61,12 +61,20 @@ public class DbSqlSessionFactory implements SessionFactory, ProcessEngineConfigu protected static final Map> databaseSpecificStatements = new HashMap>(); static { + //mysql specific addDatabaseSpecificStatement("mysql", "selectTaskByQueryCriteria", "selectTaskByQueryCriteria_mysql"); addDatabaseSpecificStatement("mysql", "selectNextJobsToExecute", "selectNextJobsToExecute_mysql"); addDatabaseSpecificStatement("mysql", "selectProcessDefinitionsByQueryCriteria", "selectProcessDefinitionsByQueryCriteria_mysql"); addDatabaseSpecificStatement("mysql", "selectProcessDefinitionCountByQueryCriteria", "selectProcessDefinitionCountByQueryCriteria_mysql"); addDatabaseSpecificStatement("mysql", "selectDeploymentsByQueryCriteria", "selectDeploymentsByQueryCriteria_mysql"); addDatabaseSpecificStatement("mysql", "selectDeploymentCountByQueryCriteria", "selectDeploymentCountByQueryCriteria_mysql"); + + //postgres specific + addDatabaseSpecificStatement("postgres", "insertByteArray", "insertByteArray_postgres"); + addDatabaseSpecificStatement("postgres", "updateByteArray", "updateByteArray_postgres"); + addDatabaseSpecificStatement("postgres", "selectByteArrayById", "selectByteArrayById_postgres"); + addDatabaseSpecificStatement("postgres", "selectResourceByDeploymentIdAndResourceName", "selectResourceByDeploymentIdAndResourceName_postgres"); + addDatabaseSpecificStatement("postgres", "selectResourcesByDeploymentId", "selectResourcesByDeploymentId_postgres"); } protected String databaseName; diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/PostgresDbMetaDataHandler.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/PostgresDbMetaDataHandler.java new file mode 100644 index 0000000000..f02bebdf82 --- /dev/null +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/PostgresDbMetaDataHandler.java @@ -0,0 +1,51 @@ +/* Licensed 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.activiti.engine.impl.db; + +import java.util.ArrayList; +import java.util.List; + +import org.activiti.engine.management.TableMetaData; +/** + * @author Christian Mülder + */ +public class PostgresDbMetaDataHandler extends StdDbMetaDataHandler implements DbMetaDataHandler { + + @Override + public void addToCache(TableMetaData metaData) { + toUpperCase(metaData); + super.addToCache(metaData); + } + + private void toUpperCase(TableMetaData metaData) { + List list = new ArrayList(); + for(String columnNames : metaData.getColumnNames()) + { + list.add(columnNames.toUpperCase()); + } + metaData.setColumnNames(list); + + list = new ArrayList(); + for(String columnTypes : metaData.getColumnTypes()) + { + list.add(columnTypes.toUpperCase()); + } + metaData.setColumnTypes(list); + } + + @Override + public String handleTableName(String table) { + return table.toLowerCase(); + } + +} diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/StdDbMetaDataHandler.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/StdDbMetaDataHandler.java new file mode 100644 index 0000000000..4063de4fa6 --- /dev/null +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/StdDbMetaDataHandler.java @@ -0,0 +1,34 @@ +/* Licensed 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.activiti.engine.impl.db; + +import org.activiti.engine.management.TableMetaData; +/** + * @author Christian Mülder + */ +public class StdDbMetaDataHandler implements DbMetaDataHandler { + + public void addToCache(TableMetaData metaData) { + TableMetaDataCacheHandler.getInstance().getMetaDataCache().put(metaData.getTableName(), metaData); + } + + public TableMetaData getFromCache(String tableName) { + return TableMetaDataCacheHandler.getInstance().getMetaDataCache().get(tableName); + } + + + public String handleTableName(String table) { + return table; + } + +} diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/TableMetaDataCache.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/TableMetaDataCache.java new file mode 100644 index 0000000000..a1f434496e --- /dev/null +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/TableMetaDataCache.java @@ -0,0 +1,23 @@ +/* Licensed 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.activiti.engine.impl.db; + +import java.util.HashMap; + +import org.activiti.engine.management.TableMetaData; +/** + * @author Christian Mülder + */ +public class TableMetaDataCache extends HashMap { + +} diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/TableMetaDataCacheHandler.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/TableMetaDataCacheHandler.java new file mode 100644 index 0000000000..b1af158f72 --- /dev/null +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/db/TableMetaDataCacheHandler.java @@ -0,0 +1,41 @@ +/* Licensed 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.activiti.engine.impl.db; + +import java.sql.DatabaseMetaData; +import java.sql.SQLException; + +/** + * @author Christian Mülder + */ +public class TableMetaDataCacheHandler { + + private static TableMetaDataCacheHandler instance = new TableMetaDataCacheHandler(); + private TableMetaDataCache cache = new TableMetaDataCache(); + + public static TableMetaDataCacheHandler getInstance() { + return instance; + } + + public DbMetaDataHandler getDatabaseHandler(DatabaseMetaData metaData) throws SQLException + { + if(metaData.getDatabaseProductName().equalsIgnoreCase("postgresql")) + return new PostgresDbMetaDataHandler(); + else + return new StdDbMetaDataHandler(); + } + + public TableMetaDataCache getMetaDataCache() { + return cache; + } +} diff --git a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/repository.mapping.xml b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/repository.mapping.xml index 143d49f156..e2949c07ac 100644 --- a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/repository.mapping.xml +++ b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/repository.mapping.xml @@ -250,4 +250,22 @@ select distinct count(D.ID_) + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/variable.mapping.xml b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/variable.mapping.xml index 613cedb69d..22ed8750dc 100644 --- a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/variable.mapping.xml +++ b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/variable.mapping.xml @@ -111,7 +111,7 @@ delete from ACT_GE_BYTEARRAY where DEPLOYMENT_ID_ = #{id} - + delete from ACT_GE_BYTEARRAY where ID_ = #{id} @@ -122,7 +122,7 @@ - + @@ -145,4 +145,35 @@ AND NAME_ = #{resourceName} + + + + + + + + + + + + update ACT_GE_BYTEARRAY + set + REV_ = #{revisionNext, jdbcType=INTEGER}, + BYTES_ = #{bytes, jdbcType=BINARY} + where ID_ = #{id} + and REV_ = #{revision, jdbcType=INTEGER} + + + + insert into ACT_GE_BYTEARRAY(ID_, REV_, NAME_, BYTES_, DEPLOYMENT_ID_) + values ( + #{id, jdbcType=VARCHAR}, + 1, + #{name, jdbcType=VARCHAR}, + #{bytes, jdbcType=BINARY}, + #{deploymentId, jdbcType=VARCHAR} + ) + \ No newline at end of file -- GitLab