You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Hugi Thordarson <hu...@karlmenn.is> on 2021/05/07 12:15:27 UTC

Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Hi all,

occasionally my users encounter errors when committing changes to the DB. The relevant part of the stack trace looks like this:

---------
org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020 10:26:08] Commit Exception
	at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
	at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
	[...removed rest of trace…]
Caused by: java.lang.NullPointerException
---------

Unfortunately I've been unable to reproduce this error, so before I dive into it I'm wondering if this looks familiar to anyone, if there are obvious places to look or if there are recommendations for strategies to debug?

Cheers,
- hugi

Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by John Huss <jo...@gmail.com>.
On Fri, May 7, 2021 at 8:18 AM Hugi Thordarson <hu...@karlmenn.is> wrote:

> Well I'll be… Over two decades of full time Java and I somehow didn't know
> about that stack trace omission. Yikes. Thanks!


You’ve just never caused an error that bad before right? 😉


>
> Now, looking at the first occurrence of the exception after app startup, I
> see the NPE is happening in @PreUpdate on a listener registered to my
> DataDomain. The offending code looks a bit like this:
>
> @PreUpdate({ BaseDataObject.class })
> public void handleUpdate( final BaseDataObject dataObject ) {
>         final DataContext dc = (DataContext)dataObject.getObjectContext();
>         final ObjectId objectId = dataObject.getObjectId();
>         final ObjEntity entity = dc.getEntityResolver().getObjEntity(
> objectId.getEntityName() );
>         final DataRow snapshot = dc.getObjectStore().getSnapshot( objectId
> );
>
>         for( final ObjAttribute objAttribute : entity.getAttributes() ) {
>                 final Object originalValue = snapshot.get(
> objAttribute.getDbAttributeName() );
>                 [ ... irrelevant rest of code omitted ... ]
>         }
> }
>
> …the NPE gets thrown by the first line in the for-loop (…snapshot.get(
> objAttribute.getDbAttributeName() )).
>
> So it seems either 'snapshot' or 'objAttribute' is null, probably the
> snapshot, right? Any ideas why that might be?
>
> - hugi
>
>
>
> > On 7 May 2021, at 12:53, John Huss <jo...@gmail.com> wrote:
> >
> > Or if you have older logs, you can look back farther to find one without
> > the cause omitted.
> >
> > On Fri, May 7, 2021 at 7:52 AM John Huss <jo...@gmail.com> wrote:
> >
> >> It will omit the trace if it has happened a very large number of times.
> If
> >> you restart the server it will start printing it again when it happens.
> >>
> >> On Fri, May 7, 2021 at 7:26 AM Hugi Thordarson <hu...@karlmenn.is>
> wrote:
> >>
> >>> One would think so, but there's just no stack trace printed for the
> >>> NullPointerException.
> >>>
> >>>
> >>>> On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
> >>>>
> >>>> The first line of the stack after the Caused By line would tell you
> the
> >>>> line with the problem, wouldn't it? What was that line?
> >>>>
> >>>> On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is>
> >>> wrote:
> >>>>
> >>>>> Hi all,
> >>>>>
> >>>>> occasionally my users encounter errors when committing changes to the
> >>> DB.
> >>>>> The relevant part of the stack trace looks like this:
> >>>>>
> >>>>> ---------
> >>>>> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020
> >>> 10:26:08]
> >>>>> Commit Exception
> >>>>>       at
> >>>>>
> >>>
> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
> >>>>>       at
> >>>>>
> >>>
> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
> >>>>>       [...removed rest of trace…]
> >>>>> Caused by: java.lang.NullPointerException
> >>>>> ---------
> >>>>>
> >>>>> Unfortunately I've been unable to reproduce this error, so before I
> >>> dive
> >>>>> into it I'm wondering if this looks familiar to anyone, if there are
> >>>>> obvious places to look or if there are recommendations for strategies
> >>> to
> >>>>> debug?
> >>>>>
> >>>>> Cheers,
> >>>>> - hugi
> >>>
> >>>
>
>

Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent() [solved]

