Uploaded image for project: 'Solder'
  1. Solder
  2. SOLDER-182

Error while catching NonexistentConversationException

    Details

    • Type: Bug
    • Status: Open (View Workflow)
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 3.0.0.Beta2
    • Fix Version/s: Future
    • Component/s: Exception Handling
    • Labels:
      None
    • Environment:
      Glassfish 3.1 M2 (b41), weld 1.1 patched with Stuart's WELD-846 patch.

      Description

      I have a Faces app, with the exception handler:
      void conversationExpired(@Handles CaughtException<NonexistentConversationException> t)

      {...}

      When I pull up a URL with an invalid cid, I get the stacktrace below.

      Stacktrace:
      ---------------
      java.lang.RuntimeException: Exception invoking method [conversationExpired] on object [ca.triumf.mis.qms.workrequest.jsf.exception.ExceptionCatchHandler@264d6a2c], using arguments [org.jboss.seam.exception.control.CaughtException@24758259]
      at org.jboss.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:547)
      at org.jboss.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:458)
      at org.jboss.seam.solder.reflection.annotated.InjectableMethod.invoke(InjectableMethod.java:189)
      at org.jboss.seam.exception.control.HandlerMethodImpl.notify(HandlerMethodImpl.java:189)
      at org.jboss.seam.exception.control.ExceptionHandlerDispatch.executeHandlers(ExceptionHandlerDispatch.java:129)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:305)
      at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)
      at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:163)
      at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:299)
      at org.jboss.weld.introspector.jlr.WeldMethodImpl.invokeOnInstance(WeldMethodImpl.java:188)
      at org.jboss.weld.introspector.ForwardingWeldMethod.invokeOnInstance(ForwardingWeldMethod.java:59)
      at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:198)
      at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:270)
      at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
      at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:222)
      at org.jboss.weld.manager.BeanManagerImpl.notifyObservers(BeanManagerImpl.java:632)
      at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:619)
      at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:613)
      at org.jboss.seam.faces.exception.CatchExceptionHandler.handle(CatchExceptionHandler.java:81)
      at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
      at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:113)
      at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
      at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
      at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:787)
      at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)
      at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:483)
      at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)
      at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)
      at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)
      at org.apache.catalina.authenticator.FormAuthenticator.forwardToLoginPage(FormAuthenticator.java:465)
      at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:253)
      at com.sun.web.security.RealmAdapter.invokeAuthenticateDelegate(RealmAdapter.java:1192)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:551)
      at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:623)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
      at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
      at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
      at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
      at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
      at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
      at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
      at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
      at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
      at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
      at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
      at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
      at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
      at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
      at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
      at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
      at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
      at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
      at java.lang.Thread.run(Thread.java:662)
      Caused by: java.lang.IllegalStateException: Unable to load current conversations from the associated request, something went badly wrong when associate() was called
      at org.jboss.weld.context.AbstractConversationContext.getCurrentConversation(AbstractConversationContext.java:413)
      at org.jboss.weld.jsf.ConversationAwareViewHandler.getActionURL(ConversationAwareViewHandler.java:91)
      at com.sun.faces.application.view.MultiViewHandler.getRedirectURL(MultiViewHandler.java:381)
      at javax.faces.application.ViewHandlerWrapper.getRedirectURL(ViewHandlerWrapper.java:204)
      at javax.faces.application.ViewHandlerWrapper.getRedirectURL(ViewHandlerWrapper.java:204)
      at org.jboss.weld.jsf.ConversationAwareViewHandler.getRedirectURL(ConversationAwareViewHandler.java:134)
      at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:166)
      at org.jboss.seam.faces.event.SeamPreNavigationHandler.handleNavigation(SeamPreNavigationHandler.java:77)
      at ca.triumf.mis.qms.workrequest.jsf.exception.ExceptionCatchHandler.conversationExpired(ExceptionCatchHandler.java:27)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.jboss.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:535)
      ... 59 more

        Gliffy Diagrams

          Activity

          Hide
          bleathem Brian Leathem added a comment -

          Jason said this was a Weld issue. I filed WELD-855.

          Show
          bleathem Brian Leathem added a comment - Jason said this was a Weld issue. I filed WELD-855 .
          Hide
          bleathem Brian Leathem added a comment -

          The handler class:

          package ca.triumf.mis.qms.workrequest.jsf.exception;

          import java.util.logging.Logger;
          import javax.enterprise.context.BusyConversationException;
          import javax.enterprise.context.NonexistentConversationException;
          import javax.faces.application.ViewExpiredException;
          import javax.faces.context.FacesContext;
          import javax.inject.Inject;
          import org.jboss.seam.exception.control.CatchResource;
          import org.jboss.seam.exception.control.CaughtException;
          import org.jboss.seam.exception.control.Handles;
          import org.jboss.seam.exception.control.HandlesExceptions;

          /**
          *

          • @author bleathem
            */
            @HandlesExceptions
            public class ExceptionCatchHandler {
            private static final Logger logger = Logger.getLogger(ExceptionCatchHandler.class.getName());

          void conversationExpired(@Handles CaughtException<NonexistentConversationException> t)

          { FacesContext fc = FacesContext.getCurrrentInstance(); fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "/error/conversationExpired.xhtml?faces-redirect=true"); logger.fine("Redirecting navigation - conversation busy/expired."); fc.renderResponse(); }

          void viewExpired(@Handles CaughtException<ViewExpiredException> t)

          { FacesContext fc = FacesContext.getCurrrentInstance(); fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "/error/conversationExpired.xhtml?faces-redirect=true"); logger.fine("Redirecting navigation - view expired."); fc.renderResponse(); }

          void busyConversation(@Handles CaughtException<BusyConversationException> t)

          { FacesContext fc = FacesContext.getCurrrentInstance(); fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "/error/conversationExpired.xhtml?faces-redirect=true"); logger.fine("Redirecting navigation - conversation busy."); fc.renderResponse(); }

          }

          Show
          bleathem Brian Leathem added a comment - The handler class: package ca.triumf.mis.qms.workrequest.jsf.exception; import java.util.logging.Logger; import javax.enterprise.context.BusyConversationException; import javax.enterprise.context.NonexistentConversationException; import javax.faces.application.ViewExpiredException; import javax.faces.context.FacesContext; import javax.inject.Inject; import org.jboss.seam.exception.control.CatchResource; import org.jboss.seam.exception.control.CaughtException; import org.jboss.seam.exception.control.Handles; import org.jboss.seam.exception.control.HandlesExceptions; /** * @author bleathem */ @HandlesExceptions public class ExceptionCatchHandler { private static final Logger logger = Logger.getLogger(ExceptionCatchHandler.class.getName()); void conversationExpired(@Handles CaughtException<NonexistentConversationException> t) { FacesContext fc = FacesContext.getCurrrentInstance(); fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "/error/conversationExpired.xhtml?faces-redirect=true"); logger.fine("Redirecting navigation - conversation busy/expired."); fc.renderResponse(); } void viewExpired(@Handles CaughtException<ViewExpiredException> t) { FacesContext fc = FacesContext.getCurrrentInstance(); fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "/error/conversationExpired.xhtml?faces-redirect=true"); logger.fine("Redirecting navigation - view expired."); fc.renderResponse(); } void busyConversation(@Handles CaughtException<BusyConversationException> t) { FacesContext fc = FacesContext.getCurrrentInstance(); fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "/error/conversationExpired.xhtml?faces-redirect=true"); logger.fine("Redirecting navigation - conversation busy."); fc.renderResponse(); } }
          Hide
          bleathem Brian Leathem added a comment - - edited

          Jason suggested this is because all CDI beans in the chain are implicitly dependent scoped. I changed the following beans to be RequestScoped:
          from Catch: ExceptionHandlerDispatch
          from Faces: CatchExceptionHandler
          from my app: ExceptionCatchHandler

          Still the same error/stack trace.

          Show
          bleathem Brian Leathem added a comment - - edited Jason suggested this is because all CDI beans in the chain are implicitly dependent scoped. I changed the following beans to be RequestScoped: from Catch: ExceptionHandlerDispatch from Faces: CatchExceptionHandler from my app: ExceptionCatchHandler Still the same error/stack trace.
          Hide
          lightguard Jason Porter added a comment -

          Is this still an issue Brian?

          Show
          lightguard Jason Porter added a comment - Is this still an issue Brian?
          Hide
          oranheim Ove Ranheim added a comment -

          I'm not able to handle the NonexistentConversationException after upgrade to AS 7.1.0.Final.

          I used to do this workaround to circumvent this error:

          public void nonexistentConversationException(@Handles CaughtException<NonexistentConversationException> event, Logger log) {
              ConversationContext conversationContext = Container.instance().deploymentManager().instance().select(Context.class).select(HttpConversationContext.class).get();
              conversationContext.activate(null);
              event.handled();
          }
          

          The consequence of this issue is getting Transaction not Active, causing a roll back and makes my app unstable.

          This is a blocker bug for me. Any suggestion on how to workaround this one? I think is WELD-855 that is the root cause of this issue.

          Show
          oranheim Ove Ranheim added a comment - I'm not able to handle the NonexistentConversationException after upgrade to AS 7.1.0.Final. I used to do this workaround to circumvent this error: public void nonexistentConversationException(@Handles CaughtException<NonexistentConversationException> event, Logger log) { ConversationContext conversationContext = Container.instance().deploymentManager().instance().select(Context.class).select(HttpConversationContext.class).get(); conversationContext.activate(null); event.handled(); } The consequence of this issue is getting Transaction not Active, causing a roll back and makes my app unstable. This is a blocker bug for me. Any suggestion on how to workaround this one? I think is WELD-855 that is the root cause of this issue.

            People

            • Assignee:
              lightguard Jason Porter
              Reporter:
              bleathem Brian Leathem
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:

                Development