[JBoss JIRA] (WFLY-3455) JBAS014544: No EJB found with interface of type
by Gregor Kovač (JIRA)
[ https://issues.jboss.org/browse/WFLY-3455?page=com.atlassian.jira.plugin.... ]
Gregor Kovač updated WFLY-3455:
-------------------------------
Attachment: WildflyTest.zip
> JBAS014544: No EJB found with interface of type
> -----------------------------------------------
>
> Key: WFLY-3455
> URL: https://issues.jboss.org/browse/WFLY-3455
> Project: WildFly
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: EJB
> Affects Versions: 8.1.0.Final
> Environment: Ubuntu 14.04 LTS: Linux blackbox 3.13.0-27-generic #50-Ubuntu SMP Thu May 15 18:06:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
> Java: java version "1.7.0_60"
> Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
> Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
> Reporter: Gregor Kovač
> Assignee: David Lloyd
> Attachments: WildflyTest.zip
>
>
> I have an EAR with an Stateless EJB that implements a Remote interface.
> In another application (WAR) I access his EJB like this: @EJB(beanInterface=RemoteBean.class) RemoteBean bean; When I deploy EAR I can see the JNDI name of the EJB, but when I deploy WAR I get error: JBAS014544: No EJB found with interface of type .....
> I have attached an example application.
> You can build it with Maven, deploy and see that error.
--
This message was sent by Atlassian JIRA
(v6.2.3#6260)
12 years, 1 month
[JBoss JIRA] (WFLY-3455) JBAS014544: No EJB found with interface of type
by Gregor Kovač (JIRA)
Gregor Kovač created WFLY-3455:
----------------------------------
Summary: JBAS014544: No EJB found with interface of type
Key: WFLY-3455
URL: https://issues.jboss.org/browse/WFLY-3455
Project: WildFly
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: EJB
Affects Versions: 8.1.0.Final
Environment: Ubuntu 14.04 LTS: Linux blackbox 3.13.0-27-generic #50-Ubuntu SMP Thu May 15 18:06:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Java: java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
Reporter: Gregor Kovač
Assignee: David Lloyd
I have an EAR with an Stateless EJB that implements a Remote interface.
In another application (WAR) I access his EJB like this: @EJB(beanInterface=RemoteBean.class) RemoteBean bean; When I deploy EAR I can see the JNDI name of the EJB, but when I deploy WAR I get error: JBAS014544: No EJB found with interface of type .....
I have attached an example application.
You can build it with Maven, deploy and see that error.
--
This message was sent by Atlassian JIRA
(v6.2.3#6260)
12 years, 1 month
[JBoss JIRA] (WFLY-3439) Websockets not working
by Stuart Douglas (JIRA)
[ https://issues.jboss.org/browse/WFLY-3439?page=com.atlassian.jira.plugin.... ]
Stuart Douglas commented on WFLY-3439:
--------------------------------------
Do you have a reproducer?
> Websockets not working
> ----------------------
>
> Key: WFLY-3439
> URL: https://issues.jboss.org/browse/WFLY-3439
> Project: WildFly
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: Web Sockets
> Affects Versions: 8.1.0.Final
> Reporter: Veli Cris
> Assignee: Stuart Douglas
>
> Hi,
> I deployed a .war file containing a single endpoint definition (Websocket). I can see following lines in console but nothing happens when trying to open connection from a websocket client. Same .war deployed in WildFly 8.0.0 is working. Please investigate!
> The configuration is standalone.
> [org.wildfly.extension.undertow] (MSC service thread 1-2) JBAS017519: Undertow HTTP listener default listening on /0.0.0.0:8080
> [io.undertow.websockets.jsr] (MSC service thread 1-4) UT026003: Adding annotated server endpoint ...
> [org.wildfly.extension.undertow] (MSC service thread 1-4) JBAS017534: Registered web context: ...
> [org.jboss.as.server] (ServerService Thread Pool -- 28) JBAS018559: Deployed "web.war" (runtime-name : "web.war")
--
This message was sent by Atlassian JIRA
(v6.2.3#6260)
12 years, 1 month
[JBoss JIRA] (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)
by Lucas Boullosa (JIRA)
[ https://issues.jboss.org/browse/JBRULES-3688?page=com.atlassian.jira.plug... ]
Lucas Boullosa commented on JBRULES-3688:
-----------------------------------------
I was having the same issue until I realized that I had two version of knowledge-api jar in the classpath. Once I removed knowledge-api-5.2.0.Final and only kept knowledge-api-5.5.0.Final.jar the exception was gone. Hope this help
> 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)
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: JBRULES-3688
> URL: https://issues.jboss.org/browse/JBRULES-3688
> Project: JBRULES
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: drools-core
> Affects Versions: 5.5.0.Final
> Environment: Karaf
> Karaf version 2.3.0
> Karaf home /home/ceefour/git/bippo-commerce5/karaf
> Karaf base /home/ceefour/git/bippo-commerce5/karaf
> OSGi Framework org.apache.felix.framework - 4.0.3
> JVM
> Java Virtual Machine OpenJDK 64-Bit Server VM version 23.2-b09
> Version 1.7.0_07
> Vendor Oracle Corporation
> Uptime 8 minutes
> Total compile time 44.295 seconds
> Threads
> Live threads 107
> Daemon threads 92
> Peak 140
> Total started 322
> Memory
> Current heap size 203,385 kbytes
> Maximum heap size 466,048 kbytes
> Committed heap size 283,072 kbytes
> Pending objects 0
> Garbage collector Name = 'PS Scavenge', Collections = 73, Time = 0.654 seconds
> Garbage collector Name = 'PS MarkSweep', Collections = 2, Time = 0.366 seconds
> Classes
> Current classes loaded 15,546
> Total classes loaded 15,547
> Total classes unloaded 1
> Operating system
> Name Linux version 3.2.0-32-generic
> Architecture amd64
> Processors 8
> Reporter: Hendy Irawan
> Assignee: Mark Proctor
>
> 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:
> {code}
> 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)
> {code}
> Another stack trace, same root cause, different execution path:
> {code}
> 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)
> {code}
> Bundles:
> {code}
> [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)
> {code}
> DRL:
> {code}
> 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
> {code}
--
This message was sent by Atlassian JIRA
(v6.2.3#6260)
12 years, 1 month
[JBoss JIRA] (WFLY-3451) disabling CBC mode ciphers
by Darran Lofthouse (JIRA)
[ https://issues.jboss.org/browse/WFLY-3451?page=com.atlassian.jira.plugin.... ]
Darran Lofthouse commented on WFLY-3451:
----------------------------------------
My current intention is to get the re-work of SSL configuration including this into WildFly before version 9 goes final.
> disabling CBC mode ciphers
> --------------------------
>
> Key: WFLY-3451
> URL: https://issues.jboss.org/browse/WFLY-3451
> Project: WildFly
> Issue Type: Sub-task
> Security Level: Public(Everyone can see)
> Affects Versions: JBoss AS7 7.1.1.Final
> Reporter: Aleksandr Voloschuk
> Assignee: Darran Lofthouse
> Priority: Critical
>
> encountered such a problem:
> management of information security vulnerability found on a production environment, namely:
> SSLv3.0/TLSv1.0 Protocol Weak CBC Mode Vulnerability port 8443/tcp over SSL
> RC4-SHA ECDHE-RSA-DES-CBC3-SHA SSLv3
> they offer a solution:
> This attack was identified in 2004 and later revisions of TLS protocol which contain a fix for this. If possible, upgrade to TLSv1.1 or TLSv1.2. If
> upgrading to TLSv1.1 or TLSv1.2 is not possible, then disabling CBC mode ciphers will remove the vulnerability. Setting your SSL server to prioritize RC4 ciphers mitigates this vulnerability.
> as TLS upgrade we can not, it remains disabling CBC mode ciphers
> our platform is jboss-eap-6.1
--
This message was sent by Atlassian JIRA
(v6.2.3#6260)
12 years, 1 month
[JBoss JIRA] (JBWEB-297) NIO can improperly lead to request/response objects being used concurrently
by RH Bugzilla Integration (JIRA)
[ https://issues.jboss.org/browse/JBWEB-297?page=com.atlassian.jira.plugin.... ]
RH Bugzilla Integration commented on JBWEB-297:
-----------------------------------------------
Carlo de Wolf <cdewolf(a)redhat.com> changed the Status of [bug 1103891|https://bugzilla.redhat.com/show_bug.cgi?id=1103891] from POST to MODIFIED
> NIO can improperly lead to request/response objects being used concurrently
> ---------------------------------------------------------------------------
>
> Key: JBWEB-297
> URL: https://issues.jboss.org/browse/JBWEB-297
> Project: JBoss Web
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: Tomcat
> Affects Versions: JBossWeb-7.2.2.GA, JBossWeb-7.3.0.GA, JBossWeb-7.4.0.GA
> Reporter: Aaron Ogburn
> Assignee: Remy Maucherat
> Attachments: JBWEB-297.diff
>
>
> Using NIO with async servlets can improperly lead to a processor and its request/response objects being used by multiple threads to process different requests at once. The problem arises here in Http11NioProtocol.event():
> {code:title=Http11NioProtocol.java|borderStyle=solid}
> public SocketState event(NioChannel channel, SocketStatus status) {
> Http11NioProcessor processor = connections.get(channel.getId());
> SocketState state = SocketState.CLOSED;
> if (processor != null) {
> processor.startProcessing();
> // Call the appropriate event
> try {
> state = processor.event(status);
> } catch (java.net.SocketException e) {
> // SocketExceptions are normal
> CoyoteLogger.HTTP_NIO_LOGGER.socketException(e);
> } catch (java.io.IOException e) {
> // IOExceptions are normal
> CoyoteLogger.HTTP_NIO_LOGGER.socketException(e);
> }
> // Future developers: if you discover any other
> // rare-but-nonfatal exceptions, catch them here, and log as
> // above.
> catch (Throwable e) {
> // any other exception or error is odd. Here we log it
> // with "ERROR" level, so it will show up even on
> // less-than-verbose logs.
> CoyoteLogger.HTTP_NIO_LOGGER.socketError(e);
> } finally {
> if (state != SocketState.LONG) {
> connections.remove(channel.getId());
> recycledProcessors.offer(processor);
> {code}
> If two events occur on the same channel and execute this at the same time, it'll lead to this issue if they result in a SocketState other than LONG. When that happens, they both offer the same processor to recycledProcessors in the finally block. Later on, two different requests can then poll the same processor at once from reycledProcessors; a processor should only ever have one entry in recycledProcessors.
> It looks like we need to synch the Http11NioProtocol.event() call or the NioEndpoint.ChannelProcessor.run().
--
This message was sent by Atlassian JIRA
(v6.2.3#6260)
12 years, 1 month