Posted by Hugi Thordarson <hu...@karlmenn.is>.
To provide some closure on this issue, in case anyone looks at this thread in the future:

Turns out Cayenne was totally innocent and this was just a symptom of a simple "Internet double-clicker" issue.

A button in my web application invoked a method that deletes an object. If the user double-clicked that button -> the same method was invoked twice -> the later invocation tried to do things with a deleted object -> it's snapshot had been evicted from the cache -> kaboom!

But thanks still for the help John! :)

Cheers,
- hugi



> On 7 May 2021, at 20:21, Hugi Thordarson <hu...@karlmenn.is> wrote:
> 
> Rethinking this a bit… If it turns out that the snapshot has actually been evacuated from cache, how should I obtain an instance of the snapshot? And isn't it a bit odd that a snapshot has been evacuated for an object that's about to be updated or is that to be expected?
> 
> Cheers,
> - hugi
> 
> 
> 
>> On 7 May 2021, at 19:55, Hugi Thordarson <hu...@karlmenn.is> wrote:
>> 
>>> On 7 May 2021, at 13:34, John Huss <jo...@gmail.com> wrote:
>>> 
>>> On Fri, May 7, 2021 at 8:18 AM Hugi Thordarson <hu...@karlmenn.is> wrote:
>>> 
>>>> Well I'll be… Over two decades of full time Java and I somehow didn't know
>>>> about that stack trace omission. Yikes. Thanks!
>>> 
>>> You’ve just never caused an error that bad before right? 😉
>> 
>> *cough* yes. Of course, that must be it 😁
>> 
>>>> ....
>>>> So it seems either 'snapshot' or 'objAttribute' is null, probably the
>>>> snapshot, right? Any ideas why that might be?
>>>> 
>>> 
>>> Yeah, it would be the snapshot is null. The snapshot cache is limited in
>>> size, so it may have purged that entry if you have a busy server. You could
>>> try increasing the size of the snapshot cache:
>>> 
>>> org.apache.cayenne.configuration.Constants.SNAPSHOT_CACHE_SIZE_PROPERTY
>> 
>> Good thinking, but I've already got a ginormous snapshot cache (3.000.000) for the traffic, so I don't think that's it.
>> Going to hammer away on this code path a bit and see if I can replicate the error.
>> 
>> 
>>>> 
>>>> - hugi
>>>> 
>>>> 
>>>> 
>>>>> On 7 May 2021, at 12:53, John Huss <jo...@gmail.com> wrote:
>>>>> 
>>>>> Or if you have older logs, you can look back farther to find one without
>>>>> the cause omitted.
>>>>> 
>>>>> On Fri, May 7, 2021 at 7:52 AM John Huss <jo...@gmail.com> wrote:
>>>>> 
>>>>>> It will omit the trace if it has happened a very large number of times.
>>>> If
>>>>>> you restart the server it will start printing it again when it happens.
>>>>>> 
>>>>>> On Fri, May 7, 2021 at 7:26 AM Hugi Thordarson <hu...@karlmenn.is>
>>>> wrote:
>>>>>> 
>>>>>>> One would think so, but there's just no stack trace printed for the
>>>>>>> NullPointerException.
>>>>>>> 
>>>>>>> 
>>>>>>>> On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>> The first line of the stack after the Caused By line would tell you
>>>> the
>>>>>>>> line with the problem, wouldn't it? What was that line?
>>>>>>>> 
>>>>>>>> On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is>
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> Hi all,
>>>>>>>>> 
>>>>>>>>> occasionally my users encounter errors when committing changes to the
>>>>>>> DB.
>>>>>>>>> The relevant part of the stack trace looks like this:
>>>>>>>>> 
>>>>>>>>> ---------
>>>>>>>>> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020
>>>>>>> 10:26:08]
>>>>>>>>> Commit Exception
>>>>>>>>>    at
>>>>>>>>> 
>>>>>>> 
>>>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>>>>>>>>>    at
>>>>>>>>> 
>>>>>>> 
>>>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>>>>>>>>>    [...removed rest of trace…]
>>>>>>>>> Caused by: java.lang.NullPointerException
>>>>>>>>> ---------
>>>>>>>>> 
>>>>>>>>> Unfortunately I've been unable to reproduce this error, so before I
>>>>>>> dive
>>>>>>>>> into it I'm wondering if this looks familiar to anyone, if there are
>>>>>>>>> obvious places to look or if there are recommendations for strategies
>>>>>>> to
>>>>>>>>> debug?
>>>>>>>>> 
>>>>>>>>> Cheers,
>>>>>>>>> - hugi
>>>>>>> 
>>>>>>> 
>>>> 
>>>> 
>> 
> 


Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by Hugi Thordarson <hu...@karlmenn.is>.
Rethinking this a bit… If it turns out that the snapshot has actually been evacuated from cache, how should I obtain an instance of the snapshot? And isn't it a bit odd that a snapshot has been evacuated for an object that's about to be updated or is that to be expected?

