I feel dumb asking this, but I've been looking at the source code and I'm
not sure how to test out your suggestion? How am I able to retrieve the
current request? It looks like it's contained in a parent object that isn't
accessible to my bean?
On Mon, Jun 23, 2008 at 6:01 AM, Guillaume Nodet <[EMAIL PROTECTED]> wrote:
> Could you please test something ?
> In the BeanEndpoint, save the old value for the currentRequest.get()
> in a local variable before setting it to the new value, and instead of
> setting it to null after processing, set it back to the old value. It
> may fix the problem ...
>
> On Mon, Jun 23, 2008 at 11:58 AM, Guillaume Nodet <[EMAIL PROTECTED]>
> wrote:
> > I'm wondering if for some reason your endpoint sends a request to itself
> ?
> > If this request is handled synchronously, it may happen that the
> > currentRequest is set to null while handling this request, but in the
> > same thread as the first request ?
> > Under high load, this behavior could happen if the thread pool is
> > exhausted, because under such conditions, the work will be executed in
> > the same thread...
> >
> > On Mon, Jun 23, 2008 at 9:52 AM, Ryan Moquin <[EMAIL PROTECTED]>
> wrote:
> >> Oh right, because the thread obviously would be the one that would go
> >> through onMessageExchange method and then it would be set to null
> after...
> >> (bear with me, long weekend dealing with this problem and it's 4am on a
> >> workday.. haha).
> >>
> >> It's a rather large bean, composed of several classes (it does a lot of
> >> complicated stuff inside the bean)... but I could probably send you some
> >> pieces of it... do you mind if I email them privately to you?
> >>
> >> On Mon, Jun 23, 2008 at 3:44 AM, Guillaume Nodet <[EMAIL PROTECTED]>
> wrote:
> >>
> >>> But the current request is only set to null *after* calling the pojo.
> >>> Do you have the full code of you bean ?
> >>>
> >>> On Mon, Jun 23, 2008 at 9:31 AM, Ryan Moquin <[EMAIL PROTECTED]>
> >>> wrote:
> >>> > Sure, I backed out the changes in my editor.. basically my bean is
> >>> standard
> >>> > compared to the servicemix docs (for how to handle the exchange
> coming
> >>> in),
> >>> > then my bean takes the injected deliverychannel and hands it to a
> class
> >>> that
> >>> > creates a message to send out with results of some analysis
> performed..
> >>> here
> >>> > is the code to send out (it's using the DeliveryChannel injected into
> the
> >>> > bean by Servicemix):
> >>> >
> >>> > Marshaller notificationMarshaller = jaxbContext.createMarshaller();
> >>> >
> notificationMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
> >>> > Boolean.TRUE);
> >>> > notificationMarshaller.marshal(notification, writer);
> >>> > if (destinationQname == null) {
> >>> > destinationQname = new QName(getDestinationNamespace(),
> >>> > getDestinationService());
> >>> > }
> >>> > MessageExchangeFactory exchangeFactory =
> >>> > deliveryChannel.createExchangeFactory();
> >>> > InOnly exchange = exchangeFactory.createInOnlyExchange();
> >>> > NormalizedMessage message = exchange.createMessage();
> >>> > message.setContent(new StringSource(writer.toString()));
> >>> > exchange.setInMessage(message);
> >>> > exchange.setService(destinationQname);
> >>> > deliveryChannel.send(exchange);
> >>> >
> >>> > The send is where the ConcurrentHashmap complains about an NPE .. I
> think
> >>> > because the BeanComponent sets the CurrentRequest to null around the
> time
> >>> my
> >>> > code is trying to send a request that must get clobbered? There's no
> >>> other
> >>> > explanation for it.. it looks like the NPE is caused by
> >>> > currentRequest.get(), which is set back to null by the BeanComponent
> and
> >>> > since they are in the same thread.... they interfere.
> >>> >
> >>> > Ryan
> >>> >
> >>> > On Mon, Jun 23, 2008 at 3:24 AM, Guillaume Nodet <[EMAIL PROTECTED]>
> >>> wrote:
> >>> >
> >>> >> Is there any way you could paste the code of the bean you're using
> so
> >>> >> that i can have a quick look. You can skip any non-jbi related
> >>> >> processing...
> >>> >>
> >>> >> On Mon, Jun 23, 2008 at 9:18 AM, Ryan Moquin <
> [EMAIL PROTECTED]>
> >>> >> wrote:
> >>> >> > No, I'm just simply using the deliverychannel to send out, which
> is
> >>> >> > mentioned in the servicemix docs as something that you can do. I
> >>> assume
> >>> >> > that means it's recommended :) I did see that I can inject a
> >>> >> > ComponentContext and so I'm currently changing my outbound
> messages to
> >>> >> that
> >>> >> > to see if I can get around this problem. I think I just can't use
> the
> >>> >> > DeliveryContext in the same Pojo (same thread).
> >>> >> >
> >>> >> > On Mon, Jun 23, 2008 at 3:11 AM, Guillaume Nodet <
> [EMAIL PROTECTED]>
> >>> >> wrote:
> >>> >> >
> >>> >> >> The NPE in the PojoChannel.send() method means that the
> >>> >> >> currentRequest.get() is null.
> >>> >> >> Do you perform any threading operation in the pojo ? If yes, you
> >>> >> >> should try to remove that, as the component is already able to
> handle
> >>> >> >> concurrent requests.
> >>> >> >>
> >>> >> >> On Sat, Jun 21, 2008 at 6:48 AM, Ryan Moquin <
> [EMAIL PROTECTED]
> >>> >
> >>> >> >> wrote:
> >>> >> >> > I hate to say this Bruce, but unfortunately 3.2.2 is working
> pretty
> >>> >> bad
> >>> >> >> for
> >>> >> >> > me and has the same problem :( It only seems to affect our
> >>> production
> >>> >> >> > server and in a few minutes after start up, I start getting the
> >>> >> >> > NullPointerException.. slowly all my services start doing it
> and
> >>> they
> >>> >> all
> >>> >> >> > stop working. If I stop and restart servicemix, then
> >>> servicemix-jms
> >>> >> >> > components are no longer routable. I'm guessing this error
> causes
> >>> >> >> > Servicemix to shut them down and not deploy them anymore
> >>> (Servicemix
> >>> >> does
> >>> >> >> > the same thing if a service unit starts up, tries to make a
> Joram
> >>> >> >> connection
> >>> >> >> > to a server that isn't up, servicemix will shutdown that SU and
> >>> will
> >>> >> >> always
> >>> >> >> > shut it down immediately after it starts on any subsequent
> run).
> >>> >> >> >
> >>> >> >> > It seems like this problem must be related to a race condition.
> >>> When
> >>> >> >> doing
> >>> >> >> > development testing, I never see this problem on my laptop even
> >>> under
> >>> >> >> high
> >>> >> >> > load. One our fast test server, I see this error popup once on
> >>> >> startup
> >>> >> >> and
> >>> >> >> > then it doesn't seem to happen again. On our even faster
> >>> production
> >>> >> >> server,
> >>> >> >> > the whole thing looses it's wheels and falls apart after a few
> >>> >> minutes.
> >>> >> >> >
> >>> >> >> > I'm supposed to be deploying this system in a few days and of
> >>> course
> >>> >> >> that's
> >>> >> >> > the only spot where I can't temporarily limp by. Is it
> possible
> >>> you
> >>> >> >> could
> >>> >> >> > give me some hints on what the problem is and I'll debug it
> this
> >>> >> weekend
> >>> >> >> to
> >>> >> >> > see if I can fix it, or at least patch it temporarily? I
> really
> >>> need
> >>> >> to
> >>> >> >> > figure out way to get around this problem. Other than that,
> 3.2.2
> >>> >> seems
> >>> >> >> to
> >>> >> >> > work perfectly fine.
> >>> >> >> >
> >>> >> >> > Here is the caused by error again in case it's any bit
> different
> >>> than
> >>> >> the
> >>> >> >> > 3.2.1 one was:
> >>> >> >> >
> >>> >> >> > Caused by: java.lang.NullPointerException
> >>> >> >> > at
> >>> >> >> >
> >>> java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:881)
> >>> >> >> > at
> >>> >> >> >
> >>> >> >>
> >>> >>
> >>>
> org.apache.servicemix.bean.BeanEndpoint$PojoChannel.send(BeanEndpoint.java:569)
> >>> >> >> > at
> >>> >> >> >
> >>> >> >>
> >>> >>
> >>>
> com.notification.impl.JbiNotificationHandlerImpl.sendNotification(JbiNotificat
> >>> >> >> > ionHandlerImpl.java:80)
> >>> >> >> >
> >>> >> >> > Also, is the delivery channel component threadsafe? I'm
> curious if
> >>> >> >> multiple
> >>> >> >> > threads accessing it is a problem or if I should keep access to
> it
> >>> >> >> > synchronized? I'm currently synchronizing, but don't want to
> if I
> >>> >> don't
> >>> >> >> > need to.
> >>> >> >> >
> >>> >> >> > Thanks!
> >>> >> >> > Ryan
> >>> >> >> >
> >>> >> >> > On Thu, Jun 19, 2008 at 2:19 AM, Bruce Snyder <
> >>> [EMAIL PROTECTED]
> >>> >> >
> >>> >> >> > wrote:
> >>> >> >> >
> >>> >> >> >> On Wed, Jun 18, 2008 at 7:56 PM, Ryan Moquin <
> >>> [EMAIL PROTECTED]
> >>> >> >
> >>> >> >> >> wrote:
> >>> >> >> >> > I'm using Servicemix 3.2.1, so I'll give 3.2.2 a try. I was
> >>> kind
> >>> >> of
> >>> >> >> >> waiting
> >>> >> >> >> > until it was released, but this problem is now cropping up
> on a
> >>> >> >> regular
> >>> >> >> >> > basis on a server so I'll definitely give it a shot.
> Hopefully
> >>> >> this
> >>> >> >> will
> >>> >> >> >> > allow me to get this project done so I can then get that
> Joram
> >>> >> write
> >>> >> >> up
> >>> >> >> >> done
> >>> >> >> >> > since I should have ran across hopefully most of the gotchas
> for
> >>> it
> >>> >> at
> >>> >> >> >> that
> >>> >> >> >> > point.
> >>> >> >> >>
> >>> >> >> >> 3.2.2 will be released very soon and I know it's pretty
> stable.
> >>> Maybe
> >>> >> >> >> we can release it this weekend.
> >>> >> >> >>
> >>> >> >> >> Bruce
> >>> >> >> >> --
> >>> >> >> >> perl -e 'print
> >>> >> >> >>
> >>> unpack("u30","D0G)[EMAIL PROTECTED]&5R\"F)R=6-E+G-N>61E<D\!G;6%I;\"YC;VT*"
> >>> >> >> >> );'
> >>> >> >> >>
> >>> >> >> >> Apache ActiveMQ - http://activemq.org/
> >>> >> >> >> Apache Camel - http://activemq.org/camel/
> >>> >> >> >> Apache ServiceMix - http://servicemix.org/
> >>> >> >> >>
> >>> >> >> >> Blog: http://bruceblog.org/
> >>> >> >> >>
> >>> >> >> >
> >>> >> >>
> >>> >> >>
> >>> >> >>
> >>> >> >> --
> >>> >> >> Cheers,
> >>> >> >> Guillaume Nodet
> >>> >> >> ------------------------
> >>> >> >> Blog: http://gnodet.blogspot.com/
> >>> >> >>
> >>> >> >
> >>> >>
> >>> >>
> >>> >>
> >>> >> --
> >>> >> Cheers,
> >>> >> Guillaume Nodet
> >>> >> ------------------------
> >>> >> Blog: http://gnodet.blogspot.com/
> >>> >>
> >>> >
> >>>
> >>>
> >>>
> >>> --
> >>> Cheers,
> >>> Guillaume Nodet
> >>> ------------------------
> >>> Blog: http://gnodet.blogspot.com/
> >>>
> >>
> >
> >
> >
> > --
> > Cheers,
> > Guillaume Nodet
> > ------------------------
> > Blog: http://gnodet.blogspot.com/
> >
>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
>