SlideShare a Scribd company logo
1 of 35
Download to read offline
Deep Dive – Alfresco Core Repository 
… embedded in a micro-services style architecture! 
Credits: 
h+p://www.redbullstratos.com/ 
Jan Vonka 
London, October 2014
Intro 
Jan Vonka! 
• Senior Software Engineer @ Alfresco 
• Core Repo’ Services 
• Cloud & Hybrid Platform 
• Fly balloons
Deep Dive: Core Repository 
! 
• Repository Architecture! 
• Diving in to the core … 
• Micro-Services overview ! 
• Intelligent Process App example …
Alfresco … 
ContentContext 
Collaborate 
Control 
Connect 
Cloud 
Customise 
Configure
Why should you dive in ? 
• Spectrum of solutions! 
• Out-Of-The-Box => Configure => Integrate 
• Extend => Customise => Embed (“modular”) 
Gain deeper understanding! 
• Develop, test & contribute 
• Troubleshoot issues – functional, perf’, …
Caveat 
• Use the Alfresco APIs & SDKs! 
• Well-defined, supported, On-Premise & Cloud 
• CMIS 1.1 & REST 
• Alfresco SDK 2.0 (Maven + Java) 
• Mobile SDK (iOS & Android) 
• Custom (JavaScript or Java)! 
• Repo extensions – WebScripts + (new) Services 
• Content Models - Policies & Behaviours
Repository Architecture - overview
Repo Architecture Overview 
Web 
Apps 
Mobile 
Apps 
Desktop 
Apps 
REST 
/ 
WebScripts 
CMIS 
Protocols 
Sync 
Share 
Mobile 
SDK 
Alfresco 
Office 
Services 
(AOS)
Anatomy of the Repo 
!Alfresco Repository 
Remote APIs (CMIS & WebScripts) 
Subsystems 
Core Foundation Services 
DB Storage (Tables) 
Protocols (WebDAV, SPP, IMAP, FTP, CIFS, SMTP, LDAP…) 
Content Models + Behaviours 
Collaborative Services 
Transactions + Security 
ThirdParty Libraries & Frameworks: including Spring Framework+Security / MyBatis (JDBC) / Solr+Lucene / Hazelcast 
Content/Object Storage (Binary Files) 
Search Storage (Indexes)
Diving in …
Alfresco *Services (some) 
FileFolder 
WebScript 
Script 
& 
Template 
(eg. 
JS 
& 
FM) 
Content 
& 
Mimetype 
Node 
& 
Version 
Permission, 
AuthenOcaOon 
& 
Authority 
DicOonary 
& 
Namespace 
CMIS 
Protocols 
(WebDAV, 
SPP, 
IMAP, 
FTP, 
CIFS, 
SMTP, 
LDAP…) 
Site 
CheckOutCheckIn 
& 
Lock 
Copy 
Thumbnail 
& 
RendiOon 
Rule 
& 
AcOon 
AcOvity 
& 
SubscripOon 
Transform 
(+ 
Metadata 
Extract 
& 
Embed) 
Workflow 
(AcOviO 
or 
JBPM) 
Person 
& 
Ownable 
TransacOon 
Import 
& 
Export 
QuickShare 
Tagging 
Audit 
& 
A+ribute 
Category 
Search 
(Index 
& 
Query) 
Tenant 
& 
RepoAdmin 
ContentUsage
Artifacts & Projects 
• Maven SDK! 
• Eclipse Projects! 
• …. 
• Remote-API 
• Repository 
• Data-Model 
• Core
Java Services 
• Refer to:! 
• Service Registry (ServiceRegistry.java) 
• Spring Configuration (*-context.xml) 
• public-services-context.xml 
• core-context.xml 
• Foundation services include:! 
• NodeService 
• ContentService 
• SearchService 
• ….
Spring config: *-context.xml 
core-context.xml 
<bean id="checkOutCheckInService" class="org.alfresco.repo.coci.CheckOutCheckInServiceImpl" init-method=" 
init”> 
<property name="nodeService" ref="nodeService" /> 
<property name="versionService" ref="versionService" /> 
<property name="ruleService" ref="ruleService" /> 
<property name="lockService" ref="LockService" /> 
<property name="ownableService" ref="OwnableService" /> 
<property name="copyService" ref="CopyService" /> 
<property name="authenticationService" ref="authenticationService" /> 
<property name="fileFolderService" ref="fileFolderService" /> 
<property name="policyComponent" ref="policyComponent" /> 
<property name="behaviourFilter" ref="policyBehaviourFilter" /> 
……. 
model-specific-services-context.xml 
<bean name="fileFolderService" class="org.alfresco.repo.model.filefolder.FileFolderServiceImpl" init-method=" 
init" parent="abstractBaseCopyService"> 
<property name="namespaceService"><ref bean="namespaceService" /></property> 
<property name="dictionaryService"><ref bean="dictionaryService" /></property> 
<property name="nodeService"><ref bean="nodeService" /></property> 
<property name="copyService"><ref bean="copyService" /></property> 
<property name="searchService"><ref bean="admSearchService" /></property> 
<property name="contentService"><ref bean="contentService" /></property> 
<property name="mimetypeService"><ref bean="mimetypeService" /></property> 
……
Models & Definitions … 
• Content Models! 
• contentModel.xml 
• dictionaryModel.xml 
• … *Model.xml 
• Security & Permissions! 
• public-services-security.xml 
• permissionDefinitions.xml
Data Access Objects (DAOs) 
• Java Interfaces & Implementations! 
• Package: org.alfresco.repo.domain 
• *DAO.java, *DAOImpl.java 
• MyBatis SQL mapper! 
• (fully) since 3.2.x - also used by Activiti 
• mostly common ANSI SQL 
• dialect-specific SQL (extended config builder) 
• see *SqlMap.xml 
• DomainTestSuite! 
• see DAO unit tests
DB types 
!!!!!!! 
Enterprise 
Community 
(*) subject to change - refer to certified stacks 
(**) dev/test only - see for example Alfresco SDK 2.0 (Maven-based) or Activiti 
(**)
Alf_* DB schema (partial) 
! 
Store 
Node 
Node_ProperOes 
Node_Aspects 
Child_Assoc 
(parent/child) 
Node_Assoc 
(source/target) 
Qname 
Content_Data 
Namespace 
TransacOon 
Server 
Locale 
Encoding 
Mimetype 
Content_Url
Alf_* DB schema
Micro-Services - overview
Micro-services overview 
• Architectural style! 
• suite of “small” independently deployable services 
• each is simple & specific – do “one” thing well 
• Distributed services & data! 
• separate loosely-coupled process 
• collaborate - (light-weight) communication 
• In theory, can be …! 
• independently: develop, deploy, scale, manage 
• heterogeneous teams, languages, stacks, protocols
Micro-services overview (cont) 
• Benefits & drawbacks! 
• Dev-QA-Ops spectrum 
• people, ownership, process, automation 
• Continuous: Integration, QA, Deployment, Monitoring 
• Encourages modular structure 
• API contracts & versioning 
• more moving parts, network hops (latency), …
Repo -> “micro” services 
Remote 
APIs 
Core 
Repository 
Services 
Search 
Server 
(eg. 
Solr) 
TransformaOon 
Server 
Process 
Server 
Search 
Transform 
Workflow
Micro-service – Java example 
• HTTP+JSON, Java, RESTful, ! 
• JAX-RS 
• Content + Context (Nodes & Metadata) 
• Dropwizard + Metrics! 
• Jetty, Jersey, Jackson 
• Spring Boot / MVC / Framework! 
• Jetty (or Tomcat), Jackson, Metrics …
Repo Core – Hello World #1 
GET http://localhost:9080/alfresco/stores! 
! 
[! 
{"storeRef":"archive://SpacesStore", "nodeRefId":"0add797f-9145-43e4-80d5- 
ba7b5fc254fa"},! 
{"storeRef":"system://system","nodeRefId":"aab26f2c-8bdd-465e-90ab-396d9187caa4"},! 
{"storeRef":"user:// 
alfrescoUserStore","nodeRefId":"0227c38d-77b7-4a31-922f-6040e8d39d1a"},! 
{"storeRef":"workspace://lightWeightVersionStore","nodeRefId":"7688b848-ba24-4a03- 
bb45-75ea6c7e51c5"},! 
{"storeRef":"workspace:// 
SpacesStore","nodeRefId":"79fd9404-1f12-4999-8d92-58df9309558b"},! 
{"storeRef":"workspace://version2Store","nodeRefId":"7cefae72-7809-4869-94cc-d65e37a762f1"} 
! 
]! 
List stores & root nodes
Repo Core – Hello World #2 
Repo Node Browser
Micro-service articles 
• Some examples ….! 
• http://martinfowler.com/articles/microservices.html 
• http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch. 
html 
• http://highscalability.com/blog/2014/7/28/the-great-microservices-vs- 
monolithic-apps-twitter-melee.html 
• ….
Smart Process Apps – example
Smart (Intelligent) Process Apps 
• Process-centric, Task-based! 
• Collaborative & Social ! 
• Case Management - Adaptable & Dynamic! 
• Context, Content, Control …! 
• Configurable (eg. per-tenant, per-app)! 
• Simple + Smart J!
SPA Platform Services (example) 
! 
Content / Metadata 
Workflow 
(Process / Task) 
Transform 
Search 
(Index / Query) 
Case/Review APIs + Services 
Identity 
Mgmt 
(Auth) 
App Def 
(Config) 
Streaming 
Services 
Content Storage 
Metadata DB 
Workflow DB 
Search Indexes 
Other DBs 
(RDBMS, NoSQL, …) 
App1 
App3 
App2 
App4
Smart Process App (example) 
!
Recap + Q&A
Recap 
• Repository Architecture! 
• Diving in deeper to the core! 
• Micro-services overview! 
• Intelligent Process App example! 
• Further details …!
Questions & Feedback 
• Thank you J! 
!
Further details 
• Source (SVN)! 
• Test code – unit & system! 
• http://docs.alfresco.com! 
• Add-Ons & Extensions! 
• Wiki, Forums, Blogs, JIRA! 
• Developer books! 
• Training courses!

More Related Content

What's hot

Architectural changes in the repo in 6.1 and beyond
Architectural changes in the repo in 6.1 and beyondArchitectural changes in the repo in 6.1 and beyond
Architectural changes in the repo in 6.1 and beyondStefan Kopf
 
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...StreamNative
 
RocksDB Performance and Reliability Practices
RocksDB Performance and Reliability PracticesRocksDB Performance and Reliability Practices
RocksDB Performance and Reliability PracticesYoshinori Matsunobu
 
Using Kafka to scale database replication
Using Kafka to scale database replicationUsing Kafka to scale database replication
Using Kafka to scale database replicationVenu Ryali
 
Java garbage collection & GC friendly coding
Java garbage collection  & GC friendly codingJava garbage collection  & GC friendly coding
Java garbage collection & GC friendly codingMd Ayub Ali Sarker
 
Running Kafka as a Native Binary Using GraalVM with Ozan Günalp
Running Kafka as a Native Binary Using GraalVM with Ozan GünalpRunning Kafka as a Native Binary Using GraalVM with Ozan Günalp
Running Kafka as a Native Binary Using GraalVM with Ozan GünalpHostedbyConfluent
 
Evolution of MongoDB Replicaset and Its Best Practices
Evolution of MongoDB Replicaset and Its Best PracticesEvolution of MongoDB Replicaset and Its Best Practices
Evolution of MongoDB Replicaset and Its Best PracticesMydbops
 
My first 90 days with ClickHouse.pdf
My first 90 days with ClickHouse.pdfMy first 90 days with ClickHouse.pdf
My first 90 days with ClickHouse.pdfAlkin Tezuysal
 
Nginx Reverse Proxy with Kafka.pptx
Nginx Reverse Proxy with Kafka.pptxNginx Reverse Proxy with Kafka.pptx
Nginx Reverse Proxy with Kafka.pptxwonyong hwang
 
Capacity Planning Your Kafka Cluster | Jason Bell, Digitalis
Capacity Planning Your Kafka Cluster | Jason Bell, DigitalisCapacity Planning Your Kafka Cluster | Jason Bell, Digitalis
Capacity Planning Your Kafka Cluster | Jason Bell, DigitalisHostedbyConfluent
 
Tradeoffs in Distributed Systems Design: Is Kafka The Best? (Ben Stopford and...
Tradeoffs in Distributed Systems Design: Is Kafka The Best? (Ben Stopford and...Tradeoffs in Distributed Systems Design: Is Kafka The Best? (Ben Stopford and...
Tradeoffs in Distributed Systems Design: Is Kafka The Best? (Ben Stopford and...HostedbyConfluent
 
MongoDB WiredTiger Internals
MongoDB WiredTiger InternalsMongoDB WiredTiger Internals
MongoDB WiredTiger InternalsNorberto Leite
 
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiHow to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiFlink Forward
 
SQL on everything, in memory
SQL on everything, in memorySQL on everything, in memory
SQL on everything, in memoryJulian Hyde
 
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)Amy W. Tang
 
Elasticsearch for beginners
Elasticsearch for beginnersElasticsearch for beginners
Elasticsearch for beginnersNeil Baker
 
Top 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsTop 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsSpark Summit
 
SeaweedFS introduction
SeaweedFS introductionSeaweedFS introduction
SeaweedFS introductionchrislusf
 
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...StreamNative
 
Re-Engineering PostgreSQL as a Time-Series Database
Re-Engineering PostgreSQL as a Time-Series DatabaseRe-Engineering PostgreSQL as a Time-Series Database
Re-Engineering PostgreSQL as a Time-Series DatabaseAll Things Open
 

What's hot (20)

Architectural changes in the repo in 6.1 and beyond
Architectural changes in the repo in 6.1 and beyondArchitectural changes in the repo in 6.1 and beyond
Architectural changes in the repo in 6.1 and beyond
 
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
Log System As Backbone – How We Built the World’s Most Advanced Vector Databa...
 
RocksDB Performance and Reliability Practices
RocksDB Performance and Reliability PracticesRocksDB Performance and Reliability Practices
RocksDB Performance and Reliability Practices
 
Using Kafka to scale database replication
Using Kafka to scale database replicationUsing Kafka to scale database replication
Using Kafka to scale database replication
 
Java garbage collection & GC friendly coding
Java garbage collection  & GC friendly codingJava garbage collection  & GC friendly coding
Java garbage collection & GC friendly coding
 
Running Kafka as a Native Binary Using GraalVM with Ozan Günalp
Running Kafka as a Native Binary Using GraalVM with Ozan GünalpRunning Kafka as a Native Binary Using GraalVM with Ozan Günalp
Running Kafka as a Native Binary Using GraalVM with Ozan Günalp
 
Evolution of MongoDB Replicaset and Its Best Practices
Evolution of MongoDB Replicaset and Its Best PracticesEvolution of MongoDB Replicaset and Its Best Practices
Evolution of MongoDB Replicaset and Its Best Practices
 
My first 90 days with ClickHouse.pdf
My first 90 days with ClickHouse.pdfMy first 90 days with ClickHouse.pdf
My first 90 days with ClickHouse.pdf
 
Nginx Reverse Proxy with Kafka.pptx
Nginx Reverse Proxy with Kafka.pptxNginx Reverse Proxy with Kafka.pptx
Nginx Reverse Proxy with Kafka.pptx
 
Capacity Planning Your Kafka Cluster | Jason Bell, Digitalis
Capacity Planning Your Kafka Cluster | Jason Bell, DigitalisCapacity Planning Your Kafka Cluster | Jason Bell, Digitalis
Capacity Planning Your Kafka Cluster | Jason Bell, Digitalis
 
Tradeoffs in Distributed Systems Design: Is Kafka The Best? (Ben Stopford and...
Tradeoffs in Distributed Systems Design: Is Kafka The Best? (Ben Stopford and...Tradeoffs in Distributed Systems Design: Is Kafka The Best? (Ben Stopford and...
Tradeoffs in Distributed Systems Design: Is Kafka The Best? (Ben Stopford and...
 
MongoDB WiredTiger Internals
MongoDB WiredTiger InternalsMongoDB WiredTiger Internals
MongoDB WiredTiger Internals
 
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and HudiHow to build a streaming Lakehouse with Flink, Kafka, and Hudi
How to build a streaming Lakehouse with Flink, Kafka, and Hudi
 
SQL on everything, in memory
SQL on everything, in memorySQL on everything, in memory
SQL on everything, in memory
 
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
 
Elasticsearch for beginners
Elasticsearch for beginnersElasticsearch for beginners
Elasticsearch for beginners
 
Top 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsTop 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark Applications
 
SeaweedFS introduction
SeaweedFS introductionSeaweedFS introduction
SeaweedFS introduction
 
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
 
Re-Engineering PostgreSQL as a Time-Series Database
Re-Engineering PostgreSQL as a Time-Series DatabaseRe-Engineering PostgreSQL as a Time-Series Database
Re-Engineering PostgreSQL as a Time-Series Database
 

Similar to Deep Dive: Alfresco Core Repository (... embedded in a micro-services style architecture)

PLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfPLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfAlfresco Software
 
PLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfPLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfAlfresco Software
 
PLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring SurfPLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring SurfAlfresco Software
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesAlfresco Software
 
Developer’s intro to the alfresco platform
Developer’s intro to the alfresco platformDeveloper’s intro to the alfresco platform
Developer’s intro to the alfresco platformAlfresco Software
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and ActivatorKevin Webber
 
PLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsPLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsAlfresco Software
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An IntroductionThorsten Kamann
 
Dependencies, dependencies, dependencies
Dependencies, dependencies, dependenciesDependencies, dependencies, dependencies
Dependencies, dependencies, dependenciesMarcel Offermans
 
RESTFul Tools For Lazy Experts - CFSummit 2016
RESTFul Tools For Lazy Experts - CFSummit 2016RESTFul Tools For Lazy Experts - CFSummit 2016
RESTFul Tools For Lazy Experts - CFSummit 2016Ortus Solutions, Corp
 
Integration in the age of DevOps
Integration in the age of DevOpsIntegration in the age of DevOps
Integration in the age of DevOpsAlbert Wong
 
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Nicole Szigeti
 
Terraform - Taming Modern Clouds
Terraform  - Taming Modern CloudsTerraform  - Taming Modern Clouds
Terraform - Taming Modern CloudsNic Jackson
 
Road to Opscon (Pisa '15) - DevOoops
Road to Opscon (Pisa '15) - DevOoopsRoad to Opscon (Pisa '15) - DevOoops
Road to Opscon (Pisa '15) - DevOoopsGianluca Varisco
 
Gabriele Columbro - Maurizio Pillitu - Get your Alfresco project from Zero to...
Gabriele Columbro - Maurizio Pillitu - Get your Alfresco project from Zero to...Gabriele Columbro - Maurizio Pillitu - Get your Alfresco project from Zero to...
Gabriele Columbro - Maurizio Pillitu - Get your Alfresco project from Zero to...Symphony Software Foundation
 
Spring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingSpring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingThorsten Kamann
 
PowerPoint Presentation
PowerPoint PresentationPowerPoint Presentation
PowerPoint Presentationlalitjangra9
 
Introduction to Laravel
Introduction to LaravelIntroduction to Laravel
Introduction to LaravelEli Wheaton
 

Similar to Deep Dive: Alfresco Core Repository (... embedded in a micro-services style architecture) (20)

PLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfPLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring Surf
 
PLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring SurfPLAT-7 Spring Web Scripts and Spring Surf
PLAT-7 Spring Web Scripts and Spring Surf
 
PLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring SurfPLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring Surf
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
 
Developer’s intro to the alfresco platform
Developer’s intro to the alfresco platformDeveloper’s intro to the alfresco platform
Developer’s intro to the alfresco platform
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
PLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in GrailsPLAT-16 Using Enterprise Content in Grails
PLAT-16 Using Enterprise Content in Grails
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An Introduction
 
Dependencies, dependencies, dependencies
Dependencies, dependencies, dependenciesDependencies, dependencies, dependencies
Dependencies, dependencies, dependencies
 
Rest ful tools for lazy experts
Rest ful tools for lazy expertsRest ful tools for lazy experts
Rest ful tools for lazy experts
 
RESTFul Tools For Lazy Experts - CFSummit 2016
RESTFul Tools For Lazy Experts - CFSummit 2016RESTFul Tools For Lazy Experts - CFSummit 2016
RESTFul Tools For Lazy Experts - CFSummit 2016
 
Integration in the age of DevOps
Integration in the age of DevOpsIntegration in the age of DevOps
Integration in the age of DevOps
 
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
Alfresco Coding mit dem Alfresco SDK (auf Englisch) - Julien Bruinaud, Techni...
 
Terraform - Taming Modern Clouds
Terraform  - Taming Modern CloudsTerraform  - Taming Modern Clouds
Terraform - Taming Modern Clouds
 
Road to Opscon (Pisa '15) - DevOoops
Road to Opscon (Pisa '15) - DevOoopsRoad to Opscon (Pisa '15) - DevOoops
Road to Opscon (Pisa '15) - DevOoops
 
JSF2
JSF2JSF2
JSF2
 
Gabriele Columbro - Maurizio Pillitu - Get your Alfresco project from Zero to...
Gabriele Columbro - Maurizio Pillitu - Get your Alfresco project from Zero to...Gabriele Columbro - Maurizio Pillitu - Get your Alfresco project from Zero to...
Gabriele Columbro - Maurizio Pillitu - Get your Alfresco project from Zero to...
 
Spring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingSpring 3 - Der dritte Frühling
Spring 3 - Der dritte Frühling
 
PowerPoint Presentation
PowerPoint PresentationPowerPoint Presentation
PowerPoint Presentation
 
Introduction to Laravel
Introduction to LaravelIntroduction to Laravel
Introduction to Laravel
 

More from J V

Alfresco Transform Service DevCon 2019
Alfresco Transform Service DevCon 2019Alfresco Transform Service DevCon 2019
Alfresco Transform Service DevCon 2019J V
 
Integrating Alfresco @ Scale (via event-driven micro-services)
Integrating Alfresco @ Scale (via event-driven micro-services)Integrating Alfresco @ Scale (via event-driven micro-services)
Integrating Alfresco @ Scale (via event-driven micro-services)J V
 
Exciting New Alfresco REST APIs
Exciting New Alfresco REST APIsExciting New Alfresco REST APIs
Exciting New Alfresco REST APIsJ V
 
Alfresco 5.2 REST API
Alfresco 5.2 REST APIAlfresco 5.2 REST API
Alfresco 5.2 REST APIJ V
 
Alfresco REST API of the future ... is closer than you think
Alfresco REST API of the future ... is closer than you thinkAlfresco REST API of the future ... is closer than you think
Alfresco REST API of the future ... is closer than you thinkJ V
 
Alfresco: Implementing secure single sign on (SSO) with OpenSAML
Alfresco: Implementing secure single sign on (SSO) with OpenSAMLAlfresco: Implementing secure single sign on (SSO) with OpenSAML
Alfresco: Implementing secure single sign on (SSO) with OpenSAMLJ V
 
Alfresco Content Modelling and Policy Behaviours
Alfresco Content Modelling and Policy BehavioursAlfresco Content Modelling and Policy Behaviours
Alfresco Content Modelling and Policy BehavioursJ V
 

More from J V (7)

Alfresco Transform Service DevCon 2019
Alfresco Transform Service DevCon 2019Alfresco Transform Service DevCon 2019
Alfresco Transform Service DevCon 2019
 
Integrating Alfresco @ Scale (via event-driven micro-services)
Integrating Alfresco @ Scale (via event-driven micro-services)Integrating Alfresco @ Scale (via event-driven micro-services)
Integrating Alfresco @ Scale (via event-driven micro-services)
 
Exciting New Alfresco REST APIs
Exciting New Alfresco REST APIsExciting New Alfresco REST APIs
Exciting New Alfresco REST APIs
 
Alfresco 5.2 REST API
Alfresco 5.2 REST APIAlfresco 5.2 REST API
Alfresco 5.2 REST API
 
Alfresco REST API of the future ... is closer than you think
Alfresco REST API of the future ... is closer than you thinkAlfresco REST API of the future ... is closer than you think
Alfresco REST API of the future ... is closer than you think
 
Alfresco: Implementing secure single sign on (SSO) with OpenSAML
Alfresco: Implementing secure single sign on (SSO) with OpenSAMLAlfresco: Implementing secure single sign on (SSO) with OpenSAML
Alfresco: Implementing secure single sign on (SSO) with OpenSAML
 
Alfresco Content Modelling and Policy Behaviours
Alfresco Content Modelling and Policy BehavioursAlfresco Content Modelling and Policy Behaviours
Alfresco Content Modelling and Policy Behaviours
 

Recently uploaded

Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 

Recently uploaded (20)

Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 

Deep Dive: Alfresco Core Repository (... embedded in a micro-services style architecture)

  • 1. Deep Dive – Alfresco Core Repository … embedded in a micro-services style architecture! Credits: h+p://www.redbullstratos.com/ Jan Vonka London, October 2014
  • 2. Intro Jan Vonka! • Senior Software Engineer @ Alfresco • Core Repo’ Services • Cloud & Hybrid Platform • Fly balloons
  • 3. Deep Dive: Core Repository ! • Repository Architecture! • Diving in to the core … • Micro-Services overview ! • Intelligent Process App example …
  • 4. Alfresco … ContentContext Collaborate Control Connect Cloud Customise Configure
  • 5. Why should you dive in ? • Spectrum of solutions! • Out-Of-The-Box => Configure => Integrate • Extend => Customise => Embed (“modular”) Gain deeper understanding! • Develop, test & contribute • Troubleshoot issues – functional, perf’, …
  • 6. Caveat • Use the Alfresco APIs & SDKs! • Well-defined, supported, On-Premise & Cloud • CMIS 1.1 & REST • Alfresco SDK 2.0 (Maven + Java) • Mobile SDK (iOS & Android) • Custom (JavaScript or Java)! • Repo extensions – WebScripts + (new) Services • Content Models - Policies & Behaviours
  • 8. Repo Architecture Overview Web Apps Mobile Apps Desktop Apps REST / WebScripts CMIS Protocols Sync Share Mobile SDK Alfresco Office Services (AOS)
  • 9. Anatomy of the Repo !Alfresco Repository Remote APIs (CMIS & WebScripts) Subsystems Core Foundation Services DB Storage (Tables) Protocols (WebDAV, SPP, IMAP, FTP, CIFS, SMTP, LDAP…) Content Models + Behaviours Collaborative Services Transactions + Security ThirdParty Libraries & Frameworks: including Spring Framework+Security / MyBatis (JDBC) / Solr+Lucene / Hazelcast Content/Object Storage (Binary Files) Search Storage (Indexes)
  • 11. Alfresco *Services (some) FileFolder WebScript Script & Template (eg. JS & FM) Content & Mimetype Node & Version Permission, AuthenOcaOon & Authority DicOonary & Namespace CMIS Protocols (WebDAV, SPP, IMAP, FTP, CIFS, SMTP, LDAP…) Site CheckOutCheckIn & Lock Copy Thumbnail & RendiOon Rule & AcOon AcOvity & SubscripOon Transform (+ Metadata Extract & Embed) Workflow (AcOviO or JBPM) Person & Ownable TransacOon Import & Export QuickShare Tagging Audit & A+ribute Category Search (Index & Query) Tenant & RepoAdmin ContentUsage
  • 12. Artifacts & Projects • Maven SDK! • Eclipse Projects! • …. • Remote-API • Repository • Data-Model • Core
  • 13. Java Services • Refer to:! • Service Registry (ServiceRegistry.java) • Spring Configuration (*-context.xml) • public-services-context.xml • core-context.xml • Foundation services include:! • NodeService • ContentService • SearchService • ….
  • 14. Spring config: *-context.xml core-context.xml <bean id="checkOutCheckInService" class="org.alfresco.repo.coci.CheckOutCheckInServiceImpl" init-method=" init”> <property name="nodeService" ref="nodeService" /> <property name="versionService" ref="versionService" /> <property name="ruleService" ref="ruleService" /> <property name="lockService" ref="LockService" /> <property name="ownableService" ref="OwnableService" /> <property name="copyService" ref="CopyService" /> <property name="authenticationService" ref="authenticationService" /> <property name="fileFolderService" ref="fileFolderService" /> <property name="policyComponent" ref="policyComponent" /> <property name="behaviourFilter" ref="policyBehaviourFilter" /> ……. model-specific-services-context.xml <bean name="fileFolderService" class="org.alfresco.repo.model.filefolder.FileFolderServiceImpl" init-method=" init" parent="abstractBaseCopyService"> <property name="namespaceService"><ref bean="namespaceService" /></property> <property name="dictionaryService"><ref bean="dictionaryService" /></property> <property name="nodeService"><ref bean="nodeService" /></property> <property name="copyService"><ref bean="copyService" /></property> <property name="searchService"><ref bean="admSearchService" /></property> <property name="contentService"><ref bean="contentService" /></property> <property name="mimetypeService"><ref bean="mimetypeService" /></property> ……
  • 15. Models & Definitions … • Content Models! • contentModel.xml • dictionaryModel.xml • … *Model.xml • Security & Permissions! • public-services-security.xml • permissionDefinitions.xml
  • 16. Data Access Objects (DAOs) • Java Interfaces & Implementations! • Package: org.alfresco.repo.domain • *DAO.java, *DAOImpl.java • MyBatis SQL mapper! • (fully) since 3.2.x - also used by Activiti • mostly common ANSI SQL • dialect-specific SQL (extended config builder) • see *SqlMap.xml • DomainTestSuite! • see DAO unit tests
  • 17. DB types !!!!!!! Enterprise Community (*) subject to change - refer to certified stacks (**) dev/test only - see for example Alfresco SDK 2.0 (Maven-based) or Activiti (**)
  • 18. Alf_* DB schema (partial) ! Store Node Node_ProperOes Node_Aspects Child_Assoc (parent/child) Node_Assoc (source/target) Qname Content_Data Namespace TransacOon Server Locale Encoding Mimetype Content_Url
  • 21. Micro-services overview • Architectural style! • suite of “small” independently deployable services • each is simple & specific – do “one” thing well • Distributed services & data! • separate loosely-coupled process • collaborate - (light-weight) communication • In theory, can be …! • independently: develop, deploy, scale, manage • heterogeneous teams, languages, stacks, protocols
  • 22. Micro-services overview (cont) • Benefits & drawbacks! • Dev-QA-Ops spectrum • people, ownership, process, automation • Continuous: Integration, QA, Deployment, Monitoring • Encourages modular structure • API contracts & versioning • more moving parts, network hops (latency), …
  • 23. Repo -> “micro” services Remote APIs Core Repository Services Search Server (eg. Solr) TransformaOon Server Process Server Search Transform Workflow
  • 24. Micro-service – Java example • HTTP+JSON, Java, RESTful, ! • JAX-RS • Content + Context (Nodes & Metadata) • Dropwizard + Metrics! • Jetty, Jersey, Jackson • Spring Boot / MVC / Framework! • Jetty (or Tomcat), Jackson, Metrics …
  • 25. Repo Core – Hello World #1 GET http://localhost:9080/alfresco/stores! ! [! {"storeRef":"archive://SpacesStore", "nodeRefId":"0add797f-9145-43e4-80d5- ba7b5fc254fa"},! {"storeRef":"system://system","nodeRefId":"aab26f2c-8bdd-465e-90ab-396d9187caa4"},! {"storeRef":"user:// alfrescoUserStore","nodeRefId":"0227c38d-77b7-4a31-922f-6040e8d39d1a"},! {"storeRef":"workspace://lightWeightVersionStore","nodeRefId":"7688b848-ba24-4a03- bb45-75ea6c7e51c5"},! {"storeRef":"workspace:// SpacesStore","nodeRefId":"79fd9404-1f12-4999-8d92-58df9309558b"},! {"storeRef":"workspace://version2Store","nodeRefId":"7cefae72-7809-4869-94cc-d65e37a762f1"} ! ]! List stores & root nodes
  • 26. Repo Core – Hello World #2 Repo Node Browser
  • 27. Micro-service articles • Some examples ….! • http://martinfowler.com/articles/microservices.html • http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch. html • http://highscalability.com/blog/2014/7/28/the-great-microservices-vs- monolithic-apps-twitter-melee.html • ….
  • 28. Smart Process Apps – example
  • 29. Smart (Intelligent) Process Apps • Process-centric, Task-based! • Collaborative & Social ! • Case Management - Adaptable & Dynamic! • Context, Content, Control …! • Configurable (eg. per-tenant, per-app)! • Simple + Smart J!
  • 30. SPA Platform Services (example) ! Content / Metadata Workflow (Process / Task) Transform Search (Index / Query) Case/Review APIs + Services Identity Mgmt (Auth) App Def (Config) Streaming Services Content Storage Metadata DB Workflow DB Search Indexes Other DBs (RDBMS, NoSQL, …) App1 App3 App2 App4
  • 31. Smart Process App (example) !
  • 33. Recap • Repository Architecture! • Diving in deeper to the core! • Micro-services overview! • Intelligent Process App example! • Further details …!
  • 34. Questions & Feedback • Thank you J! !
  • 35. Further details • Source (SVN)! • Test code – unit & system! • http://docs.alfresco.com! • Add-Ons & Extensions! • Wiki, Forums, Blogs, JIRA! • Developer books! • Training courses!