Cheers,
- hugi



> On 7 May 2021, at 19:55, Hugi Thordarson <hu...@karlmenn.is> wrote:
> 
>> On 7 May 2021, at 13:34, John Huss <jo...@gmail.com> wrote:
>> 
>> On Fri, May 7, 2021 at 8:18 AM Hugi Thordarson <hu...@karlmenn.is> wrote:
>> 
>>> Well I'll be… Over two decades of full time Java and I somehow didn't know
>>> about that stack trace omission. Yikes. Thanks!
>> 
>> You’ve just never caused an error that bad before right? 😉
> 
> *cough* yes. Of course, that must be it 😁
> 
>>> ....
>>> So it seems either 'snapshot' or 'objAttribute' is null, probably the
>>> snapshot, right? Any ideas why that might be?
>>> 
>> 
>> Yeah, it would be the snapshot is null. The snapshot cache is limited in
>> size, so it may have purged that entry if you have a busy server. You could
>> try increasing the size of the snapshot cache:
>> 
>> org.apache.cayenne.configuration.Constants.SNAPSHOT_CACHE_SIZE_PROPERTY
> 
> Good thinking, but I've already got a ginormous snapshot cache (3.000.000) for the traffic, so I don't think that's it.
> Going to hammer away on this code path a bit and see if I can replicate the error.
> 
> 
>>> 
>>> - hugi
>>> 
>>> 
>>> 
>>>> On 7 May 2021, at 12:53, John Huss <jo...@gmail.com> wrote:
>>>> 
>>>> Or if you have older logs, you can look back farther to find one without
>>>> the cause omitted.
>>>> 
>>>> On Fri, May 7, 2021 at 7:52 AM John Huss <jo...@gmail.com> wrote:
>>>> 
>>>>> It will omit the trace if it has happened a very large number of times.
>>> If
>>>>> you restart the server it will start printing it again when it happens.
>>>>> 
>>>>> On Fri, May 7, 2021 at 7:26 AM Hugi Thordarson <hu...@karlmenn.is>
>>> wrote:
>>>>> 
>>>>>> One would think so, but there's just no stack trace printed for the
>>>>>> NullPointerException.
>>>>>> 
>>>>>> 
>>>>>>> On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
>>>>>>> 
>>>>>>> The first line of the stack after the Caused By line would tell you
>>> the
>>>>>>> line with the problem, wouldn't it? What was that line?
>>>>>>> 
>>>>>>> On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is>
>>>>>> wrote:
>>>>>>> 
>>>>>>>> Hi all,
>>>>>>>> 
>>>>>>>> occasionally my users encounter errors when committing changes to the
>>>>>> DB.
>>>>>>>> The relevant part of the stack trace looks like this:
>>>>>>>> 
>>>>>>>> ---------
>>>>>>>> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020
>>>>>> 10:26:08]
>>>>>>>> Commit Exception
>>>>>>>>     at
>>>>>>>> 
>>>>>> 
>>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>>>>>>>>     at
>>>>>>>> 
>>>>>> 
>>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>>>>>>>>     [...removed rest of trace…]
>>>>>>>> Caused by: java.lang.NullPointerException
>>>>>>>> ---------
>>>>>>>> 
>>>>>>>> Unfortunately I've been unable to reproduce this error, so before I
>>>>>> dive
>>>>>>>> into it I'm wondering if this looks familiar to anyone, if there are
>>>>>>>> obvious places to look or if there are recommendations for strategies
>>>>>> to
>>>>>>>> debug?
>>>>>>>> 
>>>>>>>> Cheers,
>>>>>>>> - hugi
>>>>>> 
>>>>>> 
>>> 
>>> 
> 


Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by Hugi Thordarson <hu...@karlmenn.is>.
> On 7 May 2021, at 13:34, John Huss <jo...@gmail.com> wrote:
> 
> On Fri, May 7, 2021 at 8:18 AM Hugi Thordarson <hu...@karlmenn.is> wrote:
> 
>> Well I'll be… Over two decades of full time Java and I somehow didn't know
>> about that stack trace omission. Yikes. Thanks!
> 
> You’ve just never caused an error that bad before right? 😉

