diff --git a/modules/activiti-engine/pom.xml b/modules/activiti-engine/pom.xml
index 033dbef2d93aca817f9dfd1c0fd51810de73155f..d0ad37d3b6b636f81711a251cba3e8262f98e2b9 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 df54adb05bec2e668442457847f956a065615310..077bb21e5bb90c7c649cac0f22e14af6dc9689aa 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 0000000000000000000000000000000000000000..d293da287021ff03888960f2d3f16f9b6f27a35c
--- /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 2225c2379bb5cfdf4eef589e8448ab60991a7ab4..cf426976da24d1ae031c532944695e03f53e2aba 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 0000000000000000000000000000000000000000..f02bebdf820ccb0abf3aa3155c3c594e0c609f63
--- /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 0000000000000000000000000000000000000000..4063de4fa60c5427492bbf12b8b3fb10df10f4d9
--- /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 0000000000000000000000000000000000000000..a1f434496ec7b4f33d004e101c5bf59064d9809c
--- /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 0000000000000000000000000000000000000000..b1af158f72ef2337ae714b8c204d3c60183daab3
--- /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 143d49f1564a6fc6e802331a0ebb87f37d28eebd..e2949c07ac18d76cedfd3df0be9781ee76c394fd 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 613cedb69dc31f54467a88ad27567f283e4a3803..22ed8750dc7b69c1ebe819ccc2c2c48f60284187 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