used cached resultset for reporting in places (wip)
This commit is contained in:
@@ -3,13 +3,13 @@ package org.mifosng.platform.noncore;
|
|||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.Statement;
|
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 interface GenericDataService {
|
||||||
|
|
||||||
public CachedRowSetImpl getCachedResultSet(String sql, String errorMsg);
|
public CachedRowSet getCachedResultSet(String sql, String errorMsg);
|
||||||
|
|
||||||
GenericResultsetData fillGenericResultSet(final String sql);
|
GenericResultsetData fillGenericResultSet(final String sql);
|
||||||
|
|
||||||
|
|||||||
+11
-13
@@ -9,6 +9,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
import javax.sql.rowset.CachedRowSet;
|
||||||
|
|
||||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||||
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
||||||
@@ -37,7 +38,7 @@ public class GenericDataServiceImpl implements GenericDataService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CachedRowSetImpl getCachedResultSet(String sql, String sqlErrorMsg) {
|
public CachedRowSet getCachedResultSet(String sql, String sqlErrorMsg) {
|
||||||
|
|
||||||
Connection db_connection = null;
|
Connection db_connection = null;
|
||||||
Statement db_statement = null;
|
Statement db_statement = null;
|
||||||
@@ -46,8 +47,9 @@ public class GenericDataServiceImpl implements GenericDataService {
|
|||||||
db_statement = db_connection.createStatement();
|
db_statement = db_connection.createStatement();
|
||||||
ResultSet rs = db_statement.executeQuery(sql);
|
ResultSet rs = db_statement.executeQuery(sql);
|
||||||
|
|
||||||
CachedRowSetImpl crs = new CachedRowSetImpl();
|
CachedRowSet crs = new CachedRowSetImpl();
|
||||||
crs.populate(rs);
|
crs.populate(rs);
|
||||||
|
//logger.info("RS Size: " + crs.size() + " getCachedResultSet sql: " + sql);
|
||||||
return crs;
|
return crs;
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
@@ -62,15 +64,13 @@ public class GenericDataServiceImpl implements GenericDataService {
|
|||||||
@Override
|
@Override
|
||||||
public GenericResultsetData fillGenericResultSet(final String sql) {
|
public GenericResultsetData fillGenericResultSet(final String sql) {
|
||||||
|
|
||||||
Connection db_connection = null;
|
String sqlErrorMsg = "Sql: " + sql;
|
||||||
Statement db_statement = null;
|
CachedRowSet rs = getCachedResultSet(sql, sqlErrorMsg);
|
||||||
try {
|
|
||||||
db_connection = dataSource.getConnection();
|
|
||||||
db_statement = db_connection.createStatement();
|
|
||||||
ResultSet rs = db_statement.executeQuery(sql);
|
|
||||||
|
|
||||||
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
||||||
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
|
List<ResultsetDataRow> resultsetDataRows = new ArrayList<ResultsetDataRow>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
ResultSetMetaData rsmd = rs.getMetaData();
|
ResultSetMetaData rsmd = rs.getMetaData();
|
||||||
String columnName = null;
|
String columnName = null;
|
||||||
@@ -98,9 +98,7 @@ public class GenericDataServiceImpl implements GenericDataService {
|
|||||||
return new GenericResultsetData(columnHeaders, resultsetDataRows);
|
return new GenericResultsetData(columnHeaders, resultsetDataRows);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
e.getMessage(), "Sql: " + sql);
|
e.getMessage(), sqlErrorMsg);
|
||||||
} finally {
|
|
||||||
dbClose(db_statement, db_connection);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-22
@@ -15,6 +15,7 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
import javax.sql.rowset.CachedRowSet;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.StreamingOutput;
|
import javax.ws.rs.core.StreamingOutput;
|
||||||
|
|
||||||
@@ -46,8 +47,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ReadReportingServiceImpl implements
|
public class ReadReportingServiceImpl implements ReadReportingService {
|
||||||
ReadReportingService {
|
|
||||||
|
|
||||||
private final PlatformSecurityContext context;
|
private final PlatformSecurityContext context;
|
||||||
|
|
||||||
@@ -58,8 +58,7 @@ public class ReadReportingServiceImpl implements
|
|||||||
private Boolean noPentaho = false;
|
private Boolean noPentaho = false;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public ReadReportingServiceImpl(
|
public ReadReportingServiceImpl(final PlatformSecurityContext context,
|
||||||
final PlatformSecurityContext context,
|
|
||||||
final TenantAwareRoutingDataSource dataSource) {
|
final TenantAwareRoutingDataSource dataSource) {
|
||||||
// kick off pentaho reports server
|
// kick off pentaho reports server
|
||||||
ClassicEngineBoot.getInstance().start();
|
ClassicEngineBoot.getInstance().start();
|
||||||
@@ -231,41 +230,38 @@ public class ReadReportingServiceImpl implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getReportSql(String reportName) {
|
private String getReportSql(String reportName) {
|
||||||
String sql = "select report_sql as the_sql from stretchy_report where report_name = '"
|
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7046875 - prevent
|
||||||
+ reportName + "'";
|
// 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);
|
return getSql(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getParameterSql(String parameterName) {
|
private String getParameterSql(String parameterName) {
|
||||||
String sql = "select parameter_sql as the_sql from stretchy_parameter where parameter_name = '"
|
String sql = "select * from (select parameter_sql as the_sql from stretchy_parameter where parameter_name = '"
|
||||||
+ parameterName + "'";
|
+ parameterName + "') x";
|
||||||
return getSql(sql);
|
return getSql(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getSql(String inputSql) {
|
private String getSql(String inputSql) {
|
||||||
|
|
||||||
String sql = null;
|
String sqlErrorMsg = "Sql: " + inputSql;
|
||||||
Connection db_connection = null;
|
CachedRowSet rs = genericDataService.getCachedResultSet(inputSql,
|
||||||
Statement db_statement = null;
|
sqlErrorMsg);
|
||||||
try {
|
|
||||||
db_connection = dataSource.getConnection();
|
|
||||||
db_statement = db_connection.createStatement();
|
|
||||||
ResultSet rs = db_statement.executeQuery(inputSql);
|
|
||||||
|
|
||||||
|
try {
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
sql = rs.getString("the_sql");
|
return rs.getString("the_sql");
|
||||||
} else {
|
|
||||||
throw new ReportNotFoundException(inputSql);
|
|
||||||
}
|
}
|
||||||
|
throw new ReportNotFoundException(inputSql);
|
||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
logger.info("msg: " + e.getMessage() + " sql: " + inputSql);
|
||||||
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
throw new PlatformDataIntegrityException("error.msg.sql.error",
|
||||||
e.getMessage(), "Input Sql: " + inputSql);
|
e.getMessage(), sqlErrorMsg);
|
||||||
} finally {
|
|
||||||
genericDataService.dbClose(db_statement, db_connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return sql;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+5
-6
@@ -10,6 +10,7 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
import javax.sql.rowset.CachedRowSet;
|
||||||
|
|
||||||
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
||||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.sun.rowset.CachedRowSetImpl;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ReadWriteNonCoreDataServiceImpl implements
|
public class ReadWriteNonCoreDataServiceImpl implements
|
||||||
ReadWriteNonCoreDataService {
|
ReadWriteNonCoreDataService {
|
||||||
@@ -120,7 +119,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
String sqlErrorMsg = "Additional Fields Type: " + type + " Set: "
|
String sqlErrorMsg = "Additional Fields Type: " + type + " Set: "
|
||||||
+ set + " Id: " + id;
|
+ set + " Id: " + id;
|
||||||
|
|
||||||
CachedRowSetImpl rsmd = genericDataService.getCachedResultSet(sql,
|
CachedRowSet rsmd = genericDataService.getCachedResultSet(sql,
|
||||||
sqlErrorMsg);
|
sqlErrorMsg);
|
||||||
|
|
||||||
List<ResultsetColumnHeader> columnHeaders = getResultsetColumnHeaders(
|
List<ResultsetColumnHeader> columnHeaders = getResultsetColumnHeaders(
|
||||||
@@ -157,7 +156,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
|
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
|
||||||
CachedRowSetImpl rsmd, String sqlErrorMsg, String type, String set) {
|
CachedRowSet rsmd, String sqlErrorMsg, String type, String set) {
|
||||||
|
|
||||||
List<ResultsetColumnHeader> columnHeaders = null;
|
List<ResultsetColumnHeader> columnHeaders = null;
|
||||||
|
|
||||||
@@ -183,7 +182,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
// rsch.getColumnName());
|
// rsch.getColumnName());
|
||||||
String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = "
|
String sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = "
|
||||||
+ allowedListId + " order by id";
|
+ allowedListId + " order by id";
|
||||||
CachedRowSetImpl rsValues = genericDataService
|
CachedRowSet rsValues = genericDataService
|
||||||
.getCachedResultSet(sql, sqlErrorMsg);
|
.getCachedResultSet(sql, sqlErrorMsg);
|
||||||
while (rsValues.next()) {
|
while (rsValues.next()) {
|
||||||
rsch.getColumnValues().add(
|
rsch.getColumnValues().add(
|
||||||
@@ -209,7 +208,7 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
String sqlErrorMsg, String type, Long id) {
|
String sqlErrorMsg, String type, Long id) {
|
||||||
|
|
||||||
List<ResultsetDataRow> resultsetDataRows = null;
|
List<ResultsetDataRow> resultsetDataRows = null;
|
||||||
CachedRowSetImpl rs = genericDataService.getCachedResultSet(sql,
|
CachedRowSet rs = genericDataService.getCachedResultSet(sql,
|
||||||
sqlErrorMsg);
|
sqlErrorMsg);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user