← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 1353: Improved performance of integriy checks by using queries.

 

Merge authors:
  Lars Helge Øverland (larshelge)
------------------------------------------------------------
revno: 1353 [merge]
committer: Lars Helge Oeverland <larshelge@xxxxxxxxx>
branch nick: trunk
timestamp: Wed 2010-01-27 21:55:17 +0100
message:
  Improved performance of integriy checks by using queries.
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementService.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementStore.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/IndicatorService.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/IndicatorStore.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitStore.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java
  dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/dataintegrity/DefaultDataIntegrityService.java
  dhis-2/dhis-services/dhis-service-administration/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/DefaultDataElementService.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateDataElementStore.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/DefaultIndicatorService.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/hibernate/HibernateIndicatorStore.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java
  dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/about/changeLog.vm


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementService.java	2010-01-25 15:21:02 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementService.java	2010-01-27 11:51:54 +0000
@@ -267,6 +267,36 @@
      */
     Collection<DataElement> getDataElementsByGroupSets( Set<DataElementGroupSet> groupSets );
 
+    /**
+     * Returns all DataElements which are not member of any DataElementGroups.
+     * 
+     * @return all DataElements which are not member of any DataElementGroups.
+     */
+    Collection<DataElement> getDataElementsWithoutGroups();
+    
+    /**
+     * Returns all DataElements which are not assigned to any DataSets.
+     * 
+     * @return all DataElements which are not assigned to any DataSets.
+     */
+    Collection<DataElement> getDataElementsWithoutDataSets();
+    
+    /**
+     * Checks whether a DataElement with the given identifier exists.
+     * 
+     * @param id the DataElement identifier.
+     * @return true or false.
+     */
+    boolean dataElementExists( int id );
+
+    /**
+     * Checks whether a DataElementCategoryOptionCombo with the given identifier exists.
+     * 
+     * @param id the DataElementCategoryOptionCombo identifier.
+     * @return true or false.
+     */
+    boolean dataElementCategoryOptionComboExists( int id );
+
     // -------------------------------------------------------------------------
     // Calculated Data Elements
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementStore.java	2010-01-25 07:24:27 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementStore.java	2010-01-27 11:51:54 +0000
@@ -204,6 +204,36 @@
      * @return a collection of all DataElement
      */
     Collection<DataElement> getDataElementsByZeroIsSignificant( boolean zeroIsSignificant );
+    
+    /**
+     * Returns all DataElements which are not member of any DataElementGroups.
+     * 
+     * @return all DataElements which are not member of any DataElementGroups.
+     */
+    Collection<DataElement> getDataElementsWithoutGroups();
+    
+    /**
+     * Returns all DataElements which are not assigned to any DataSets.
+     * 
+     * @return all DataElements which are not assigned to any DataSets.
+     */
+    Collection<DataElement> getDataElementsWithoutDataSets();
+    
+    /**
+     * Checks whether a DataElement with the given identifier exists.
+     * 
+     * @param id the DataElement identifier.
+     * @return true or false.
+     */
+    boolean dataElementExists( int id );
+    
+    /**
+     * Checks whether a DataElementCategoryOptionCombo with the given identifier exists.
+     * 
+     * @param id the DataElementCategoryOptionCombo identifier.
+     * @return true or false.
+     */
+    boolean dataElementCategoryOptionComboExists( int id );
 
     // -------------------------------------------------------------------------
     // Calculated Data Elements

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/IndicatorService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/IndicatorService.java	2009-11-07 13:03:26 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/IndicatorService.java	2010-01-27 11:51:54 +0000
@@ -64,6 +64,8 @@
     Indicator getIndicatorByCode( String code );
     
     Collection<Indicator> getIndicatorsWithGroupSets();
+    
+    Collection<Indicator> getIndicatorsWithoutGroups();
 
     // -------------------------------------------------------------------------
     // IndicatorType

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/IndicatorStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/IndicatorStore.java	2009-11-07 13:03:26 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/indicator/IndicatorStore.java	2010-01-27 11:51:54 +0000
@@ -58,4 +58,6 @@
     Indicator getIndicatorByCode( String code );
     
     Collection<Indicator> getIndicatorsWithGroupSets();
+    
+    Collection<Indicator> getIndicatorsWithoutGroups();
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java	2009-11-24 14:30:46 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java	2010-01-27 11:51:54 +0000
@@ -224,6 +224,13 @@
      * @param parentId the identifier of the parent OrganisationUnit.
      */
     void updateOrganisationUnitParent( int organisationUnitId, int parentId );
