Also, after keeping the page up for a while (about 10 minutes), I get
the following stack:
15:15:28.546 WARN!! Exception for
/quickstart/app?wicket:interface=:21:wmc:-1:IUnversionedBehaviorListener&wicket:behaviorId=0&random=0.05419159267419782
wicket.WicketRuntimeException: Internal Error: Could not render error
page class wicket.markup.html.pages.InternalErrorPage
at
wicket.request.compound.DefaultExceptionResponseStrategy.respond(DefaultExceptionResponseStrategy.java:97)
at
wicket.request.compound.AbstractCompoundRequestCycleProcessor.respond(AbstractCompoundRequestCycleProcessor.java:76)
at wicket.RequestCycle.step(RequestCycle.java:971)
at wicket.RequestCycle.steps(RequestCycle.java:1005)
at wicket.RequestCycle.request(RequestCycle.java:451)
at wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:208)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:358)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:294)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1807)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:525)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1757)
at org.mortbay.http.HttpServer.service(HttpServer.java:879)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:790)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:961)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:807)
at
org.mortbay.http.SocketListener.handleConnection(SocketListener.java:218)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:300)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:511)
Caused by: java.lang.ClassCastException:
wicket.ajax.AjaxRequestTarget$EncodingResponse
at
wicket.protocol.http.WebRequestCycle.getWebResponse(WebRequestCycle.java:99)
at
wicket.protocol.http.WebRequestCycle.redirectTo(WebRequestCycle.java:130)
at
wicket.request.target.component.PageRequestTarget.respond(PageRequestTarget.java:60)
at
wicket.request.compound.DefaultResponseStrategy.respond(DefaultResponseStrategy.java:47)
at
wicket.request.compound.AbstractCompoundRequestCycleProcessor.respond(AbstractCompoundRequestCycleProcessor.java:66)
at wicket.RequestCycle.respond(RequestCycle.java:877)
at wicket.RequestCycle.step(RequestCycle.java:946)
... 18 more
Ramnivas Laddad wrote:
Hi,
I now have an AJAXified listview working. However, occasionally (very
frequently on a real application and less frequently on a simplified
application :-() it crashes (program and stack trace at the end of
this email).
I have an updater thread that adds new entries to the model for the
listview.
A few observations:
1. In the onRender() method, size returned by getViewSize() is 1, and
the index of the item to be rendered is 1. This all seems correct, as
the updater thread has just added a new item. However, item returned
by (ListItem)get(Integer.toString(index)) is null.
2. When the crashed view is re-rendered, I do no see the following
snippet in markup produced:
<script language="JavaScript"
type="text/javascript"
src="/resources/wicket.ajax.AbstractDefaultAjaxBehavior/wicket-ajax.js">
</script>
As a result, no AJAX updates take place.
While it seems to be concurrency-related bug, the model itself as I
have written seems thread-safe.
Thanks.
-Ramnivas
Source code:
==========
public class AJAXListHome extends WebPage {
public AJAXListHome() {
TestModel model = new TestModel();
WebMarkupContainer wmc = new WebMarkupContainer("wmc");
add(wmc);
ListView testListView = new TestListView("dates", model);
wmc.add(testListView);
wmc.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(2)));
new Thread(new TestModelUpdater(model,
testListView)).start();
}
}
class TestListView extends ListView {
public TestListView(String id, TestModel model) {
super(id, model);
}
@Override
protected void populateItem(ListItem item) {
String date = (String)item.getModelObject();
item.add(new Label("date", date));
}
}
class TestModel implements IModel {
private List<String> underlying = new ArrayList<String>();
synchronized public Object getObject(Component component) {
return underlying;
}
synchronized public void add(String message) {
underlying.add(message);
}
public IModel getNestedModel() {
return null;
}
public void setObject(Component component, Object object) {
}
public void detach() {
}
}
class TestModelUpdater implements Runnable {
private TestModel model;
private Component view;
static int counter = 0;
public TestModelUpdater(TestModel model, Component view) {
this.model = model;
this.view = view;
}
public void run() {
while(true) {
model.add("string" + counter);
// notifying model doesn't seem to be required; should it
be notified?
// view.modelChanged();
counter++;
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException ignored) {
}
}
}
}
===
Stack trace:
Root cause:
java.lang.NullPointerException
at wicket.markup.html.list.ListView.renderItem(ListView.java:606)
at wicket.markup.html.list.ListView.onRender(ListView.java:567)
at wicket.Component.render(Component.java:1516)
at wicket.MarkupContainer.renderNext(MarkupContainer.java:1206)
at
wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:875)
at wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:795)
at wicket.Component.renderComponent(Component.java:1602)
at wicket.MarkupContainer.onRender(MarkupContainer.java:805)
at wicket.Component.render(Component.java:1516)
at wicket.MarkupContainer.renderNext(MarkupContainer.java:1206)
at
wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:875)
at wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:795)
at wicket.Component.renderComponent(Component.java:1602)
at wicket.MarkupContainer.onRender(MarkupContainer.java:805)
at wicket.Component.render(Component.java:1516)
at wicket.MarkupContainer.renderNext(MarkupContainer.java:1206)
at wicket.MarkupContainer.renderAll(MarkupContainer.java:822)
at wicket.Page.onRender(Page.java:846)
at wicket.Component.render(Component.java:1516)
at wicket.Page.doRender(Page.java:390)
at
wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:224)
at
wicket.request.compound.DefaultResponseStrategy.respond(DefaultResponseStrategy.java:47)
at
wicket.request.compound.AbstractCompoundRequestCycleProcessor.respond(AbstractCompoundRequestCycleProcessor.java:66)
at wicket.RequestCycle.doProcessEventsAndRespond(RequestCycle.java:824)
at wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:851)
at wicket.RequestCycle.step(RequestCycle.java:931)
at wicket.RequestCycle.steps(RequestCycle.java:1005)
at wicket.RequestCycle.request(RequestCycle.java:451)
at wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:208)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:358)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:294)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1807)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:525)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1757)
at org.mortbay.http.HttpServer.service(HttpServer.java:879)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:790)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:961)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:807)
at
org.mortbay.http.SocketListener.handleConnection(SocketListener.java:218)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:300)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:511)
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting
language
that extends applications into web and mobile media. Attend the live
webcast
and join the prime developer group breaking into this new coding
territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user