J'ai une application très simple avec seulement 2 pages sur WebLogic 10.3.2 (11g), Seam 2.2.0.GA. J'ai un bouton de commande dans chacun, ce qui fait une redirection après post à l'autre. Cela fonctionne bien, car je vois l'URL de la page actuelle que je vois dans la barre d'adresse.Aucune conversation de longue durée - IllegalArgumentException: La pile ne doit pas être nulle
MAIS, même si je pas de conversations long en cours d'exécution définies, après un nombre aléatoire de clics, et - je pense - après un nombre aléatoire de secondes (~ 10s - 60s) Je reçois la belle exception à la fin de ce post.
Maintenant, si je comprends comment des conversations travail temporaire lors de la redirection cela se produit:
- Quand je vois ma demande, l'URL est http://localhost:7001/myapp
Lorsque je clique sur le bouton pageA.xhtml, Je me retrouve dans "pageB.xhtml? Cid = 26". Ceci est normal car Seam prolonge la conversation temporaire de la première requête jusqu'à la phase renderResponse de la redirection. Ainsi, il utilise le cid (Conversation Id) de la conversation temporaire étendue pour trouver les paramètres propagés.
Lorsque je clique sur le bouton dans pageB.xhtml, je me retrouve dans pageA.xhtml? Cid = 26
Le même cid a été donné à la nouvelle conversation temporaire prolongée. Ceci est normal car la conversation s'est terminée à la fin de la précédente redirection après publication, et non le numéro 26 est libre d'utiliser en tant que cid.
Est-ce que tout est correct? Si oui, pourquoi cela arrive-t-il? Si je tape à nouveau l'adresse du domicile des applications (pageA) et que je clique de nouveau, je me retrouve dans la pageB.xhtml? Cid = 29, qui est un nombre différent de 26. Mais 26 est terminé après la phase RenderResponse précédente, befire je re-tape l'URL. Pourquoi n'est-il pas utilisé au lieu de 29?
Donc, pour sup up, 2 questions:
- Pourquoi dois-je obtenir l'exception, même si je ne l'ai pas commencé des conversations en cours d'exécution à long?
- Que se passe-t-il exactement avec le cid? Sur quelle base cela change-t-il?
Cheers,
MISE À JOUR:
Informations complémentaires: J'utilise h: commandButtons comme celui-ci en page A:
<h:commandButton action="showPageB" value="Show page B" />
et page B
<h:commandButton action="showPageA" value="Show page A" />
page de navigationA.page.xml:
<page view-id="/pageA.xhtml">
<navigation>
<rule if-outcome="showPageB">
<redirect view-id="/pageB.xhtml" />
</rule>
</navigation>
</page>
et un très similaire pour pageB. En ce qui concerne le délai d'expiration de la conversation, je l'ai réglé sur 1h.Notez que ce n'est pas pertinent, car en lisant here, il est uniquement destiné aux conversations en arrière-plan. La piletrace suit:
Error 500--Internal Server Error
java.lang.IllegalArgumentException: Stack must not be null
at org.jboss.seam.core.ConversationEntry.(ConversationEntry.java:45)
at org.jboss.seam.core.ConversationEntries.createConversationEntry(ConversationEntries.java:53)
at org.jboss.seam.core.Manager.createConversationEntry(Manager.java:664)
at org.jboss.seam.core.Manager.beforeRedirect(Manager.java:836)
at org.jboss.seam.faces.FacesManager.beforeRedirect(FacesManager.java:66)
at org.jboss.seam.faces.FacesManager.redirect(FacesManager.java:182)
at org.jboss.seam.faces.Navigator.redirect(Navigator.java:55)
at org.jboss.seam.navigation.RedirectNavigationHandler.navigate(RedirectNavigationHandler.java:61)
at org.jboss.seam.navigation.Rule.execute(Rule.java:101)
at org.jboss.seam.navigation.Navigation.navigate(Navigation.java:58)
at org.jboss.seam.navigation.Pages.navigate(Pages.java:203)
at org.jboss.seam.jsf.SeamNavigationHandler.handleNavigation(SeamNavigationHandler.java:42)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:130)
at javax.faces.component.UICommand.broadcast(UICommand.java:387)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:324)
at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:299)
at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:256)
at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:469)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:530)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3592)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2202)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
@Markos Fragkakis intéressants, Pouvez-vous montrer votre StackTrace? Utilisez-vous SLink ou sButton pour naviguer entre vos pages? Quelle valeur (milliseconde) définissez-vous pour l'attribut core-time-time de CoreManager? –
@ Arthur, s'il vous plaît voir la mise à jour –
Pour chaque page, voir ce que # {conversation.longRunning} sorties: vrai ou faux? –