+
+    /**
+     * Returns all OrganisationUnits which are not a member of any OrganisationUnitGroups.
+     * 
+     * @return all OrganisationUnits which are not a member of any OrganisationUnitGroups.
+     */
+    Collection<OrganisationUnit> getOrganisationUnitsWithoutGroups();
     
     // -------------------------------------------------------------------------
     // OrganisationUnitHierarchy

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitStore.java	2010-01-19 21:48:28 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitStore.java	2010-01-27 11:51:54 +0000
@@ -94,6 +94,13 @@
      */
     void updateOrganisationUnitParent( int organisationUnitId, int parentId );
     
+    /**
+     * Returns all OrganisationUnits which are not a member of any OrganisationUnitGroups.
+     * 
+     * @return all OrganisationUnits which are not a member of any OrganisationUnitGroups.
+     */
+    Collection<OrganisationUnit> getOrganisationUnitsWithoutGroups();
+    
     // -------------------------------------------------------------------------
     // OrganisationUnitHierarchy
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java	2010-01-20 11:47:21 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTable.java	2010-01-27 20:55:17 +0000
@@ -86,7 +86,8 @@
     
     public static final String REGRESSION_COLUMN_PREFIX = "regression_";
     
-    private static final String EMPTY_REPLACEMENT = "_";    
+    private static final String EMPTY_REPLACEMENT = "_";
+    private static final String EMPTY = "";    
     private static final String TABLE_PREFIX = "_report_";
     private static final String REGEX_NUMERIC = "([0-9]*)";
 
@@ -958,7 +959,7 @@
             string = string.toLowerCase();
             
             string = string.replaceAll( " ", EMPTY_REPLACEMENT );
-            string = string.replaceAll( "-", EMPTY_REPLACEMENT );
+            string = string.replaceAll( "-", EMPTY );
             string = string.replaceAll( "<", EMPTY_REPLACEMENT + "lt" + EMPTY_REPLACEMENT );
             string = string.replaceAll( ">", EMPTY_REPLACEMENT + "gt" + EMPTY_REPLACEMENT );
             

=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/dataintegrity/DefaultDataIntegrityService.java'
--- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/dataintegrity/DefaultDataIntegrityService.java	2010-01-20 10:06:43 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/dataintegrity/DefaultDataIntegrityService.java	2010-01-27 11:51:54 +0000
@@ -132,28 +132,12 @@
 
     public Collection<DataElement> getDataElementsWithoutDataSet()
     {
-        Collection<DataElement> dataElements = dataElementService.getAllDataElements();
-        
-        return FilterUtils.filter( dataElements, new Filter<DataElement>()
-            {
-                public boolean retain( DataElement object )
-                {
-                    return object.getDataSets() == null || object.getDataSets().size() == 0;
-                }
-            } );
+        return dataElementService.getDataElementsWithoutDataSets();
     }
 
     public Collection<DataElement> getDataElementsWithoutGroups()
     {
-        Collection<DataElement> dataElements = dataElementService.getAllDataElements();
-        
-        return FilterUtils.filter( dataElements, new Filter<DataElement>()
-        {
-            public boolean retain( DataElement object )
-            {
-                return object.getGroups() == null || object.getGroups().size() == 0;
-            }
-        } );
+        return dataElementService.getDataElementsWithoutGroups();        
     }
     
     public Map<DataElement, Collection<DataSet>> getDataElementsAssignedToDataSetsWithDifferentPeriodTypes()
@@ -235,15 +219,7 @@
 
     public Collection<Indicator> getIndicatorsWithoutGroups()
     {
-        Collection<Indicator> indicators = indicatorService.getAllIndicators();
-        
-        return FilterUtils.filter( indicators, new Filter<Indicator>()
-            {
-                public boolean retain( Indicator object )
-                {
-                    return object.getGroups() == null || object.getGroups().size() == 0;
-                }
-            } );
+        return indicatorService.getIndicatorsWithoutGroups();
     }
     
     public Map<Indicator, String> getInvalidIndicatorNumerators()
@@ -337,15 +313,7 @@
 
     public Collection<OrganisationUnit> getOrganisationUnitsWithoutGroups()
     {
-        Collection<OrganisationUnit> organisationUnits = organisationUnitService.getAllOrganisationUnits();
-        
-        return FilterUtils.filter( organisationUnits, new Filter<OrganisationUnit>()
-            {
-                public boolean retain( OrganisationUnit object )
-                {
-                    return object.getGroups() == null || object.getGroups().size() == 0;
-                }
-            } );
+        return organisationUnitService.getOrganisationUnitsWithoutGroups();
     }
 
     public Collection<OrganisationUnit> getOrganisationUnitsViolatingCompulsoryGroupSets()