*cough* yes. Of course, that must be it 😁

>> ....
>> So it seems either 'snapshot' or 'objAttribute' is null, probably the
>> snapshot, right? Any ideas why that might be?
>> 
> 
> Yeah, it would be the snapshot is null. The snapshot cache is limited in
> size, so it may have purged that entry if you have a busy server. You could
> try increasing the size of the snapshot cache:
> 
> org.apache.cayenne.configuration.Constants.SNAPSHOT_CACHE_SIZE_PROPERTY

Good thinking, but I've already got a ginormous snapshot cache (3.000.000) for the traffic, so I don't think that's it.
Going to hammer away on this code path a bit and see if I can replicate the error.


>> 
>> - hugi
>> 
>> 
>> 
>>> On 7 May 2021, at 12:53, John Huss <jo...@gmail.com> wrote:
>>> 
>>> Or if you have older logs, you can look back farther to find one without
>>> the cause omitted.
>>> 
>>> On Fri, May 7, 2021 at 7:52 AM John Huss <jo...@gmail.com> wrote:
>>> 
>>>> It will omit the trace if it has happened a very large number of times.
>> If
>>>> you restart the server it will start printing it again when it happens.
>>>> 
>>>> On Fri, May 7, 2021 at 7:26 AM Hugi Thordarson <hu...@karlmenn.is>
>> wrote:
>>>> 
>>>>> One would think so, but there's just no stack trace printed for the
>>>>> NullPointerException.
>>>>> 
>>>>> 
>>>>>> On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
>>>>>> 
>>>>>> The first line of the stack after the Caused By line would tell you
>> the
>>>>>> line with the problem, wouldn't it? What was that line?
>>>>>> 
>>>>>> On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is>
>>>>> wrote:
>>>>>> 
>>>>>>> Hi all,
>>>>>>> 
>>>>>>> occasionally my users encounter errors when committing changes to the
>>>>> DB.
>>>>>>> The relevant part of the stack trace looks like this:
>>>>>>> 
>>>>>>> ---------
>>>>>>> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020
>>>>> 10:26:08]
>>>>>>> Commit Exception
>>>>>>>      at
>>>>>>> 
>>>>> 
>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>>>>>>>      at
>>>>>>> 
>>>>> 
>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>>>>>>>      [...removed rest of trace…]
>>>>>>> Caused by: java.lang.NullPointerException
>>>>>>> ---------
>>>>>>> 
>>>>>>> Unfortunately I've been unable to reproduce this error, so before I
>>>>> dive
>>>>>>> into it I'm wondering if this looks familiar to anyone, if there are
>>>>>>> obvious places to look or if there are recommendations for strategies
>>>>> to
>>>>>>> debug?
>>>>>>> 
>>>>>>> Cheers,
>>>>>>> - hugi
>>>>> 
>>>>> 
>> 
>> 


Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by John Huss <jo...@gmail.com>.
On Fri, May 7, 2021 at 8:18 AM Hugi Thordarson <hu...@karlmenn.is> wrote:

