Alfresco Developer Guide
By Jeff Potts
()
About this ebook
Alfresco is an open source platform for Enterprise Content Management (ECM) solutions. ECM includes things like Document Management, Web Content Management, Collaboration/Enterprise 2.0, Digital Asset Management, Records Management, and Imaging. At its core is a repository for rich content like documents, web assets, XML, and multimedia. The repository is surrounded by a services layer (supporting both SOAP and REST) that makes getting content into and out of the repository a breeze, which is why so many next generation Internet solutions are built on Alfresco.
Implementing Alfresco usually involves extending the repository to accommodate your business-specific metadata and business logic. These extensions are done using some combination of Java, JavaScript, XML, and FreeMarker.
This book takes you through a set of exercises as if you were rolling out and customizing the platform for a fictional organization called SomeCo, which wants to roll out Alfresco enterprise-wide. Each department has a set of requirements that need addressed. We will show you how to extend Alfresco to meet these requirements. By the time you've worked through the entire book, you will be familiar with the entire platform. You'll be prepared to make your own customizations whether they are part of a Document Management solution, a web site that uses Alfresco for content storage, or an entire custom application built on Alfresco's REST API. This book will give you the knowledge and confidence you need to make Alfresco do what you need it to do
Alfresco Developer Guide walks you through the customizations made as part of an enterprise-wide rollout of Alfresco; from custom actions to RESTful web scripts and everything in between.
Jeff Potts, Optaros' ECM Practice Director, blogger, and Alfresco's Community Contributor of the Year, takes you step-by-step through advanced customization examples. Whether it is customizing Alfresco's web client or creating your own application that interact with Alfresco via RESTful web scripts, it is all covered here.
ApproachThis book focuses on teaching by example. Every chapter provides a bit of an overview, and then dives right in to hands-on examples so you can see and play with the solution in your own environment. All code samples run on both the latest Enterprise and Labs release.
Who this book is forThis book will be most useful to developers who are writing code to customize Alfresco for their organization or who are creating custom applications that sit on top of Alfresco.
This book is for Java developers, and you will get most from the book if you already work with Java but you need not have prior experience on Alfresco. Although Alfresco makes heavy use of open source frameworks such as Spring, Hibernate, JavaServer Faces, and Lucene, no prior experience using these is assumed or necessary.
Jeff Potts
Jeff Potts is the Chief Community Officer at Alfresco. He started working with CMIS in 2009 and maintains cmislib, a Python client API for CMIS. Jeff regularly speaks about Alfresco, cmislib, and the CMIS specification at conferences and events around the world.
Read more from Jeff Potts
Alfresco One 5.x Developer’s Guide - Second Edition Rating: 3 out of 5 stars3/5CMIS and Apache Chemistry in Action Rating: 0 out of 5 stars0 ratings
Related to Alfresco Developer Guide
Related ebooks
Alfresco for Administrators Rating: 0 out of 5 stars0 ratingsPthreads Complete Self-Assessment Guide Rating: 0 out of 5 stars0 ratingsOpa Application Development Rating: 0 out of 5 stars0 ratingsBDD in Action, Second Edition: Behavior-Driven Development for the whole software lifecycle Rating: 0 out of 5 stars0 ratingsTwilio Cookbook Rating: 0 out of 5 stars0 ratingsDomain Controller A Complete Guide - 2021 Edition Rating: 0 out of 5 stars0 ratingsCode reuse Complete Self-Assessment Guide Rating: 0 out of 5 stars0 ratingsAlfresco One 5.x Developer's Guide: Click here to enter text. Rating: 0 out of 5 stars0 ratingsWordPress Web Application Development Rating: 5 out of 5 stars5/5Mastering CryENGINE Rating: 0 out of 5 stars0 ratingsASP.NET MVC 4 Mobile App Development Rating: 0 out of 5 stars0 ratingsqooxdoo Beginner's Guide: Develop Rich Internet Applications (RIA) with Qooxdoo1.4 Rating: 0 out of 5 stars0 ratingsASP.NET Core and Angular 2 Rating: 0 out of 5 stars0 ratingsSpring MVC Blueprints Rating: 0 out of 5 stars0 ratingsElgg 1.8 Social Networking Rating: 0 out of 5 stars0 ratingsAlfresco 3 Enterprise Content Management Implementation Rating: 3 out of 5 stars3/5FuelPHP Application Development Blueprints Rating: 0 out of 5 stars0 ratingsGoogle App Engine Java and GWT Application Development Rating: 0 out of 5 stars0 ratingsExt.NET Web Application Development Rating: 0 out of 5 stars0 ratingsMicrosoft Application Virtualization Advanced Guide Rating: 0 out of 5 stars0 ratingsMastering Django: Core Rating: 0 out of 5 stars0 ratingsFlash with Drupal Rating: 0 out of 5 stars0 ratingsJava EE 7 Development with WildFly Rating: 0 out of 5 stars0 ratingsGo Programming Blueprints - Second Edition Rating: 5 out of 5 stars5/5IBM WebSphere Application Server 8.0 Administration Guide Rating: 0 out of 5 stars0 ratingsMEAN Web Development - Second Edition Rating: 0 out of 5 stars0 ratings
Information Technology For You
Data Analytics for Beginners: Introduction to Data Analytics Rating: 4 out of 5 stars4/5Summary of Super-Intelligence From Nick Bostrom Rating: 5 out of 5 stars5/5Supercommunicator: Explaining the Complicated So Anyone Can Understand Rating: 3 out of 5 stars3/5Creating Online Courses with ChatGPT | A Step-by-Step Guide with Prompt Templates Rating: 4 out of 5 stars4/5An Ultimate Guide to Kali Linux for Beginners Rating: 3 out of 5 stars3/5Practical Ethical Hacking from Scratch Rating: 5 out of 5 stars5/5Getting started with Audacity 1.3 Rating: 5 out of 5 stars5/5Linux Command Line and Shell Scripting Bible Rating: 3 out of 5 stars3/5CompTia Security 701: Fundamentals of Security Rating: 0 out of 5 stars0 ratingsMicrosoft Access for Beginners and Intermediates Rating: 0 out of 5 stars0 ratingsCompTIA A+ CertMike: Prepare. Practice. Pass the Test! Get Certified!: Core 1 Exam 220-1101 Rating: 0 out of 5 stars0 ratingsHow To Use Chatgpt: Using Chatgpt To Make Money Online Has Never Been This Simple Rating: 0 out of 5 stars0 ratingsAWS Certified Cloud Practitioner: Study Guide with Practice Questions and Labs Rating: 5 out of 5 stars5/5ChatGPT: The Future of Intelligent Conversation Rating: 4 out of 5 stars4/5Data Governance For Dummies Rating: 2 out of 5 stars2/5CompTIA Network+ CertMike: Prepare. Practice. Pass the Test! Get Certified!: Exam N10-008 Rating: 0 out of 5 stars0 ratingsUnderstanding TCP/IP Rating: 4 out of 5 stars4/520 Windows Tools Every SysAdmin Should Know Rating: 5 out of 5 stars5/5How to Write Effective Emails at Work Rating: 4 out of 5 stars4/5The Programmer's Brain: What every programmer needs to know about cognition Rating: 5 out of 5 stars5/5Who Says Elephants Can't Dance?: Leading a Great Enterprise Through Dramatic Change Rating: 4 out of 5 stars4/5Hacking Essentials - The Beginner's Guide To Ethical Hacking And Penetration Testing Rating: 3 out of 5 stars3/5The iPadOS 17: The Complete User Manual to Quick Set Up and Mastering the iPadOS 17 with New Features, Pictures, Tips, and Tricks Rating: 0 out of 5 stars0 ratingsCybersecurity for Beginners : Learn the Fundamentals of Cybersecurity in an Easy, Step-by-Step Guide: 1 Rating: 0 out of 5 stars0 ratingsCompTIA ITF+ CertMike: Prepare. Practice. Pass the Test! Get Certified!: Exam FC0-U61 Rating: 0 out of 5 stars0 ratingsArch Linux: Fast and Light! Rating: 3 out of 5 stars3/5
Reviews for Alfresco Developer Guide
0 ratings0 reviews
Book preview
Alfresco Developer Guide - Jeff Potts
Table of Contents
Alfresco Developer Guide
Credits
About the Author
About the Reviewers
Preface
What This Book Covers
What You Need for This Book
Who This Book is For
Conventions
Reader Feedback
Customer Support
Downloading the Example Code for the Book
Errata
Piracy
Questions
1. The Alfresco Platform
Alfresco in the Real World
Basic Document Management
Web Content Management
Content Authoring Tools
Separation of Presentation from Content
Systematic Publication or Deployment
Alfresco WCM Example
Custom Content-Centric Applications
Example Used throughout This Book
Alfresco Architecture
High-Level Architecture
Add-Ons
Open Source Components
Major Standards and Protocols Supported
Customizing Alfresco
Basic Customization
Dashlets
Custom Views
Rules and Rule Actions
Simple Workflow
Advanced Customization
Examples of Advanced Customizations
Extend the Content Model
Perform Automatic Operations on Content
Customize the Web Client
Create a RESTful API
Streamline Complex Business Processes with Advanced Workflows
Get Your Web sites under Control
Integrate with Other Systems
Dusting Off Your Toolbox
What about Adobe Flex?
Understanding Alfresco's Editions
Significant Feature Differences
What's Used in This Book
Summary
2. Getting Started with Alfresco
Obtaining the SDK
Step-by-Step: Building Alfresco from Source
Setting up the SDK in Eclipse
Step-by-Step: Importing the SDK into Eclipse
Extending Alfresco
Understanding the Extension Mechanism
Standard Java Web Application Files
Framework Files
Spring Configuration Files
JavaServer Faces Configuration Files
Alfresco Configuration Files
Solution-Specific Files
Avoid Modifying Alfresco Code and Configuration
Packaging and Deploying Customizations
Separating Server-Specific Customizations
Step-by-Step: Packaging and Deploying a Simple Customization
Taking a Look at the Build File
Troubleshooting
Log4j
Step-by-Step: Debugging from within Eclipse
Node Browser
Starting Over
Summary
3. Working with Content Models
Defining SomeCo's Content Model
Step-by-Step: Starting the Custom Content Model with Custom Types
Types
Step-by-Step: Adding Properties to Types
Properties and Property Types
Constraints
Step-by-Step: Relating Types with Associations
Associations
Step-by-Step: Adding Aspects to the Content Model
Aspects
Step-by-Step: Finishing up the Model
Modeling Summary
Custom Behavior
Modeling Best Practices
Out of the Box Models
Configuring the UI
Step-by-Step: Adding Properties to the Property Sheet
Externalizing Display Labels
Making Properties Read-Only
Step-by-Step: Adding Types and Aspects to WebClient Dropdowns
Step-by-Step: Adding Properties and Types to Advanced Search
Step-by-Step: Setting Externalized Label Values
Setting up Additional Locales
Working with Content Programmatically
Step-by-Step: Creating Content with JavaScript
Leveraging Root Objects
Knowing When to Save Documents
Using JavaScript for Batch Manipulation
Writing Content to the Content Property
Creating Content with Java Web Services
Step-by-Step: Run SomeCoDataCreator Class to Create Content
Creating Content with PHP Web Services
Creating Associations
Step-by-Step: Run SomeCoDataRelater Class to Create Association
Searching for Content
Step-by-Step: Run SomeCoDataQueries Class to See Lucene Example
Deleting Content
Step-by-Step: Running SomeCoDataCleaner Class to Delete Content
Summary
4. Handling Content Automatically with Actions, Behaviors, Transformers, and Extractors
Encapsulating Content Operations in Actions
Step-by-Step: Creating a Basic Action
Hiding the Action from End Users
Creating Actions that Require User-Specified Parameters
Step-by-Step: Creating an Action that Accepts Parameters
Incorporating Parameter Values in the Action Description
Specifying Parameters when Code Executes an Action
Binding Logic to Custom Types with Behaviors
Step-by-Step: Writing a Simple Behavior in Java
Binding to Multiple Types/Aspects
Frequency
Figuring Out to Which Policies to Bind
Step-by-Step: Writing a Simple Behavior in JavaScript
Binding Behavior to Child Types
Step-by-Step: Writing a User Ratings Calculator
Step-by-Step: Testing the New Rating Behavior
Handling Deleted Ratings
Extracting Metadata from Files
Customizing Metadata Extractors
Step-by-step: Customizing the Metadata Mapping
Overriding the Default Mapping
Leveraging Out of the box Metadata Extractors
Digging into an Extractor Class
Step-by-Step: Customizing a Metadata Extractor Class
Transforming Content from One Format to Another
Step-by-Step: Writing a Custom Transformer
Summary
5. Customizing the Web Client User Interface
Knowing When to Customize Alfresco's Web Client and When to Write Your Own
Adding New Menu Items with UI Actions
Step-by-Step: Adding a Simple UI Action
Showing/Hiding the Label
Leveraging Out of the Box Examples
Using Other Types of UI Actions
Step-by-Step: Adding a UI Action to Set the Web Flag
Restricting the UI Action by Permission
Writing Action Evaluators to Show/Hide UI Actions
Step-by-Step: Evaluating Whether or Not to Show the Set Web Flag UI Actions
Changing How the Web Client Renders Data with Custom Component Renderers
Step-by-Step: Making a Text Field a Specific Size
What Just Happened
Overriding the Generator for All Properties
Step-by-Step: Changing the Status Field on the Details Page to Display as a Stoplight Indicator
Overriding and Customizing Components
Creating Custom Dialogs
Step-by-Step: Creating a Dialog to Execute Scripts
Passing the Context to the Dialog
Understanding the JSP
Enabling and Disabling the OK Button
Creating Custom Wizards
Step-by-Step: Stubbing Out the Wizard
Step-by-Step: Finishing Out the Wizard
Adding Conditions to Wizard Step Pages
Receiving Interview Feedback via Email
Persisting Interviewer Choices
Copying Alfresco's Code into Your Customizations
Customizing Web Client JSP Pages
Overriding Navigation Rules with Type-specific Settings
Summary
6. Exposing Content through a RESTful API with Web Scripts
Introducing the Web Script Framework
Step-by-Step: Hello World Web Script
What Just Happened?
Following the Model-View-Controller Pattern
Adding Controller Logic
Configuring the Web Script
Specifying the HTTP Method
Specifying Arguments
Specifying the Response Format
Deploying Web Scripts
Building Solutions with the Web Script Framework
Planning the SomeCo Whitepapers and Ratings API
Retrieving Data with Web Scripts
Step-by-Step: Writing a Web Script to List Whitepapers
Debugging
Fast Facts
Organizing Web Scripts
Overriding Web Scripts
Choosing a URL
Choosing between the Repository and the File System
Step-by-Step: Retrieving the Rating for a Whitepaper
Specifying Optional Arguments
Handling Errors
Writing Java-Backed Web Scripts
Step-by-Step: Writing a Java-Backed Web Script to Handle Ratings Posts
Using the Correct ID for Web Script Beans
Using both Java and JavaScript for Controller Logic
Wiring a Web Script to UI Widgets
Step-by-Step: Using a Widget to Post Ratings
Implementing the Delete Ratings Link
Adding the Web Script Calls to SomeCo's Whitepaper Web Page
Making Other Types of Content Rateable
Dealing with the Cross-Domain Scripting Limitation
Handling Form Data
Step-by-Step: Implementing a Form-Based Hello World
Step-by-Step: Using File Upload in a Multipart Request
Customizing the Web Client with Web Scripts
Step-by-Step: Running a Web Script as a Dashlet
Understanding Web Script Runtimes
Advanced Web Scripts
Running Web Scripts as JSR-168 Portlets
Dealing with Web Script Authentication
Controlling Web Script Cache
Executing Remote Web Scripts
Refactoring the Rating Service
Summary
7. Advanced Workflow
What is a Workflow?
Workflow Options
Creating Process Definitions
Step-by-Step: Creating a Hello World Process Definition
Organizing Processes
Using the jBPM Graphical Process Designer
Step-by-Step: Using jBPM Process Designer to Create and Deploy Processes
Tokens
Node Types
Versioning Process Definitions
Deploying Dependencies
Using Alternative Deployment Methods
Wiring a Process to the Alfresco UI
Step-by-Step: Grabbing the Hello World Argument from the User
Understanding Workflow-Specific Content Models
Assigning Tasks to Users and Groups
Step-by-Step: Creating the Initial Whitepaper Submission Workflow
Controlling What Actions Can Be Taken from the Task Management Dialog
Enabling the Workflow Initiator to Select Users and Groups
Adding Logic to Workflows with Actions and Process Variables
Storing Data in Process Variables
Step-by-Step: Adding Logic to the Whitepaper Submission Workflow
Using Java Classes for Decisions
Getting Access to the Content in the Workflow
Selecting the Right Event for Your Logic
Using ForEachFork
Using the Workflow API
Step-by-Step: Implementing Third-Party Review
Using a Task-Node Instead of a State
Making the Third-Party Review More Robust
Using Timers
Step-by-Step: Adding a Timer to the Third-Party Review
Understanding Timer Syntax
Debugging Workflows
Comparing Alfresco Workflow Options
Summary
8. Web Content Management
Understanding the Difference between Alfresco DM and Alfresco WCM
Obtaining Alfresco WCM
Step-by-Step: Installing Alfresco WCM
Creating Web Projects
Step-by-Step: Creating the SomeCo Web Project
What Just Happened
Playing Nicely in the Sandbox
Inviting Users
Mounting Sandboxes via CIFS
Virtualization and Layering
Creating Web Forms
Step-by-Step: Creating a SomeCo Press Release Web Form
Mapping XML Schema Types to Web Form Controls
Localizing Web Forms with Labels and Alerts
Generating XSD Dynamically
Step-by-Step: Creating a Press Release Index Page
Making Changes to an Existing Web Form
Using Web Forms Outside the WCM User Interface
Deploying Content
Step-by-Step: Deploying Content Using the File System Receiver (FSR)
Running Multiple FSR Hosts and Multiple FSR Targets
Setting the FSR Target User and Password
Viewing Deployment Reports
Deploying to Test Servers
Enabling Deployment Targets for Auto Deploy
Step-by-Step: Deploying to an Alfresco System Receiver (ASR)
Performing Post-Deployment Processing
Step-by-Step: Running Post-Deployment Code in an FSR Deployment
Handling Deletes
Step-by-Step: Implementing ASR Deployment Callbacks
Modifying and Creating WCM Workflows
Using Launch Dates, Expiration Dates, and Link Checking
Launch Dates
Expiration Dates
Link Checking
Step-by-Step: Creating a No-Approval Workflow for Job Postings
Working with the AVM API
Step-by-Step: Writing a Web Script to Query AVMNodes
Step-by-Step: Writing a Web Script to Trigger Deployments
Implementing a Web Script for Submit
Using the AVM Console
Summary
9. Security
Authenticating and Synchronizing with LDAP
Step-by-Step: Setting Up a Local OpenLDAP Server
Step-by-Step: Configuring Alfresco to Authenticate against LDAP
Step-by-Step: Configuring Chaining
Step-by-Step: Synchronizing LDAP with Alfresco
Handling Large Directories
Setting Up Single Sign-On (SSO)
Step-by-Step: Implementing SSO
Logging Out
Step-by-Step: Configuring CAS to Use LDAP for Authentication
Working with Security Services
Securing the Admin User
Granting Additional Users Admin Rights
Step-by-Step: Making tpublisher1 an Admin
Creating Users and Groups Programmatically
Step-by-Step: Creating Users and Groups through the API
Understanding Permission Definitions
Permission Groups
Permissions
Permission Sets
Step-by-Step: Setting Up A Portal Publisher Custom Role
Global Permissions
Mapping Permissions to Methods
Summary
A. API Reference and Examples
Foundation API Public Services
ActionService
ActivityService (3.0 Labs)
AttributeService
AuditService
AuthenticationService
AuthorityService
AVMService
AVMLockingService
AVMSyncService
CategoryService
CheckOutCheckInService
ConfigurableService
ContentUsageService (3.0 Labs)
ContentService
CopyService
CrossRepositoryCopyService
DeploymentService
DescriptorService
DictionaryService
EditionService
EmailService
ExporterService
FileFolderService
ImporterService
LinkValidationService
LockService
MailService
MimetypeService
ModuleService
MultilingualContentService
NamespaceService
NodeService
OwnableService
PermissionService
PersonService
RegistryService
RepoAdminService (3.0 Labs)
RepositoryExporterService
RuleService
SearchService
ScriptService
SiteService (3.0 Labs)
TaggingService (3.0 Labs)
TemplateService
ThumbnailService (3.0 Labs)
TransactionService
VersionService
WorkflowService
Lucene Queries
Basic Lucene Syntax
Property Search
Proximity Search
Range Search
Field Search
TYPE and ASPECT
ID
PARENT
PATH
QNAME
TEXT
Category
Using Saved Searches as Examples
JavaScript
Root Objects
JavaScript API
General
Association
ChildAssociation
ScriptNode
ScriptUtils
Root object: cache
Root object: crossRepoCopy
Root object: logger
Root object: status
Actions API
Root object: actions
ScriptAction
AVM API
Root object: avm
AVMNode (extends ScriptNode)
AVMScriptStore
Classification API
Root node: classification
CategoryNode (extends ScriptNode)
People API
Root node: people
Presence API (3.0 Labs)
presence
Search API
search
API Examples
Create a Node
Foundation
JavaScript
Web Services
Perform a Search
Foundation
JavaScript
Web Services
Persist Content
Foundation
JavaScript
Web Services
Add an Aspect
Foundation
JavaScript
Web Services
Set a Property
Foundation
JavaScript
Web Services
Set Permissions
Foundation
JavaScript
Web Services
Start a Workflow
Foundation
JavaScript
Web Services
B. Alfresco Configuration Reference
Actions
Actions Available in both Enterprise and Labs
Actions Available in Labs Only
Web Client Config Elements
Conditional Configuration Elements
Unconditional Configuration Elements
Action Groups
Core Web Client Action Groups
Forums-Related UI Action Groups
Workflow-Related Action Groups
WCM-Related Action Groups
Metadata Extractors
Transformers
Graphical View of the Alfresco Content Model
System Model
User Model
Content Model
App Model
BPM Model
Workflow Model
WCM Model
WCM App Model
WCM Workflow Model
Index
Alfresco Developer Guide
Jeff Potts
Alfresco Developer Guide
Copyright © 2008 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, Packt Publishing, nor its dealers or distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: October 2008
Production Reference: 3041208
Published by Packt Publishing Ltd.
32 Lincoln Road
Olton
Birmingham, B27 6PA, UK.
ISBN 978-1-847193-11-7
www.packtpub.com
Cover Image by Karl Moore (<karl.moore@ukonline.co.uk>)
Credits
Author
Jeff Potts
Reviewers
Alan Fehr
James Urquhart
Jean Barmash
Jens Schuetter
Michael Ruflin
Xavier Naud
Senior Acquisition Editor
David Barnes
Development Editor
Nikhil Bangera
Technical Editors
Aditi Srivastava
John Antony
Copy Editor
Sneha Kulkarni
Editorial Team Leader
Mithil Kulkarni
Project Manager
Abhijeet Deobhakta
Project Coordinator
Rajashree Hamine
Indexer
Rekha Nair
Proofreader
Chris Smith
Production Coordinator
Aparna Bhagat
Cover Work
Aparna Bhagat
About the Author
Jeff Potts leads the industry's largest group of certified Alfresco consultants as the Director of the Enterprise Content Management Practice at Optaros, a global consulting firm focused on assembling Next Generation Internet solutions featuring open source components. Jeff has over 10 years of ECM practice leadership and over 16 years of IT and technology implementation experience in IT departments and professional services organizations.
Jeff began working with and blogging about Alfresco in November of 2005. In 2006 and 2007, Jeff published a series of Alfresco tutorials and published them on his blog, ecmarchitect.com. That work, together with other Community activity in Alfresco's forum, Wiki site, and Jira earned him Alfresco's 2007 Community Contributor of the Year Award. The same year, Optaros earned Alfresco's Global Partner of the Year and Implementation of the Year awards.
Jeff's areas of business expertise include document management, content management, workflow, collaboration, portals, and search. Throughout his consulting career he has worked on a number of projects for Fortune 500 clients across the Media and Entertainment, Airline, Consumer Packaged Goods, and Retail sectors using technology such as Alfresco, Documentum, Java, XSLT, IBM WebSphere, and Lotus Domino.
Prior to Optaros, Jeff was a Vice President at Hitachi Consulting (formerly Navigator Systems, Inc.) where he founded and grew the ECM practice around legacy knowledge management, document management, Web Content Management (WCM), and collaboration solutions, in addition to custom development.
Jeff is a frequent speaker at Alfresco and Content Management industry events and has written articles for technical journals. This is his first book.
This book would not have been possible without Optaros. What an awesome place to work and what a stellar team to work with. Thanks to Bob Gett, Mavis Chin, and Marc Osofsky for providing an incredible level of senior leadership support. Dave Gynn, John Eckman, and Seth Gottlieb (we miss you, Seth!) also provided early inspiration and counsel. Noreen Vincent helped with marketing and promo. Optaros colleagues from around the world rolled up their sleeves and dug in with code and technical editing: Olivier Pépin, Brian Doyal, Xavier Naud, Jens Scheutter, Alan Fehr, and Michael Ruflin all gave incredible amounts of thorough and thoughtful feedback. The book is significantly better than it would have been because of your involvement.
Alfresco has been tremendously supportive of and excited about this project. Thanks to John Powell, John Newton, Matt Asay, Dr. Ian Howells, Paul Holmes-Higgin, Luis Sala, Phil Robinson, Michael Uzquiano, and Nancy Garrity for providing information and support and for building such a cool platform. Alfresco team members also pitched in with technical reviews: David Caruana, James Urquhart, Jean Barmash, and Peter Monks spent time reading chapters and providing feedback when they probably should have been cranking out 3.0 code.
David Barnes at Packt Publishing deserves thanks for suggesting the project and getting it on track. Rajashree Hamine and Nikhil Bangera have done a great job holding me to task and handling everything on the Packt side.
My ecmarchitect.com readers deserve a big thanks. Your helpful feedback and encouragement motivated me to keep posting. I look forward to continuing the conversation.
Finally, to Christy, Justin, and Caroline: Thank you for putting up with the late nights and lost weekends, providing so much encouragement, and being so understanding.
About the Reviewers
Alan Fehr is a Senior Consultant at Optaros. He has worked on a number of Alfresco projects and was responsible for the client project that eventually turned into DoCASU (Optaros' open source, custom user interface for Alfresco). Alan holds an M. Sc. in Computer Science from the Swiss Federal Institute of Technology in Zurich.
Jean Barmash is the Director of Technical Services at Alfresco, the Open Source Enterprise Content Management Company. In that role, he helps Alfresco customers and partners to design and architect content-centric solutions based on the Alfresco platform. Additionally, he frequently conducts training sessions and works with the Alfresco community to share his expertise.
Jean brings a wealth of experience in different areas of technology creation, including architecture, management, development, and training. Most recently, he consulted to several Wall Street firms and ran the technology training program for one of the leading investment banks.
Jean is a frequent speaker at industry events such as the Enterprise 2.0 Conference, Open Source Business Conference, and IT Architect Regional Conference in New York, and is active in the NY Tech community.
I'd like to thank Peter Monks for being a great mentor, as I learned a tremendous amount from working with him.
Jens Schuetter has 10 years of experience in building and designing J2EE solutions with a focus on content aggregation and travel portals.
In the beginning of his career, Jens worked as an e-business consultant in the south of France for clients such as Amadeus and IBM. He later joined Amadeus, where he developed and designed market-leading products for the travel industry. In 2006 he co-founded Travenues where he helped to launch launch ixigo.com, today India's foremost travel infomediary. Recently, he worked as Technical Lead for Optaros on several large-scale implementations of the Alfresco ECM. He holds a Master in Computer Science from Bielefeld University.
Michael Ruflin is a Senior Consultant at Optaros, Inc. with several years experience in designing and developing Java, J2EE and PHP software applications. Michael has worked on several Alfresco projects including a document management and collaborative workspace solution based on Alfresco, JSF, and OpenOffice and, most recently, as a member of the Alfresco 3.0 Share development team. Michael Ruflin holds a Master's Degree in Computer Science from the Swiss Federal Institute of Technology in Lausanne (EFPL).
Preface
Alfresco is the leading open source platform for Enterprise Content Management. The progress the Alfresco Engineering team has made since that first production release in June of 2005 has simply been amazing. The platform is well on its way to fulfilling its vision of becoming a viable alternative to those from legacy vendors who simply cannot keep up with the pace of innovation inherent in a solution assembled from open source components.
This book takes you through the process of customizing and extending the Alfresco platform. It uses a fictitious professional services company called SomeCo
as an example. SomeCo has decided to roll out Alfresco across the enterprise. Your job is to take advantage of Alfresco's extension mechanism, workflow engine, and various APIs to meet the requirements from SomeCo's various departments.
Although many customizations can be made by editing XML and properties files, this book is focused on developers. That might mean writing Java code against the foundation API to implement an action or a behavior, maybe creating some server-side JavaScript to use as the controller of a RESTful web script, or perhaps implementing custom business logic in an advanced workflow. The point is that all but the most basic implementations of any ECM platform require code to be written. The goal of this book is to help you identify patterns, techniques, and specific steps that you can use to become productive on the platform more quickly.
By the end of this book, you will have stepped through every aspect of the Alfresco platform. You will have performed the same types of customizations and extensions found in typical Alfresco implementations. Most importantly, when someone comes to you and asks, How would you do this in Alfresco?
, you'll have at least one answer and maybe even some source code to go with it.
What This Book Covers
Chapter 1 is for people new to the Alfresco platform. It walks you through the capabilities of Alfresco and gives some examples of the types of solutions that can be built on the platform. You'll also learn what tools and skills are required to implement Alfresco-based solutions.
Chapter 2 is about getting your development environment set up. Like preparing for a home improvement project, this is the trip to the hardware store to get the tools and supplies you'll need to get the job done. Throughout the book, you will be building and deploying changes. So just as in any software development project, it pays to get that process working up front. You'll also learn about the debugging tools that are available to you. The chapter includes a short and simple customization example to test out your setup.
Chapter 3 starts where all Alfresco projects should begin: defining the content model. You'll learn how to define the content model as well as how to expose the model to the Alfresco web client. Once you've got it in place, you'll write some Java code that utilizes the Web Services API to test out the model. This will also be your first taste of the JavaScript API. The exercises set up the initial content model for SomeCo.
Chapter 4 begins to show you the power of the repository by exposing you to some of the mechanisms or hooks that can be used to perform hands off
operations on content. You'll learn about actions, behaviors, transformers, and metadata extractors. The exercises include implementing a rule action for SomeCo's Human Resources department to help manage HR policies, writing a custom behavior to calculate user ratings, and writing a custom metadata extractor to make Microsoft Project files indexable by the Lucene search engine.
Chapter 5 takes you through web client customizations. First, it establishes whether or not you should be customizing the web client at all. Once that's out of the way, you learn how to add new menu items, how to create your own custom component renderers, and how to define new dialogs and wizards. Examples in this chapter include writing a new Execute Script
UI Action to make it easier to run server-side JavaScript, creating a Stoplight
component to graphically show project status, and creating a multi-step wizard SomeCo's HR department can use to set up job interviews.
Chapter 6 focuses on the web script framework. Web scripts are an important part of the platform because they allow you to expose the repository through a RESTful API. They are also core to the Surf framework that is in the 3.0 release. The exercises in this chapter are about creating a set of URLs that can be called from the frontend web site to retrieve and persist user ratings of objects in the repository.
Chapter 7 is about advanced workflows. You'll learn how the embedded JBoss jBPM workflow engine works and how to define your own workflows, including how to implement your own business logic. The chapter includes a comparison between the capabilities of Alfresco's simple workflow and advanced workflow so that you can decide which one is appropriate for your needs. By the end of the chapter, you will have built a workflow that SomeCo will use to review and approve Whitepapers for external publication. The process includes an asynchronous step, which leverages the web script knowledge you gained in the previous chapter.
Chapter 8 takes you through the key developer-related aspects of Alfresco's Web Content Management functionality. The chapter is not an exhaustive WCM how-to. Rather, the chapter starts with a simple web form and then quickly moves to using the API to work with WCM assets. You'll also leverage advanced workflow and web script techniques you learned in previous chapters to work with WCM sites and assets. You'll create a no approval
workflow that SomeCo will use for Job Postings and web scripts developers can use to deploy web sites to test servers and to commit changes to staging.
Chapter 9 covers a variety of security-related topics. You'll learn how to define your own custom roles, and how to create users and groups with the API. Although not strictly developer-centric, you'll also learn how to configure Alfresco to authenticate and synchronize with an LDAP directory and how to implement Single Sign-On (SSO) between Alfresco and other web resources.
A set of Appendices is included at the end of the book. There you'll find reference information such as the JavaScript API, a set of diagrams showing the out-of-the-box content model, and a list of the out-of-the-box public spring beans.
Appendix C is available for download from the book's page on Packtpub.com. You can visit http://www.packtpub.com/files/3117_AppendixC.pdf to directly download it. It includes a section on packaging and deploying AMPs, and an overview of the new Surf framework.
What You Need for This Book
To work through the examples in this book, you will need:
Alfresco. Either Enterprise or Labs will work. The examples have been tested on 2.2 Enterprise and 3.0 Labs. Chapter 2 provides further details on obtaining Alfresco.
Alfresco SDK.
Apache Ant.
Apache Tomcat.
Eclipse, although other IDEs (or even a text editor) will work.
There are other tools or libraries that you will need for certain exercises, which will be mentioned as necessary.
Who This Book is For
This book will be most useful to developers who are writing code to customize Alfresco for their organization or who are creating custom applications that sit on top of Alfresco.
This book is for Java developers, and you will get most from the book if you already work with Java, but you need not have prior experience on Alfresco. Although Alfresco makes heavy use of open source frameworks such as Spring, Hibernate, JavaServer Faces, and Lucene, no prior experience using these is assumed or necessary.
Conventions
In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text are shown as follows: The question mark in the user value placeholder declares the argument as optional.
A block of code will be set as follows:
{rating
:
{
average
: 1.923
,
count
: 13
,
}
}
When we wish to draw your attention to a particular part of a code block, the relevant lines or items will be made bold:
enableLookups=false
disableUploadTimeout=true
acceptCount=100
scheme=https
secure=true
clientAuth=false
sslProtocol=TLS
keystoreFile=/root/.keystore
keystorePass=changeit
Any command-line input and output is written as follows:
scwf:publishWhitepaper
>
New terms and important words are introduced in a bold-type font. Words that you see on the screen, in menus or dialog boxes for example, appear in our text like this: Click the Browse Website link in the Staging Sandbox .
Note
Warnings or important notes appear in a box like this.
Tip
Tips and tricks appear like this.
Reader Feedback
Feedback from our readers is always welcome. Let us know what you think about this book, what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.
To send us general feedback, simply drop an email to <feedback@packtpub.com>, making sure to mention the book title in the subject of your message.
If there is a book that you need and would like to see us publish, please send us a note in the SUGGEST A TITLE form on www.packtpub.com or email
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors.
Customer Support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Downloading the Example Code for the Book
Visit http://www.packtpub.com/files/code/3117_Code.zip to directly download the example code.
Note
The downloadable files contain instructions on how to use them.
Errata
Although we have taken every care to ensure the accuracy of our contents, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in text or code—we would be grateful if you would report this to us. By doing this you can save other readers from frustration, and help to improve subsequent versions of this book. If you find any errata, report them by visiting http://www.packtpub.com/support, selecting your book, clicking on the let us know link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata added to the list of existing errata. The existing errata can be viewed by selecting your title from http://www.packtpub.com/support.
Piracy
Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works in any form on the Internet, please provide the location address or website name immediately so we can pursue a remedy.
Please contact us at <copyright@packtpub.com> with a link to the suspected pirated material.
We appreciate your help in protecting our authors, and our ability to bring you valuable content.
Questions
You can contact us at <questions@packtpub.com> if you are having a problem with some aspect of the book, and we will do our best to address it.
Chapter 1. The Alfresco Platform
This chapter introduces the Alfresco platform and answers the question, What can I do with this thing?
A few examples will be provided to help answer this question from the solving business problems
perspective. The chapter then skims over basic configuration and customization before introducing the advanced customization concepts covered throughout the book. The chapter concludes with a brief discussion on the different Alfresco editions that are available.
In this chapter, we will go through the following points:
Examples of practical solutions built on Alfresco
High-level components of the Alfresco platform
Examples of the types of customizations that you will likely perform as a part of your implementation
Technologies you will use to extend the platform
Alfresco in the Real World
Alfresco will tell you that the product is a platform for Enterprise Content Management (ECM). But ECM is a somewhat nebulous and nefarious term. What does it really mean? It depends on who is saying it. ECM vendors usually use it as an umbrella term to describe a collection of content-centric technologies that includes:
Document Management (DM): Capturing, organizing, and sharing binary files. These files are typically produced from office productivity software, but the scope of the files being managed is unlimited.
Web Content Management (WCM): Managing files and content specifically intended to be delivered to the Web. The key theme of WCM is to reduce the web developer
bottleneck and empower non-technical content owners to publish their own content.
Digital Asset Management (DAM): Managing graphics, video, and audio. You can think of this as DM with added functionality specific to the needs of working with rich media such as thumbnailing, transcoding, and editing. Like WCM, the intent is to streamline the production process.
Records Management(RM): Managing content as a legal record. Like DAM, RM starts with DM and adds functionality specific to the world of RM such as retention policies, records plans, and audit trails.
Imaging: This includes capturing, tagging, and routing images of documents from scanners.
Most people will also include Collaboration, Search, and occasionally, Portals as well.
Practitioners have a different perspective. They will say that ECM is less about the technology and more about how you capture, organize, and share information across the entire enterprise. For them, the how
is more important than the what
.
What's important to know from an Alfresco perspective is that Alfresco is a platform for doing all these things.
So rather than worrying about a concise definition of ECM, let's look at a few examples to illustrate how clients are using Alfresco today, particularly in Alfresco's sweet spots such as Document Management and Web Content Management.
Basic Document Management
Alfresco started its life as a document management repository with some basic services for document management. Alfresco focused on this smart area initially for two reasons. First, it allowed Alfresco to establish a strong foundation and then build upon that foundation by expanding into other areas of ECM, with WCM being the prime example. Second, there is a huge market for systems that can manage unstructured content (aka documents
). The market is so big because document management is a problem for everyone. All companies generate files that benefit from the kind of features document management provides such as check-in/check-out, versioning, metadata, security, full-text search, and workflow.
Examples of classic document management are often found in manufacturing, packaged goods, or other companies with large research and development divisions. As you can imagine, companies such as these deal with thousands of documents every day. The documents are in a variety of formats and languages, and are created and leveraged by many different types of stakeholders from various parts of the company.
The critical functionality required for basic document management includes things such as:
Easy integration with authoring tools: If users can't get documents into and out of the repository easily, user adoption will suffer. This means users must be able to open and save documents to the repository from applications such as Microsoft Office, Microsoft Windows Explorer, and email.
Security: Many documents, particularly legal documents and anything around new product development, are very sensitive. Employees must be able to log in with their normal username and password, and see only the documents they have access to.
Library services: This is a grouping of foundational document management functionality that includes check-in/check-out, versioning, metadata, and search. The ability to offer these library services is one of the things that sets a document repository apart from a plain file system.
Workflow: Quite literally, workflow describes the flow of work
or business process related to a document. Requirements vary widely in this area and not everyone will leverage workflows right away. Workflows can be used to streamline and automate manual business processes by letting the document management system keep track of who needs to do what to a document at any particular time.
Scalability/Reliability: The system needs to scale in order to support several hundred or more users and hundreds of thousands or even millions of documents with some percentage of growth each year. Because the repository holds content that's critical to the business, it needs to be highly available.
Customizable user interface: The out of the box Alfresco web client is made for generic document management, which may be appropriate in many cases. Most clients will want to make at least some customizations to the web client to help increase productivity and improve user adoption.
The following diagram shows an example of high-level architecture to understand how basic document management might be implemented:
The diagram shows a single instance of Alfresco authenticating against LDAP. Some content managers are using the web client via HTTP/S, while others are using Windows Explorer, Microsoft Office, and other Thick Clients to work with content via one or more protocols such as CIFS, WebDAV, FTP, or SMTP. As noted in the diagram, Alfresco stores metadata in a Relational DB and the actual content files on the file system.
Most of the techniques for customizing Alfresco for DM solutions apply to other ECM solutions such as WCM, RM, Imaging, and DAM. Of course, there are business concepts and technical implementation details specific to each that make them unique, but the details provided in this book apply to all because the specialized solutions are built as extensions to the core Alfresco repository. WCM is built on the core repository as well, but the functionality it adds is significant enough to warrant a closer look.
Web Content Management
On the surface, WCM is very similar to document management. In both cases, content owners store files in a repository. Often, the content is assigned metadata, is secured, is indexed for search, and is routed through a workflow. The most obvious difference between DM and WCM is that the content being managed is meant specifically to be published on a web site or as part of a web application. Beyond that high-level distinction, there are several other differences that make WCM worthy of separate discussion. These include:
Content authoring tools used to create content
Separation of presentation from content
Systematic publication or deployment of content
Let's briefly look at each of these.
Content Authoring Tools
The majority of document management solutions deal with files generated by an office suite. Of course, there are exceptions such as various types of graphics files, CAD/CAM drawing formats, and other specialized tools. But mostly, the files are generated by a small number of different tools and an even smaller number of different software vendors.
In the case of WCM, there is a wide variety of tools involved from text editors to Integrated Development Environments (IDEs) to graphics programs with multiple vendors in each category. This means the WCM solution needs to be very flexible in the way it integrates with authoring tools. The alternative, which is forcing authors to give up their favorite tools in favor of a standard, can be a management nightmare.
Separation of Presentation from Content
WCM does not require the separation between content's appearance on the web site and its storage. But many implementations take advantage of this principle because it makes redesigning the site easier, facilitates multi-channel publishing, and enables people to author content without web skills.
To understand why this is so, think about a web site that has its content and presentation of that content merged together. When it is time to redesign the site, you have to touch every single web page because every page contains presentation markup. Similarly, content authoring is limited to people with technical skills. Otherwise, there is a risk that the content owner (for example, the person writing a press release or a job posting) will inadvertently clobber the page design.
One way to address this is to separate the content (the press release copy) from the presentation of that content. A common way to do that is to store the content as presentation-independent XML. The XML can then be transformed into any presentation that's needed. A redesign is as simple as changing the presentation in a single place, and then regenerating all of the pages.
The impact of separating content from presentation is three-fold. First, assuming the content consumers aren't interested in reading raw XML, something has to be responsible for transforming the content. Depending on the implementation, it may be up to the WCM system or a frontend web application.
Second, in the case of static content, any change in the underlying content has to trigger a transformation so that the presentation will be up-to-date, keeping in mind that there may be more than one file affected by the change. For example, data from a job posting appears in the job posting detail as well as the list of job postings. If the posting and the job posting index are both static, the list has to be regenerated whenever the job posting changes.
Third, content authors lose the benefit of WYSIWYG (What You See Is What You Get) content authoring because the content doesn't immediately look the way it will as soon as it is published to the web site. The WCM system, then, has to be able to let content authors preview
the content as they author it, preferably in the context of the entire site.
Systematic Publication or Deployment
A Document Management system is a lot like a relational database in the sense that it is typically an authoritative, centralized repository. There are exceptions, but for the most part, content resides in the repository and is retrieved by the systems and applications that need it. On the other hand, a WCM system often faces a publication or deployment challenge. Files go into the repository, but must be delivered somewhere to be consumed. This might happen on a schedule, at the request of a user, as part of a workflow, or all of the above. Granted, some web sites retrieve their content dynamically; but most sites have at least a subset of content that should be statically delivered to a web server.
Alfresco WCM Example
Let's look at an example of a basic corporate web site. Most companies have a mix of About Us
content that probably doesn't change very often, press releases or News
that might get updated daily, and maybe some document-based content such as marketing slicks, product information sheets, technical specifications, and so on. There's also some content that is used to build the site such as HTML, XML, JavaScript, Flash, CSS, and image files.
It is likely that there are several different teams with several different skill sets, all collaborating to produce the site. In this example, suppose the About Us
and News pages
come from the marketing team, the site is built by the web team and the document-based content can come from many organizations within the company.
Alfresco WCM sits on top of the core Alfresco product to provide additional WCM-specific functionality. An important distinction between Alfresco WCM and other open source Content Management Systems is that Alfresco is a de-coupled
CMS while something such as Drupal is a coupled
CMS. This means that Alfresco manages the web site but does not concern itself with presentation unlike Drupal, which is both a repository and a presentation framework. This doesn't mean that Alfresco can only manage static sites. You can easily query the repository in any number of ways. It just means it is up to you to provide the frontend from the ground up.
Using Alfresco, the WCM implementation for this example might look like this:
Note that in