Hi

I having problem with @ConversationScope bean and h:commandLink component 
without ajax.
My application uses openwebbeans-1.1.8, myfaces-2.1.12, myfaces-extcdi-1.0.5, 
openejb-jstl-1.2, primefaces-4.0 and some other required libs.
The servlet container is Weblogic-10.3.6 (and apache-tomcat-7.0.53 for 
development needs).

Most conversation scoped beans in my application are used in forms which are 
submitted by ajax requests, so jsf implementation send queues requests.
But there h:commandLink component which actionListener is binded to the 
download method (which writes the content of generated file to the output 
stream and calls FacesContext.responceComplete) of conversation scoped bean. 
This functionality cannot be done with ajax requests and according to the 
application logic, I cannot exclude the conversation usage. So, there is no 
guarantee that user will not see the 500 error due to BusyConversationException 
(throwed from org.apache.webbeans.jsf.WebBeansPhaseListener).
I tried to move actionListener method to RequestScoped bean, but 
BusyConversationException throwing due RESTORE_VIEW phase, so this did not help.
My current workaround is disabling link by javascript for several seconds after 
the first onclick event. By it looks like dirty hack. Conversation scoped beans 
could live in non-ajax requests and there are no way to limit such requests 
from the browser to single queue, so just throwing BusyConversationException 
without waiting is not good tactics.

Does it exists any way to avoid BusyConversationException (i.e. hung up the 
thread till conversation unlock or just allow multiple threads to use single 
conversation or, may be, there any servlet filter which could organize single 
request queue per conversation)?

Regards,
Andrey

Reply via email to