> Well I'll be… Over two decades of full time Java and I somehow didn't know
> about that stack trace omission. Yikes. Thanks!
>
> Now, looking at the first occurrence of the exception after app startup, I
> see the NPE is happening in @PreUpdate on a listener registered to my
> DataDomain. The offending code looks a bit like this:
>
> @PreUpdate({ BaseDataObject.class })
> public void handleUpdate( final BaseDataObject dataObject ) {
>         final DataContext dc = (DataContext)dataObject.getObjectContext();
>         final ObjectId objectId = dataObject.getObjectId();
>         final ObjEntity entity = dc.getEntityResolver().getObjEntity(
> objectId.getEntityName() );
>         final DataRow snapshot = dc.getObjectStore().getSnapshot( objectId
> );
>
>         for( final ObjAttribute objAttribute : entity.getAttributes() ) {
>                 final Object originalValue = snapshot.get(
> objAttribute.getDbAttributeName() );
>                 [ ... irrelevant rest of code omitted ... ]
>         }
> }
>
> …the NPE gets thrown by the first line in the for-loop (…snapshot.get(
> objAttribute.getDbAttributeName() )).
>
> So it seems either 'snapshot' or 'objAttribute' is null, probably the
> snapshot, right? Any ideas why that might be?
>

Yeah, it would be the snapshot is null. The snapshot cache is limited in
size, so it may have purged that entry if you have a busy server. You could
try increasing the size of the snapshot cache:

org.apache.cayenne.configuration.Constants.SNAPSHOT_CACHE_SIZE_PROPERTY




>
> - hugi
>
>
>
> > On 7 May 2021, at 12:53, John Huss <jo...@gmail.com> wrote:
> >
> > Or if you have older logs, you can look back farther to find one without
> > the cause omitted.
> >
> > On Fri, May 7, 2021 at 7:52 AM John Huss <jo...@gmail.com> wrote:
> >
> >> It will omit the trace if it has happened a very large number of times.
> If
> >> you restart the server it will start printing it again when it happens.
> >>
> >> On Fri, May 7, 2021 at 7:26 AM Hugi Thordarson <hu...@karlmenn.is>
> wrote:
> >>
> >>> One would think so, but there's just no stack trace printed for the
> >>> NullPointerException.
> >>>
> >>>
> >>>> On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
> >>>>
> >>>> The first line of the stack after the Caused By line would tell you
> the
> >>>> line with the problem, wouldn't it? What was that line?
> >>>>
> >>>> On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is>
> >>> wrote:
> >>>>
> >>>>> Hi all,
> >>>>>
> >>>>> occasionally my users encounter errors when committing changes to the
> >>> DB.
> >>>>> The relevant part of the stack trace looks like this:
> >>>>>
> >>>>> ---------
> >>>>> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020
> >>> 10:26:08]
> >>>>> Commit Exception
> >>>>>       at
> >>>>>
> >>>
> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
> >>>>>       at
> >>>>>
> >>>
> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
> >>>>>       [...removed rest of trace…]
> >>>>> Caused by: java.lang.NullPointerException
> >>>>> ---------
> >>>>>
> >>>>> Unfortunately I've been unable to reproduce this error, so before I
> >>> dive
> >>>>> into it I'm wondering if this looks familiar to anyone, if there are
> >>>>> obvious places to look or if there are recommendations for strategies
> >>> to
> >>>>> debug?
> >>>>>
> >>>>> Cheers,
> >>>>> - hugi
> >>>
> >>>
>
>

Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by Hugi Thordarson <hu...@karlmenn.is>.
Well I'll be… Over two decades of full time Java and I somehow didn't know about that stack trace omission. Yikes. Thanks!

