I'm trying to get AJAX working correctly with SESAT, but I've encountered a
problem using commands=&waitFor=<command name>
First, here's what I've done so far:
views.xml:
<tab id="ajaxtest" key="ajaxtest" mode="ajaxtest">
<layout origin="defaultAjaxSearch" main="ajaxtest"/>
</tab>
modes.xml:
<mode id="ajaxtest" inherit="default-mode">
<yahoo-idp-command id="defaultAjaxSearch" results-to-return="10"
inherit="default-web-command" asynchronous="true"/>
<whitepages-command id="whiteCounter"
inherit="default-whitepageNavigator"/>
</mode>
ajaxtest.vm:
defaultAjaxSearch, Hits:
$datamodel.getSearch("defaultAjaxSearch").results.hitCount<br />
white, Hits: $datamodel.getSearch("defaultSearch").results.hitCount<br />
Now, /search/?c=ajaxtest&q=sesat reads:
defaultAjaxSearch, Hits:
$datamodel.getSearch("defaultAjaxSearch").results.hitCount
white, Hits: 0
.. which is as expected, since defaultAjaxSearch is marked as asynchronous.
But (right after) when I try to fetch the defaultAjaxSearch result
/search/?c=ajaxtest&q=sesat&commands=&waitFor=defaultAjaxSearch reads:
defaultAjaxSearch, Hits:
$datamodel.getSearch("defaultAjaxSearch").results.hitCount
white, Hits: $datamodel.getSearch("whiteCounter").results.hitCount
Should this not use the previous defaultAjaxSearch command as stated in the
(afaik not yet released) AJAX tutorial:
> commands=&waitFor=defaultSearch disables all commands from running but asks
> to wait for the command to finish. This presumes that a previous request
> started the command. This demonstrates how commands are stored in the
> datamodel between requests and how asynchronous commands can be initiated
> by the original request, but not used in that request's output, and their
> results used via a second request, eg an ajax call, later on.
Am I missing something? Both requests use the same JSESSIONID.
I see this in the log file for the "/search/?c=ajaxtest&q=sesat" request:
ERROR 12:47:29,380 [localhost:8080/ pool-3-thread-4 [YahooIDPWorld]]
(a7872530-acfe-413d-8944-6503acc3350b) AbstractSearchCommand: RuntimeException
occurred
java.lang.reflect.UndeclaredThrowableException
at $Proxy7.setSearch(Unknown Source)
at
no.sesat.search.result.handler.DataModelResultHandler.handleResult(DataModelResultHandler.java:111)
at
no.sesat.search.mode.command.AbstractSearchCommand.performResultHandling(AbstractSearchCommand.java:564)
at
no.sesat.search.mode.command.AbstractSearchCommand.call(AbstractSearchCommand.java:250)
at
no.sesat.search.mode.command.AbstractSearchCommand.call(AbstractSearchCommand.java:98)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:637)
Caused by: no.sesat.search.datamodel.access.DataModelAccessException: Failure
to honour the Access control annotations on setSearch against VIEW_CONSTRUCTION
at
no.sesat.search.datamodel.BeanDataObjectInvocationHandler.assureAccessAllowed(BeanDataObjectInvocationHandler.java:394)
at
no.sesat.search.datamodel.BeanDataNodeInvocationHandler.invoke(BeanDataNodeInvocationHandler.java:132)
... 10 more
Is this related? (And should I file a bug report?)
--
Magne
_______________________________________________
Kernel-development mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-development