+1

Man, I need this now - but lack the time to pounce on it. I can't wait until I 
can mess with this and find out if it can work for me.

Tim
UCLA GSE&IS

On Sep 20, 2012, at 7: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/lists%40thetimmy.com
> 
> This email sent to li...@thetimmy.com


 _______________________________________________
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