jdon运行时报错,请banq老师看看

12-08-31 mianwo602

banq老师今天看日志又发现有一个错误,具体的错误信息如下:
2012-08-28 07:07:49,093 [http-80-exec-8] ERROR com.jdon.util.Debug - com.jdon.aop.AopClient
java.lang.ArrayIndexOutOfBoundsException: 16
at java.util.ArrayList.add(Unknown Source)
at com.jdon.aop.interceptor.PoolInterceptor.isPoolabe(PoolInterceptor.java:166)
at com.jdon.aop.interceptor.PoolInterceptor.invoke(PoolInterceptor.java:87)
at com.jdon.aop.reflection.ProxyMethodInvocation.proceed(ProxyMethodInvocation.java:84)
at com.jdon.aop.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:58)
at com.jdon.aop.reflection.ProxyMethodInvocation.proceed(ProxyMethodInvocation.java:84)
at com.jdon.aop.AopClient.invoke(AopClient.java:95)
at com.jdon.bussinessproxy.dyncproxy.DynamicProxyWeaving.invoke(DynamicProxyWeaving.java:62)
at $Proxy15.getGroup_khForList(Unknown Source)
at com.jdon.strutsutil.T_memberModelViewAction.execute(T_memberModelViewAction.java:71)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at cn.vetech.framework.asms.AsmsFilter.doFilter(AsmsFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.jdon.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:92)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:163)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:401)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:281)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1568)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


isPoolabe的方法如下:
public boolean isPoolabe(TargetMetaDef targetMetaDef) {
boolean found = false;
if (isPoolableCache.contains(targetMetaDef.getName())) {
found = true;
} else if (!unPoolableCache.contains(targetMetaDef.getName())) {
Debug.logVerbose("[JdonFramework] check if it is a Poolable", module);
ContainerWrapper containerWrapper = containerCallback.getContainerWrapper();
Class thisCLass = containerWrapper.getComponentClass(targetMetaDef.getName());
if (Poolable.class.isAssignableFrom(thisCLass)) {
found = true;
isPoolableCache.add(targetMetaDef.getName());
} else {
unPoolableCache.add(targetMetaDef.getName());
}
}
return found;
}

unPoolableCache contains和add方法都会报错。

banq
2012-08-31 11:16

这个错误似曾经相见,但是如何fixed已经忘记。
你可将最新版对比一下:https://github.com/banq/jdonframework/blob/master/src/com/jdon/aop/interceptor/PoolInterceptor.java

如果再不行,难道又是ArrayList并发问题?换成并发的List?

mianwo602
2012-08-31 11:26

我对比过这个文件是一样的