Fixed connection leak from within Global Refresher.

This commit is contained in:
dubtraxis 2003-10-22 14:25:16 +00:00
parent 538d753f28
commit ded733a200
7 changed files with 87 additions and 22 deletions

View file

@ -41,11 +41,11 @@
</parameter> </parameter>
<parameter> <parameter>
<name>maxIdle</name> <name>maxIdle</name>
<value>2</value> <value>7</value>
</parameter> </parameter>
<parameter> <parameter>
<name>maxActive</name> <name>maxActive</name>
<value>4</value> <value>15</value>
</parameter> </parameter>
</ResourceParams> </ResourceParams>
@ -89,11 +89,11 @@
</parameter> </parameter>
<parameter> <parameter>
<name>maxIdle</name> <name>maxIdle</name>
<value>2</value> <value>7</value>
</parameter> </parameter>
<parameter> <parameter>
<name>maxActive</name> <name>maxActive</name>
<value>4</value> <value>15</value>
</parameter> </parameter>
</ResourceParams> </ResourceParams>

View file

@ -243,7 +243,12 @@ public class DisplayHelper
*/ */
public String getFormattedDate() public String getFormattedDate()
{ {
return DATE_FORMAT.format( getDate() ); String date = null;
if ( null != getDate() )
{
date = DATE_FORMAT.format( getDate() );
}
return date;
} }
// helpers // helpers

View file

@ -17,6 +17,8 @@ public class Global
private static long lastRefresh; private static long lastRefresh;
private int entryCount; private int entryCount;
private List recentTerms; private List recentTerms;
private final GlobalRefresher REFRESHER = new GlobalRefresher();
private final Thread REFRESHER_THREAD = new Thread( REFRESHER );
/** /**
@ -110,7 +112,7 @@ public class Global
*/ */
public void setRecentTerms( List recentTerms ) public void setRecentTerms( List recentTerms )
{ {
this.recentTerms = recentTerms; this.recentTerms = Collections.synchronizedList( recentTerms );
setLastRefresh( System.currentTimeMillis() ); setLastRefresh( System.currentTimeMillis() );
} }
@ -182,8 +184,17 @@ public class Global
*/ */
public void doRefresh() throws LexRepositoryException public void doRefresh() throws LexRepositoryException
{ {
GlobalRefresher gr = new GlobalRefresher(); LexLogger.info( "Checking if GlobalRefresher is busy..." );
new Thread( gr ).start(); if ( REFRESHER.getFinished() )
{
LexLogger.info( "GlobalRefresher is not busy. Starting refresh..." );
REFRESHER.setFinished( false );
REFRESHER_THREAD.start();
}
else
{
LexLogger.info( "GlobalRefresher was busy. Refresh not started..." );
}
} }
@ -214,6 +225,31 @@ public class Global
*/ */
class GlobalRefresher implements Runnable class GlobalRefresher implements Runnable
{ {
private boolean finished;
/**
* Sets the finished attribute of the GlobalRefresher object
*
* @param finished The new finished value
*/
private void setFinished( boolean finished )
{
this.finished = finished;
}
/**
* Gets the finished attribute of the GlobalRefresher object
*
* @return The finished value
*/
private boolean getFinished()
{
return finished;
}
/** /**
* Main processing method for the GlobalRefresher object * Main processing method for the GlobalRefresher object
*/ */
@ -222,7 +258,18 @@ public class Global
int limit = getRecentTermsCount(); int limit = getRecentTermsCount();
try try
{ {
LexLogger.info( "GlobalRefresher is starting a refresh..." );
setRecentTerms( LexComponentRepository.getRecentTerms( limit ) ); setRecentTerms( LexComponentRepository.getRecentTerms( limit ) );
/*
ILexComponent ilc = null;
for ( Iterator it = getRecentTerms().iterator(); it.hasNext(); ilc = (ILexComponent) it.next() )
{
ilc.getMeta();
}
*/
LexComponentRepository.cleanup();
LexLogger.info( "GlobalRefresher finished a refresh..." );
setFinished( true );
} }
catch ( Exception e ) catch ( Exception e )
{ {
@ -231,14 +278,17 @@ public class Global
String stackTrace = writer.getBuffer().toString(); String stackTrace = writer.getBuffer().toString();
LexLogger.error( "GlobalRefresher Thread caught an Exception: " + stackTrace ); LexLogger.error( "GlobalRefresher Thread caught an Exception: " + stackTrace );
} }
setFinished( true );
} }
/** /**
*Constructor for the GlobalRefresher object *Constructor for the GlobalRefresher object
*/ */
GlobalRefresher() { } GlobalRefresher()
{
setFinished( true );
}
} }
} }