=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-administration/src/main/resources/META-INF/dhis/beans.xml	2010-01-12 08:12:04 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/resources/META-INF/dhis/beans.xml	2010-01-27 11:51:54 +0000
@@ -119,4 +119,15 @@
       ref="org.hisp.dhis.organisationunit.OrganisationUnitService"/>
   </bean>
   
+  <aop:config>
+	
+    <aop:aspect ref="statementInterceptor">
+      <aop:around pointcut="execution( * org.hisp.dhis.dataintegrity.DataIntegrityService.getInvalidIndicatorNumerators() )" method="intercept"/>
+      <aop:around pointcut="execution( * org.hisp.dhis.dataintegrity.DataIntegrityService.getInvalidIndicatorDenominators() )" method="intercept"/>
+      <aop:around pointcut="execution( * org.hisp.dhis.dataintegrity.DataIntegrityService.getInvalidValidationRuleLeftSideExpressions() )" method="intercept"/>
+      <aop:around pointcut="execution( * org.hisp.dhis.dataintegrity.DataIntegrityService.getInvalidValidationRuleRightSideExpressions() )" method="intercept"/>
+    </aop:aspect>
+    
+  </aop:config>
+  
 </beans>

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/DefaultDataElementService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/DefaultDataElementService.java	2010-01-25 15:21:02 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/DefaultDataElementService.java	2010-01-27 11:51:54 +0000
@@ -330,7 +330,27 @@
 
         return dataElements;
     }
+    
+    public Collection<DataElement> getDataElementsWithoutGroups()
+    {
+        return i18n( i18nService, dataElementStore.getDataElementsWithoutGroups() );
+    }
+    
+    public Collection<DataElement> getDataElementsWithoutDataSets()
+    {
+        return i18n( i18nService, dataElementStore.getDataElementsWithoutDataSets() );
+    }
 
+    public boolean dataElementExists( int id )
+    {
+        return dataElementStore.dataElementExists( id );
+    }
+    
+    public boolean dataElementCategoryOptionComboExists( int id )
+    {
+        return dataElementStore.dataElementCategoryOptionComboExists( id );
+    }
+    
     // -------------------------------------------------------------------------
     // CalculatedDataElement
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateDataElementStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateDataElementStore.java	2010-01-25 14:08:24 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/hibernate/HibernateDataElementStore.java	2010-01-27 11:51:54 +0000
@@ -31,6 +31,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import org.amplecode.quick.StatementManager;
 import org.hibernate.Criteria;
 import org.hibernate.Query;
 import org.hibernate.Session;
@@ -62,6 +63,13 @@
         this.sessionFactory = sessionFactory;
     }
 
+    private StatementManager statementManager;
+
+    public void setStatementManager( StatementManager statementManager )
+    {
+        this.statementManager = statementManager;
+    }
+
     // -------------------------------------------------------------------------
     // DataElement
     // -------------------------------------------------------------------------
@@ -261,6 +269,36 @@
         return criteria.list();
     }
 
+    @SuppressWarnings( "unchecked" )
+    public Collection<DataElement> getDataElementsWithoutGroups()
+    {
+        String hql = "from DataElement d where d.groups.size = 0";
+        
+        return sessionFactory.getCurrentSession().createQuery( hql ).list();
+    }
+
+    @SuppressWarnings( "unchecked" )
+    public Collection<DataElement> getDataElementsWithoutDataSets()
+    {
+        String hql = "from DataElement d where d.dataSets.size = 0";
+        
+        return sessionFactory.getCurrentSession().createQuery( hql ).list();
+    }
+    
+    public boolean dataElementExists( int id )
+    {
+        final String sql = "select count(*) from dataelement where dataelementid=" + id;
+        
+        return statementManager.getHolder().queryForInteger( sql ) > 0;
+    }
+    
+    public boolean dataElementCategoryOptionComboExists( int id )
+    {
+        final String sql = "select count(*) from categoryoptioncombo where categoryoptioncomboid=" + id;
+        
+        return statementManager.getHolder().queryForInteger( sql ) > 0;
+    }
+    
     // -------------------------------------------------------------------------
     // CalculatedDataElement
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java	2009-12-02 15:08:11 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/expression/DefaultExpressionService.java	2010-01-27 11:51:54 +0000
@@ -282,12 +282,12 @@
                 return CATEGORYOPTIONCOMBO_ID_NOT_NUMERIC;
             }
 
-            if ( dataElementService.getDataElement( dataElementId ) == null )
+            if ( !dataElementService.dataElementExists( dataElementId  ) )
             {
                 return DATAELEMENT_DOES_NOT_EXIST;
             }
 
