diff --git a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/setfinder/QueryResultTypeSpringDao.java b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/setfinder/QueryResultTypeSpringDao.java index 029195a6..43c62100 100755 --- a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/setfinder/QueryResultTypeSpringDao.java +++ b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/setfinder/QueryResultTypeSpringDao.java @@ -19,6 +19,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.sql.DataSource; @@ -44,6 +45,7 @@ public class QueryResultTypeSpringDao extends CRCDAO implements JdbcTemplate jdbcTemplate = null; NamedParameterJdbcTemplate namedParameterJdbcTemplate = null; + private static final ConcurrentHashMap queryResultTypeCache = new ConcurrentHashMap<>(); QtResultTypeRowMapper queryResultTypeMapper = new QtResultTypeRowMapper(); @@ -55,7 +57,6 @@ public QueryResultTypeSpringDao(DataSource dataSource, jdbcTemplate = new JdbcTemplate(dataSource); namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); this.dataSourceLookup = dataSourceLookup; - } /** @@ -68,12 +69,12 @@ public QueryResultTypeSpringDao(DataSource dataSource, @SuppressWarnings("unchecked") public QtQueryResultType getQueryResultTypeById(int resultTypeId) { - String sql = "select * from " + getDbSchemaName() - + "qt_query_result_type where result_type_id = ?"; - QtQueryResultType queryResultType = (QtQueryResultType) jdbcTemplate - .queryForObject(sql, new Object[] { resultTypeId }, - queryResultTypeMapper); - return queryResultType; + //this is a cache to avoid multiple database calls for the same status type + return queryResultTypeCache.computeIfAbsent(resultTypeId, id -> { + String sql = "select * from " + getDbSchemaName() + "qt_query_result_type where result_type_id = ?"; + QtQueryResultType queryResultType = (QtQueryResultType) jdbcTemplate.queryForObject(sql, new Object[] { id }, queryResultTypeMapper); + return queryResultType; + }); } /** diff --git a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/setfinder/QueryStatusTypeSpringDao.java b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/setfinder/QueryStatusTypeSpringDao.java index d18e729a..3e4d0c5e 100755 --- a/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/setfinder/QueryStatusTypeSpringDao.java +++ b/edu.harvard.i2b2.crc/src/server/edu/harvard/i2b2/crc/dao/setfinder/QueryStatusTypeSpringDao.java @@ -14,6 +14,8 @@ */ package edu.harvard.i2b2.crc.dao.setfinder; +import java.util.concurrent.ConcurrentHashMap; + import edu.harvard.i2b2.crc.dao.CRCDAO; import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup; import edu.harvard.i2b2.crc.datavo.db.QtQueryMaster; @@ -26,6 +28,7 @@ import javax.sql.DataSource; + /** * Class to manager persistance operation of * QtQueryMaster @@ -38,13 +41,9 @@ public class QueryStatusTypeSpringDao extends CRCDAO implements IQueryStatusType JdbcTemplate jdbcTemplate = null; QtStatusTypeRowMapper queryStatusTypeMapper = new QtStatusTypeRowMapper(); - - - - private DataSourceLookup dataSourceLookup = null; - - + private static final ConcurrentHashMap queryStatusTypeCache = new ConcurrentHashMap<>(); + public QueryStatusTypeSpringDao(DataSource dataSource,DataSourceLookup dataSourceLookup) { setDataSource(dataSource); setDbSchemaName(dataSourceLookup.getFullSchema()); @@ -61,10 +60,13 @@ public QueryStatusTypeSpringDao(DataSource dataSource,DataSourceLookup dataSourc @Override @SuppressWarnings("unchecked") public QtQueryStatusType getQueryStatusTypeById(int statusTypeId) { - - String sql = "select * from " + getDbSchemaName() + "qt_query_status_type where status_type_id = ?" ; - QtQueryStatusType queryStatusType = (QtQueryStatusType)jdbcTemplate.queryForObject(sql,new Object[]{statusTypeId},queryStatusTypeMapper ); - return queryStatusType; + + //this is a cache to avoid multiple database calls for the same status type + return queryStatusTypeCache.computeIfAbsent(statusTypeId, id -> { + String sql = "select * from " + getDbSchemaName() + "qt_query_status_type where status_type_id = ?" ; + QtQueryStatusType queryStatusType = (QtQueryStatusType)jdbcTemplate.queryForObject(sql,new Object[]{id},queryStatusTypeMapper ); + return queryStatusType; + }); } private static class QtStatusTypeRowMapper implements RowMapper {