Uploaded image for project: 'JBRULES'
  1. JBRULES
  2. JBRULES-3688

Provide detailed context information for NoClassDefFoundError: Could not initialize class org.drools.rule.constraint.MvelConstraint$ExecutorHolder at org.drools.rule.constraint.MvelConstraint.jitEvaluator(MvelConstraint.java:232)

This issue belongs to an archived project. You can view it, but you can't modify it. Learn more

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Major
    • None
    • 5.5.0.Final
    • drools-core
    • None

    Description

      We're using Drools 5.5.0 in OSGi with: Karaf 2.3.0, Pax Wicket 1.1.1.

      We experience several issues and this is one of them. Even if a fix is not in sight, I'd appreciate if a check with more detailed information can be provided at the exception point, which will be helpful for us to diagnose and for future bug report to Drools team.

      The error is intermittent, together with #JBRULES-3687 during a single session it happens:

      1. This bug: ~ 40%
      2. #JBRULES-3687: ~ 50%
      3. Success: ~ 10%

      Stack:

      Root cause:
      
      java.lang.NoClassDefFoundError: Could not initialize class org.drools.rule.constraint.MvelConstraint$ExecutorHolder
           at org.drools.rule.constraint.MvelConstraint.jitEvaluator(MvelConstraint.java:232)
           at org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:197)
           at org.drools.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:157)
           at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137)
           at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
           at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141)
           at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
           at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141)
           at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)
           at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:372)
           at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:235)
           at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:240)
           at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:350)
           at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:311)
           at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:903)
           at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:847)
           at org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:269)
           at id.co.bippo.booking.BookingCheckRulesImpl.processBookings(BookingCheckRulesImpl.java:177)
           at id.co.bippo.booking.BookingCheckRulesImpl.processFacts(BookingCheckRulesImpl.java:195)
           at id.co.bippo.booking.BookingCheckRulesImpl.check(BookingCheckRulesImpl.java:147)
           at id.co.bippo.booking.web.ProductBookingPanel.<init>(ProductBookingPanel.java:47)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
           at org.soluvas.web.site.compose.impl.LiveChildContributorImpl$1.create(LiveChildContributorImpl.java:187)
           at org.soluvas.web.site.compose.ComposeUtils.compose(ComposeUtils.java:68)
           at org.soluvas.web.bootstrap.BootstrapPage.onInitialize(BootstrapPage.java:302)
           at org.apache.wicket.Component.fireInitialize(Component.java:933)
           at org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:960)
           at org.apache.wicket.Page.internalPrepareForRender(Page.java:277)
           at org.apache.wicket.Component.render(Component.java:2313)
           at org.apache.wicket.Page.renderPage(Page.java:1035)
           at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:115)
           at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:237)
           at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
           at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:784)
           at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
           at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
           at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
           at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
           at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
           at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
           at org.ops4j.pax.wicket.internal.FilterDelegator$Chain.doFilter(FilterDelegator.java:79)
           at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
           at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
           at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
           at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
           at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
           at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
           at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
           at org.ops4j.pax.wicket.internal.FilterDelegator$Chain.doFilter(FilterDelegator.java:77)
           at org.ops4j.pax.wicket.internal.FilterDelegator.doFilter(FilterDelegator.java:61)
           at org.ops4j.pax.wicket.internal.ServletProxy$ServletInvocationHandler.invoke(ServletProxy.java:72)
           at $Proxy80.service(Unknown Source)
           at java.lang.reflect.Method.invoke(Method.java:601)
           at org.ops4j.pax.web.service.internal.HttpServiceStarted$2.invoke(HttpServiceStarted.java:210)
           at org.ops4j.pax.web.service.internal.$Proxy0.service(Unknown Source)
           at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:652)
           at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:447)
           at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:70)
           at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
           at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:559)
           at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
           at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1038)
           at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:117)
           at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:374)
           at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
           at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:972)
           at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
           at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:74)
           at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
           at org.eclipse.jetty.server.Server.handle(Server.java:363)
           at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:483)
           at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
           at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:920)
           at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:982)
           at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
           at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
           at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
           at org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.run(BlockingChannelConnector.java:298)
           at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
           at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
           at java.lang.Thread.run(Thread.java:722)
      
      Complete stack:
      
      java.lang.RuntimeException: Cannot create component id.co.bippo.booking.web.ProductBookingPanel for contributor id.co.bippo.product.web.pub.ProductView/addToCartRegion from id.co.bippo.booking.web [3478]
           at org.soluvas.web.site.compose.impl.LiveChildContributorImpl$1.create(LiveChildContributorImpl.java:189)
           at org.soluvas.web.site.compose.ComposeUtils.compose(ComposeUtils.java:68)
           at org.soluvas.web.bootstrap.BootstrapPage.onInitialize(BootstrapPage.java:302)
           at org.apache.wicket.Component.fireInitialize(Component.java:933)
           at org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:960)
           at org.apache.wicket.Page.internalPrepareForRender(Page.java:277)
           at org.apache.wicket.Component.render(Component.java:2313)
           at org.apache.wicket.Page.renderPage(Page.java:1035)
           at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:115)
           at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:237)
           at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
           at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:784)
           at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
           at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
           at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
           at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
           at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
      
      java.lang.reflect.InvocationTargetException
           at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
           at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
           at org.soluvas.web.site.compose.impl.LiveChildContributorImpl$1.create(LiveChildContributorImpl.java:187)
           at org.soluvas.web.site.compose.ComposeUtils.compose(ComposeUtils.java:68)
           at org.soluvas.web.bootstrap.BootstrapPage.onInitialize(BootstrapPage.java:302)
           at org.apache.wicket.Component.fireInitialize(Component.java:933)
           at org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:960)
           at org.apache.wicket.Page.internalPrepareForRender(Page.java:277)
           at org.apache.wicket.Component.render(Component.java:2313)
           at org.apache.wicket.Page.renderPage(Page.java:1035)
           at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:115)
           at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:237)
           at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
           at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:784)
           at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
           at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
           at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
           at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
           at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
      

      Another stack trace, same root cause, different execution path:

      Root cause:
      
      java.lang.NoClassDefFoundError: Could not initialize class org.drools.rule.constraint.MvelConstraint$ExecutorHolder
           at org.drools.rule.constraint.MvelConstraint.jitEvaluator(MvelConstraint.java:232)
           at org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:197)
           at org.drools.rule.constraint.MvelConstraint.isAllowedCachedLeft(MvelConstraint.java:169)
           at org.drools.common.TripleBetaConstraints.isAllowedCachedLeft(TripleBetaConstraints.java:91)
           at org.drools.reteoo.JoinNode.propagateFromLeft(JoinNode.java:105)
           at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:95)
           at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:196)
           at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:71)
           at org.drools.reteoo.FromNode.checkConstraintsAndPropagate(FromNode.java:333)
           at org.drools.reteoo.FromNode.assertLeftTuple(FromNode.java:164)
           at org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:232)
           at org.drools.reteoo.CompositeLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:116)
           at org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:154)
           at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
           at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141)
           at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
           at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141)
           at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
           at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:141)
           at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)
           at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:372)
           at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:235)
           at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:240)
           at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:350)
           at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:311)
           at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:903)
           at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:847)
           at org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:269)
           at id.co.bippo.booking.BookingCheckRulesImpl.processBookings(BookingCheckRulesImpl.java:177)
           at id.co.bippo.booking.BookingCheckRulesImpl.processFacts(BookingCheckRulesImpl.java:195)
           at id.co.bippo.booking.BookingCheckRulesImpl.check(BookingCheckRulesImpl.java:147)
           at id.co.bippo.booking.web.ProductBookingPanel.<init>(ProductBookingPanel.java:47)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
           at org.soluvas.web.site.compose.impl.LiveChildContributorImpl$1.create(LiveChildContributorImpl.java:187)
           at org.soluvas.web.site.compose.ComposeUtils.compose(ComposeUtils.java:68)
           at org.soluvas.web.bootstrap.BootstrapPage.onInitialize(BootstrapPage.java:302)
           at org.apache.wicket.Component.fireInitialize(Component.java:933)
           at org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:960)
           at org.apache.wicket.Page.internalPrepareForRender(Page.java:277)
           at org.apache.wicket.Component.render(Component.java:2313)
           at org.apache.wicket.Page.renderPage(Page.java:1035)
           at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:115)
           at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:237)
           at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
           at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:784)
           at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
           at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
           at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
           at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
           at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
           at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
           at org.ops4j.pax.wicket.internal.FilterDelegator$Chain.doFilter(FilterDelegator.java:79)
           at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
           at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
           at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
           at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
           at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
           at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
           at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
           at org.ops4j.pax.wicket.internal.FilterDelegator$Chain.doFilter(FilterDelegator.java:77)
           at org.ops4j.pax.wicket.internal.FilterDelegator.doFilter(FilterDelegator.java:61)
           at org.ops4j.pax.wicket.internal.ServletProxy$ServletInvocationHandler.invoke(ServletProxy.java:72)
           at $Proxy80.service(Unknown Source)
           at java.lang.reflect.Method.invoke(Method.java:601)
           at org.ops4j.pax.web.service.internal.HttpServiceStarted$2.invoke(HttpServiceStarted.java:210)
           at org.ops4j.pax.web.service.internal.$Proxy0.service(Unknown Source)
           at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:652)
           at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:447)
           at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:70)
           at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
           at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:559)
           at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
           at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1038)
           at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:117)
           at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:374)
           at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
           at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:972)
           at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
           at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:74)
           at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
           at org.eclipse.jetty.server.Server.handle(Server.java:363)
           at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:483)
           at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
           at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:920)
           at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:982)
           at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
           at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
           at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
           at org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.run(BlockingChannelConnector.java:298)
           at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
           at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
           at java.lang.Thread.run(Thread.java:722)
      
      Complete stack:
      
      java.lang.RuntimeException: Cannot create component id.co.bippo.booking.web.ProductBookingPanel for contributor id.co.bippo.product.web.pub.ProductView/addToCartRegion from id.co.bippo.booking.web [3478]
           at org.soluvas.web.site.compose.impl.LiveChildContributorImpl$1.create(LiveChildContributorImpl.java:189)
           at org.soluvas.web.site.compose.ComposeUtils.compose(ComposeUtils.java:68)
           at org.soluvas.web.bootstrap.BootstrapPage.onInitialize(BootstrapPage.java:302)
           at org.apache.wicket.Component.fireInitialize(Component.java:933)
           at org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:960)
           at org.apache.wicket.Page.internalPrepareForRender(Page.java:277)
           at org.apache.wicket.Component.render(Component.java:2313)
           at org.apache.wicket.Page.renderPage(Page.java:1035)
           at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:115)
           at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:237)
           at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
           at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:784)
           at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
           at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
           at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
           at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
           at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
      
      java.lang.reflect.InvocationTargetException
           at sun.reflect.GeneratedConstructorAccessor111.newInstance(Unknown Source)
           at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
           at org.soluvas.web.site.compose.impl.LiveChildContributorImpl$1.create(LiveChildContributorImpl.java:187)
           at org.soluvas.web.site.compose.ComposeUtils.compose(ComposeUtils.java:68)
           at org.soluvas.web.bootstrap.BootstrapPage.onInitialize(BootstrapPage.java:302)
           at org.apache.wicket.Component.fireInitialize(Component.java:933)
           at org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:960)
           at org.apache.wicket.Page.internalPrepareForRender(Page.java:277)
           at org.apache.wicket.Component.render(Component.java:2313)
           at org.apache.wicket.Page.renderPage(Page.java:1035)
           at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:115)
           at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:237)
           at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
           at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:784)
           at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
           at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
           at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
           at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
           at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
      

      Bundles:

      [3016] [Active     ] [            ] [       ] [   80] id.co.bippo.booking.rs (5.0.0.SNAPSHOT)
      [3017] [Active     ] [            ] [       ] [   80] id.co.bippo.booking (5.0.0.SNAPSHOT)
      [3173] [Active     ] [            ] [Started] [   80] berbatik_booking.xml (0.0.0)
      [3192] [Active     ] [            ] [Started] [   80] berbatik_booking.rs.xml (0.0.0)
      [3295] [Active     ] [            ] [       ] [   50] org.drools.api (5.5.0.Final)
      [3296] [Active     ] [            ] [       ] [   50] org.drools.internalapi (5.5.0.Final)
      [3297] [Active     ] [            ] [       ] [   50] org.drools.core (5.5.0.Final)
      [3298] [Active     ] [            ] [       ] [   50] org.drools.compiler (5.5.0.Final)
      [3299] [Active     ] [            ] [       ] [   50] org.drools.templates (5.5.0.Final)
      [3478] [Active     ] [Created     ] [       ] [   80] id.co.bippo.booking.web (5.0.0.SNAPSHOT)
      

      DRL:

      package id.co.bippo.booking
      dialect "mvel"
      
      import org.slf4j.Logger;
      import org.joda.time.*;
      import id.co.bippo.booking.*;
      import id.co.bippo.booking.CheckProduct.Bookability;
      import id.co.bippo.booking.CheckProduct.Confirmability;
      import id.co.bippo.person.*;
      import id.co.bippo.product.util.ProductUtils;
      
      global Logger log;
      global BookingDao bookingDao;
      global ProductUtils productUtils;
      global PersonUtils personUtils;
      
      rule "Cek booking produk dengan qty 1, stock ada"
      activation-group "Check"
      	when
      		$action       : CheckProduct( $personId : personId, $productId : productId, $qty : qty == 1.0,
      							bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
      		$bookedQty    : Double() from bookingDao.findBookedQty($productId)
      		$availableQty : Double(this - $bookedQty >= $qty) from productUtils.getQtyByProductId($productId)
      		$countBook 	  : Long(this < 100) from bookingDao.getBookCountByPersonIdToday($personId)
      	then
      		log.info("{} boleh booking {} sebanyak {} (stok tersedia: {}, sudah dibooking: {})",
      			{$personId, $productId, $qty, $availableQty, $bookedQty});
      		modify($action) {
      			setBookability(CheckProduct$Bookability.AVAILABLE),
      			setConfirmability(CheckProduct$Confirmability.AVAILABLE),
      			setMessage("Anda boleh melakukan booking untuk produk "+ $productId +", Terima Kasih")
      		}
      end
      
      rule "Check booking yang melebihi batas yang telah ditentukan, batas booking 3 per 24 jam" 
      activation-group "Check"
      	when
      		$action 	   : CheckProduct( $personId : personId, $productId : productId, $qty : qty == 1.0,
      							bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
      		$countBook     : Long(this >= 100) from bookingDao.getBookCountByPersonIdToday($personId)
      	then
      		log.info("Person ID {} telah melakukan booking product sebanyak {}", {$personId, $countBook});
      		modify($action) {
      			setBookability(CheckProduct$Bookability.QUOTA_EXCEEDED), 
      			setConfirmability(CheckProduct$Confirmability.QUOTA_EXCEEDED),
      			setMessage("Sorry, Cannot book product currently, you have too many bookings today");
      		}
      end
      
      rule "Check if product is already booked by himself (BookingDetail status: open/pending/waiting)."
      activation-group "Check"
      salience 15
          when
          	$action			: CheckProduct( $personId : personId, $productId: productId, $qty: qty == 1.0,
          						bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
          	$bookingDetail  : BookingDetail(booking.personId == $personId, productId == $productId, qty == $qty,
          						/*status in (BookingDetail$Status.OPEN, BookingDetail$Status.PENDING_WAITING) )*/ 
          						status == BookingDetail$Status.OPEN)
          then
      		log.info("{} sudah booking {} sebanyak {}, tinggal diorder",
      			{$personId, $productId, $qty});
      		modify($action) {
      			setBookability(CheckProduct$Bookability.ALREADY_SELF),
      			setConfirmability(CheckProduct$Confirmability.PLEASE_PAY_TO_ORDER),
      			setBooker(personUtils.getPersonRefById($bookingDetail.booking.personId)),
      			setMessage($personId + " sudah booking " + $productId " sebanyak " + $qty + ", tinggal diorder")
      		}
      end
      
      rule "Check if product is already confimed by himself (BookingDetail status: pending_waiting)."
      activation-group "Check"
      salience 15
          when
          	$action			: CheckProduct( $personId : personId, $productId: productId, $qty: qty == 1.0,
          						bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
          	$bookingDetail  : BookingDetail(booking.personId == $personId, productId == $productId, qty == $qty,
          						status == BookingDetail$Status.PENDING_WAITING)
          then
      		log.info("{} sudah booking {} sebanyak {}, tinggal diorder",
      			{$personId, $productId, $qty});
      		modify($action) {
      			setBookability(CheckProduct$Bookability.ALREADY_SELF),
      			setConfirmability(CheckProduct$Confirmability.PLEASE_PAY_TO_WAIT),
      			setBooker(personUtils.getPersonRefById($bookingDetail.booking.personId)),
      			setMessage($personId + " sudah booking " + $productId " sebanyak " + $qty + ", tinggal diorder")
      		}
      end
      
      rule "Check: Product already booked by other, AND already confirmed by yet another."
      activation-group "Check"
      salience 20
          when
          	$action			: CheckProduct( $personId : personId, $productId: productId, $qty: qty == 1.0,
          						bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
      		$bookedQty      : Double(this >= 1.0) from bookingDao.findBookedQty($productId)
          	$bookingDetail  : BookingDetail(booking.personId != $personId, productId == $productId, qty == $qty, 
          						status == BookingDetail$Status.OPEN)
          	$bookingDetail2 : BookingDetail(booking.personId != $personId, productId == $productId, qty == $qty, 
          						status == BookingDetail$Status.PENDING_WAITING)
          then
      		log.info("{} ingin booking {} sebanyak {} tapi sudah dibooking dan diconfirm 2 orang",
      			{$personId, $productId, $qty});
      		modify($action) {
      			setBookability(CheckProduct$Bookability.BOOKED_BY_OTHER),
      			setConfirmability(CheckProduct$Confirmability.CONFIRMED_BY_OTHER),
      			setBooker(personUtils.getPersonRefById($bookingDetail.booking.personId)),
      			setMessage($productId + " sudah dibooking dan diconfirm 2 orang customer lain.")
      		}
      end
      
      rule "Check the product, but the product was booked by other."
      activation-group "Check"
      salience 10
          when
          	$action			: CheckProduct( $personId : personId, $productId: productId, $qty: qty == 1.0,
          						bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
      		$bookedQty      : Double(this >= 1.0) from bookingDao.findBookedQty($productId)
          	$bookingDetail  : BookingDetail(booking.personId != $personId, productId == $productId, qty == $qty, 
          						status == BookingDetail$Status.OPEN)
          then
      		log.info("{} ingin booking {} sebanyak {} tapi sudah dibooking orang, mau confirm dan nunggu ngga?",
      			{$personId, $productId, $qty});
      		modify($action) {
      			setBookability(CheckProduct$Bookability.BOOKED_BY_OTHER),
      			setConfirmability(CheckProduct$Confirmability.MUST_CONFIRM_WAITING),
      			setBooker(personUtils.getPersonRefById($bookingDetail.booking.personId)),
      			setMessage($productId + " sudah dibooking customer lain, silahkan untuk confirm waiting list.")
      		}
      end
      
      rule "Cek booking produk dengan qty 1, stock habis"
      activation-group "Check"
      	when
      		$action       : CheckProduct( $personId : personId, $productId : productId, $qty : qty == 1.0,
      							bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
      		$bookedQty    : Double() from bookingDao.findBookedQty($productId)
      		$availableQty : Double(this - $bookedQty < $qty) from productUtils.getQtyByProductId($productId)
      	then
      		log.info("{} tidak bisa booking {} sebanyak {} karena stok tidak cukup. Stok sekarang: {}, sudah dibooking orang: {}",
      			{$personId, $productId, $qty, $availableQty, $bookedQty});
      		modify($action) {
      			setBookability(CheckProduct$Bookability.OUT_OF_STOCK),
      			setConfirmability(CheckProduct$Confirmability.OUT_OF_STOCK),
      			setMessage("Maaf, produk "+ $productId + " tidak tersedia saat ini")
      		}
      end
      
      rule "Check booking produk dengan qty bukan 1"
      activation-group "Check"
      	when
      		$action : CheckProduct( $personId : personId, $productId : productId, $qty : qty != 1.0,
      							bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
      	then
      		log.info("{} booking {} sebanyak {}. Tidak boleh! Qty harus 1",
      			{$personId, $productId, $qty});
      		modify($action) {
      			setBookability(CheckProduct$Bookability.INVALID),
      			setConfirmability(CheckProduct$Confirmability.INVALID),
      			setMessage("Booking qty harus 1") 
      		}
      end
       /*
      rule "Minta booking produk, tapi tidak ada ada stock"
      activation-group "Check"
      salience -10
      	when
      		$action 	   : CheckProduct( $personId : personId, $productId : productId, $qty : qty,
      							bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
      		Double(this == null) from stockSvc.getAvailableQtyByProductId($productId)
      	then
      		log.info("{} booking {} sebanyak {}. Maaf stock tidak terdaftar!",
      			{$personId, $productId, $qty});
      		modify($action) {
      			setMessage("Stock produk " + $productId + " tidak terdaftar"),
      			setBookability(Bookability.NO_STOCK_DATA),
      			setConfirmability(Confirmability.NO_STOCK_DATA)
      		}
      end
      */
      rule "Minta booking produk... tak ada kriteria lain yang matching (unhandled case)"
      activation-group "Check"
      salience -100
      	when
      		$action       : CheckProduct( $personId : personId, $productId : productId, $qty : qty,
      							bookability == Bookability.NEW,
      							confirmability == Confirmability.NEW)
      	then
      		log.warn("{} minta booking {} sebanyak {}, tapi tidak ada rule yang matching",
      			{$personId, $productId, $qty});
      		modify($action) {
      			setMessage("Internal error: " + $personId + " check booking " + $productId +
      				" sebanyak " + $qty + " namun tidak ada rule yang match. " +
      				" Mohon laporkan ke customer support."),
      			setBookability(CheckProduct$Bookability.ERROR),
      			setConfirmability(CheckProduct$Confirmability.ERROR)
      		}
      end
      

      Attachments

        Issue Links

          Activity

            People

              mproctor@redhat.com Mark Proctor
              HendyIrawan Hendy Irawan (Inactive)
              Archiver:
              rhn-support-ceverson Clark Everson

              Dates

                Created:
                Updated:
                Archived:

                PagerDuty