6. Relational Database
Title Star WOB
Category Drama
Studio Mariaʼs Movies
Title EOF Next Gen
Category Surreal
Studio Mariaʼs Movies
7. Relational Database
Title Star WOB
Category Drama
Studio Mariaʼs Movies
Title EOF Next Gen
Category Surreal
Studio Mariaʼs Movies
Title The Player
Category Comedy
Studio Fredʼs Flicks
8. Relational Database
Title Star WOB
Category Title DramaEOF Next Gen
Studio Mariaʼs Movies
Category Title Surreal The Player
Studio Category Movies
Mariaʼs Comedy
Studio Fredʼs Flicks
9. Relational Database
Title Star WOB
Category Title DramaEOF Next Gen
Studio Mariaʼs Movies
Category Title Surreal The Player
Studio Category Movies
Mariaʼs Comedy
Studio Fredʼs Flicks
Movie Table
10. Relational Database
Title Star WOB
Category Title DramaEOF Next Gen
Studio Mariaʼs Movies
Category Title Surreal The Player
Studio Category Movies
Mariaʼs Comedy
Studio Fredʼs Flicks
Movie Table
TITLE CATEGORY
Star WOB Drama
EOF Next Gen Surreal
The Player Comedy
11. Relational Database
Title Star WOB
Category Title DramaEOF Next Gen
Studio Mariaʼs Movies
Category Title Surreal The Player
Studio Category Movies
Mariaʼs Comedy
Studio Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
12. Relational Database
Title Star WOB
Category Title DramaEOF Next Gen
Studio Mariaʼs Movies
Category Title Surreal The Player
Studio Category Movies
Mariaʼs Comedy
Studio Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
13. Relational Database
Title Star WOB
Category
Title Drama
EOF Next Gen
Studio
Category Mariaʼs Movies
Surreal
Title The Player
Studio Mariaʼs Movies
Category Comedy
Studio Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
14. Relational Database
Title Star WOB
Category
Title Drama
The Player
Studio
Category Mariaʼs Movies
Comedy
Studio Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
15. Relational Database
Studio Mariaʼs Movies
Studio Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
16. Relational Database
Studio Table
STUDIO_ID NAME
42 Mariaʼs Movies
69 Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
17. Relational Database
Studio Table
STUDIO_ID NAME
42 Mariaʼs Movies
69 Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
18. Relational Database
Studio Table
STUDIO_ID NAME
42 Mariaʼs Movies
69 Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
19. Relational Database
Studio Table
STUDIO_ID NAME
42 Mariaʼs Movies
69 Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama
14 EOF Next Gen Surreal
27 The Player Comedy
20. Relational Database
Studio Table
STUDIO_ID NAME
42 Mariaʼs Movies
69 Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal
27 The Player Comedy
21. Relational Database
Studio Table
STUDIO_ID NAME
42 Mariaʼs Movies
69 Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal
27 The Player Comedy
22. Relational Database
Studio Table
STUDIO_ID NAME
42 Mariaʼs Movies
69 Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
27 The Player Comedy
23. Relational Database
Studio Table
STUDIO_ID NAME
42 Mariaʼs Movies
69 Fredʼs Flicks
Movie Table
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
27 The Player Comedy 69
24. Fetching
Movie Table
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
27 The Player Comedy 69
25. Fetching
Movie Table
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
27 The Player Comedy 69
26. Fetching
title Star WOB
category Drama
studio
Movie Table
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
27 The Player Comedy 69
27. What’s an EO?
• An instance of a Java class
• Which inherits from EOEnterpriseObject
• It probably has custom behaviour
• It’s uniquely identified by it’s GlobalID
• Typically defined by the EOModel
34. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel
35. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
36. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabaseContext
37. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext
38. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext
EOAdaptor
39. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext
EOAdaptor EOAdaptorContext
40. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext
41. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
42. EOF Stack
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
43. Handling Information
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
44. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel
EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
45. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel
EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
46. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel plist
EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
47. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel plist
EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
48. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel plist
EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
sql
49. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel plist
EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
dictionaries
EOAdaptor EOAdaptorContext EOAdaptorChannel
sql
50. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel plist
EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
dictionaries
EOAdaptor EOAdaptorContext EOAdaptorChannel
sql
51. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel plist
EOObjectStoreCoordinator
EnterpriseObjects
EODatabase EODatabaseContext EODatabaseChannel
dictionaries
EOAdaptor EOAdaptorContext EOAdaptorChannel
sql
52. Handling Information
EO EO EO
EOModelGroup
EOEditingContext
EOModel plist
EOObjectStoreCoordinator
EnterpriseObjects
Snapshots
EODatabase EODatabaseContext EODatabaseChannel
dictionaries
EOAdaptor EOAdaptorContext EOAdaptorChannel
sql
53. Object Stores
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
54. Object Stores
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
55. Peer EOEditingContexts
EO EO EO
EOModelGroup EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
58. Peer EOEditingContexts
EO EO
EOModelGroup EOEditingContext EOEditingContext
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
59. Peer EOEditingContexts
EO EO
EO
EOModelGroup EOEditingContext EOEditingContext
EOEditingCon
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
60. Peer EOEditingContexts
EO
EOEditingContext EO EO
EO
EOModelGroup EOEditingContext EOEditingContext
EOEditingCon
EOModel EOObjectStoreCoordinator
EODatabase EODatabaseContext EODatabaseChannel
EOAdaptor EOAdaptorContext EOAdaptorChannel
62. Creating local copies
When you have a reference to an EOEnterpriseObject and
you want a local copy:
EOEnterpriseObject localObject =
EOUtilities.localInstanceOfObject(newEC,
remoteObject);
63. Object Stores
EO EO EO
EOEditingContext
EOObjectStoreCoordinator
EODatabaseContext
64. Nested EditingContexts
EO EO EO
EOEditingContext
EOEditingContext
EOObjectStoreCoordinator
EODatabaseContext
65. Back here again?
EO EO EO
EOEditingContext
EOObjectStoreCoordinator
EODatabaseContext
66. Multiple Database
EO EO EO
EOEditingContext
EOObjectStoreCoordinator
EODatabaseContext
67. Multiple Database
EO EO EO
EOEditingContext
EOObjectStoreCoordinator
EODatabaseContext EODatabaseContext
68. Back to Fetching
title Star WOB
category Drama
studio
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
69. Back to Fetching
Movie
title Star WOB
category Drama
studio
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
70. Back to Fetching
Movie
title Star WOB
category Drama
studio
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
71. Back to Fetching
Movie
title Star WOB
category Drama
studio
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
STUDIO_ID TITLE CATEGORY
42 Mariaʼs Movies $5 000 000
72. Back to Fetching
Movie
title Star WOB
category Drama
studio
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
STUDIO_ID TITLE CATEGORY
42 Mariaʼs Movies $5 000 000
73. It’s a relationship
Movie
title Star WOB
Studio
name Mariaʼs Movies
category Drama
income $5 000 000
studio
movies
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
STUDIO_ID TITLE CATEGORY
42 Mariaʼs Movies $5 000 000
74. It’s a fault
Movie
title Star WOB
Studio
name Mariaʼs Movies
category Drama
income $5 000 000
studio
movies
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
STUDIO_ID TITLE CATEGORY
42 Mariaʼs Movies $5 000 000
75. The Studio lives!
Movie
title Star WOB
Studio
name Mariaʼs Movies
category Drama
income $5 000 000
studio
movies
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
STUDIO_ID TITLE CATEGORY
42 Mariaʼs Movies $5 000 000
76. The Studio lives!
Movie
title Star WOB
Studio
name Mariaʼs Movies
category Drama
income $5 000 000
studio
movies
MOVIE_ID TITLE CATEGORY STUDIO_ID
12 Star WOB Drama 42
14 EOF Next Gen Surreal 42
STUDIO_ID TITLE CATEGORY
42 Mariaʼs Movies $5 000 000
77. Looking at the movies
Movie
title Star WOB
Studio
name Mariaʼs Movies
category Drama
income $5 000 000
studio
movies
78. A to-many relationship
Movie
title Star WOB
Studio
name Mariaʼs Movies
category Drama
income $5 000 000
studio
movies
79. A to-many relationship
Movie
title Star WOB
Studio
name Mariaʼs Movies
category Drama
income $5 000 000
studio
movies
Movie
Movie
80. Don’t load them all
• Faulting limits the number of objects fetched
• We lazily load objects, as we need them
• The EOModel can define the number to batch fault
• Separate settings for to-one and to-many faults
• Deferred faulting provides even more lazzzzzyness
81. Can you see that?
EOAdaptorDebugEnabled
Log4j controls
Monitor at the database
Shark, JProfiler, EOEvents
82. Locking?
• Well, you really should however, there’s a
better way...
83. ERXEC
• Get ERXEC from Project Wonder!
End of discussion.
85. Notifications
• These allow a single sender to broadcast
notices that certain events have occured
• There can be multiple listeners who
subscribe to the notifications
• Notification can carry custom UserInfo dict
• There is no opportunity to change behaviour
86. Delegation
This WILL happen.
What SHOULD happen?
This DID happen.
88. Delegation
editingContextShouldMergeChangesForObject(...)
• triggered by ObjectsChangedInStoreNotification
• if implemented, the EOEditingContext will call it
• the default behaviour is to merge the changes
• ONLY record values in this method
• make changes in editingContextDidMergeChanges(...)
90. Review
Refaulting isn’t so useful
• pending changes are discarded
• no notifications
• no effect on other EOEditingContexts
91. Review
Refresh is the smarter way
• the snapshot is updated by fetching from database
• existing changes are merged over updated values
92. Review
Invalidate is brute force
• invalidating effect the entire stack
• all pending changes in all EOEditingContexts are lost
• the snapshots are discarded since the EO’s went away
• database trip needed when fault is touched
• perhaps many, many database trips unless steps are
taken
93. Review
recovering from invalidate
• left on their own, faults can be VERY inefficient
• best to selectively fetch EO’s you’ll need
• use prefetching paths for even more EO’s all at once
94. Review
EOEditingContext’s Fetch timestamp
• the default might not be what you want
• default value is 1 hour prior to context creation
• Never changed unless you do it