View file

@ -369,8 +369,10 @@ public class LexComponentRepository
String queryString = " FROM org.thdl.lex.component.ITerm ORDER BY modifiedOn DESC LIMIT " + limit; String queryString = " FROM org.thdl.lex.component.ITerm ORDER BY modifiedOn DESC LIMIT " + limit;
try try
{ {
beginTransaction();
query = getSession().createQuery( queryString ); query = getSession().createQuery( queryString );
results = query.list(); results = query.list();
endTransaction( false );
} }
catch ( HibernateException he ) catch ( HibernateException he )
{ {

View file

@ -18,6 +18,7 @@ import org.thdl.lex.component.*;
public class LexLogger public class LexLogger
{ {
private final static Logger LOGGER = Logger.getLogger( "org.thdl.lex" ); private final static Logger LOGGER = Logger.getLogger( "org.thdl.lex" );
private final static List EXCLUDED_PARAMS = Arrays.asList( new String[]{"org.apache.catalina.jsp_classpath", "javax.servlet.context.tempdir", "org.apache.catalina.WELCOME_FILES"} );
/** /**
@ -87,8 +88,11 @@ public class LexLogger
while ( enum.hasMoreElements() ) while ( enum.hasMoreElements() )
{ {
String att = (String) enum.nextElement(); String att = (String) enum.nextElement();
if ( !EXCLUDED_PARAMS.contains( att ) )
{
LOGGER.debug( "Context Attribute " + att + " = " + context.getAttribute( att ) ); LOGGER.debug( "Context Attribute " + att + " = " + context.getAttribute( att ) );
} }
}
debugComponent( context.getAttribute( LexConstants.GLOBAL_CONTEXT_ATTR ) ); debugComponent( context.getAttribute( LexConstants.GLOBAL_CONTEXT_ATTR ) );
} }

View file

@ -76,6 +76,10 @@ public class DisplayCommand extends LexCommand implements Command
{ {
LexComponentRepository.loadTermByPk( term ); LexComponentRepository.loadTermByPk( term );
query.setEntry( term ); query.setEntry( term );
if ( query.getResults().keySet().size() < 1 )
{
query.getResults().put( term.getMetaId(), term.getTerm() );
}
} }
displayHelper.populate( req.getParameterMap() ); displayHelper.populate( req.getParameterMap() );

View file

@ -7,24 +7,24 @@
<!--TERM--> <!--TERM-->
<h1><c:out value="${ query.entry.term }" /></h1> <h1><c:out value="${ sessionScope.visit.query.entry.term }" /></h1>
<p class="data" > <p class="data" >
<c:out value='<a name="${ query.entry }" ></a>' escapeXml="false" /> <c:out value='<a name="${ sessionScope.visit.query.entry }" ></a>' escapeXml="false" />
<c:if test="${ editMode }"> <c:if test="${ editMode }">
<span class="compEditOptions"> <span class="compEditOptions">
<c:out value='<a href="/lex/action?cmd=getUpdateTermForm&amp;comp=term&amp;metaId=${ query.entry.metaId }" label="Edit Term"><img alt="Edit Term" src="/lex/images/edit.gif"/></a>' escapeXml="false" /> <c:out value='<a href="/lex/action?cmd=getUpdateTermForm&amp;comp=term&amp;metaId=${ sessionScope.visit.query.entry.metaId }" label="Edit Term"><img alt="Edit Term" src="/lex/images/edit.gif"/></a>' escapeXml="false" />
<c:out value='<a href="/lex/action?cmd=getAnnotationForm&amp;comp=term&amp;metaId=${query.entry.metaId}" label="Add Analytical Note"><img alt="Add Analytical Note" src="/lex/images/note.gif"/></a>' escapeXml="false" /> <c:out value='<a href="/lex/action?cmd=getAnnotationForm&amp;comp=term&amp;metaId=${sessionScope.visit.query.entry.metaId}" label="Add Analytical Note"><img alt="Add Analytical Note" src="/lex/images/note.gif"/></a>' escapeXml="false" />
<c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=pronunciation&amp;parentId=${query.entry.metaId}" label="Add Pronunciation"><img alt="Add Pronunciation" src="/lex/images/pron.gif"/></a>' escapeXml="false" /> <c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=pronunciation&amp;parentId=${sessionScope.visit.query.entry.metaId}" label="Add Pronunciation"><img alt="Add Pronunciation" src="/lex/images/pron.gif"/></a>' escapeXml="false" />
<c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=etymology&amp;parentId=${query.entry.metaId}" label="Add Etymology"><img alt="Add Etymology" src="/lex/images/etym.gif"/></a>' escapeXml="false" /> <c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=etymology&amp;parentId=${sessionScope.visit.query.entry.metaId}" label="Add Etymology"><img alt="Add Etymology" src="/lex/images/etym.gif"/></a>' escapeXml="false" />
<c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=spelling&amp;parentId=${query.entry.metaId}" label="Add Spelling"><img alt="Add Spelling" src="/lex/images/spell.gif"/></a>' escapeXml="false" /> <c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=spelling&amp;parentId=${sessionScope.visit.query.entry.metaId}" label="Add Spelling"><img alt="Add Spelling" src="/lex/images/spell.gif"/></a>' escapeXml="false" />
<c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=grammaticalFunction&amp;parentId=${query.entry.metaId}" label="Add Grammatical Function"><img alt="Add a Grammatical Function" src="/lex/images/gram.gif"/></a>' escapeXml="false" /> <c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=grammaticalFunction&amp;parentId=${sessionScope.visit.query.entry.metaId}" label="Add Grammatical Function"><img alt="Add a Grammatical Function" src="/lex/images/gram.gif"/></a>' escapeXml="false" />
<c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=encyclopediaArticle&amp;parentId=${query.entry.metaId}" label="Add Encyclopedia Article"><img alt="Add Encyclopedia Article" src="/lex/images/ency.gif"/></a>' escapeXml="false" /> <c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=encyclopediaArticle&amp;parentId=${sessionScope.visit.query.entry.metaId}" label="Add Encyclopedia Article"><img alt="Add Encyclopedia Article" src="/lex/images/ency.gif"/></a>' escapeXml="false" />
<c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=definition&amp;parentId=${query.entry.metaId}" label="Add Definition"><img alt="Add Definition" src="/lex/images/def.gif"/></a>' escapeXml="false" /> <c:out value='<a href="/lex/action?cmd=getInsertForm&amp;comp=definition&amp;parentId=${sessionScope.visit.query.entry.metaId}" label="Add Definition"><img alt="Add Definition" src="/lex/images/def.gif"/></a>' escapeXml="false" />
</span> </span>
</c:if> </c:if>
<!--metadata--> <!--metadata-->
<c:set target="${ sessionScope.visit.helper }" property="component" value="${ query.entry }" /> <c:set target="${ sessionScope.visit.helper }" property="component" value="${ sessionScope.visit.query.entry }" />
<jsp:include page="displayMeta.jsf" /> <jsp:include page="displayMeta.jsf" />
<!--notes--> <!--notes-->