Hello Everyone, Data loading in OFBiz is quite fragile. A small change could crash the system and finding out the reason can be difficult. I really felt the pain of this when trying to disentangle the framework from data dependencies on plugins [1].
I've been thinking about a solution to reduce fragility, and here are my thoughts: - The less data files the better. - The less data the better. - The less distance (e.g. same directory) between data files the better. - No circular dependencies (file dependencies should be like a tree). - Fail fast [2]. Therefore, I suggest the following action points: - Create a directory structure similar to [3] in the datamodel component. - For any data that two or more files depend on, immediately move it to the common-<reader>.xml file. - For any data that does not belong to any domain (e.g. marketing, content, etc ..) move it to the common-<reader>.xml. - Maintain a strict dependency hierarchy of demo -> seed -> seed-initial. - Gradually and carefully move data from all applications to the datamodel component as per above guidelines. - Cleanup and refactor the data as we move it including any tests that depend on it. What do you think of this proposal? Does it sound reasonable? Also given the size of what I'm proposing I think we need multiple people to work on this. So is anyone interested in taking part in this initiative? Cheers, Taher Alkhateeb [1] https://issues.apache.org/jira/browse/OFBIZ-9322 [2] https://lists.apache.org/thread.html/a18b5d4086a07ff34a0cb950999e8f8e869a6aa7efa2fc866a75a7b6@%3Cdev.ofbiz.apache.org%3E [3] directory structure: data/ ├── demo │ ├── accounting-demo.xml │ ├── common-demo.xml │ ├── content-demo.xml │ ├── humanres-demo.xml │ ├── manufacturing-demo.xml │ ├── marketing-demo.xml │ ├── order-demo.xml │ ├── party-demo.xml │ ├── product-demo.xml │ ├── shipment-demo.xml │ └── workeffort-demo.xml ├── seed │ ├── accounting-seed.xml │ ├── common-seed.xml │ ├── content-seed.xml │ ├── humanres-seed.xml │ ├── manufacturing-seed.xml │ ├── marketing-seed.xml │ ├── order-seed.xml │ ├── party-seed.xml │ ├── product-seed.xml │ ├── shipment-seed.xml │ └── workeffort-seed.xml └── seed-initial ├── accounting-seed-initial.xml ├── common-seed-initial.xml ├── content-seed-initial.xml ├── humanres-seed-initial.xml ├── manufacturing-seed-initial.xml ├── marketing-seed-initial.xml ├── order-seed-initial.xml ├── party-seed-initial.xml ├── product-seed-initial.xml ├── shipment-seed-initial.xml └── workeffort-seed-initial.xml