You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by bo...@apache.org on 2009/09/25 01:36:35 UTC
svn commit: r818661 - in
/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel:
HibernateDao.java ProcessDaoImpl.java ProcessInstanceDaoImpl.java
hobj/HMessageExchange.java
Author: boisvert
Date: Thu Sep 24 23:36:34 2009
New Revision: 818661
URL: http://svn.apache.org/viewvc?rev=818661&view=rev
Log:
-All instance data is now properly cleaned up when instance is deleted
-Fix issue where MessageExchangeProperty deletion would fail on some databases
-deleteByIds/deleteByColumn now delete in batch to avoid overloading the IN operator
Modified:
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java
ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessageExchange.java
Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java?rev=818661&r1=818660&r2=818661&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/HibernateDao.java Thu Sep 24 23:36:34 2009
@@ -95,15 +95,27 @@
@SuppressWarnings("unchecked")
protected void deleteByIds(Class entity, List<Long> ids) {
- if( ids != null && ids.size() > 0 ) {
- StringBuffer buf = new StringBuffer();
- buf.append("delete from ");
- buf.append(entity.getName());
- buf.append(" as e where e.id in(:ids)");
+ deleteByColumn(entity, "id", ids);
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void deleteByColumn(Class entity, String column, List<Long> values) {
+ if( values != null && values.size() > 0 ) {
+ final String delete = "delete from "+entity.getName()+" as e where e."+column+" in (:values)";
+
+ // some databases don't like long lists of values with IN operator
+ // so we delete in batches. Oracle 9i, for instance, doesn't support
+ // more than 1000 -- we opt to be conservative.
+ final int batchSize = 100;
- Query query = getSession().createQuery(buf.toString());
- query.setParameterList("ids", ids);
- query.executeUpdate();
+ int index = 0;
+ while (index < values.size()) {
+ List<Long> subList = values.subList(index, Math.min(index+batchSize, values.size()));
+ Query query = getSession().createQuery(delete);
+ query.setParameterList("values", subList);
+ query.executeUpdate();
+ index += batchSize;
+ }
}
}
}
Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java?rev=818661&r1=818660&r2=818661&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessDaoImpl.java Thu Sep 24 23:36:34 2009
@@ -239,10 +239,11 @@
deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_MESSAGE_LDATA_IDS_BY_INSTANCES_1).setParameterList("instances", instances).list());
deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_MESSAGE_LDATA_IDS_BY_INSTANCES_2).setParameterList("instances", instances).list());
deleteByIds(HMessage.class, getSession().getNamedQuery(HMessage.SELECT_MESSAGE_IDS_BY_INSTANCES).setParameterList("instances", instances).list());
- deleteByIds(HMessageExchangeProperty.class, getSession().getNamedQuery(HMessageExchangeProperty.SELECT_MEX_PROPS_IDS_BY_INSTANCES).setParameterList("instances", instances).list());
deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_MEX_LDATA_IDS_BY_INSTANCES_1).setParameterList("instances", instances).list());
deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_MEX_LDATA_IDS_BY_INSTANCES_2).setParameterList("instances", instances).list());
- deleteByIds(HMessageExchange.class, getSession().getNamedQuery(HMessageExchange.SELECT_MEX_IDS_BY_INSTANCES).setParameterList("instances", instances).list());
+ List<Long> mex = getSession().getNamedQuery(HMessageExchange.SELECT_MEX_IDS_BY_INSTANCES).setParameterList("instances", instances).list();
+ deleteByColumn(HMessageExchangeProperty.class, "mex.id", mex);
+ deleteByIds(HMessageExchange.class, mex);
}
@SuppressWarnings("unchecked")
Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java?rev=818661&r1=818660&r2=818661&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/ProcessInstanceDaoImpl.java Thu Sep 24 23:36:34 2009
@@ -388,17 +388,19 @@
@SuppressWarnings("unchecked")
private void deleteMessages(HProcessInstance[] instances) {
// there are chances that some unmatched messages are still there
- deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_UNMATCHED_MESSAGE_LDATA_IDS_BY_INSTANCES_1).setParameterList("instances", instances).list());
- deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_UNMATCHED_MESSAGE_LDATA_IDS_BY_INSTANCES_2).setParameterList("instances", instances).list());
+ deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_MESSAGE_LDATA_IDS_BY_INSTANCES_1).setParameterList("instances", instances).list());
+ deleteByIds(HLargeData.class, getSession().getNamedQuery(HLargeData.SELECT_MESSAGE_LDATA_IDS_BY_INSTANCES_2).setParameterList("instances", instances).list());
+
+ deleteByIds(HMessage.class, getSession().getNamedQuery(HMessage.SELECT_MESSAGE_IDS_BY_INSTANCES).setParameterList("instances", instances).list());
- Collection unmatchedMex = getSession().getNamedQuery(HMessageExchange.SELECT_UNMATCHED_MEX_BY_INSTANCES).setParameterList("instances", instances).list();
- if( !unmatchedMex.isEmpty() ) {
- getSession().delete(unmatchedMex);
- }
deleteByIds(HCorrelatorMessage.class, getSession().getNamedQuery(HCorrelatorMessage.SELECT_CORMESSAGE_IDS_BY_INSTANCES).setParameterList("instances", instances).list());
deleteByIds(HCorrelatorSelector.class, getSession().getNamedQuery(HCorrelatorSelector.SELECT_MESSAGE_ROUTE_IDS_BY_INSTANCES).setParameterList("instances", instances).list());
+
+ List<Long> mex = getSession().getNamedQuery(HMessageExchange.SELECT_MEX_IDS_BY_INSTANCES).setParameterList("instances", instances).list();
+ deleteByColumn(HMessageExchangeProperty.class, "mex.id", mex);
+ deleteByIds(HMessageExchange.class, mex);
}
-
+
@SuppressWarnings("unchecked")
private void deleteCorrelations(HProcessInstance[] instances) {
deleteByIds(HCorrelationProperty.class, getSession().getNamedQuery(HCorrelationProperty.SELECT_CORPROP_IDS_BY_INSTANCES).setParameterList("instances", instances).list());
Modified: ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessageExchange.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessageExchange.java?rev=818661&r1=818660&r2=818661&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessageExchange.java (original)
+++ ode/branches/APACHE_ODE_1.X/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessageExchange.java Thu Sep 24 23:36:34 2009
@@ -305,8 +305,7 @@
}
/**
- * @hibernate.map name="properties" table="BPEL_MEX_PROPS" lazy="true"
- * cascade="delete"
+ * @hibernate.map name="properties" table="BPEL_MEX_PROPS" lazy="true" cascade="delete"
* @hibernate.collection-key name="mex" column="MEX" foreign-key="none"
* @hibernate.collection-index column="NAME" type="string"
* @hibernate.collection-element column="VALUE" type="string" length="8000"