-            if ( categoryService.getDataElementCategoryOptionCombo( categoryOptionComboId ) == null )
+            if ( !dataElementService.dataElementCategoryOptionComboExists( categoryOptionComboId ) )
             {
                 return CATEGORYOPTIONCOMBO_DOES_NOT_EXIST;
             }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/DefaultIndicatorService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/DefaultIndicatorService.java	2009-11-26 14:02:44 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/DefaultIndicatorService.java	2010-01-27 11:51:54 +0000
@@ -176,6 +176,11 @@
         return i18n( i18nService, indicatorStore.getIndicatorsWithGroupSets() );
     }
     
+    public Collection<Indicator> getIndicatorsWithoutGroups()
+    {
+        return i18n( i18nService, indicatorStore.getIndicatorsWithoutGroups() );
+    }
+    
     // -------------------------------------------------------------------------
     // IndicatorType
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/hibernate/HibernateIndicatorStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/hibernate/HibernateIndicatorStore.java	2009-11-07 13:03:26 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/indicator/hibernate/HibernateIndicatorStore.java	2010-01-27 11:51:54 +0000
@@ -156,10 +156,16 @@
     @SuppressWarnings( "unchecked" )
     public Collection<Indicator> getIndicatorsWithGroupSets()
     {
-        final String sql = "from Indicator d where d.groupSets.size > 0";
-        
-        Query query = sessionFactory.getCurrentSession().createQuery( sql );
-        
-        return query.list();
+        final String hql = "from Indicator d where d.groupSets.size > 0";
+        
+        return sessionFactory.getCurrentSession().createQuery( hql ).list();
     }
+
+    @SuppressWarnings( "unchecked" )
+    public Collection<Indicator> getIndicatorsWithoutGroups()
+    {
+        final String hql = "from Indicator d where d.groups.size = 0";
+        
+        return sessionFactory.getCurrentSession().createQuery( hql ).list();
+    }    
 }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java	2009-11-26 14:02:44 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitService.java	2010-01-27 11:51:54 +0000
@@ -391,6 +391,11 @@
         organisationUnitStore.updateOrganisationUnitParent( organisationUnitId, parentId );
     }
     
+    public Collection<OrganisationUnit> getOrganisationUnitsWithoutGroups()
+    {
+        return organisationUnitStore.getOrganisationUnitsWithoutGroups();
+    }
+    
     // -------------------------------------------------------------------------
     // OrganisationUnitHierarchy
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java	2009-11-03 18:32:48 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/hibernate/HibernateOrganisationUnitStore.java	2010-01-27 11:51:54 +0000
@@ -137,6 +137,14 @@
         return session.createQuery( "from OrganisationUnit o where o.parent is null" ).list();
     }
 
+    @SuppressWarnings( "unchecked" )
+    public Collection<OrganisationUnit> getOrganisationUnitsWithoutGroups()
+    {
+        String hql = "from OrganisationUnit o where o.groups.size = 0";
+        
+        return sessionFactory.getCurrentSession().createQuery( hql ).list();
+    }
+
     // -------------------------------------------------------------------------
     // OrganisationUnitHierarchy
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml	2009-12-24 14:47:25 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml	2010-01-27 11:51:54 +0000
@@ -17,6 +17,7 @@
   <bean id="org.hisp.dhis.dataelement.DataElementStore"
     class="org.hisp.dhis.dataelement.hibernate.HibernateDataElementStore">
     <property name="sessionFactory" ref="sessionFactory"/>
+	<property name="statementManager" ref="statementManager"/>
   </bean>
   
   <bean id="org.hisp.dhis.dataelement.DataElementGroupStore"

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/about/changeLog.vm'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/about/changeLog.vm	2009-09-07 14:32:45 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/about/changeLog.vm	2010-01-27 20:55:17 +0000
@@ -2,6 +2,8 @@
 <h3>$i18n.getString( "change_log" )</h3>
 
 <dl>
+  <dt>$i18n.getString( "release" ) 2.0.3:</dt>
+  <dd><a href="https://blueprints.launchpad.net/dhis2/+milestone/2.0.3"; target="_blank">Launchpad $i18n.getString( "online_release_page" )</a></dd>
   <dt>$i18n.getString( "release" ) 2.0.2:</dt>
   <dd><a href="https://blueprints.launchpad.net/dhis2/+milestone/2.0.2"; target="_blank">Launchpad $i18n.getString( "online_release_page" )</a></dd>
   <dt>$i18n.getString( "release" ) 2.0.1:</dt>