Now, looking at the first occurrence of the exception after app startup, I see the NPE is happening in @PreUpdate on a listener registered to my DataDomain. The offending code looks a bit like this:

@PreUpdate({ BaseDataObject.class })
public void handleUpdate( final BaseDataObject dataObject ) {
	final DataContext dc = (DataContext)dataObject.getObjectContext();
	final ObjectId objectId = dataObject.getObjectId();
	final ObjEntity entity = dc.getEntityResolver().getObjEntity( objectId.getEntityName() );
	final DataRow snapshot = dc.getObjectStore().getSnapshot( objectId );

	for( final ObjAttribute objAttribute : entity.getAttributes() ) {
		final Object originalValue = snapshot.get( objAttribute.getDbAttributeName() );
		[ ... irrelevant rest of code omitted ... ]
	}
}

…the NPE gets thrown by the first line in the for-loop (…snapshot.get( objAttribute.getDbAttributeName() )).

So it seems either 'snapshot' or 'objAttribute' is null, probably the snapshot, right? Any ideas why that might be?

- hugi



> On 7 May 2021, at 12:53, John Huss <jo...@gmail.com> wrote:
> 
> Or if you have older logs, you can look back farther to find one without
> the cause omitted.
> 
> On Fri, May 7, 2021 at 7:52 AM John Huss <jo...@gmail.com> wrote:
> 
>> It will omit the trace if it has happened a very large number of times. If
>> you restart the server it will start printing it again when it happens.
>> 
>> On Fri, May 7, 2021 at 7:26 AM Hugi Thordarson <hu...@karlmenn.is> wrote:
>> 
>>> One would think so, but there's just no stack trace printed for the
>>> NullPointerException.
>>> 
>>> 
>>>> On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
>>>> 
>>>> The first line of the stack after the Caused By line would tell you the
>>>> line with the problem, wouldn't it? What was that line?
>>>> 
>>>> On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is>
>>> wrote:
>>>> 
>>>>> Hi all,
>>>>> 
>>>>> occasionally my users encounter errors when committing changes to the
>>> DB.
>>>>> The relevant part of the stack trace looks like this:
>>>>> 
>>>>> ---------
>>>>> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020
>>> 10:26:08]
>>>>> Commit Exception
>>>>>       at
>>>>> 
>>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>>>>>       at
>>>>> 
>>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>>>>>       [...removed rest of trace…]
>>>>> Caused by: java.lang.NullPointerException
>>>>> ---------
>>>>> 
>>>>> Unfortunately I've been unable to reproduce this error, so before I
>>> dive
>>>>> into it I'm wondering if this looks familiar to anyone, if there are
>>>>> obvious places to look or if there are recommendations for strategies
>>> to
>>>>> debug?
>>>>> 
>>>>> Cheers,
>>>>> - hugi
>>> 
>>> 


Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by John Huss <jo...@gmail.com>.
Or if you have older logs, you can look back farther to find one without
the cause omitted.

On Fri, May 7, 2021 at 7:52 AM John Huss <jo...@gmail.com> wrote:

