I am not sure how practical that is. The goal of this is to allow things that 
are not known in advance to be connected. I think you are thinking of composing 
objects from pieces of other objects.  As a general practice in designing EOs, 
I think that would have negative performance impacts. And I suspect that 
everyone would want something slightly different.


Chuck


On 2012-09-20, at 8:25 PM, Johnny Miller wrote:

> It would be cool, if like erprototypes, there was a framework that had a set 
> of  partial entities that you could use as a baseline for your models.
> 
> Johnny Miller
> Kahalawai Media Co.
> 
> On Sep 20, 2012, at 4:56 PM, Chuck Hill <ch...@global-village.net> wrote:
> 
>> It is probably time to remove this from the package docs:
>> 
>> * PARTIAL ENTITIES SHOULD BE CONSIDERED EXPERIMENTAL *
>> 
>> This is some awesome coolness from Mike Schrag.  People should be using this.
>> 
>> 
>> Chuck
>> 
>> 
>> On 2012-09-20, at 7:36 PM, David Aspinall wrote:
>> 
>>> Hi All,
>>> 
>>> I was recently sponsored in a review of the ERXPartial package from 
>>> ERExtensions by the very nice folks at Logic Squad 
>>> (http://logicsquad.net/).  They have authorized me to release everything 
>>> into Wonder with the hope the ERXPartial package will be further developed 
>>> and attract interest among the community.
>>> 
>>> Currently the example code and reports are available in the integration 
>>> branch of wonder.  There is also the review document ERXPartials Review 
>>> v1.1.html with my notes and thoughts prior to performing any development or 
>>> tests against the partials package.
>>> 
>>> For those who are unfamiliar with the partials package, the original 
>>> package documentation from Mike Schrag contained this overview
>>> 
>>> http://jenkins.wocommunity.org/job/Wonder/javadoc/er/extensions/partials/package-summary.html
>>> 
>>> Partial Entities provide a mechanism for defining a single entity whose 
>>> definition spans across multiple EOModels along with tools to interact with 
>>> these partial definitions in a type-safe way.
>>> 
>>> Partial entities are specifically designed to allow reuse and extension of 
>>> existing models. A very common case where this becomes useful is that of a 
>>> Person entity. Person is an entity that is used in many different 
>>> scenarios, each of which requires additional attributes and relationships. 
>>> For instance, you may have a task management application and you want to 
>>> embed your calendaring framework into it. The common Person base entity may 
>>> have "username" and "password" attributes, the tasking application may add 
>>> an "activeTasks" relationship, and the calendaring framework may add a 
>>> "scheduledEvents" relationship as well as "dayStartTime" and "dayEndTime" 
>>> attributes. Note that partials are not designed to address the issue of 
>>> "roles," where different people in the system may have different roles at 
>>> different times. Partial entities are designed to address the issue of 
>>> combining high level modules together to form more complex static entity 
>>> declarations.
>>> 
>>> 
>>> 
>>> ERXPartials Test / Example
>>> Notes about ERXPartials
>>> Design Overview
>>> 
>>>   • ERXPartialBaseModel contains a very basic model containing the Root 
>>> entity for the partials named Person.
>>> 
>>>       • contains one standard relationship to GenderType
>>>       • contains a standard migration to create the initial tables for the 
>>> Person and GenderType
>>>       • the migration also preloads some default values for gender and 100 
>>> semi-random Person records.
>>>   • ERXPartialExampleModel contains additional extensions to the Person 
>>> entity. The design uses two partial entities.
>>> 
>>>       • one partial entity Partial_AuthenticatedPerson stores the basic 
>>> authenticated user details username, password and lastLoginDate
>>>       • the second entity Partial_EmployeePerson stores common employee 
>>> details like department, employeeType, salary and employeeNumber
>>>       • Company, Department and EmployeeType provide additional 
>>> relationships for the Partial_EmployeePerson
>>>       • the migration in this frameworks creates the supporting tables in a 
>>> normal fashion, and adds the additional attributes and constraints to the 
>>> existing Person table.
>>>   • ERXPartialExampleApp is a simple D2W demo application to demonstrate 
>>> and test the Partials in a live environment.
>>> 
>>> Generated Partial entity Templates
>>> 
>>> By default I was using the _WonderEntity.java template, however there was a 
>>> small issue with the generated content. When the template created a to-Many 
>>> accessor method, it was using the relationship actual destination entity to 
>>> generate the appropriate key path. However when the destination is a 
>>> ERXPartial entity then the actual destination is the Root Entity. In this 
>>> example the Department relationship to the Partial_EmployeePerson was 
>>> generated as
>>> 
>>> Bad
>>> 
>>> public NSArray<er.example.erxpartials.model.Person> 
>>> partial_EmployeePersons(EOQualifier qualifier, NSArray<EOSortOrdering> 
>>> sortOrderings, boolean fetch) {
>>> …
>>> EOQualifier inverseQualifier = new 
>>> EOKeyValueQualifier(er.example.erxpartials.model.Person.DEPARTMENT_KEY, 
>>> EOQualifier.QualifierOperatorEqual, this);
>>> 
>>> Should be
>>> 
>>> public NSArray<er.example.erxpartials.model.Person> 
>>> partial_EmployeePersons(EOQualifier qualifier, NSArray<EOSortOrdering> 
>>> sortOrderings, boolean fetch) {
>>> …
>>> EOQualifier inverseQualifier = new 
>>> EOKeyValueQualifier(er.example.erxpartials.model.Partial_EmployeePerson.DEPARTMENT_KEY,
>>>  EOQualifier.QualifierOperatorEqual, this);
>>> 
>>> A patched _PartialWonderEntity.java is included int the Resources of the 
>>> ERXPartialExampleModel project, but I think it needs to be moved into 
>>> WOLips at some point.
>>> 
>>> Validation
>>> 
>>> The original behaviour for validation forwards all messages from the 
>>> ERXPartial object to all contained partials. The problem is that only one 
>>> of this partials will correctly validate the specified key path, the other 
>>> partials will throw exceptions for unbound keys.
>>> 
>>> Additionally when the ERXPartialInitializer merges the partial entities 
>>> into the Root, the EOEntities for the partials are removed from the 
>>> EOModel, so it is not possible to query the original partial entity to 
>>> determine if the key path is valid for that partial object.
>>> 
>>> My solution is currently to generate a static array for the attributes and 
>>> the relationships and have theERXPartialGenericRecordquery the partial to 
>>> determine the validity of a given key path before forwarding the invocation.
>>> 
>>> Patches for this are included in the ERXPartial, ERXPartialGenericObject 
>>> classes and support is also added to the_PartialWonderEntity.java template.
>>> 
>>> Getting Started
>>>   • create the database.  I used Frontbase so the data model would have 
>>> persistence and Frontbase specifically because it's what I use the most 
>>> often (so it was the easiest to get up and running).  
>>> 
>>>       • Change into the ERXPartialBaseModel directory
>>> GVCDev:ERXPartialBaseModel daspinall$ ant fb.recreate
>>> 
>>> Buildfile: 
>>> /Volumes/Data/Development/GitHub/ERXPartials/wonder/Tests/ERXPartials/ERXPartialBaseModel/build.xml
>>> 
>>> init.properties:
>>> 
>>> fb.recreate: [exec] connect to ERXPartials user _system;
>>> [exec] Cannot connect to ERXPartials@localhost
>>> [exec] Database is not running
>>> [exec] stop database;
>>> [exec] No current session.
>>> [exec] delete database ERXPartials;
>>> [exec] Cannot delete database ERXPartials@localhost;
>>> [exec] Reason: Database is unknown
>>> [exec] create database ERXPartials;
>>> [exec] connect to ERXPartials user _system;
>>> [exec] Auto committing is on: SET COMMIT TRUE;
>>> [exec] create user erxpartial;
>>> [exec] set password test user erxpartial;
>>> [exec] create schema erxpartial authorization erxpartial;
>>> [exec] disconnect all;
>>> [exec]
>>> 
>>> BUILD SUCCESSFUL
>>> 
>>> Total time: 1 second
>>> 
>>> GVCDev:ERXPartialBaseModel daspinall$
>>>   • compile and run. The main page is a login page, but there is no login 
>>> logic, just click the button :)
>>> 
>>> David Aspinall
>>> Senior IT Consultant
>>> Global Village Consulting Inc.
>>> E: daspin...@global-village.net
>>> 
>>> 
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>> Help/Unsubscribe/Update your Subscription:
>>> https://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>>> 
>>> This email sent to ch...@global-village.net
>> 
>> -- 
>> Chuck Hill             Senior Consultant / VP Development
>> 
>> Practical WebObjects - for developers who want to increase their overall 
>> knowledge of WebObjects or who are trying to solve specific problems.    
>> http://www.global-village.net/gvc/practical_webobjects
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/jlmiller%40kahalawai.com
>> 
>> This email sent to jlmil...@kahalawai.com

-- 
Chuck Hill             Senior Consultant / VP Development

Practical WebObjects - for developers who want to increase their overall 
knowledge of WebObjects or who are trying to solve specific problems.    
http://www.global-village.net/gvc/practical_webobjects









 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to