Hi Gilberto, Since you are using OpenJPA you might want to read the last comment here[1]. Basically OpenJPA returns read-only lists from queries so when Click tries to reorder the list, it trips over the USO exception.
There are various options available to work around this. - Copy the result list from OpenJPA into a new list and pass that to Click -> new ArrayList(openJPAList). - Perform sorting manually in a DAO or service layer For example perform sorting in the DB then inform Table that the rowList is already sorted -> table.setSorted(true); - If you have a very large result set you might want to use a PagingDataProvider (introduced in 2.2.0). Here is an example[2] with sourcecode[3]: Does that help? Kind regards Bob [1]: http://openjpa.208410.n2.nabble.com/How-to-remove-an-entity-from-a-result-list-error-result-list-is-read-only-td209686.html [2]: http://www.avoka.com/click-examples/table/large-dataset-demo.htm [3]: http://www.avoka.com/click-examples/source-viewer.htm?filename=WEB-INF/classes/org/apache/click/examples/page/table/LargeDatasetDemo.java On 15/05/2010 04:51, Gilberto C. Andrade wrote: > OS: opensuse 11.2 > JAVA: java-1.6.0-openjdk > CLICK: 2.1.0 > > Hi, > > I'm getting that exception when clicking on table column - to order it: > <quote> > [Click] [debug] GET http://localhost:8080/legalEntity.htm > 169847 parkPU TRACE [qtp10023762-18] openjpa.jdbc.SQL - <t 26457604, > conn 6592395> executing prepstmnt 31538403 SELECT t1.id <http://t1.id>, > t1.p_type, t1.version, t1.address, t1.name <http://t1.name>, > t0.dt_foundation, t0.taxpayers_id FROM park.legal_entity t0 INNER JOIN > park.person t1 ON t0.person_id = t1.id <http://t1.id> WHERE t1.p_type = > ? [params=(String) LE] > 169847 parkPU TRACE [qtp10023762-18] openjpa.jdbc.SQL - <t 26457604, > conn 6592395> [0 ms] spent > [Click] [error] Velocity: Exception rendering #parse(/legalEntity.htm) > at /border-template.htm[line 22, column 13] > [Click] [error] handleException: > java.lang.UnsupportedOperationException: Result lists are read-only. > at > org.apache.openjpa.lib.rop.AbstractListIterator.set(AbstractListIterator.java:42) > at > org.apache.openjpa.lib.rop.ResultListIterator.set(ResultListIterator.java:33) > at > org.apache.openjpa.kernel.DelegatingResultList$DelegatingListIterator.set(DelegatingResultList.java:445) > at java.util.Collections.sort(Collections.java:180) > at org.apache.click.control.Table.sortRowList(Table.java:1767) > at org.apache.click.control.Table.render(Table.java:1333) > at > org.apache.click.control.AbstractControl.toString(AbstractControl.java:838) > at > org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:393) > at > org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336) > at org.apache.velocity.runtime.directive.Parse.render(Parse.java:260) > at > org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175) > at > org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336) > at org.apache.velocity.Template.merge(Template.java:328) > at org.apache.velocity.Template.merge(Template.java:235) > at > org.apache.click.service.VelocityTemplateService.renderTemplate(VelocityTemplateService.java:350) > at org.apache.click.ClickServlet.renderTemplate(ClickServlet.java:810) > at org.apache.click.ClickServlet.performRender(ClickServlet.java:769) > at org.apache.click.ClickServlet.processPage(ClickServlet.java:542) > at org.apache.click.ClickServlet.handleRequest(ClickServlet.java:363) > at org.apache.click.ClickServlet.doGet(ClickServlet.java:266) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) > at > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530) > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:427) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) > at > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:494) > at > org.eclipse.jetty.server.session.SessionHandler.handle(SessionHandler.java:182) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:933) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) > at > org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245) > at > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113) > at org.eclipse.jetty.server.Server.handle(Server.java:334) > at > org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559) > at > org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:992) > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:541) > at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:203) > at > org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436) > at java.lang.Thread.run(Thread.java:636) > [Click] [error] handleError: org.eclipse.jetty.io.RuntimeIOException > thrown while handling java.lang.UnsupportedOperationException. Now > throwing RuntimeException.org.eclipse.jetty.io.RuntimeIOException: > java.io.IOException: Closed > at > org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:187) > at > org.apache.velocity.io.VelocityWriter.flushBuffer(VelocityWriter.java:129) > at org.apache.velocity.io.VelocityWriter.flush(VelocityWriter.java:153) > at > org.apache.click.service.VelocityTemplateService.renderTemplate(VelocityTemplateService.java:377) > at org.apache.click.ClickServlet.renderTemplate(ClickServlet.java:810) > at org.apache.click.ClickServlet.performRender(ClickServlet.java:769) > at org.apache.click.ClickServlet.processPage(ClickServlet.java:542) > at org.apache.click.ClickServlet.handleException(ClickServlet.java:473) > at org.apache.click.ClickServlet.handleRequest(ClickServlet.java:370) > at org.apache.click.ClickServlet.doGet(ClickServlet.java:266) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) > at > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530) > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:427) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) > at > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:494) > at > org.eclipse.jetty.server.session.SessionHandler.handle(SessionHandler.java:182) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:933) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) > at > org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245) > at > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113) > at org.eclipse.jetty.server.Server.handle(Server.java:334) > at > org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559) > at > org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:992) > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:541) > at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:203) > at > org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436) > at java.lang.Thread.run(Thread.java:636) > Caused by: java.io.IOException: Closed > at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:138) > at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:86) > at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:126) > at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:258) > at > org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:178) > ... 32 more > </quote> > > In my class (attached) I just use a Table and Form class, nothing so > complex. Is there anything wrong with this approach? > > Regards, > > Gilberto > >