> It will omit the trace if it has happened a very large number of times. If
> you restart the server it will start printing it again when it happens.
>
> On Fri, May 7, 2021 at 7:26 AM Hugi Thordarson <hu...@karlmenn.is> wrote:
>
>> One would think so, but there's just no stack trace printed for the
>> NullPointerException.
>>
>>
>> > On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
>> >
>> > The first line of the stack after the Caused By line would tell you the
>> > line with the problem, wouldn't it? What was that line?
>> >
>> > On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is>
>> wrote:
>> >
>> >> Hi all,
>> >>
>> >> occasionally my users encounter errors when committing changes to the
>> DB.
>> >> The relevant part of the stack trace looks like this:
>> >>
>> >> ---------
>> >> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020
>> 10:26:08]
>> >> Commit Exception
>> >>        at
>> >>
>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>> >>        at
>> >>
>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>> >>        [...removed rest of trace…]
>> >> Caused by: java.lang.NullPointerException
>> >> ---------
>> >>
>> >> Unfortunately I've been unable to reproduce this error, so before I
>> dive
>> >> into it I'm wondering if this looks familiar to anyone, if there are
>> >> obvious places to look or if there are recommendations for strategies
>> to
>> >> debug?
>> >>
>> >> Cheers,
>> >> - hugi
>>
>>

Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by John Huss <jo...@gmail.com>.
It will omit the trace if it has happened a very large number of times. If
you restart the server it will start printing it again when it happens.

On Fri, May 7, 2021 at 7:26 AM Hugi Thordarson <hu...@karlmenn.is> wrote:

> One would think so, but there's just no stack trace printed for the
> NullPointerException.
>
>
> > On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
> >
> > The first line of the stack after the Caused By line would tell you the
> > line with the problem, wouldn't it? What was that line?
> >
> > On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is> wrote:
> >
> >> Hi all,
> >>
> >> occasionally my users encounter errors when committing changes to the
> DB.
> >> The relevant part of the stack trace looks like this:
> >>
> >> ---------
> >> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020 10:26:08]
> >> Commit Exception
> >>        at
> >>
> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
> >>        at
> >>
> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
> >>        [...removed rest of trace…]
> >> Caused by: java.lang.NullPointerException
> >> ---------
> >>
> >> Unfortunately I've been unable to reproduce this error, so before I dive
> >> into it I'm wondering if this looks familiar to anyone, if there are
> >> obvious places to look or if there are recommendations for strategies to
> >> debug?
> >>
> >> Cheers,
> >> - hugi
>
>

Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by Hugi Thordarson <hu...@karlmenn.is>.
One would think so, but there's just no stack trace printed for the NullPointerException.


> On 7 May 2021, at 12:24, John Huss <jo...@gmail.com> wrote:
> 
> The first line of the stack after the Caused By line would tell you the
> line with the problem, wouldn't it? What was that line?
> 
> On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is> wrote:
> 
>> Hi all,
>> 
>> occasionally my users encounter errors when committing changes to the DB.
>> The relevant part of the stack trace looks like this:
>> 
>> ---------
>> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020 10:26:08]
>> Commit Exception
>>        at
>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>>        at
>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>>        [...removed rest of trace…]
>> Caused by: java.lang.NullPointerException
>> ---------
>> 
>> Unfortunately I've been unable to reproduce this error, so before I dive
>> into it I'm wondering if this looks familiar to anyone, if there are
>> obvious places to look or if there are recommendations for strategies to
>> debug?
>> 
>> Cheers,
>> - hugi


Re: Heisenbug-ish NullPointerExceptions in DataContext.flushToParent()

Posted by John Huss <jo...@gmail.com>.
The first line of the stack after the Caused By line would tell you the
line with the problem, wouldn't it? What was that line?

On Fri, May 7, 2021 at 7:16 AM Hugi Thordarson <hu...@karlmenn.is> wrote:

> Hi all,
>
> occasionally my users encounter errors when committing changes to the DB.
> The relevant part of the stack trace looks like this:
>
> ---------
> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020 10:26:08]
> Commit Exception
>         at
> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>         at
> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>         [...removed rest of trace…]
> Caused by: java.lang.NullPointerException
> ---------
>
> Unfortunately I've been unable to reproduce this error, so before I dive
> into it I'm wondering if this looks familiar to anyone, if there are
> obvious places to look or if there are recommendations for strategies to
> debug?
>
> Cheers,
> - hugi