MyFaces Core
  1. MyFaces Core
  2. MYFACES-2979

Session invalidation in Development Stage causes error in OpenWebBeans

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Duplicate
    • Affects Version/s: 2.0.3-SNAPSHOT
    • Fix Version/s: None
    • Component/s: JSR-314
    • Labels:
      None
    • Environment:
      MyFaces 2.0.3-SNAPSHOT in Dev mode, OpenWebBeans 1.0.0, Tomcat 6.0.29 (with Glassfish EL 2.2)

      Description

      I have a logout method, shown below:

      public String logout() {
      final FacesContext fc = FacesContext.getCurrentInstance();
      final ExternalContext externalContext = fc.getExternalContext();
      try

      { externalContext.invalidateSession(); externalContext.redirect("http://www.google.nl"); }

      catch (IOException e)

      { log.error("Error redirecting after logout", e); }

      finally

      { fc.responseComplete(); }

      return null;
      }

      When I invoke this method, I get the following Exception from OpenWebBeans:

      javax.enterprise.context.ContextNotActiveException: WebBeans context with scope type annotation @SessionScoped does not exist within current thread
      at org.apache.webbeans.container.BeanManagerImpl.getContext(BeanManagerImpl.java:309)
      at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:124)
      at org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.invoke(NormalScopedBeanInterceptorHandler.java:95)
      at org.apache.myfaces.examples.ebanking.web.bean.SessionBean_$$javassist_2.getCustomer(SessionBean$$_javassist_2.java)
      at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at javax.el.BeanELResolver.getValue(BeanELResolver.java:302)
      at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
      at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142)
      at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
      at org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:45)
      at org.apache.el.parser.AstNot.getValue(AstNot.java:42)
      at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
      at org.apache.webbeans.el.WrappedValueExpression.getValue(WrappedValueExpression.java:68)
      at org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:85)
      at javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:260)
      at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1007)
      at javax.faces.component.UIComponent.isVisitable(UIComponent.java:289)
      at javax.faces.component.UIComponent.visitTree(UIComponent.java:752)
      at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
      at javax.faces.component.UIComponent.visitTree(UIComponent.java:778)
      at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
      at org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener._doTreeVisit(DebugPhaseListener.java:310)
      at org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener.afterPhase(DebugPhaseListener.java:286)
      at org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersAfter(PhaseListenerManager.java:111)
      at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:185)
      at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)

      This happens because the DebugPhaseListener starts visiting the tree and, in the process, needs to resolve a value expression, which points to an OWB session bean.

      It only happens when the DebugPhaseListener is installed. In production mode everything is fine.

      1. debugphaselistener.patch
        1 kB
        Jan-Kees van Andel

        Issue Links

          Activity

          Hide
          Jakob Korherr added a comment -

          I know the DebugPhaseListener is the reason why this does not work, but shouldn't OWB be able to create a new session once the old one is invalidated rather than throwing a ContextNotActiveException?

          Show
          Jakob Korherr added a comment - I know the DebugPhaseListener is the reason why this does not work, but shouldn't OWB be able to create a new session once the old one is invalidated rather than throwing a ContextNotActiveException?
          Hide
          Jan-Kees van Andel added a comment -

          IMHO, that would be an unwanted side effect of the PhaseListener.

          I'm not sure what the spec says about this (I guess nothing), but recreating a session within the same request that invalidated it, would be pretty bad behavior if you ask me...

          The annoying bit is, if we choose to add a check in the PhaseListener, there might be other checks we need to add there.

          I suggest to fix it in the PhaseListener, to keep it as much side-effect-free as possible.

          Show
          Jan-Kees van Andel added a comment - IMHO, that would be an unwanted side effect of the PhaseListener. I'm not sure what the spec says about this (I guess nothing), but recreating a session within the same request that invalidated it, would be pretty bad behavior if you ask me... The annoying bit is, if we choose to add a check in the PhaseListener, there might be other checks we need to add there. I suggest to fix it in the PhaseListener, to keep it as much side-effect-free as possible.
          Hide
          Jan-Kees van Andel added a comment -

          Simple fix for the exception

          Show
          Jan-Kees van Andel added a comment - Simple fix for the exception
          Hide
          Jakob Korherr added a comment -

          Yes, you're right. +1 on committing the patch!

          However, we will maybe see some more side effects of the DebugPhaseListener.

          Show
          Jakob Korherr added a comment - Yes, you're right. +1 on committing the patch! However, we will maybe see some more side effects of the DebugPhaseListener.
          Hide
          Leonardo Uribe added a comment -

          Maybe that one suggest that the behavior committed on MYFACES-2676 should be optional, or maybe we should do something different instead evaluate ValueExpression bound to value properties. Maybe for debugging purposes, at first view it is enough to know the "submittedValue" and "localValue". Evaluate "value" VE seems to be redundant, its more, for that one it is more interesting to print the expression string on debug page.

          Show
          Leonardo Uribe added a comment - Maybe that one suggest that the behavior committed on MYFACES-2676 should be optional, or maybe we should do something different instead evaluate ValueExpression bound to value properties. Maybe for debugging purposes, at first view it is enough to know the "submittedValue" and "localValue". Evaluate "value" VE seems to be redundant, its more, for that one it is more interesting to print the expression string on debug page.
          Hide
          Jakob Korherr added a comment -

          Leo,

          The problem is not that the ValueExpressions cannot be evaluated while building the debug page. The problem is that visitTree() does not work because of a isRendered() evaluation (which leads to a ValueExpression evaluation of rendered="#

          {...}").

          If a "normal" value="#{...}

          " ValueExpression can't be evaluated, the exception is catched by the DebugPhaseListener.

          Show
          Jakob Korherr added a comment - Leo, The problem is not that the ValueExpressions cannot be evaluated while building the debug page. The problem is that visitTree() does not work because of a isRendered() evaluation (which leads to a ValueExpression evaluation of rendered="# {...}"). If a "normal" value="#{...} " ValueExpression can't be evaluated, the exception is catched by the DebugPhaseListener.
          Hide
          Leonardo Uribe added a comment -

          Ok, but anyway it is caused by an unexpected EL evaluation. In that case, DebugPhaseListener should swallow the exception and let code continue, so maybe we need to add some code in that part. Instead use visit tree hint for skip unrendered, why don't check for that condition on DebugVisitCallback, so if we can't evaluate it we can decide if we include it or not? Since this feature is not intended for production, it is not a problem to do some additional cycles.

          Show
          Leonardo Uribe added a comment - Ok, but anyway it is caused by an unexpected EL evaluation. In that case, DebugPhaseListener should swallow the exception and let code continue, so maybe we need to add some code in that part. Instead use visit tree hint for skip unrendered, why don't check for that condition on DebugVisitCallback, so if we can't evaluate it we can decide if we include it or not? Since this feature is not intended for production, it is not a problem to do some additional cycles.
          Hide
          Jakob Korherr added a comment -

          Yes, that's a great idea.

          Also a try{ } catch

          { // just logging, no re-throwing }

          around the DebugPhaseListener code would be good. In this way we prevent letting Exceptions in DebugPhaseListener break MyFaces.

          Show
          Jakob Korherr added a comment - Yes, that's a great idea. Also a try{ } catch { // just logging, no re-throwing } around the DebugPhaseListener code would be good. In this way we prevent letting Exceptions in DebugPhaseListener break MyFaces.
          Hide
          Leonardo Uribe added a comment -

          Yes, thinking more about it, in theory, in JSF 2.0 it should be possible to show more than one exception, so other alternative we could consider in this case is use publishException only if an exception was already thrown, but just logging them is ok.

          Show
          Leonardo Uribe added a comment - Yes, thinking more about it, in theory, in JSF 2.0 it should be possible to show more than one exception, so other alternative we could consider in this case is use publishException only if an exception was already thrown, but just logging them is ok.
          Hide
          Simon Godard added a comment - - edited

          I'm experiencing the same problem although I'm not using OWB.

          java.lang.IllegalStateException: org.apache.shiro.session.UnknownSessionException: There is no session with id [bc6066fc-96e5-43ee-bf56-951201b5e702]
          org.apache.shiro.web.servlet.ShiroHttpSession.getAttribute(ShiroHttpSession.java:133)
          org.apache.myfaces.context.servlet.SessionMap.getAttribute(SessionMap.java:50)
          org.apache.myfaces.util.AbstractThreadSafeAttributeMap.containsKey(AbstractThreadSafeAttributeMap.java:58)
          org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:192)
          javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
          org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142)
          org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:65)
          org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(VariableResolverToELResolver.java:116)
          javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
          org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142)
          org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:68)
          org.apache.el.parser.AstValue.getValue(AstValue.java:112)
          org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
          org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:85)
          javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:243)
          javax.faces.component.UIOutput.getValue(UIOutput.java:71)
          javax.faces.component.UIInput.getValue(UIInput.java:143)
          org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener$DebugVisitCallback._getRealValue(DebugPhaseListener.java:264)
          org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener$DebugVisitCallback.visit(DebugPhaseListener.java:187)
          org.apache.myfaces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:139)
          javax.faces.component.UIComponent.visitTree(UIComponent.java:773)
          javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
          javax.faces.component.UIComponent.visitTree(UIComponent.java:793)
          javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
          javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:162)
          javax.faces.component.UIComponent.visitTree(UIComponent.java:793)
          javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
          javax.faces.component.UIComponent.visitTree(UIComponent.java:793)
          javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991)
          org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener._doTreeVisit(DebugPhaseListener.java:310)
          org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener.afterPhase(DebugPhaseListener.java:286)
          org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersAfter(PhaseListenerManager.java:111)
          org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:185)
          org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

          Show
          Simon Godard added a comment - - edited I'm experiencing the same problem although I'm not using OWB. java.lang.IllegalStateException: org.apache.shiro.session.UnknownSessionException: There is no session with id [bc6066fc-96e5-43ee-bf56-951201b5e702] org.apache.shiro.web.servlet.ShiroHttpSession.getAttribute(ShiroHttpSession.java:133) org.apache.myfaces.context.servlet.SessionMap.getAttribute(SessionMap.java:50) org.apache.myfaces.util.AbstractThreadSafeAttributeMap.containsKey(AbstractThreadSafeAttributeMap.java:58) org.apache.myfaces.el.unified.resolver.ManagedBeanResolver.getValue(ManagedBeanResolver.java:192) javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143) org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142) org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:65) org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(VariableResolverToELResolver.java:116) javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143) org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:142) org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:68) org.apache.el.parser.AstValue.getValue(AstValue.java:112) org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) org.apache.myfaces.view.facelets.el.TagValueExpression.getValue(TagValueExpression.java:85) javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:243) javax.faces.component.UIOutput.getValue(UIOutput.java:71) javax.faces.component.UIInput.getValue(UIInput.java:143) org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener$DebugVisitCallback._getRealValue(DebugPhaseListener.java:264) org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener$DebugVisitCallback.visit(DebugPhaseListener.java:187) org.apache.myfaces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:139) javax.faces.component.UIComponent.visitTree(UIComponent.java:773) javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991) javax.faces.component.UIComponent.visitTree(UIComponent.java:793) javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991) javax.faces.component.UINamingContainer.visitTree(UINamingContainer.java:162) javax.faces.component.UIComponent.visitTree(UIComponent.java:793) javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991) javax.faces.component.UIComponent.visitTree(UIComponent.java:793) javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:991) org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener._doTreeVisit(DebugPhaseListener.java:310) org.apache.myfaces.view.facelets.tag.ui.DebugPhaseListener.afterPhase(DebugPhaseListener.java:286) org.apache.myfaces.lifecycle.PhaseListenerManager.informPhaseListenersAfter(PhaseListenerManager.java:111) org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:185) org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
          Hide
          Bastian Voigt added a comment -

          This is not only a OpenWebBeans problem. It also occurs in my application:

          Action method:
          public String logout()

          { getSessionUtil().invalidateSession(); this.loggedIn = false; return "logout"; }

          faces-config:
          <from-view-id>/*</from-view-id>
          <navigation-case>
          <from-outcome>logout</from-outcome>
          <to-view-id>/presentation/login.xhtml</to-view-id>
          <redirect/>
          </navigation-case>

          Exception (only occurs in stage Development):

          SCHWERWIEGEND: Servlet.service() for servlet faces-servlet threw exception
          java.lang.IllegalStateException
          at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
          at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:126)
          at org.apache.myfaces.context.servlet.ServletExternalContextImpl.redirect(ServletExternalContextImpl.java:463)
          at javax.faces.context.ExternalContextWrapper.redirect(ExternalContextWrapper.java:388)
          at org.apache.myfaces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:128)
          at com.conergy.sunreader.faces.exceptionhandler.SunreaderExceptionHandler.handleGenericException(SunreaderExceptionHandler.java:62)
          at com.conergy.sunreader.faces.exceptionhandler.SunreaderExceptionHandler.handle(SunreaderExceptionHandler.java:46)
          at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:191)
          at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
          at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
          at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at com.conergy.sunreader.filter.EncodingFilter.doFilter(EncodingFilter.java:45)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
          at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
          at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
          at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
          at java.lang.Thread.run(Thread.java:679)

          Show
          Bastian Voigt added a comment - This is not only a OpenWebBeans problem. It also occurs in my application: Action method: public String logout() { getSessionUtil().invalidateSession(); this.loggedIn = false; return "logout"; } faces-config: <from-view-id>/*</from-view-id> <navigation-case> <from-outcome>logout</from-outcome> <to-view-id>/presentation/login.xhtml</to-view-id> <redirect/> </navigation-case> Exception (only occurs in stage Development): SCHWERWIEGEND: Servlet.service() for servlet faces-servlet threw exception java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435) at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:126) at org.apache.myfaces.context.servlet.ServletExternalContextImpl.redirect(ServletExternalContextImpl.java:463) at javax.faces.context.ExternalContextWrapper.redirect(ExternalContextWrapper.java:388) at org.apache.myfaces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:128) at com.conergy.sunreader.faces.exceptionhandler.SunreaderExceptionHandler.handleGenericException(SunreaderExceptionHandler.java:62) at com.conergy.sunreader.faces.exceptionhandler.SunreaderExceptionHandler.handle(SunreaderExceptionHandler.java:46) at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:191) at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.conergy.sunreader.filter.EncodingFilter.doFilter(EncodingFilter.java:45) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:679)
          Hide
          Leonardo Uribe added a comment -

          This issue duplicates MYFACES-3187 so it will be closed as well

          Show
          Leonardo Uribe added a comment - This issue duplicates MYFACES-3187 so it will be closed as well

            People

            • Assignee:
              Leonardo Uribe
              Reporter:
              Jan-Kees van Andel
            • Votes:
              1 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development