830 likes | 1k Views
Ben Gurion University Beer-Sheva, Israel. PATTERNS FOR AUTOMATIC INTEGRATION OF THE DOMAIN-DATA LAYERS IN ENTERPRISE-SYSTEMS. Mira Balaban Joint work with Lior Limonad. Example: an e-Mail client system. Persistency requirements:. Demo. Persistent class Persistent In-memory
E N D
Ben Gurion University Beer-Sheva, Israel PATTERNS FOR AUTOMATIC INTEGRATION OF THE DOMAIN-DATA LAYERS IN ENTERPRISE-SYSTEMS Mira Balaban Joint work with Lior Limonad
Example: an e-Mail client system Persistency requirements: IBM Haifa, Oct 06
Demo • Persistent class • Persistent In-memory • Persistent Persistent • Persistent collection Domain Layer Data Access Layer Storage IBM Haifa, Oct 06
Modern Systems • Built into layers • Typical layers are: • Presentation • Domain • Data • Grasp changing requirements as a norm • Such as: persistency requirements • Adhering to the MDA spirit View DB as a natural extension of the application IBM Haifa, Oct 06
Persistency Motivation • A strict demand to keep an object state, when its data is important for the continuity of the system. • Objects are too big. • Large amount of objects. • Too much for loading all together to memory (hardware limit). • Need to deal with objects one at the time. • Need to save historical states of the system. • Sharing object states between multiple applications. IBM Haifa, Oct 06
Agenda • Demo • Motivation • The problem of partial persistency • The research goal • Partial solutions • The DAL Patterns solution • Application Example • Evaluation • Correctness proof • Merits and shortages • Conclusions and future work IBM Haifa, Oct 06
Partial Consistency Input: Mapping between application (Domain layer) and storage (Data layer). Based on a semantic linkage between layers. Output: integrated layers. Task: Introduce Partial persistency. Requires system restructuring (refactoring, transformation). Requirements: • Persistency of (only) marked objects • Behavior preservation • Transparency – minimal changes to the domain layer IBM Haifa, Oct 06
Persistencyof (only) marked objects complications (1) Co-existence of storage and in-memory objects • Mixture – ingoing and outgoing references:Ingoing: In-memory Persistent • Availability Outgoing: Persistent In-memory • Reference preservation IBM Haifa, Oct 06
Persistencyof (only) marked objects complications (2) • Duplication handling: • Consistency– • Inter-layer – • Duplicated of objects • Duplicated references • Intra-layer – preventing duplication of objects IBM Haifa, Oct 06
Insertion of persistency requirements • Goal: Achieve automatic persistency insertion in a running application • Integration must fulfill Partial persistency • Persistency of (only) marked objects • Behavior preservation • Transparent integration • Domain-layer stays intact IBM Haifa, Oct 06
Agenda • Demo • Motivation • The problem of partial persistency • The research goal • Partial solutions • The DAL Patterns solution • Application Example • Evaluation • Correctness proof • Merits and shortages • Conclusions and future work IBM Haifa, Oct 06
Current Technologies (1)e.g. J2EE / Hibernate • Support: • Mapping: may be generated automatically • Intra-layer Consistency • Availability – handled by the environmente.g. EJB container IBM Haifa, Oct 06
Current Technologies (2)e.g. J2EE / Hibernate • Necessary manual work: • Modification of persistent classes • Adhering to standards (e.g. EntityBean interface) • Mixture handling • Handle ingoing and outgoing references • e.g. serialization • Interlayer consistency • Object consistency • Manual invocation of, e.g., session.save(obj), session.load(class,id), ejbLoad() / ejbStore() / ejbCreate() / db.bind(…) / db.deletePersistent(…) • Reference consistency • e.g. between two stored objects • Still require writing tedious (bug infected…) code! • Domain-Layer is modified – No Transparency! IBM Haifa, Oct 06
Current Technologies (3)e.g. J2EE / Hibernate Missing: An algorithmic, correct, automated solution forintegration of the Domain and the Persistent layers IBM Haifa, Oct 06
Partial solutions:Fowler’s Active Record Pattern • Transparent • Partial persistency • Preserving references between objects • Preservation of objects availability • Behavior preserving • Object structure preservation IBM Haifa, Oct 06
Partial solutions:Fowler’s Data Mapper pattern • Transparent • Partial persistency • Preserving references between objects • Preservation of objects availability • Behavior preserving IBM Haifa, Oct 06
Agenda • Demo • Motivation • The problem of partial persistency • The research goal • Partial solutions • The DAL Patterns solution • Application Example • Evaluation • Correctness proof • Merits and shortages • Conclusions and future work IBM Haifa, Oct 06
The DAL Patterns Solution • A small set of Data-Access Layer (DAL) patterns (refactorings, transformations): • Core pattern: Proxy-Data-Mapper: • Context independent insertion of persistency • ContextPatterns: • Context tailored refactorings of: • Persistent-to-In-Memory interactions • Persistent-to-Persistent interactions • DAL-Insertion algorithm • A combined procedure for pattern application IBM Haifa, Oct 06
Proxy Data Mapper Pattern • Application precondition:message has a factory method • Automatic application: IBM Haifa, Oct 06
Proxy Data Mapper Pattern • Application precondition:message has a factory method • Automatic application: • Extract subclass “MessageImp” IBM Haifa, Oct 06
Proxy Data Mapper Pattern • Application precondition: message has a factory method • Automatic application: • Extract subclass “MessageImp” • Move implementation: Message MessageImp IBM Haifa, Oct 06
Proxy Data Mapper Pattern • Application precondition: message has a factory method • Automatic application: • Extract subclass “MessageImp” • Move implementation: Message MessageImp • Add a MessageDataMapper IBM Haifa, Oct 06
Proxy Data Mapper Pattern • Application precondition:message has a factory method • Automatic application: • Extract subclass “MessageImp” • Move implementation: Message MessageImp • Add a MessageDataMapper • Add a MessageProxy IBM Haifa, Oct 06
Proxy Data Mapper Pattern • Application precondition:message has a factory method • Automatic application: • Extract subclass “MessageImp” • Move implementation: Message MessageImp • Add a MessageDataMapper • Add a MessageProxy • Turn Message to be abstract • Redirect the factory method IBM Haifa, Oct 06
Example of Proxy Data Mapper Usage IBM Haifa, Oct 06
The Proxy Data Mapper Automatable Refactoring (1) Input: persistentClass, dbSchemaElement 1. Extract the implementation from the persistent class: persistentClassImp = extractSubClass(persistentClass); 2. Construct the data mapper class: dataMapper = addClass(concat(persistentClass.name+''DataMapper'')); addMethod(dataMapper, “load”, constructLoadImpMethod(persistentClassImp, dbSchemaElement)); addMethod(dataMapper, “store”, constructStoreImpMethod(persistentClassImp, dbSchemaElement)); addMethod(dataMapper, “update”, constructUpdateImpMethod(persistentClassImp, dbSchemaElement)); addMethod(dataMapper, “delete”, constructDeleteImpMethod(persistentClassImp, dbSchemaElement)); IBM Haifa, Oct 06
The Proxy Data Mapper Automatable Refactoring (2) 3. Construct the proxy class: proxy = addClass(concat(persistentClass.name+''Proxy'')); addField(proxy, “_idField”, Integer); addField(proxy, “_mapperField”, dataMapper); • Add finalize, load, update methods. • add all constructors: for each constructor c in constructors(persistentClassImp) addMethod(proxy, proxy.name, constructConstructore(dataMapper, persistentClassImp)); • add all delegated methods to the proxy class: for each method m in instance_methods(persistentClassImp) addMethod(proxy, m.name, constructDelegatedMethod(m, persistentClassImp); IBM Haifa, Oct 06
The Proxy Data Mapper Automatable Refactoring (3) 4. Redirect factory methods: for each factoryMethod f in factories(persistentClass) redirectFactoryMethod(proxy); 5. Tag modifications: stereotype(persistentClass, ``abstract''); IBM Haifa, Oct 06
Proxy Data Mapper – Example Applying PDM to the Message class: IBM Haifa, Oct 06
Problems solved by the Proxy Data Mapper Pattern • Persistency of only marked classes • Mixture • Availability • Reference preservation • Duplication • Consistency • Inter layer • Object – handled by the proxy • Reference • Intra layer – factory method uses Fowler’s “Identity Map” • Behavior preservation • Full Transparency IBM Haifa, Oct 06
The DAL Patterns Solution • A small set of Data-Access layer patterns: • Core pattern: Proxy-Data-Mapper: • Context independent insertion of persistency • ContextPatterns: • Context tailored refactoring of: • Persistent-to-In-Memory interactions • Persistent-to-Persistent interactions • DAL-Insertion algorithm • A combined procedure for pattern application IBM Haifa, Oct 06
Context Patterns • Problem parameters: • In/Out associations into/from the persistent class • Cardinality constraints • Persistent/In-memory marking of the Context class • 5 context patterns <<persistent>> Context Class <<persistent>> fooClass 1 1 * * IBM Haifa, Oct 06
DAL Patterns IBM Haifa, Oct 06
I. Persistent Collection Data Mapper • context IBM Haifa, Oct 06
pn:MessageProxy mn:messageImp p3:MessageProxy m3:messageImp p1:MessageProxy m1:messageImp p1:MessageProxy m1:messageImp vs:VirusScan col:MessagesCollection :MessageDataMapper :MessageDataMapper :MessageDataMapper :MessageDataMapper Messagesm1..mn I. Persistent Collection Data Mapper – problems(1) • The in-memory collection realization problem: • The collection of all proxy objects may be too large to fit in-memory IBM Haifa, Oct 06
I. Persistent Collection Data Mapper – problems(1) • Solution to the collection realization problem: • Introduce a collection that loads corresponding proxy objects by demand getMsg(n) vs:VirusScan col:MessagesCollection pn:MessageProxy mn:messageImp col:MessagesCollectionMapper :MessageDataMapper id1..idn Messagesm1..mn IBM Haifa, Oct 06
I. Persistent Collection Data Mapper – problems(2) • The deletion problem: • Collection of IDs A new implicit reference to persistent objects IBM Haifa, Oct 06
I. Persistent Collection Data Mapper – problems(2) • The deletion problem: • When a proxy is deleted, how to prevent message deletion from storage? getMsg(n) vs:VirusScan col:MessagesCollection pn:MessageProxy mn:messageImp col:MessagesCollectionMapper :MessageDataMapper id1..idn Messagesm1..mn IBM Haifa, Oct 06
I. Persistent Collection Data Mapper– problems (2) • Solution to the deletion problem: • Extend the garbage collector to handle persistent objects. • References to persistent objects = clients holding their ids. So far: • In-memory proxy objects. • Collections of persistent objects. IBM Haifa, Oct 06
:MessageTableManager Increase(id) Decrease(id) I. Persistent Collection Data Mapper– problems (2) • Solution to the deletion problem: • Insert TableManager (object) for the message – guards storage deletion by tracking reference count to it • All clients: proxys/collections, notify itabout reference changes pn:MessageProxy mn:messageImp :MessageDataMapper IBM Haifa, Oct 06
I. Persistent Collection Data Mapper • Solution structure: IBM Haifa, Oct 06
I. Persistent Collection Data Mapper– problems (3) • The collection itself is too large to reside in-memory: <<Persistent>> col:MessagesCollectionMapper id1…………………………………………………………………..idn IBM Haifa, Oct 06
I. Persistent Collection Data Mapper– problems (3) • Extended solution: • Make the collection persistent • Apply the Proxy Data Mapper pattern MessagesCollectionMapper proxy:MessagesCollectionMapperProxy col:MessagesCollectionMapperImp id1…………………………………………………………………..idn mapper:MessagesCollectionMapperMapper IBM Haifa, Oct 06
I. Extended Persistent Collection Data Mapper IBM Haifa, Oct 06
II. Memoization Data Mapper patterns context • Memoization data mapper • Multi memoization data mapper IBM Haifa, Oct 06
II. Memoization Data Mapper patterns problems • The memoization/multi-memoization problems • When a message is stored, how to handle outgoing references to other in-memory objects or in-memory collections? :MessageProxy m:messageImp e:EncryptionKey :MessageDataMapper Messagesm IBM Haifa, Oct 06
II. Memoization Data Mapper patterns problems • Solution: • Extend the proxy with a reference to the outgoing referenced object or collection :MessageProxy e:EncryptionKey m:messageImp :MessageDataMapper Messagesm IBM Haifa, Oct 06
II. Memoization data mapper pattern • Solution structure: IBM Haifa, Oct 06
III. Multi memoization data mapper pattern • Solution structure: IBM Haifa, Oct 06
IV. Persistent to Persistent Patterns– context • Persistent to Persistent • Persistent to multi persistent IBM Haifa, Oct 06