001    /*
002    @license.text@
003     */
004    package biz.hammurapi.sql;
005    
006    import java.sql.SQLException;
007    
008    import biz.hammurapi.metrics.MeasurementCategory;
009    import biz.hammurapi.metrics.MeasurementCategoryFactory;
010    import biz.hammurapi.metrics.TimeIntervalCategory;
011    
012    /**
013     * Collects operation metrics for load, insert, update, delete.
014     * @author Pavel Vlasov
015     * @revision $Revision$
016     */
017    public class MeasuringDatabaseObject extends DatabaseObject {
018            protected TimeIntervalCategory timeIntervalCategory=MeasurementCategoryFactory.getTimeIntervalCategory(getClass());
019            protected MeasurementCategory measurementCategory=MeasurementCategoryFactory.getCategory(getClass());
020            
021            public int delete(SQLProcessor processor, String tableName) throws SQLException {
022                    long start=timeIntervalCategory.getTime();
023                    try {
024                            return super.delete(processor, tableName);
025                    } finally {
026                            timeIntervalCategory.addInterval("delete", start);
027                    }
028            }
029            
030            public int insert(SQLProcessor processor, String tableName)     throws SQLException {
031                    long start=timeIntervalCategory.getTime();
032                    try {
033                            return super.insert(processor, tableName);
034                    } finally {
035                            timeIntervalCategory.addInterval("insert", start);
036                    }
037            }
038            
039            public int update(SQLProcessor processor, String tableName)     throws SQLException {
040                    long start=timeIntervalCategory.getTime();
041                    try {
042                            return super.update(processor, tableName);
043                    } finally {
044                            timeIntervalCategory.addInterval("update", start);
045                    }
046            }
047            
048            public MeasuringDatabaseObject() {
049                    super();
050                    measurementCategory.addMeasurement("new", 0, 0);
051            }
052    
053            public MeasuringDatabaseObject(boolean force) {
054                    super(force);
055                    measurementCategory.addMeasurement("new", 0, 0);
056            }
057    }