Tacos Tapestry 在做实时刷新表格时内存溢出问题

ylyqsm 2007-01-07
最近在做一个实现定时刷新表格的组件,
使用的是tacos的tapestry组件实现Ajax+Tapestry

     我是用的是tacos的AjaxAutoInvoker定时(3秒)去触发AjaxEventSubmit动作,在AjaxEventSubmit动作中去不断更新table组件。

   但是使用过程中的问题是,在我的环境(Eclipse3.2+MyEclipse5+Tomcat5.5+JDK1.5.0_10)中,
   当刷新启动一段时间后,很快,Tomcat服务器就会出现内存溢出而挂掉,不知道是什么原因,
   如果刷新时间设置得更短,挂得更快!!换过JDK版本和更换为Resin服务器都不行。
   希望各位能指点,好让我早日走出迷途,为谢!!!


页面代码如下:  

  <form jwcid="@AjaxForm">
              <span jwcid="countryChangeEvent@tacos:AjaxEventSubmit"
                    updateComponents="ognl:{'table'}"
                    effects="template:{highlight:{any:'[255,255,184], 500, 500'}}" />

             <span jwcid="@tacos:AjaxAutoInvoker"
                        target="countryChangeEvent"
                        intervalMilliseconds="3000"/>

             <table jwcid="table@tacos:Table"
             effects="template:{highlight:{any:'[255,255,184], 500, 500'}}"
             source="ognl:items"
             columns="country:Code:country,
                      displayCountry:Name:displayCountry,
                      displayLanguage:Language:displayLanguage">
            </table>

  </form>
tapestry 2007-01-07
方便把java代码帖出来么
ylyqsm 2007-01-07
代码很简单,就是一个getItems方法
public IBasicTableModel getItems()
     { 
         return new IBasicTableModel()
         {  
             public int getRowCount()
             {   
                 return Locale.getAvailableLocales().length;  
             } 
             
             public Iterator getCurrentPageRows(int nFirst, int nPageSize, ITableColumn objSortColumn, boolean bSortOrder)
             {   
                 int count = Locale.getAvailableLocales().length;   
                 int begInIndex = nFirst;
          
                 int endIndex = nFirst + nPageSize -1;   
          
                 if (endIndex > count -1)
                 {    
                     endIndex = count -1;   
                 }   
                 List<Locale> result = new ArrayList<Locale>();   
           for(int i = begInIndex; i<=endIndex; i++ )
           {    
               result.add(Locale.getAvailableLocales()[i]);   
           }      
           return result.iterator();  
            }   
         };
      }
tapestry 2007-01-08
试试
public IBasicTableModel getItems()
{
return new IBasicTableModel()
{
public int getRowCount()
{
return Locale.getAvailableLocales().length;
}

public Iterator getCurrentPageRows(int nFirst, int nPageSize, ITableColumn objSortColumn, boolean bSortOrder)
{
Locale[] locales = Locale.getAvailableLocales();
int count = locales.length;
int begInIndex = nFirst;

int endIndex = nFirst + nPageSize -1;

if (endIndex > count -1)
{
endIndex = count -1;
}
List<Locale> result = new ArrayList<Locale>();
for(int i = begInIndex; i<=endIndex; i++ )
{
result.add(locales[i]);
}
return result.iterator();
}
};
}
ylyqsm 2007-01-08

  tapestry,谢谢你的回复!!

  问题已解决,
 
   原来是因为我之前测试都是在Eclipse内启动web服务器测试的,
改单独启动服务器的方式就不会有这样的问题。

    在Eclipse里,web服务器默认是依附在eclipse所在的进程上执行的(web服务器以进程内方式启动),单独运行服务器时,会单独启动进程来执行。
tapestry 2007-01-09
恩,我在eclipse里用jetty有时也出莫名其妙的问题,刷新一下就好了。
Global site tag (gtag.js) - Google Analytics