Alfresco Java API
Alfresco Java API
com)
Home > Alfresco Community Edition 5.1 > Developer guide > API guide > Reference > Java API
Java API
When you need to create new services in Alfresco, or develop applications or customizations that cannot be implemented at the web script level, it is
necessary to write those extensions in Java. Alfresco provides numerous Javalevel APIs, which are documented through the JavaDoc system.
Links to the JavaDoc documentation can be found on the Alfresco Developer Site [1]. While in theory it is possible to access the complete range of Java
APIs, there is a list of recommended Public Java API calls below. Where possible it is strongly recommended that your application limits itself to this list,
so that your application works on future versions of Alfresco.
Public Java API services [2] The Public Java API provides access to Alfresco through a number of services that are exposed. These services are
accessed via a single point of access the Service Registry. This information provides an overview of the services exposed by the Public Java
API.
The following table summarizes the main services available to the developer. These services are available via the service registry [4].
Important: There is a wealth of additional information to be found in the Public Java API access and transaction management documentation [5]. This
documentation also shows you how to obtain the service registry.
Support
Service Description Status
ActionService [6] An action represents a unit of work that can be applied to a node. Using the Action Service, actions of specific Full
types can be created. Support
[7]
AttributeService [9] This provides services for reading, writing, and querying global attributes. Full
Support
[7]
AuditService [10] This provides services for querying audit data and enabling and disabling auditing. Full
Support
[7]
AuthenticationService [11] This service provides an API to allow authentication of users using various methods, such as username and Full
password and authentication tickets. Support
[7]
CategoryService [12] Provides a system for creating and managing categories of nodes. Full
Support
[7]
CheckOutCheckInService Service to provide document locking. If a document is locked, other users cannot change its content, until it is Full
[13] unlocked. Support
[7]
CopyService [15] This service provides methods to copy nodes within and across workspaces and to update the state of a node, Full
with that of another node, within and across workspaces. Support
[7]
DictionaryService [16] This service represents the repository Data Dictionary. The dictionary provides access to content metadata Full
such as Type and Aspect descriptions. Content metadata is organized into models where each model is given Support
a qualified name. This means that it is safe to develop independent models and bring them together into the [7]
same repository without name clashes (as long their namespace is different).
FileFolderService [17] Provides methods specific to manipulating files and folders. This service provides a simple way of accessing Full
simple trees of files and folders in Alfresco. Support
[7]
JobLockService [18] This service ensures that a scheduled job can only run on one node of a cluster at a time. A scheduled job Full
could be, for example, an Activities feed job that generates email to send to everyone every night or a content Support
cleaner job that cleans up orphaned content. [7]
LockService [19] A lowlevel locking service, used by the CheckOutCheckIn service. Does not create a working copy. Full
Support
[7]
MessageService [20] Provides methods to access the locale of the current thread and to get localised strings. These strings may be Full
loaded from resource bundles deployed in the Repository. Support
[7]
MimetypeService [21] Provides support related to content mimetype. For example, provides methods to retrieve the extension for the Full
specified mimetype. Support
[7]
ModuleService [22] A service to control and provide information about the currentlyinstalled modules. Full
Support
[7]
NamespaceService [23] Provides access to and definition of namespace URIs and prefixes. Full
Support
[7]
NodeLocatorService [25] The NodeLocatorService looks up node locators registered via Spring configuration by name. Full
Support
[7]
PermissionService [26] Provides an API for managing the node permissions. Permissions specify users and groups that have access Full
to a node. Each user and group can be assigned a role. Support
[7]
PersonService [27] This service encapsulates the management of people and groups. People and groups may be managed Full
entirely in the repository or entirely in some other implementation such as LDAP or via NTLM. Some properties Support
may be in the repository and some in another store. Individual properties may or may not be mutable. [7]
RenditionService [28] Provides support for rendering content nodes into other forms, known as renditions. The rendition nodes are Full
derived from their source node and as such can be updated automatically when their source node's content (or Support
other properties) are changed. Examples of renditions include reformatted content (essentially a transformation [7]
from one MIMEtype to another), rescaled images (including thumbnails), and the output of a Freemarker or
XSLT template. Renditions can be performed synchronously or asynchronously and can be created at a
specified location within the Alfresco repository. By default they are created as primary children of their source
node but it is possible to have them created at other nodes specified explicitly or as templated paths.
RetryingTransactionHelper A helper that runs a unit of work inside a UserTransaction, transparently retrying the unit of work if the cause of Full
[29] failure is an optimistic locking or deadlock condition. Support
[7]
SearchService [30] This encapsulates the execution of search against different indexing mechanisms. Full
Support
[7]
SiteService [31] Provides an extensive API for managing Sites in the Alfresco Share web client. Full
Support
[7]
TaggingService [32] It is possible to tag (a text label) any content, including folders, in Alfresco. This service provides an API for Full
creating, deleting, and adding tags, and other tag management methods. Support
[7]
TemplateService [33] Provides an API for executing template engine against a template file and data model. The service provides a Full
configured list of available template engines. The template file can either be in the repository (passed as Support
NodeRef string) or on the classpath. Also a template can be passed directly as a String using the [7]
processTemplateString() methods. The data model is specified to the template engine. The FreeMarker template
engine is used by default.
TenantService [34] Provides APIs around Alfresco's multitenancy capability. The service is applicable in both Single Tenancy and Full
Multi Tenancy arrangements. Support
[7]
VersionService [35] Provides an API for managing the versions of a piece of content. Full
Support
[7]
WorkflowService [36] Provides a clientfacing API for interacting with Alfresco workflows and tasks. Full
Support
[7]
ActionService [6] An action represents a unit of work that can be applied to a node. Using the Action Service, actions of specific types can be
created.
ActivityService [8] The ActivityServices is responsible for generating activity feeds for each member of a Share site. The activities generated
include such events as a document was added, a document was previewed, the wiki was updated.
AttributeService [9] This provides services for reading, writing, and querying global attributes.
AuditService [10] The API by which applications can query the audit logs and enable or disable auditing.
AuthenticationService [11] This service provides an API to allow authentication of users using various methods, such as username and password
and authentication tickets.
AuthorityService [37] The service that encapsulates authorities granted to users. This service will refuse to create any user authorities. These
should be managed using the AuthenticationService and PersonService. Methods that try to change alter users will throw an exception. A string
key is used to identify the authority. These follow the contract defined in AuthorityType. If there are entities linked to these authorities this key
should be used to find them, as userName is used to link user and person.
CategoryService [12] Provides an API for creating and managing categories of nodes.
CheckOutCheckInService [13] Service to provide document locking. If a document is locked, other users cannot change its content, until it is
unlocked.
ContentService [14] A service for accessing and transforming content.
CopyService [15] This service provides methods to copy nodes within and across workspaces. It also provides support to update the state of a
node, with that of another node, within and across workspaces.
DictionaryService [16] This service represents the Repository Data Dictionary. The dictionary provides access to content metadata such as Type
and Aspect descriptions. Content metadata is organized into models where each model is given a qualified name. This means that it is safe to
develop independent models and bring them together into the same Repository without name clashes (as long their namespace is different).
FileFolderService [17] Provides methods specific to manipulating files and folders. This service provides a simple way of accessing simple trees of
files and folders in Alfresco.
JobLockService [18] This service ensures that a scheduled job can only run on one node of a cluster at a time. A scheduled job could be, for
example, an Activities feed job that generates email to send to everyone every night or a content cleaner job that cleans up orphaned content.
LockService [19] A nodelevel locking service, used by the CheckOutCheckIn service. Does not create a working copy.
MessageService [20] Provides methods to access the Locale of the current thread and to get Localised strings. These strings may be loaded from
resource bundles deployed in the Repository.
MimetypeService [21] Provides support related to content mimetype. For example, provides methods to retrieve the extension for the specified
mimetype.
ModuleService [22] A service to control and provide information about the currentlyinstalled modules.
NamespaceService [23] Provides access to and definition of namespace URIs and Prefixes.
NodeService [24] Provides an API for managing nodes.
NodeLocatorService [25] The NodeLocatorService looks up node locators registered via Spring configuration by name.
PermissionService [26] Provides an API for managing the node permissions. Permissions specify users and groups that have access to a node.
Each user and group can be assigned a role.
PersonService [27] This service encapsulates the management of people and groups. People and groups may be managed entirely in the
repository or entirely in some other implementation such as LDAP or via NTLM. Some properties may be in the repository and some in another
store. Individual properties may or may not be mutable.
RenditionService [28] Provides support for rendering content nodes into other forms, known as renditions. The rendition nodes are derived from
their source node and as such can be updated automatically when their source node's content (or other properties) are changed. Examples of
renditions include reformatted content (essentially a transformation from one MIMEtype to another), rescaled images (including thumbnails), and
the output of a Freemarker or XSLT template. Renditions can be performed synchronously or asynchronously and can be created at a specified
location within the Alfresco repository. By default they are created as primary children of their source node but it is possible to have them created
at other nodes specified explicitly or as templated paths.
RetryingTransactionHelper [29] A helper that runs a unit of work inside a UserTransaction, transparently retrying the unit of work if the cause of
failure is an optimistic locking or deadlock condition.
SearchService [30] This encapsulates the execution of search against different indexing mechanisms.
SiteService [31] Provides an extensive API for managing Sites in the Alfresco Share web client.
TaggingService [32] It is possible to tag (a text label) any content, including folders, in Alfresco. This service provides an API for creating, deleting,
and adding tags, and other tag management methods.
TemplateService [33] Provides an API for executing template engine against a template file and data model. The service provides a configured list
of available template engines. The template file can either be in the repository (passed as NodeRef string) or on the classpath. Also a template
can be passed directly as a String using the processTemplateString() methods. The data model is specified to the template engine. The FreeMarker
template engine is used by default.
TenantService [34] Provides APIs around Alfresco's multitenancy capability. The service is applicable in both Single Tenancy and Multi Tenancy
arrangements.
VersionService [35] Provides an API for managing the versions of a piece of content.
WorkflowService [36] Provides a clientfacing API for interacting with Alfresco Workflows and Tasks.
ActionService
An action represents a unit of work that can be applied to a node. Using the Action Service, actions of specific types can be created.
Information ActionService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description An Action is a unit of work that can be carried out on a node. Actions are commonly used in conjunction with Rules, but that is not
mandatory. When you create Rules for a folder in Alfresco, you can specify certain Actions to occur to nodes added to the folder. For
example, when a Word document is added to a folder, you may want a PDF to be automatically generated, or a notification email to
sent. There are a number of builtin Actions available by default:
Execute Script
Copy
Move
Checkin
Checkout
Link to category
Add Aspect
Remove Aspect
Add simple workflow
Send email
Transform and copy content
Transform and copy image
Extract common metadata fields
Import
Specialise type
Increment counter
Set property value
You can also create custom Actions to do whatever you want to content added to the folder.
While Actions are typically triggered by Rules, you can also invoke them directly by selecting them from a menu item. The Action
Service also allows you to call them directly from code. Any piece of code that can access the ActionService can invoke the Action, for
example:
JavaScript
Workflow
Web script
Java
More
Information Actions platform extension point documentation [41].
Java API Access and Transaction Management documentation [42].
ActivityService
The ActivityServices is responsible for generating activity feeds for each member of a Share site. The activities generated include such events as a
document was added, a document was previewed, the wiki was updated.
Information ActivityService
Support Status Full Support [7]
Architecture Platform Architecture [39]
Information
Description
What is an activity?
Activity represents an action that has taken place within an Alfresco client interface (app/tool)
Activity is typically initiated by the Alfresco app/tool/component/service on behalf of a user (it is not necessarily initiated by
the underlying repository)
Activity is of a given/named type specified by the Alfresco app/tool (for example document added)
Activity is performed at a particular point in time (post date)
Activity may have associated data dependent on type of activity
Activity may be performed within a given site/network context
Activity may be performed within a given app/tool context
Activity may be sensitive, that is, associated with data that is permission controlled, therefore, the activity itself may be
permission controlled (can or can't be read)
Activity may be rendered into one or more UI views (activity summary)
Activities may be raised by one or more Alfresco applications. The posted activity must have a uniquely named activity type.
AttributeService
This provides services for reading, writing, and querying global attributes.
Information AttributeService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description Attributes are a systemwide storage system. Attributes typically have up to three keys (known as a key set) and a value. Attributes are
stored in the database (rather than the repository). An example of use is for persisting systemwide JMX configuration properties in
Alfresco Enterprise.
The AttributeService provides a Java interface for creating and managing Attributes, including such operations as:
Collections of Attributes can be processed on retrieval by implementing a callback handler object. The callback handler object's
handleAttribute method is invoked for each Attribute retrieved.
AuditService
The API by which applications can query the audit logs and enable or disable auditing.
Information AuditService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description The AuditService API provides faciities to query audit data. There are also methods to clear audit data, enable and disable auditing, and check audit
Deployment Deploy as AMP or Simple Module (JAR) package.
App
Server
Deployment Use SDK archetypes to produce AMP or Simple Module.
SDK
Project
Java API Java API Documentation [52]
Java
example /**
* Returns content changes.
*/
public ObjectList getContentChanges(Holder<String> changeLogToken, BigInteger maxItems)
{
final ObjectListImpl result = new ObjectListImpl();
[Link](new ArrayList<ObjectData>());
if (changeLogToken != null)
{
[Link](newChangeLogToken);
}
return result;
}
More
Information Audit platform extension point documentation [53].
Auditing Alfresco [54] in the Alfresco Administration documentation provides a detailed overview of Auditing in Alfresco.
Tutorials
Audit API Hints and Tricks [55] DevCon presentation by Mehdi Belmekki.
Audit and Reporting with Alfresco and NoSQL by Zaizi [56]
Audit tutorials [57]
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
AuthenticationService
This service provides an API to allow authentication of users using various methods, such as username and password and authentication tickets.
Information AuthenticationService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description Authentication is required at various access points into the Repository. For example web scripts, CMIS, CIFS, FTP, WebDAV, and web
clients represent access points where authentication needs to take place. Authentication can be via Alfresco ticket, a username and
password pair, or some other mechanism.
Not all implementations will support creating, updating and deleting authentication information.
The authenticated username is used as the key to obtain other security information such as group membership, the details about the
person, to record a user as the owner of an object. It is one of the identifiers against which permissions may be assigned.
The authentication service does not provide any details about a user other than authentication.
The authentication service stores authentication information on the calling thread. Application developers should ensure that this
information is cleared.
The authentication component supports authentication only. The authentication DAO provides an API to create, delete and update
authentication information. The ticket component is resposible for managing and storing tickets that may be obtained after
authentication and used in place of authentication.
// Get services
AuthenticationService authService = (AuthenticationService)[Link]();
PersonService personService = (PersonService)[Link]();
More
Information Authentication Documentation [59]
AuthorityService JavaScript API documentation [60]
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
AuthorityService
The service that encapsulates authorities granted to users. This service will refuse to create any user authorities. These should be managed using the
AuthenticationService and PersonService. Methods that try to change alter users will throw an exception. A string key is used to identify the authority.
These follow the contract defined in AuthorityType. If there are entities linked to these authorities this key should be used to find them, as userName is
used to link user and person.
Information AuthorityService
Support Status Full Support [7]
Architecture Platform Architecture [39]
Information
Description Authority is a general term to describe a group, user, or role. The AuthorityService provides an API to:
More
Information Authentication Documentation [59]
AuthorityService JavaScript API documentation [60]
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer Blogs
Parent topic: Public Java API services [2]
CategoryService
Provides an API for creating and managing categories of nodes.
Information CategoryService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description Categories provide a system for organizing content. Unlike tags, which have no hierarchical structure, and which can be created and
applied by anyone, categories are created by the Administrator, and are hierarchical in nature. For example, You might have a Europe
category, and then subcategories such as France, Germany, Spain, and so on. The top Category in the hierarchical structure is known
as the Root Category.
The CategoryService API provides methods to perform actions such as the following:
Create a Category
Create a root Category
Delete a Category
Create a Classification (a grouping of Categories)
Delete a Classification
Get most popular Categories
// To create a category
NodeRef newCategory = [Link](newRootCat, "newCategory");
More
Information Tagging and Categorizing Content [63]
Category Manager Documentation [64]
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
CheckOutCheckInService
Service to provide document locking. If a document is locked, other users cannot change its content, until it is unlocked.
Information CheckOutCheckInService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description Check out locks the item and creates a working copy that can be edited. The locked item can be viewed by others, but not changed.
When the item is checked in, the working copy replaces the original item and removes the lock. Methods are provided to:
More
Information Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
ContentService
A service for accessing and transforming content.
Information ContentService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description The ContentService provides an API for accessing and transforming content. You may want to read the content associated with a node,
or transform the content from one format to another, for example from .ppt to .pdf. Methods provided by the API includes functionality to:
/**
* Creates a new content node setting the content provided.
*
* @param parent the parent node reference
* @param name the name of the newly created content object
* @param text the content text to be set on the newly created node
* @return NodeRef node reference to the newly created content node
*/
// Use the content service to set the content onto the newly created node
ContentWriter writer = [Link](node, ContentModel.PROP_CONTENT, true);
[Link](MimetypeMap.MIMETYPE_TEXT_PLAIN);
[Link]("UTF‐8");
[Link](text);
More
Information Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
CopyService
This service provides methods to copy nodes within and across workspaces. It also provides support to update the state of a node, with that of another
node, within and across workspaces.
Information CopyService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description It is very useful to able to copy nodes. When copying container nodes (folders) you also have the option to copy child nodes. Operations provided by
include:
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
/**
* Copy action executor.
* <p>
* Copies the actioned upon node to a specified location.
*
* @author Roy Wetherall
*/
public class CopyActionExecuter extends ActionExecuterAbstractBase
{
public static final String ERR_OVERWRITE = "Unable to overwrite copy because more than one have been found.";
/**
* The node service
*/
private NodeService nodeService;
private CheckOutCheckInService checkOutCheckInService;
/**
* Sets the node service
*/
public void setNodeService(NodeService nodeService)
{
[Link] = nodeService;
}
/**
* Sets the copy service
*/
public void setCopyService(CopyService copyService)
{
[Link] = copyService;
}
/**
* Service to determine check‐in or check‐out status
*/
public void setCheckOutCheckInService(CheckOutCheckInService checkOutCheckInService)
{
[Link] = checkOutCheckInService;
}
@Override
protected void addParameterDefinitions(List<ParameterDefinition> paramList)
{
[Link](new ParameterDefinitionImpl(PARAM_DESTINATION_FOLDER, DataTypeDefinition.NODE_REF, true, getParamDisplayLabel(PARAM_DESTINAT
[Link](new ParameterDefinitionImpl(PARAM_DEEP_COPY, [Link], false, getParamDisplayLabel(PARAM_DEEP_COPY)));
[Link](new ParameterDefinitionImpl(PARAM_OVERWRITE_COPY, [Link], false, getParamDisplayLabel(PARAM_OVERWRITE_CO
}
@Override
public void executeImpl(Action ruleAction, NodeRef actionedUponNodeRef)
{
if ()
{
return;
}
NodeRef destinationParent = (NodeRef) [Link](PARAM_DESTINATION_FOLDER);
// Since we are overwriting we need to figure out whether the destination node exists
NodeRef copyNodeRef = null;
if (overwrite == true)
{
// Try and find copies of the actioned upon node reference.
// Include the parent folder because that's where the copy will be if this action
// had done the first copy.
PagingResults<CopyInfo> copies = [Link](
actionedUponNodeRef,
destinationParent,
new PagingRequest(1000));
for (CopyInfo copyInfo : [Link]())
{
NodeRef copy = [Link]();
// We know that it is in the destination parent, but avoid working copies
if ([Link](copy))
{
continue;
}
if (copyNodeRef == null)
{
copyNodeRef = copy;
}
else
{
throw new RuleServiceException(ERR_OVERWRITE);
}
}
}
if (copyNodeRef != null)
{
// Overwrite the state of the destination node ref with the actioned upon node state
[Link](actionedUponNodeRef, copyNodeRef);
}
else
{
ChildAssociationRef originalAssoc = [Link](actionedUponNodeRef);
// Create a new copy of the node
[Link](
actionedUponNodeRef,
destinationParent,
[Link](),
[Link](),
deepCopy);
}
}
}
More
Information Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
DictionaryService
This service represents the Repository Data Dictionary. The dictionary provides access to content metadata such as Type and Aspect descriptions.
Content metadata is organized into models where each model is given a qualified name. This means that it is safe to develop independent models and
bring them together into the same Repository without name clashes (as long their namespace is different).
Information DictionaryService
Support Status Full Support [7]
Architecture Platform Architecture [39]
Information
Description The DictionaryService provides access to the entire content metamodel. The content metamodel contains information of Types,
DataTypes, Properties, Aspects, Associations and Constraints. Operations supported include:
Get DataTypes, Types, Associations, Properties, Constraints, Classes from a Content Model.
Check if a class is a subclass.
Get SubTypes and SubAspects.
return [Link]();
}
More
Information Content Model Extension Point [69]
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
FileFolderService
Provides methods specific to manipulating files and folders. This service provides a simple way of accessing simple trees of files and folders in Alfresco.
Information FileFolderService
Support Status Full Support [7]
Architecture Information Platform Architecture [39]
Description The FileFolderService provides methods for dealing with Files and Folders. Operations include:
The methods typically work with a NodeRef for the node that represents the target file or folder.
More Information
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco Developer Blogs None
Parent topic: Public Java API services [2]
JobLockService
This service ensures that a scheduled job can only run on one node of a cluster at a time. A scheduled job could be, for example, an Activities feed job
that generates email to send to everyone every night or a content cleaner job that cleans up orphaned content.
Information JobLockService
Support Status Full Support [7]
Architecture Information Platform Architecture [39]
Description The JobLockService is used to provide a locking service at the job level, rather than the node level.
Deployment App Server Deploy as AMP or Simple Module (JAR) package.
Deployment SDK Project Use SDK archetypes to produce AMP or Simple Module.
Java API Java API Documentation [71]
Java example For an example of using the JobLockService see the Content Store Cleaner code [72] on GitHub.
More Information
Scheduled Jobs extension point documentation [73]
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco Developer Blogs None
Parent topic: Public Java API services [2]
LockService
A nodelevel locking service, used by the CheckOutCheckIn service. Does not create a working copy.
Information LockService
Support Status Full Support [7]
Architecture Information Platform Architecture [39]
Description If you need a nodelevel locking system, then the LockService can provide this. Functionality provided by the service
includes:
More Information
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco Developer Blogs None
Parent topic: Public Java API services [2]
MessageService
Provides methods to access the Locale of the current thread and to get Localised strings. These strings may be loaded from resource bundles deployed
in the Repository.
Information MessageService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description This service provides functionality around Internationalization (i18n). It provides facilities to:
All user displayed strings that originate in the repository should be externalised into resource bundles to ensure that the repository is
fully localisable. Examples of strings requiring extraction include:
Extracted strings should be gathered into resource bundles by functional area. This enables functional areas to remain distinct within
the repository.
The base bundle should be named by functional area and have the .properties extension. All base bundles should be in US English.
The IDs used in the resource bundles should be scoped by functional area to avoid clashes (this is important since at runtime the
contents of the various resource bundles in combined, any names clashes will result in message values being overwritten).
A resource bundle can be placed anywhere in the source tree, but in general repository resource bundles should be placed in the
[Link] package found in the config directory.
Before a resource bundle can be used by the repository it must be registered. Suitable methods are provided by the service to support
this.
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
MimetypeService
Provides support related to content mimetype. For example, provides methods to retrieve the extension for the specified mimetype.
Information MimetypeService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description Alfresco ECM supportes numerous mimetypes OOTB. However, it is also possible to add your own custom mimetypes. The
MimetypeService provides an API for managing mimetypes. For example, you can obtain a list of current mimetypes, mimetype
extensions, and guess mimetypes using a specified file and content reader.
Deployment Deploy as AMP or Simple Module (JAR) package.
App
Server
Deployment Use SDK archetypes to produce AMP or Simple Module.
SDK
Project
Java API Java API [78]
Java
example // Using mimetype service when writing content
[Link]([Link](filename));
[Link]([Link]());
More
Information Java API Access and Transaction Management documentation [42].
Mimetype platform extension point documentation [79]
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
ModuleService
A service to control and provide information about the currentlyinstalled modules.
Information ModuleService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description A module is an extension to Alfresco that is developed with a particular project structure and packaging. Modules can be registered and
loaded as part of the boot process. In the Repository Admin Tools (Enterprise version) you can view the currently installed Modules [80].
The ModuleService provides functionality to programmatically start up and shut down modules, and get module information.
Deployment Deploy as AMP or Simple Module (JAR) package.
App
Server
Deployment Use SDK archetypes to produce AMP or Simple Module.
SDK
Project
Java API Java API Documentation [81]
Java
example
// Get all Modules
More
Information Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
NamespaceService
Provides access to and definition of namespace URIs and Prefixes.
Information NamespaceService
Support Status Full Support [7]
Architecture Platform Architecture [39]
Information
Description Alfresco namespaces start with [Link]
Registry
Note: This list will expand / change between now and the next release.
Common
Namespace Prefix Description
[Link] alf General Alfresco Namespace
[Link] d Data Dictionary model
[Link] sys Repository system model
[Link] cm Content Domain model
[Link] app Application model
[Link] bpm Business Process Model
[Link] st Site Model
[Link] fm Forum Model
[Link] usr User model (in [Link])
[Link] view Alfresco Import / Export View
[Link] act Action service model
[Link] rule Rule service model
[Link] auth Authentication Web Service
[Link] rep Repository Web Service
[Link] content Content Web Service
[Link] author Authoring Web Service
[Link] cls Classification Web Service
[Link] cml Content Manipulation Language
[Link] cm Web Service Content Domain Model
[Link] wf Workflow Model(link is to Alfresco simple workflow model,
not generally extended)
Tutorials None
Alfresco Developer None
Blogs
Parent topic: Public Java API services [2]
NodeService
Provides an API for managing nodes.
Information NodeService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description Nodes are the fundamental data structure in Alfresco ECM. All content that is stored is represented by a node data structure, which contains
content metadata and is persisted in a database (such as PostgreSQL). The content referenced by the node is stored as a *.bin file in a
content store (such as the file system, S3, encrypted or other content store). Every node in the system is referenced by a NodeRef, which is
made up of the content store protocol, the content store name, and the Universal Unique Identifier (UUID) of the content, for example:
workspace://SpacesStore/ccb906ba‐a768‐4ccb‐8b26‐515119e1efdc.
Generally nodes are of two main types, a content node (cm:content), or a folder node (cm:folder). Folders can contain child nodes. Note that
each content store will have a root node, and all other nodes in the store will be children of the root node.
The NodeService provides an extensive API for managing nodes. Functionality includes:
The NodeService makes extensive use of NodeRefs to reference the node of interest.
Since Alfresco 4.1.1 the alf_node.node_deleted column has been replaced by a system type (sys:deleted) and an aspect (sys:pendingDelete).
While the sys:deleted type will never be visible to client code, the sys:pendingDelete aspect will be. Any custom code that attempts to modify
behaviour during node deletion may need to be adjusted.
Node deletion
Changes made in 4.1.1 introduced comprehensive policy callbacks for all associations during node deletion. The following node policies are
available for node deletion:
BeforeDeleteNodePolicy
BeforeArchiveNodePolicy
OnDeleteNodePolicy
BeforeDeleteChildAssociationPolicy
OnDeleteChildAssociationPolicy
BeforeDeleteAssociationPolicy
OnDeleteAssociationPolicy
The association (peer and child) policies are now fired reliably for all associations within the node hierarchy being deleted. For examples of
their usage, see: [Link].
It is impossible to add or remove associations to or from any node in the hierarchy being deleted. This includes attempted changes from
any source including changes attempted by custom code reacting to before or ondelete callbacks.
All nodes in the hierarchy will temporarily have the sys:pendingDelete aspect applied. Custom code can using [Link]
to discover if a node is about to be deleted.
It is impossible to add new nodes or link other nodes into any node in the hierarchy being deleted. Any attempt to do so will be treated as
a concurrency violation since custom code should not be attempting this from callbacks during the node deletion.
All associations, with the notable exception of the primary parentchild links, will be removed even if node archival is taking place. Node
archival now only preserves the core parentchild associations and discards all other associations after making the relevant callbacks.
Custom code must use the association deletion callbacks to remove nodes or aspects that might violate model integrity constraints in the
archived hierarchy.
A good example of the changes is in the handling of the cm:copiedFrom aspect. Copied nodes have an aspect cm:copiedfrom, which has a
mandatory association to the original source node. When either the source or copy is deleted the aspect has to be removed. See
[Link] for how the association deletion is detected in order to ensure that the
aspect is removed from the copied node.
More
Information Java API Access and Transaction Management documentation [42].
Custom Content Store platform extension point documentation [85]
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
NodeLocatorService
The NodeLocatorService looks up node locators registered via Spring configuration by name.
Information NodeLocatorService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description
Introduction
Configuration
The NodeLocatorService looks up node locators by name, the outofthebox node locators are defined in a file named nodelocator
[Link].
This Spring configuration file defines a base bean that can be used to define new node locator implementations. Using this bean will
automatically register the node locator with the repository and make it available.
This page will use an example node locator to describe the service, it will allow a named folder to be found. To define the example node
locator the following Spring configuration would be used (in a custom context file):
Java API
The NodeLocatorService looks up node locators registered via Spring configuration by name. A node locator must implement the
NodeLocator interface, whose definition is shown below:
A NodeLocator in its simplest form takes a source node, some optional parameters and returns a node or null if a suitable node could
not be found. If a node is not found the NodeLocatorService returns the NodeRef representing "Company Home".
The source node is not mandatory, node locators can be used to return well known nodes, "Company Home", "User Home" for example
in which case a source node is not required.
If a NodeLocator has parameters they must be defined using the same definition classes (ParameterDefinition) used by the
ActionService.
A base class AbstractNodeLocator is provided and it is recommended that your NodeLocator extends this base class. It provides the
functionality to register the NodeLocator with the NodeLocatorService registry. This class also defines an abstract method your
implementation must override.
This is the unique name for your NodeLocator and will be used by the NodeLocatorService in the lookup process. It is also used in the
startLocation configuration.
Example
Our example locator, NamedFolderNodeLocator, will be named "namedfolder" and will expect a single parameter called "name" which
will indicate what folder to locate. The full source for this example is shown below:
@Override
public NodeRef getNode(NodeRef source, Map<String, Serializable> params)
{
NodeRef node = null;
The "source" parameter in getNode() represents the starting point, in a form association control this will be the node being edited, for a
create form it will be the destination node. Our example finds the primary parent of the source node and looks for a child folder with the
given name. This is a fairly simple example but it is easy to see how this could be extended to allow for a named folder to be located up
or down a folder hierarchy.
REST API
A REST API is provided for the NodeLocatorService, it is used by the form association control to determine the startLocation of the
control but of course can be used by any client if required.
<webscript>
<shortname>Node Locator</shortname>
<description>Locates a Node in the repository using the specified Node Location strategy.</description>
<url>/api/{store_type}/{store_id}/{node_id}/nodelocator/{node_locator_name}</url>
<url>/api/nodelocator/{node_locator_name}</url>
<format default="json"/>
<authentication>user</authentication>
<transaction allow="readonly">required</transaction>
</webscript>
Two URLs are supported, one that allows a source node to be provided and one that does not, this is useful for "well known" nodes,
"Company Home", "Sites Home" for example. Parameters are passed as query string parameters, a request for our example node
locator may look like the following:
[Link]
startLocation
The main use of the NodeLocatorService is to determine where the forms association control should start when it is first displayed. In
some scenarios the picker may need to start in the root of the document library of a Share site or start in the folder where the node
being edit is located. See the next section for a list of NodeLocators provided outofthebox.
NodeLocators are configured using form control parameters. The name of the NodeLocator implementation is provided as the
'startLocation' parameter and the parameters are provided by a 'startLocationParameters' parameter. They should be provided in the
form of query string parameters, for example name=value&name=value.
The configuration for our example node locator is shown below, it will look for a folder named "Example" in the same folder as the node
being edited.
<field id="my:association">
<control>
<control‐param name="startLocation">{namedfolder}</control‐param>
<control‐param name="startLocationParams">name=Example</control‐param>
</control>
</field>
Note: The curly braces are required around the node locator name.
The following table shows the node locators available outofthebox, the parameters they accept and their use.
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
PermissionService
Provides an API for managing the node permissions. Permissions specify users and groups that have access to a node. Each user and group can be
assigned a role.
Information PermissionService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description The permission service is responsible for:
The PermissionService interface defines constants for wellknown permissions and authorities.
The default implementation coordinates implementations of two service provider interfaces: a ModelDAO and a PermissionsDAO. A
permission is simply a name scoped by the fully qualified name of the type or aspect to which it applies. The beans are defined and
configured in <installLocation>\tomcat\webapps\alfresco\WEBINF\classes\alfresco\publicservicessecurity[Link]. This file also
contains the configuration for security enforcement.
The ModelDAO interface defines an API to access a permissions model. The default permission model is in XML and defines
permission sets, and their related permission groups and permissions. Global permissions are part of the permission model. There may
be more than one permission model defined in XML; they are in practice merged into one permission model. A module can extend the
permission model.
The available permissions are defined in the permission model. This is defined in <installLocation>\tomcat\webapps\alfresco\WEB
INF\classes\alfresco\model\[Link]. This configuration is loaded in a bean definition in
<installLocation>\tomcat\webapps\alfresco\WEBINF\classes\alfresco\publicservicessecurity[Link]. This file also defines global
permissions. The definition file is read once at application startup. If you make changes to this file, you will have to restart the repository
in order to apply the changes.
Deployment Deploy as AMP or Simple Module (JAR) package.
App
Server
Deployment Use SDK archetypes to produce AMP or Simple Module.
SDK
Project
Java API Java API Documentation [87]
Java
example
// Set permissions for a user on a node
[Link](nodeRef, "NameOfUser...", [Link], true);
More
Information Java API Access and Transaction Management documentation [42].
Permissions platform extension point documentation [88]
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
PersonService
This service encapsulates the management of people and groups. People and groups may be managed entirely in the repository or entirely in some
other implementation such as LDAP or via NTLM. Some properties may be in the repository and some in another store. Individual properties may or
may not be mutable.
Information PersonService
Support Status Full Support [7]
Architecture Information Platform Architecture [39]
Description The Person service supports various methods relating to users.
The methods relating to the Person service include the ability to:
// ...
}
More Information
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco Developer Blogs None
Renditions can be performed synchronously or asynchronously and can be created at a specified location within the Alfresco repository.
By default they are created as primary children of their source node but it is possible to have them created at other nodes specified
explicitly or as templated paths.
Terminology
Rendering Engines
Are responsible for performing the transformation on a source node to create a rendition. Different Rendering Engines will perform
different types of transformation. They can be registered with the Rendition Service using a unique name.
Rendering Engine Definitions
Provide a description of a given Rendering Engine. Each Rendering Engine Definition exposes parameter definitions for all the
parameters which can be provided to the associated Rendering Engine. Each parameter definition describes the parameter name,
type and whether or not it is mandatory.
Rendition Definitions
Encapsulate all the necessary information for rendering a given source node into a rendition. This includes the Rendering Engine
which is used to perform the rendition and all the parameter values specified. Rendition Definitions have unique, qualified names
and can be persisted within the repository.
Composite Rendition Definitions
are a special type of Rendition Definition which allow the creation of renditions which require a sequence of two or more
transformation steps. For example, a Composite Rendition Definition could be used to first reformat a PDF document into a PNG
image and then resize the image to a small thumbnail. Composite Rendition Definitions specify an ordered list of other Rendition
Definitions to be sequentially executed, with the output of the previous transformation feeding in as the source node for the next
definition. All Composite Rendition Definitions specify the Composite Rendering Engine for their transformations.
Rendering Engines are registered with the Rendition Service through Spring dependency injection. renditionservices[Link]
declares an abstract bean called baseRenderingAction which is the parent bean for all rendering engines. baseRenderingAction itself is
a child bean of the ActionService's actionexecuter bean.
Alfresco provides a number of concrete rendering engine beans e.g. reformat within the same spring context file. In order to register a
new rendering engine, simply add new spring bean definitions in the normal way.
// Names must be provided for the rendition definition and the rendering engine to use.
QName renditionName = [Link](NamespaceService.CONTENT_MODEL_1_0_URI, "myRendDefn");
String renderingEngineName = [Link];
// Make changes.
[Link](AbstractRenderingEngine.PARAM_MIME_TYPE, MimetypeMap.MIMETYPE_PDF);
[Link](RenditionService.PARAM_ORPHAN_EXISTING_RENDITION, true);
// Now specify which other renditions are to be performed as part of the composite rendition.
RenditionDefinition reformatDefinition = [Link](reformatRenditionName);
RenditionDefinition rescaleImageDefinition = [Link](rescaleImageRenditionName);
[Link](reformatDefinition);
[Link](rescaleImageDefinition);
// 2. Get the rendition with the specified source node and the specified rendition definition name.
// If there is no matching rendition, null is returned
QName renditionName = [Link](NamespaceService.CONTENT_MODEL_1_0_URI, "myRenditionDef");
ChildAssociationRef rendition = [Link](sourceNode, renditionName);
// 3. Get the renditions with the specified source node whose MIME types match a filter
// This example returns renditions whose mimetype starts with "image".
List<ChildAssociationRef> imageRenditions = [Link](sourceNode, "image");
This behaviour is inherited from the ActionService remember that RenditionDefinition extends Action. So we can create a Rendition
Definition as shown above and set it to execute asynchronously:
[Link](true);
More
Information Java API Access and Transaction Management documentation [42].
Mimetypes platform extension documentation [79]
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
RetryingTransactionHelper
A helper that runs a unit of work inside a UserTransaction, transparently retrying the unit of work if the cause of failure is an optimistic locking or
deadlock condition.
Information RetryingTransactionHelper
Support Status Full Support [7]
Architecture Information Platform Architecture [39]
Description A description and application of the RetryingTransactionHelper can be found here [42].
Deployment App Server Deploy as AMP or Simple Module (JAR) package.
Deployment SDK Project Use SDK archetypes to produce AMP or Simple Module.
Java API Java API Documentation [91]
Java example See here [42].
More Information See here [42].
Tutorials None
Alfresco Developer Blogs None
Parent topic: Public Java API services [2]
SearchService
This encapsulates the execution of search against different indexing mechanisms.
Information SearchService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description Solr provides indexing of metadata and the plain text of content. This can be queried using various query languages. The query languages supporte
LANGUAGE_CMIS_ALFRESCO
LANGUAGE_CMIS_STRICT
LANGUAGE_FTS_ALFRESCO
LANGUAGE_LUCENE
LANGUAGE_SOLR_ALFRESCO
LANGUAGE_SOLR_CMIS
LANGUAGE_SOLR_FTS_ALFRESCO
LANGUAGE_XPATH
// Find all the nodes under the root node by QName namespace:one
// The prefix must be resolved to a URI
ResultSet results = [Link]([Link](), "lucene", "PATH:\"/namespace:one\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:one/namespace:five\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:one/namespace:five/namespace:twelve\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:*/namespace:*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:*/namespace:*/namespace:*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:one/namespace:*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:*/namespace:five/namespace:*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:one/namespace:*/namespace:nine\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/*/*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/*/namespace:five\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/*/*/*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:one/*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/*/namespace:five/*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"/namespace:one/*/namespace:nine\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"//.\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"//*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"//*/.\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"//*/./.\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"//./*\"", null, null);
results = [Link](storeRef, "lucene", "PATH:\"//././*/././.\"", null, null);
// Other
More
Information Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
SiteService
Provides an extensive API for managing Sites in the Alfresco Share web client.
Information SiteService
Support Status Full Support [7]
Architecture Platform Architecture [39]
Information
Description The SiteService provides an extension API for creating, deleting and managing Share Sites. Both JavaScript and Java APIs are
available, and access to Sites is also possible via the Alfresco REST API.
Deployment Deploy as AMP or Simple Module (JAR) package.
App Server
Deployment Use SDK archetypes to produce AMP or Simple Module.
SDK Project
Java API Java API Documentation [93]
Java example
// Using siteService to obtain info about site
SiteInfo siteInfo = [Link](nodeRef);
String siteShortName = [Link]();
String siteGroup = [Link](siteShortName);
More
Information Java API Access and Transaction Management documentation [42].
Tutorials
Alfresco xxx
Developer Blogs
Parent topic: Public Java API services [2]
TaggingService
It is possible to tag (a text label) any content, including folders, in Alfresco. This service provides an API for creating, deleting, and adding tags, and
other tag management methods.
Information TaggingService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description Tags are simple text labels that are attached to a piece of content. Each piece of content can have multiple tags. Folders also have a
TagScope object which encapsulates information about the tags used on content in that folder. The JavaScript TagScope [94] object
provides a simple illustration of what a TagScope represents. The TagScope object contains an array that lists Tags in count order.
There are methods to find out how many times a particualr tag is used.
Deployment Deploy as AMP or Simple Module (JAR) package.
App
Server
Deployment Use SDK archetypes to produce AMP or Simple Module.
SDK
Project
Java API Java API Documentation [95]
Java
example // Get tags applied to node
More
Information Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
TemplateService
Provides an API for executing template engine against a template file and data model. The service provides a configured list of available template
engines. The template file can either be in the repository (passed as NodeRef string) or on the classpath. Also a template can be passed directly as a
String using the processTemplateString() methods. The data model is specified to the template engine. The FreeMarker template engine is used by
default.
Information TemplateService
Support Status Full Support [7]
Architecture Information Platform Architecture [39]
Description
Deployment App Server Deploy as AMP or Simple Module (JAR) package.
Deployment SDK Project Use SDK archetypes to produce AMP or Simple Module.
Java API Java API Documentation [96]
Java example
// build the email template model
final Map<String, Object> model = createEmailTemplateModel(nodeRef);
More Information
Java API Access and Transaction Management documentation [42].
Template Reference Guide [97]
Tutorials None
Alfresco Developer Blogs None
Parent topic: Public Java API services [2]
TenantService
Provides APIs around Alfresco's multitenancy capability. The service is applicable in both Single Tenancy and Multi Tenancy arrangements.
Information TenantService
Support Status Full Support [7]
Architecture Information Platform Architecture [39]
Description
Deployment App Server Deploy as AMP or Simple Module (JAR) package.
Deployment SDK Project Use SDK archetypes to produce AMP or Simple Module.
Java API Java API Documentation [98]
Java example An example of using the TenantService can be found on GitHub [99].
More Information
Java API Access and Transaction Management documentation [42].
Tutorials None
Alfresco Developer Blogs None
Parent topic: Public Java API services [2]
VersionService
Provides an API for managing the versions of a piece of content.
Information VersionService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description If content has the aspect versionable applied to it, then multiple versions of the content can be managed. The VersionService provides
an API to allow you to do this programmatically:
createVersion this creates a new version of the referenced node which is placed at the end of the appropriate version history.
If the node has no version history then one is created and this version is considered to be the initial version.
getVersionHistory this gets the version history that relates to the node referenced.
deleteVersionHistory this deletes the version history for a versioned node.
getCurrentVersion gets the current version for a referenced node.
revert reverts the state of a referenced node to that of a previous node.
restore restores a previously deleted node from a version in its version history.
Tutorials Mass Nerder's Version Pruning tutorial [101] includes code and a video.
Alfresco Jared Ottley's Max Version Policy blog post [102] demonstrates using the VersionService from Java.
Developer
Blogs
Parent topic: Public Java API services [2]
WorkflowService
Provides a clientfacing API for interacting with Alfresco Workflows and Tasks.
Information WorkflowService
Support Full Support [7]
Status
Architecture Platform Architecture [39]
Information
Description The Activiti workflow engine is built into Alfresco ECM. You can create and manage workflows [103] directly from your Dashboard. Of
course, with the WorkflowService, you can create and manage these workflows programmatically. The default workflows OOTB are:
New Task
Assign a new task to yourself or a colleague
Review and approve (group review)
Assign a review task to a group
Review and Approve (one or more reviewers)
Assign a review task to multiple reviewers
Review and Approve (pooled review)
Assign a review task to multiple reviewers, who can take ownership of the task
Review and Approve (single reviewer)
Assign a review task to a single reviewer
Tutorials
Advanced Workflows using Activiti by Jeff Potts [107]
Alfresco workflow video by Joram Barrez [108]
Alfresco None
Developer
Blogs
Parent topic: Public Java API services [2]
Links:
[1] [Link]
[2] [Link]
[3] [Link]
[4] [Link]
[5] [Link]
[6] [Link]
[7] [Link]
[8] [Link]
[9] [Link]
[10] [Link]
[11] [Link]
[12] [Link]
[13] [Link]
[14] [Link]
[15] [Link]
[16] [Link]
[17] [Link]
[18] [Link]
[19] [Link]
[20] [Link]
[21] [Link]
[22] [Link]
[23] [Link]
[24] [Link]
[25] [Link]
[26] [Link]
[27] [Link]
[28] [Link]
[29] [Link]
[30] [Link]
[31] [Link]
[32] [Link]
[33] [Link]
[34] [Link]
[35] [Link]
[36] [Link]
[37] [Link]
[38] [Link]
[39] [Link]
[40] [Link]
[41] [Link]
[42] [Link]
[43] [Link]
[44] [Link]
[45] [Link]
[46] [Link]
[47] [Link]
[48] [Link]
[49] [Link]
[50] [Link]
[51] [Link]
[52] [Link]
[53] [Link]
[54] [Link]
[55] [Link]
[56] [Link]
[57] [Link]
[58] [Link]
[59] [Link]
[60] [Link]
[61] [Link]
[62] [Link]
[63] [Link]
[64] [Link]
[65] [Link]
[66] [Link]
[67] [Link]
[68] [Link]
[69] [Link]
[70] [Link]
[71] [Link]
[72] [Link]
[73] [Link]
[74] [Link]
[75] [Link]
[76] [Link]
[77] [Link]
[78] [Link]
[79] [Link]
[80] [Link]
[81] [Link]
[82] [Link]
[83] [Link]
[84] [Link]
[85] [Link]
[86] [Link]
[87] [Link]
[88] [Link]
[89] [Link]
[90] [Link]
[91] [Link]
[92] [Link]
[93] [Link]
[94] [Link]
[95] [Link]
[96] [Link]
[97] [Link]
[98] [Link]
[99] [Link]
[100] [Link]
[101] [Link]
[102] [Link]
[103] [Link]
[104] [Link]
[105] [Link]
[106] [Link]
[107] [Link]
[108] [Link]