NIHVIVO-719 Begin refactoring, to try to figure out why the thread isn't shutting down. Pull the ServletContextListener into a separate inner class.
This commit is contained in:
parent
c39c066b72
commit
bad03c9955
2 changed files with 52 additions and 44 deletions
|
@ -171,7 +171,7 @@
|
||||||
</listener>
|
</listener>
|
||||||
|
|
||||||
<listener>
|
<listener>
|
||||||
<listener-class>edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache</listener-class>
|
<listener-class>edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache$Setup</listener-class>
|
||||||
</listener>
|
</listener>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
|
@ -33,26 +33,29 @@ import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilterUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters;
|
import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters;
|
||||||
import edu.cornell.mannlib.vitro.webapp.flags.PortalFlag;
|
import edu.cornell.mannlib.vitro.webapp.flags.PortalFlag;
|
||||||
|
|
||||||
public class VClassGroupCache implements ServletContextListener{
|
public class VClassGroupCache{
|
||||||
|
|
||||||
/* This is the cache of VClassGroups. It is a portal id to list of VClassGroups */
|
|
||||||
private transient ConcurrentHashMap<Integer, List<VClassGroup>> _groupListMap;
|
|
||||||
|
|
||||||
private transient ConcurrentLinkedQueue<String> _rebuildQueue;
|
|
||||||
private RebuildGroupCacheThread _cacheRebuildThread;
|
|
||||||
private ServletContext context;
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(VClassGroupCache.class);
|
private static final Log log = LogFactory.getLog(VClassGroupCache.class);
|
||||||
|
|
||||||
private static boolean ORDER_BY_DISPLAYRANK = true;
|
private static final String ATTRIBUTE_NAME = "VClassGroupCache";
|
||||||
private static boolean INCLUDE_UNINSTANTIATED = true;
|
|
||||||
private static boolean INCLUDE_INDIVIDUAL_COUNT = true;
|
private static final boolean ORDER_BY_DISPLAYRANK = true;
|
||||||
|
private static final boolean INCLUDE_UNINSTANTIATED = true;
|
||||||
public VClassGroupCache(){}
|
private static final boolean INCLUDE_INDIVIDUAL_COUNT = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use getVClassGroupCache(ServletContext) to get a VClassGroupCache.
|
* Use getVClassGroupCache(ServletContext) to get a VClassGroupCache.
|
||||||
*/
|
*/
|
||||||
|
public static VClassGroupCache getVClassGroupCache(ServletContext sc){
|
||||||
|
return (VClassGroupCache) sc.getAttribute(ATTRIBUTE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is the cache of VClassGroups. It is a portal id to list of VClassGroups */
|
||||||
|
private final ConcurrentHashMap<Integer, List<VClassGroup>> _groupListMap;
|
||||||
|
|
||||||
|
private final ConcurrentLinkedQueue<String> _rebuildQueue;
|
||||||
|
private final RebuildGroupCacheThread _cacheRebuildThread;
|
||||||
|
private final ServletContext context;
|
||||||
|
|
||||||
private VClassGroupCache(ServletContext context) {
|
private VClassGroupCache(ServletContext context) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this._groupListMap = new ConcurrentHashMap<Integer, List<VClassGroup>>();
|
this._groupListMap = new ConcurrentHashMap<Integer, List<VClassGroup>>();
|
||||||
|
@ -71,10 +74,6 @@ public class VClassGroupCache implements ServletContextListener{
|
||||||
_cacheRebuildThread.informOfQueueChange();
|
_cacheRebuildThread.informOfQueueChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static VClassGroupCache getVClassGroupCache(ServletContext sc){
|
|
||||||
return (VClassGroupCache) sc.getAttribute("VClassGroupCache");
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<VClassGroup> getGroups( int portalId ){
|
public List<VClassGroup> getGroups( int portalId ){
|
||||||
return getGroups(getVCGDao(),portalId );
|
return getGroups(getVCGDao(),portalId );
|
||||||
}
|
}
|
||||||
|
@ -94,7 +93,7 @@ public class VClassGroupCache implements ServletContextListener{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearGroupCache(){
|
public void clearGroupCache(){
|
||||||
_groupListMap = new ConcurrentHashMap<Integer, List<VClassGroup>>();
|
_groupListMap.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -254,8 +253,24 @@ public class VClassGroupCache implements ServletContextListener{
|
||||||
return groups;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void requestStop() {
|
||||||
|
_cacheRebuildThread.kill();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected VClassGroupDao getVCGDao(){
|
||||||
|
if( context == null ){
|
||||||
|
log.error("Context was not set for VClassGroupCache");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
WebappDaoFactory wdf =(WebappDaoFactory)context.getAttribute("webappDaoFactory");
|
||||||
|
if( wdf == null ){
|
||||||
|
log.error("Cannot get webappDaoFactory from context");
|
||||||
|
return null;
|
||||||
|
}else
|
||||||
|
return wdf.getVClassGroupDao();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static String REBUILD_EVERY_PORTAL ="Rebuild every portal.";
|
||||||
|
|
||||||
/* ****************** Jena Model Change Listener***************************** */
|
/* ****************** Jena Model Change Listener***************************** */
|
||||||
private class VClassGroupCacheChangeListener extends StatementListener {
|
private class VClassGroupCacheChangeListener extends StatementListener {
|
||||||
|
@ -348,29 +363,22 @@ public class VClassGroupCache implements ServletContextListener{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected VClassGroupDao getVCGDao(){
|
/* ******************** ServletContextListener **************** */
|
||||||
if( context == null ){
|
public static class Setup implements ServletContextListener {
|
||||||
log.error("Context was not set for VClassGroupCache");
|
@Override
|
||||||
return null;
|
public void contextInitialized(ServletContextEvent sce) {
|
||||||
|
ServletContext servletContext = sce.getServletContext();
|
||||||
|
servletContext.setAttribute(ATTRIBUTE_NAME, new VClassGroupCache(servletContext) );
|
||||||
}
|
}
|
||||||
WebappDaoFactory wdf =(WebappDaoFactory)context.getAttribute("webappDaoFactory");
|
|
||||||
if( wdf == null ){
|
|
||||||
log.error("Cannot get webappDaoFactory from context");
|
|
||||||
return null;
|
|
||||||
}else
|
|
||||||
return wdf.getVClassGroupDao();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static String REBUILD_EVERY_PORTAL ="Rebuild every portal.";
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void contextDestroyed(ServletContextEvent arg0) {
|
public void contextDestroyed(ServletContextEvent sce) {
|
||||||
if( _cacheRebuildThread != null )
|
ServletContext servletContext = sce.getServletContext();
|
||||||
_cacheRebuildThread.kill();
|
Object o = servletContext.getAttribute(ATTRIBUTE_NAME);
|
||||||
}
|
if (o instanceof VClassGroupCache) {
|
||||||
|
VClassGroupCache cache = (VClassGroupCache) o;
|
||||||
@Override
|
cache.requestStop();
|
||||||
public void contextInitialized(ServletContextEvent arg0) {
|
}
|
||||||
arg0.getServletContext().setAttribute("VClassGroupCache", new VClassGroupCache(arg0.getServletContext()) );
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue