db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michelle Caisse <Michelle.Cai...@Sun.COM>
Subject Re: Proposed solution for JDO-69 - embedded Address field issue
Date Wed, 13 Jul 2005 21:09:28 GMT
Hi Michael,

I've assigned JDO-69 to you.

-- Michelle

Craig Russell wrote:

> Hi Michelle,
>
> Michael and I were talking this morning about a related issue with 
> reading an object model and making some of the instances persistent. 
> The test case we were talking about was the CompletenessTest but the 
> results were relevant.
>
> What we decided as an approach is to define another object in the bean 
> xml file called "root". This object is a List that contains all of the 
> objects to become persistent. In the case of the CompletenessTest with 
> no relationships, we need this to be able to instantiate instances of 
> Company, Department, PartTimeEmployee, FullTimeEmployee, 
> MedicalInsurance, DentalInsurance, and Project and individually 
> persist them and compare them. We don't need to persist the Address 
> because these are embedded.
>
> We discussed using this same approach for the QueryTest as well. 
> Michael said he would look into modifying the query test to use the 
> same pattern, and see if both tests could use the same company.xml 
> input files.
>
> Considering persistence by reachability, the only objects needed in 
> the "root" list is the root of the connected objects. I think in the 
> case of the query test, it is the single object "dept1" that is in the 
> "root" list. I suppose it can't hurt to have emp1, emp2, and emp3 in 
> the root list as well, but it is only needed if the implementation has 
> a bug in persistence by reachability.
>
> I don't think we need an "isEmbedded" feature in the CompanyModelReader.
>
> Craig
>
> On Jul 12, 2005, at 2:47 PM, Michelle Caisse wrote:
>
>> Hi,
>>
>> JDO-69 describes a test error that occurs when the test attempts to 
>> make an embedded class persistent. The solution that I propose is an 
>> extension of one we previously implemented for tearDownClasses  In 
>> this case, I propose adding to CompanyModelReader an array containing 
>> the embedded classes for the model and a boolean method 
>> isEmbedded(Class).  In QueryTest, I check if the class is embedded 
>> before making it persistent.  See the attached patch.
>>
>> The concern that I have about this solution is that it only works for 
>> a particular mapping of the company model.
>>
>> The proposed solution fixes most of the 17 errors caused by this 
>> issue under application identity.  Under datastore identity, the 
>> affected tests produce a different error --  the implementation 
>> expects an identity field for the embedded Address class (JDO-83).
>>
>> -- Michelle
>> Index: test/java/org/apache/jdo/tck/pc/company/CompanyModelReader.java
>> ===================================================================
>> --- test/java/org/apache/jdo/tck/pc/company/CompanyModelReader.java  
>>   (revision 215964)
>> +++ test/java/org/apache/jdo/tck/pc/company/CompanyModelReader.java  
>>   (working copy)
>> @@ -48,7 +48,7 @@
>>          Project.class
>>      };
>>
>> -    /** All classes in the model 
>> +    /** Non-embedded classes in the model 
>>       */
>>      private static final Class[] tearDownClasses = new Class[] {
>>          DentalInsurance.class, MedicalInsurance.class,
>> @@ -56,6 +56,12 @@
>>          Project.class, Department.class, Company.class
>>      };
>>
>> +    /** Embedded classes in the model 
>> +     */
>> +    private static final Class[] embeddedClasses = new Class[] {
>> +        Address.class
>> +    };
>> +    
>>      /** 
>>       * Create a CompanyModelReader for the specified resourceName. 
>>       * @param resourceName the name of the resource
>> @@ -240,5 +246,17 @@
>>      public Class[] getTearDownClasses() {
>>          return tearDownClasses;
>>      }
>> +    
>> +    /**
>> +     * @return Returns true if class is embedded.
>> +     */
>> +    public boolean isEmbedded(Class c) {
>> +        for (int i=0; i < embeddedClasses.length; i++) {
>> +            if (c.equals(embeddedClasses[i])) {
>> +                return true;
>> +            }
>> +        }
>> +        return false;
>> +    }
>>  }
>>
>> Index: test/java/org/apache/jdo/tck/query/QueryTest.java
>> ===================================================================
>> --- test/java/org/apache/jdo/tck/query/QueryTest.java    (revision 
>> 215964)
>> +++ test/java/org/apache/jdo/tck/query/QueryTest.java    (working copy)
>> @@ -126,7 +126,9 @@
>>          String[] names = reader.getBeanDefinitionNames();
>>          for (int i = 0; i < names.length; i++) {
>>              Object bean = reader.getBean(names[i]);
>> -            pm.makePersistent(bean);
>> +            if (!reader.isEmbedded(bean.getClass())) {
>> +                pm.makePersistent(bean);
>> +            }
>>              if (debug) logger.debug("inserted " + bean);
>>          }
>>          tx.commit();
>>
>
> Craig Russell
>
> Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
>
> 408 276-5638 mailto:Craig.Russell@sun.com
>
> P.S. A good JDO? O, Gasp!
>
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message