used cached resultset for reporting in places (wip)

This commit is contained in:
John Woodlock
2012-08-29 17:29:17 +10:00
parent 4e78e7e401
commit 64f55de032
4 changed files with 37 additions and 44 deletions
@@ -3,13 +3,13 @@ package org.mifosng.platform.noncore;
import java.sql.Connection;
import java.sql.Statement;
import org.mifosng.platform.api.data.GenericResultsetData;
import javax.sql.rowset.CachedRowSet;
import com.sun.rowset.CachedRowSetImpl;
import org.mifosng.platform.api.data.GenericResultsetData;
public interface GenericDataService {
public CachedRowSetImpl getCachedResultSet(String sql, String errorMsg);
public CachedRowSet getCachedResultSet(String sql, String errorMsg);
GenericResultsetData fillGenericResultSet(final String sql);
@@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import javax.sql.rowset.CachedRowSet;
import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.data.ResultsetColumnHeader;
@@ -37,7 +38,7 @@ public class GenericDataServiceImpl implements GenericDataService {
}
@Override
public CachedRowSetImpl getCachedResultSet(String sql, String sqlErrorMsg) {
public CachedRowSet getCachedResultSet(String sql, String sqlErrorMsg) {
Connection db_connection = null;
Statement db_statement = null;
@@ -46,8 +47,9 @@ public class GenericDataServiceImpl implements GenericDataService {
db_statement = db_connection.createStatement();
ResultSet rs = db_statement.executeQuery(sql);
CachedRowSetImpl crs = new CachedRowSetImpl();
CachedRowSet crs = new CachedRowSetImpl();
crs.populate(rs);
//logger.info("RS Size: " + crs.size() + " getCachedResultSet sql: " + sql);
return crs;
} catch (SQLException e) {
throw new PlatformDataIntegrityException("error.msg.sql.error",
@@ -62,15 +64,13 @@ public class GenericDataServiceImpl implements GenericDataService {
@Override
public GenericResultsetData fillGenericResultSet(final String sql) {
Connection db_connection = null;
Statement db_statement = null;
try {
db_connection = dataSource.getConnection();
db_statement = db_connection.createStatement();
ResultSet rs = db_statement.executeQuery(sql);
String sqlErrorMsg = "Sql: " + sql;
CachedRowSet rs = getCachedResultSet(sql, sqlErrorMsg);
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
try {
ResultSetMetaData rsmd = rs.getMetaData();
String columnName = null;
@@ -98,9 +98,7 @@ public class GenericDataServiceImpl implements GenericDataService {
return new GenericResultsetData(columnHeaders, resultsetDataRows);
} catch (SQLException e) {
throw new PlatformDataIntegrityException("error.msg.sql.error",
e.getMessage(), "Sql: " + sql);
} finally {
dbClose(db_statement, db_connection);
e.getMessage(), sqlErrorMsg);
}
}
@@ -15,6 +15,7 @@ import java.util.Map;
import java.util.Set;
import javax.sql.DataSource;
import javax.sql.rowset.CachedRowSet;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
@@ -46,8 +47,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ReadReportingServiceImpl implements
ReadReportingService {
public class ReadReportingServiceImpl implements ReadReportingService {
private final PlatformSecurityContext context;
@@ -58,8 +58,7 @@ public class ReadReportingServiceImpl implements
private Boolean noPentaho = false;
@Autowired
public ReadReportingServiceImpl(
final PlatformSecurityContext context,
public ReadReportingServiceImpl(final PlatformSecurityContext context,
final TenantAwareRoutingDataSource dataSource) {
// kick off pentaho reports server
ClassicEngineBoot.getInstance().start();
@@ -231,41 +230,38 @@ public class ReadReportingServiceImpl implements
}
private String getReportSql(String reportName) {
String sql = "select report_sql as the_sql from stretchy_report where report_name = '"
+ reportName + "'";
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7046875 - prevent
// Invalid Column Name bug in sun's CachedRowSetImpl where it doesn't
// pick up on label names, only column names
String sql = "select * from (select report_sql as the_sql from stretchy_report where report_name = '"
+ reportName + "') x";
return getSql(sql);
}
private String getParameterSql(String parameterName) {
String sql = "select parameter_sql as the_sql from stretchy_parameter where parameter_name = '"
+ parameterName + "'";
String sql = "select * from (select parameter_sql as the_sql from stretchy_parameter where parameter_name = '"
+ parameterName + "') x";
return getSql(sql);
}
private String getSql(String inputSql) {
String sql = null;
Connection db_connection = null;
Statement db_statement = null;
try {
db_connection = dataSource.getConnection();
db_statement = db_connection.createStatement();
ResultSet rs = db_statement.executeQuery(inputSql);
String sqlErrorMsg = "Sql: " + inputSql;
CachedRowSet rs = genericDataService.getCachedResultSet(inputSql,
sqlErrorMsg);
try {
if (rs.next()) {
sql = rs.getString("the_sql");
} else {
throw new ReportNotFoundException(inputSql);
return rs.getString("the_sql");
}
throw new ReportNotFoundException(inputSql);
} catch (SQLException e) {
logger.info("msg: " + e.getMessage() + " sql: " + inputSql);
throw new PlatformDataIntegrityException("error.msg.sql.error",
e.getMessage(), "Input Sql: " + inputSql);
} finally {
genericDataService.dbClose(db_statement, db_connection);
e.getMessage(), sqlErrorMsg);
}
return sql;
}
@Override
@@ -10,6 +10,7 @@ import java.util.Map;
import java.util.Set;
import javax.sql.DataSource;
import javax.sql.rowset.CachedRowSet;
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
import org.mifosng.platform.api.data.GenericResultsetData;
@@ -25,8 +26,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.sun.rowset.CachedRowSetImpl;
@Service
public class ReadWriteNonCoreDataServiceImpl implements
ReadWriteNonCoreDataService {
@@ -120,7 +119,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
String sqlErrorMsg = "Additional Fields Type: " + type + " Set: "
+ set + " Id: " + id;
CachedRowSetImpl rsmd = genericDataService.getCachedResultSet(sql,
CachedRowSet rsmd = genericDataService.getCachedResultSet(sql,
sqlErrorMsg);
List<ResultsetColumnHeader> columnHeaders = getResultsetColumnHeaders(
@@ -157,7 +156,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
}
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
CachedRowSetImpl rsmd, String sqlErrorMsg, String type, String set) {
CachedRowSet rsmd, String sqlErrorMsg, String type, String set) {
List<ResultsetColumnHeader> columnHeaders = null;
@@ -183,7 +182,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
// rsch.getColumnName());
String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = "
+ allowedListId + " order by id";
CachedRowSetImpl rsValues = genericDataService
CachedRowSet rsValues = genericDataService
.getCachedResultSet(sql, sqlErrorMsg);
while (rsValues.next()) {
rsch.getColumnValues().add(
@@ -209,7 +208,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
String sqlErrorMsg, String type, Long id) {
List<ResultsetDataRow> resultsetDataRows = null;
CachedRowSetImpl rs = genericDataService.getCachedResultSet(sql,
CachedRowSet rs = genericDataService.getCachedResultSet(sql,
sqlErrorMsg);
try {