An AMP project can be structured in any way that suits
the development environment. As long as the resulting AMP is packaged
correctly and the required property and context files are present,
the module installs successfully.
The recommended structure for an AMP project is as follows:
/source/java/<Java source files>
/source/web/<web UI sources such as JSPs, images, CSS,
and JavaScript>
/config/<configuration files and resources used by the module>
/build/<compiled class files>
/build/dist/<AMPs>
/build/lib/<JAR files>
The recommended package structure for Java source files, configuration files,
and resources is org.alfresco.module.<moduleid>,
where moduleid is the unique module identifier
defined in the module properties file. (See Creating the module properties file.)
Creating the module properties fileThe module properties file (module.properties) is used
by the module service to identify the module and its details when
it is installed. During development, you must place the module properties
file in the org.alfresco.module.<moduleid> package
since this will be its final location when it is installed in the
EAR file. You must extract the WAR from the EAR before packaging
the content. This location permits unit tests within Eclipse and
the embedded repository behaves as though the module is installed.
When you finally build the AMP, you must place the module properties
file at the root.
The module properties file is comprised of the following properties.
Property
|
Description
|
module.id
|
The unique identifier for the module. It
must be globally unique to prevent collisions with other modules.
For example, it can be named org.alfresco.module.RecordsManagement.
You can rename a module using the alias mechanism. Module identifiers
can contain a-z, A-Z, 0-9, spaces, minuses, and underscores.
|
module.version
|
The current module version, which helps
identify whether the module is a new installation or an update to
an existing installation of a previous version. The version number must
be comprised of numeric values separated by dots. For example, 2.1.56 is
a valid version, but 2.3.4a is not valid.
|
module.title
|
The module title.
|
module.description
|
The module description.
|
module.aliases
|
(Optional) Additional names for the module.
When a module is renamed, you must add the original name to the
list of aliases to ensure that the module tool and repository correctly
match the new name to one of the old names.
|
module.depends
|
(Optional) Versions on which the module
depends. When one module is installed, it can be necessary to install
additional modules and that a specific version, set of versions,
or range of versions be present. The dependency is satisfied if
the installed version of the dependency matches any of the specified
ranges or versions.
For example, module.depends.X=* indicates
that any version of X must be installed, module.depends.Y=1.0, 1.5, 2.0 indicates
that version 1.0, 1.5, or 2.0 of Y must be installed, and module.depends.Z=*-0.9.9 indicates
that any version of Z less than 1.0 must be installed.
|
Creating a module properties fileThe following module.properties
file contains the module identifier, version, title, and description.
# SDK Sample module
module.id=sdkDemoAmp
module.title=SDK Demo AMP Project
module.description=Skeleton demo project to build an amp file
module.version=1.0
Creating the module context fileA module is initialized when the Content Services (deprecated) repository
loads the root Spring configuration for that module. When the module
service is initialized, all of the module context configurations
are loaded.
The root Spring configuration contains new bean definitions,
custom content models, client configurations, or data to be loaded
or patched. In a large module, the configuration can be split into
smaller Spring configurations that are included by the module context
file.
The module context file must be placed in the org.alfresco.module.<moduleid> package
and must be named module-context.xml, as shown in the following
example.
Creating the module context fileThis example refers to an imported
file called service-context.xml.
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<import resource="classpath:alfresco/module/sdkDemoAmp/context/service-context.xml" />
</beans>
Importing a Spring configurationThe following code represents the
imported contents of the service-context.xml file. Note that it
uses two classes called Demo and DemoComponent.
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<!-- A simple class that is initialized by Spring -->
<bean id="sdk.demoAmp.exampleBean" class="org.alfresco.module.sdkdemoamp.Demo" init-method="init" />
<!-- A simple module component that will be executed once -->
<bean id="sdk.demoAmp.exampleComponent" class="org.alfresco.module.sdkdemoamp.DemoComponent" parent="module.baseComponent" >
<property name="moduleId" value="sdkDemoAmp" /> <!-- See module.properties -->
<property name="name" value="exampleComponent" />
<property name="description" value="A demonstration component" />
<property name="sinceVersion" value="1.0" />
<property name="appliesFromVersion" value="1.0" />
</bean>
</beans>
Beans used by a Spring configurationThe Demo class
prints a message to the console when it is initialized, and the DemoComponent class
is executed once during module initialization.
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.module.sdkdemoamp;
/**
* This class does nothing except dump some output to <i>system.out</i>.
*
* @author Derek Hulley
*/
public class Demo
{
public void init()
{
System.out.println("SDK Demo AMP class has been loaded");
}
}
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.module.sdkdemoamp;
import org.alfresco.repo.module.AbstractModuleComponent;
/**
* A basic component that will be started for this module.
*
* @author Derek Hulley
*/
public class DemoComponent extends AbstractModuleComponent
{
@Override
protected void executeInternal() throws Throwable
{
System.out.println("DemoComponent has been executed");
}
}
|
|
|