cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: Null pointer in Cayenne 2.0.3 code
Date Fri, 31 Aug 2007 15:40:20 GMT
The line numbers from 2.0 branch should match:

    https://svn.apache.org/repos/asf/cayenne/main/branches/STABLE-2.0/

Looking at the code, it seems to come down to DataContext having a  
null EntityResolver. A random thought - is there a serialization/ 
deserialization cycle somewhere in your app, so that the DataContext  
somehow loses its EntityResolver and can't properly reattach?

(I almost feel like we should throw an exception early from within  
DataContext.awakeFromDeserialization() if the context failed to  
acquire an EntityResolver).

Andrus

On Aug 31, 2007, at 6:15 PM, Alexander Lamb (dev) wrote:

> Initially, it was a static method to fetch a Patient from the  
> primary key (give the DataContext, the String, returns the Patient  
> or null).
>
> Since whatever I was doing would crash Cayenne, I simply tried to  
> do fetch all patients:
>
> Here is the function (will all my experiments commented out :-)
>
> Oviously, I simply want to fetch a Patient from his key (a varchar  
> of approx. 35 characters).
>
> 	public static Patient patientWithPKInContext(String pk,  
> DataContext dataContext) {
> 	  //Expression q = ExpressionFactory.matchExp 
> (Patient.BIRTH_CITY_PROPERTY,"Bitola");
> 	  //Expression q = Expression.fromString("patientPk = '" + pk + "'");
> //	  Patient p = (Patient)DataObjectUtils.objectForPK(dataContext,  
> "Patient", pk);
> 	  //System.out.println("--- found object: " + p);
> 	  //return p;
> 	
> //	  System.out.println("EXP:" + q.toString());
> 	//    SelectQuery s = new SelectQuery(Patient.class,q);
> 	  //  List patients = dataContext.performQuery(s);
>     SelectQuery allPatients = new SelectQuery(Patient.class);
>     List patients = dataContext.performQuery(allPatients);
> 	
> 	    if(patients.size() == 0)
> 	       return null;
> 	    else
> 	       return (Patient)patients.get(0);
> 	
>     }
>
> Le 31 août 07 à 17:07, Michael Gentry a écrit :
>
>> Hi Alex,
>>
>> I'm curious as to why:
>>
>> at ch.rodano.msbase.model.Patient.patientWithPKInContext 
>> (Patient.java:30)
>>
>> is in your stack trace?  What does that method do?
>>
>> Thanks,
>>
>> /dev/mrg
>>
>>
>> On 8/31/07, Alexander Lamb (dev) <alamb@mac.com> wrote:
>>> Hello list,
>>>
>>> We are experimenting a Cayenne crash and wondering how to get  
>>> around it.
>>>
>>> Here is the place of the crash:
>>>
>>> java.lang.NullPointerException
>>>         at org.apache.cayenne.query.BaseQueryMetadata.resolve
>>> (BaseQueryMetadata.java:97)
>>>         at org.apache.cayenne.query.SelectQuery.getMetaData 
>>> (SelectQuery.java:
>>> 151)
>>>         at org.apache.cayenne.util.ObjectContextQueryAction.<init>
>>> (ObjectContextQueryAction.java:69)
>>>         at org.apache.cayenne.access.DataContextQueryAction.<init>
>>> (DataContextQueryAction.java:46)
>>>         at org.apache.cayenne.access.DataContext.onQuery 
>>> (DataContext.java:1387)
>>>         at org.apache.cayenne.access.DataContext.performQuery
>>> (DataContext.java:1376)
>>>         at ch.rodano.msbase.model.Patient.patientWithPKInContext
>>> (Patient.java:30)
>>>
>>> I am not certain how to check the line were it crashed (looking at
>>> the code repository on-line does not probably garantee the line
>>> number is the same).
>>>
>>> We are simply trying to get a list of objects:
>>>
>>>      SelectQuery allPatients = new SelectQuery(Patient.class);
>>>      List patients = dataContext.performQuery(allPatients);
>>>
>>> Probably something is wrong with our model, but what? How to find  
>>> out?
>>> The only different thing we did (which we did already previously) is
>>> that the primary key for Patient is a varchar (String) and is not
>>> hidden in the Java Class.
>>>
>>> Thanks for any hints (we regenerated everyting, etc... always the
>>> same crash)
>>>
>>> Alex
>


Mime
View raw message