Actually I'll say that again, it seems to be happening when I have 2 beans
deployed in the same servicemix-bean component.  I would like to say that
it's caused when both of them have received an exchange and are processing
at the same time.  Both of the servicemix beans are invoked by a quartz
service every 15 seconds.  If I comment out one of the beans, then I don't
get the error anymore.  It's only when I have both of them uncommented that
I start seeing this error.

On Fri, Aug 1, 2008 at 2:33 AM, Ryan Moquin <[EMAIL PROTECTED]> wrote:

> Forgot to respond to this message, doh!  Here is the stack trace I'm
> getting.  I seem to be getting this a lot lately and while the system is
> under no load.  It just starts doing this when I try to send out from my
> bean using the delivery channel.  I remember you reviewing this same code
> for the same stack trace a couple weeks back, which was a result of too
> small a thread pool.  Now I'm getting this error lately when there is no
> load on the server.  I have a quartz service that invokes this bean every 15
> seconds.
>
> ERROR - JbiNotificationHandlerImpl           - Error sending notification
> to service: urn://service.notification.com notification-jms-service
>         at
> com.notification.impl.JbiNotificationHandlerImpl.sendNotification(JbiNotificati
> onHandlerImpl.java:83)
>         at
> com.notification.impl.DataCollectorImpl.onMessageExchange(DataCollectorImpl.java:228)
>         at
> org.apache.servicemix.bean.BeanEndpoint.onProviderExchange(BeanEndpoint.java:235)
>         at
> org.apache.servicemix.bean.BeanEndpoint.process(BeanEndpoint.java:211)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:538)
>         at
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:490)
>         at
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>         at
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
>         at
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
>         at
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>         at java.lang.Thread.run(Thread.java:619)
> 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(JbiNotificati
> onHandlerImpl.java:81)
>         ... 16 more
>
>
> On Mon, Jul 28, 2008 at 3:27 AM, Guillaume Nodet <[EMAIL PROTECTED]> wrote:
>
>> The DeliveryChannel provided by the container is thread safe.
>> However, this delivery channel is wrapped by the component when used
>> for a particular endpoint, so there may be a threading problem there.
>> However, this wrapper is used by all components and I doubts there is
>> a threading problem there.   But the servicemix-bean component does
>> some very specific stuff when a request arrive to a bean endpoint to
>> map this request to a known bean instance (in case the bean is created
>> by the endpoint for each request), so the problem could be there.
>> Could you paste the full exception stack trace please ?
>>
>> On Mon, Jul 28, 2008 at 3:00 AM, Ryan Moquin <[EMAIL PROTECTED]>
>> wrote:
>> > Out of curiousity, we have a servicemix-bean component that instantiates
>> 4
>> > total beans.  2 of which are used by external services (they are
>> considered
>> > a "live" and "test" version of the bean type), but both of those bean
>> > instances provide the same functionality.  So my question is that if
>> both of
>> > those bean classes, which live in the save service unit, both execute at
>> the
>> > same time and use an injected DeliveryChannel, should there be a
>> threading
>> > problem?  I would assume not, provided that request invoking each bean
>> are
>> > separate threads and the thread pool isn't exhausted.  For some reason
>> > though, if I use a quartz timer to send an invocation to each of those
>> two
>> > deployed beans (which of course are on different endpoints), I get the
>> NPE
>> > in the deliverychannel bean pojo send method that I had a ton of
>> problems
>> > with before.  This test is under low load and there aren't any resource
>> > issues, such as a thread pool running out like I had before.  If I
>> disable
>> > one of the beans, then I never see this error occur, it happens
>> consistently
>> > any time the two beans in the same SU execute at the same time and try
>> to
>> > use the deliverychannel.  I thought the servicemix code was synchronized
>> to
>> > prevent this, but I wanted to pick brains to see if what I'm seeing is
>> in
>> > ANY WAY possible, or if it seems more like it would be be an error in my
>> > application code?  The NPE definitely happens down in servicemix in a
>> spot
>> > that should be synchronized on the current thread.  The bean invocations
>> > should be on different threads and therefore this shouldn't happen, but
>> want
>> > to make sure.
>> >
>> > I can post more details if necessary, but it's pretty straightforward (I
>> > think).  If not, I'll go ahead and post more details.  Thanks!!  I can
>> go
>> > back to synchronizing the code where the DeliveryChannel is used, I'm
>> just
>> > not sure the best way to be sure that I don't end up causing a race
>> > condition of some kind, so I hate to do it unless I know it's safe.
>> >
>> > Ryan
>> >
>>
>>
>>
>> --
>> Cheers,
>> Guillaume Nodet
>> ------------------------
>> Blog: http://gnodet.blogspot.com/
>>
>
>

Reply via email to