Slides from my Alfresco DevCon 2018 30min talk about common patterns of patching the base bundles for Alfresco Content Services (ACS) and Alfresco Processes Services (APS), including summaries of advantages / drawbacks for each pattern. The recording of the talk will be uploaded to the Alfresco YouTube channel sometime in the next days / weeks.
3. Disclaimer(s)
●
●
8 years ACS vs. 1 year APS
●
ACS / APS = complex beasts ; 30 min = short
●
Naturally: patching / “messing around“ rarely appreciated
(my skills)∩(graphical slide wizardry)=∅
4. Necessity of Patching
●
Personal Alfresco JIRA statistics
– Not including customer support issues
– Two issues rejected due to age (2+ years)
JIRA issues since 2014
0
5
10
15
20
25
30
35
40
45
Open
Resolved
Rejected
Avg. days
0 50 100 150 200 250 300 350 400
Resolved
Open
6. Necessity of Patching
●
Alfresco issue priorities
– Triage: make issues actionable or close
– Resources: only if high profile or aligned with roadmap
– Support: continuation of operation / work-around
●
„Something is broken? Help yourself, hack the source“
(BeeCon 2016 t-shirt)
16. Pattern: Spring Post-Processing
●
Smart(er) post-processing
– Configurable enablement, conditional applications
– Dependencies + respect for other changes (merge)
YYYY-MM-DD HH:mm:ss,sss INFO [...] [localhost-startStop-1] [...] patch will not be applied - class of bean webscripts.container does not match expected
implementation org.alfresco.repo.web.scripts.RepositoryContainer
19. Pattern: Spring Post-Processing
●
Benefits
– Usable in ACS + APS
– Dis-/enableable without rebuild
– Potentially adaptive to environment
– Suitable for addon providers
●
Issues
– Conflicts with uncoordinated / naive post-processors (again, RM)
– Order dependant on classpath / scanning order
– No out-of-the-box „share-global.properties“ for consolidated enablement config
25. Pattern: Augmentation / Extension (JS)
●
Aikau „global patching“: loading via service / root module
26. ●
Ideally no change to source JS
=> APS: no need to split/re-aggregate file
●
Complexity of transitive call chain
●
Monolithic modules with inaccessible internals
(i.e. callback/promise/listener-hell in APS)
●
Limited ability to check base versions + adapt
Pattern: Augmentation / Extension (JS)