Compare commits

..

192 Commits

Author SHA1 Message Date
alfresco-build
862c998542 [maven-release-plugin] prepare release alfresco-sdk-aggregator-4.0.0-beta-1 2019-01-11 12:06:33 +00:00
Jose Luis Osorno
29fdb576ab Fix javadoc errors
- Fix the javadoc error raised by the javadoc-maven-plugin.
- Configure the javadoc-maven-plugin to accept custom javadoc annotations
from maven mojo development.
2019-01-11 12:37:33 +01:00
Jose Luis Osorno
271ba3977f Fix javadoc errors
Fix the javadoc error raised by the javadoc-maven-plugin.
2019-01-11 12:10:12 +01:00
alfresco-build
a1cbc0687d [maven-release-plugin] prepare for next development iteration 2019-01-11 10:49:52 +00:00
alfresco-build
408fda1fd3 [maven-release-plugin] prepare release alfresco-sdk-aggregator-4.0.0-beta-1 2019-01-11 10:49:45 +00:00
Ole Hejlskov
4b98ff5846 Merge pull request #517 from Alfresco/sdk-4/it-logs
Archetypes - Add IT logs
2019-01-11 10:48:47 +01:00
Jose Luis Osorno
49b489f181 Archetypes - Change log message to trace
Change the log message showing the environment variables of the
ProcessBuilder to trace.
2019-01-10 07:36:16 +01:00
Jose Luis Osorno
424e6a5a26 Archetypes - Fix batch scripts 2019-01-10 07:35:55 +01:00
Jose Luis Osorno
a2b5e64848 Archetypes - Fix bash scripts 2019-01-09 20:39:52 +01:00
Jose Luis Osorno
6ae42f8fc0 Archetypes - Improve mvn executable localisation
Change the run script to use M2_HOME environment variable if it is
set to locate the mvn executable. If it is not set, then the script
uses a plain mvn command. So if the M2_HOME env variable is not set,
then the mvn executable must be in the path.
2019-01-09 19:27:41 +01:00
Ole Hejlskov
c2ab1cf80a Merge branch 'sdk-4/it-logs' of https://github.com/Alfresco/alfresco-sdk into sdk-4/it-logs 2019-01-09 18:58:03 +01:00
Ole Hejlskov
c7c4c49446 Try to force a Maven path from M2_HOME 2019-01-09 18:57:38 +01:00
Jose Luis Osorno
efbfc8fbba Archetypes - Modify AbstractArchetypeIT to print error output
Modify AbstractArchetypeIT to print the rror output as well as the standard
output in the execution of the integration tests.
2019-01-09 18:37:27 +01:00
Jose Luis Osorno
6e5bf3a757 Archetypes - Add extra information in sh script 2019-01-09 18:27:40 +01:00
Jose Luis Osorno
4722c14121 Archetypes - Add logs to archetype ITs
Add more logs with the result of the execution of the projects
generation and building in the archetype ITs.
2019-01-09 17:44:18 +01:00
Jose Luis Osorno
d2c4dcc015 Archetypes - Add logs to build_test task in scripts
Modify the run scripts to add docker-compose tail to the build_test
task in order to have more context of the execution of the tests in
docker.
2019-01-09 17:43:09 +01:00
Ole Hejlskov
f0e604bd8c Merge pull request #516 from Alfresco/sdk-4/it-verifier-archetypes
Archetypes - New ITs approach
2019-01-04 11:30:58 +01:00
Jose Luis Osorno
50c5c82f36 Archetypes - Add post archetype generate scripts
Add post archetype generate groovy scripts to add exec permission to the bash
runner script in the repo jar and share jar archetypes.
2018-12-27 07:34:57 +01:00
Jose Luis Osorno
fff6bc4a41 Archetypes - Remove unnecessary dependency
Remove maven verifier dependency from the AIO archetype. It is only required
in the integration tests module.
2018-12-27 07:25:30 +01:00
Jose Luis Osorno
c9a991698d Archetypes - Add purge in AIO IT
Add a purge step before executing the build_test goal in the AIO project
to avoid old data fails the tests.
2018-12-26 13:03:34 +01:00
Jose Luis Osorno
97f0ea6119 Archetypes - Integration tests verifier approach
New approach for the execution of the ITs for the archetypes. It uses the
maven verifier component to generate the project from the archetype and
afterwards execute the required goal/s and check the results.

This approach works properly in windows in contrast to the default archetypes
ITs mechanism, which failed executing the runner script.
2018-12-26 11:19:11 +01:00
Jose Luis Osorno
7bf16b467b Archetypes - Add test profiles
Add a couple of profiles for archetypes integration tests.
+ docker-toolbox -> Sets the java system property with the ACS endpoint.
+ enterprise-60-tests -> Sets the properties to use the 6.0 enterprise jars
and docker images in the integration tests.
2018-12-26 11:15:22 +01:00
Jose Luis Osorno
29c6a08066 Archetypes - Refactor AIO integration tests
Refactor the AIO project integration tests to take into account the system
property added to set the ACS endpoint in case it is required (docker toolbox).
2018-12-26 11:13:49 +01:00
Jose Luis Osorno
00839a8170 Archetypes - Remove unnecessary test files
Remove archetype test files not required with the new integration tests
approach we're following for the archetype tests.
2018-12-26 11:11:47 +01:00
Jose Luis Osorno
646899610d Test with maven verifier - WIP 2018-12-21 12:38:23 +01:00
Jose Luis Osorno
126d31646e Merge pull request #514 from Alfresco/sdk-4/documentation
Archetypes - Update README files
2018-12-20 16:13:52 +01:00
Jose Luis Osorno
4c2ac6db7d Archetypes - Update README files
Update the README files of the archetypes with the new approach of the
Alfresco SDK.
2018-12-20 15:39:54 +01:00
Jose Luis Osorno
6cd3e0c0c2 Merge pull request #513 from Alfresco/sdk-4/archetypes-docker
Archetypes - Fixes after testing
2018-12-20 14:57:21 +01:00
Jose Luis Osorno
c6fbb76a39 Share archetype - Fix test task in script
Fix the test task in the scripts to remove the unrequired pl parameter.
2018-12-20 11:54:44 +01:00
Jose Luis Osorno
706a6c2ccd Share archetype - Fix module sub-directory name
Fix the name of the module sub-directory in the resources of the project.
2018-12-20 11:53:30 +01:00
Jose Luis Osorno
c2f94e35bd Merge pull request #512 from Alfresco/sdk-4/archetypes-docker
Archetypes - Several improvements
2018-12-20 08:59:58 +01:00
Jose Luis Osorno
8dd1ba923a Archetypes - Change docker volume names
Modify the docker volume names to be dependant of the name of
the project. This way, we can avoid issues with docker volume
name clashes with other projects that were generated with the
SDK.
2018-12-20 08:55:15 +01:00
Jose Luis Osorno
0d158017e4 Archetypes - Fix integration tests
Fix the integration tests for the archetypes and update the version
to ACS 6. The integration tests must be enhanced to enable more checks
and not only the packaging of the created project without any test
execution.
2018-12-20 08:20:51 +01:00
Jose Luis Osorno
2c9fc00ea4 Archetypes - Properly align community versions
Change the share version to be properly aligned with the platform version.
2018-12-19 17:54:34 +01:00
Jose Luis Osorno
32a27e4f53 Archetypes - disable CSRF filter ACS
Disable the CSRF filter in ACS containers.
2018-12-19 17:38:59 +01:00
Jose Luis Osorno
0577fcc168 Merge pull request #511 from Alfresco/sdk-4/archetypes-docker
Archetypes - Switch to docker environment
2018-12-19 16:27:53 +01:00
Jose Luis Osorno
c4dd6b01e6 Archetypes - Add properties to configure versions
Add properties to configure the versions of ACS and Share to be used
in the archetypes.
2018-12-19 16:06:27 +01:00
Jose Luis Osorno
eae6c13de5 Share archetype - Switch to docker environment
Change the platform project to add the required configuration to execute it
as an orchestrated docker environment that includes ACS (optional), Share,
PostgreSQL and ASS. This will replace the use of the Alfresco Maven Plugin.

New bash scripts has been added to manage the docker environment.
A new docker-compose file configure the docker environment.
All the unnecessary files and configuration have been removed from the archetype.
2018-12-19 15:35:04 +01:00
Jose Luis Osorno
0ca57b20a1 Platform archetype - Make share container optional
Comment out the share container in the docker-compose file because
it is optional in this archetype.
2018-12-19 14:20:21 +01:00
Jose Luis Osorno
82cb58f472 Platform archetype - Switch to docker environment
Change the platform project to add the required configuration to execute it
as an orchestrated docker environment that includes ACS, Share (optional),
PostgreSQL and ASS. This will replace the use of the Alfresco Maven Plugin.

New bash scripts has been added to manage the docker environment.
A new docker-compose file configure the docker environment.
All the unnecessary files and configuration have been removed from the archetype.
2018-12-19 14:13:48 +01:00
Jose Luis Osorno
779d53a051 AIO archetype - Switch to docker environment
Change the AIO project to add the required configuration to execute it
as an orchestrated docker environment that includes ACS, Share, PostgreSQL
and ASS. This will replace the use of the Alfresco Maven Plugin.

New bash scripts has been added to manage the docker environment.
A new docker-compose file configure the docker environment.
New docker aggregator modules has been created for platform and share.
All the unnecessary files and configuration have been removed from the archetype.
2018-12-19 12:05:30 +01:00
Ole Hejlskov
5a35c948ca Merge pull request #510 from Alfresco/sdk-4/acs-endpoint-property
Look for custom java system property for alfresco location
2018-12-18 12:47:07 +01:00
Jose Luis Osorno
42a4805d93 Look for custom java system property for alfresco location
Modify the Alfresco RAD module to check for the java system property acs.endpoint.path
as an alternative for the default location of alfresco which is http://localhost:8080/alfresco.

This is useful to avoid connection refuse when starting ACS 6 as a container in a windows
machine with Docker Toolbox, which exposes the containers through a custom IP instead of
localhost.
2018-12-18 12:11:00 +01:00
Ole Hejlskov
3873d2907e Added bom property 2018-11-15 11:30:28 +01:00
Ole Hejlskov
86049b91bf Merge pull request #508 from it-novum/sdk-4.0_version_Bump
Bumping version number to 4.0 for documentation + descriptions
2018-11-12 11:56:22 +01:00
Fabian Fritz
1fb478e77a Bumping version number to 4.0 for documenation + descriptions 2018-11-12 11:48:15 +01:00
Ole Hejlskov
f023ca2878 Merge pull request #507 from it-novum/sdk-4.0_version_Bump
Bump version to 4.0.0
2018-11-09 22:16:05 +01:00
Fabian Fritz
c84d0d4c87 Bump version to 4.0.0 2018-11-09 15:49:00 +01:00
Ole Hejlskov
d268c20c3a More clean up, fix AIO 2018-10-05 16:20:56 +02:00
Ole Hejlskov
5291dc6e97 More clean up regarding Solr and H2/other databases 2018-10-05 15:46:15 +02:00
Ole Hejlskov
697ab7c3ec Clean up poms and make compatible with ACS6 2018-10-05 15:23:50 +02:00
Ole Hejlskov
52a6938a66 Remove Solr and custom databases (including H2) from the plugin. This now requires these services to be available externally 2018-10-05 15:21:13 +02:00
Ole Hejlskov
7edac56eed Remove DB specific properties 2018-10-05 12:13:49 +02:00
Ole Hejlskov
fa828dede5 Remove Activiti experiments 2018-10-05 10:40:22 +02:00
Ole Hejlskov
f5e3552283 Merge pull request #500 from fcorti/patch-1
Typo in description.
2018-09-18 13:11:05 +02:00
Ole Hejlskov
ab9f384830 Merge pull request #505 from melahn/master
Updated the readme to bring it up-to-date.  See Issue #396
2018-09-18 13:10:42 +02:00
Gregory Melahn
dced89eda6 Updated the readme to bring it up-to-date. See Issue #396 2018-09-13 16:16:19 -04:00
Francesco Corti
3bced985d6 Typo in description.
Suggested from the Community.
(thank you Digicat and Yreg)
2018-06-04 10:07:50 +02:00
Ole Hejlskov
865ae6fd38 Merge pull request #484 from marsv024/runtest_saxparseexception
Fix null check to work with assertEqual-failures and exception messages containing reserved xml characters
2017-11-09 16:49:41 +01:00
Marcus Svartmark
017dfcbff8 Fix null check to work with assertEqual-failures and exception messages containing reserved xml characters 2017-11-09 16:32:35 +01:00
Ole Hejlskov
c25417e702 Deprecate Activiti features. See #481 for more info 2017-09-22 16:40:51 +02:00
Ole Hejlskov
448b5c2929 Merge pull request #475 from tom-vandepoele/master
Feature request: adding support for custom solr config #474
2017-09-22 09:31:43 +01:00
Ole Hejlskov
ab29cc53fa Merge pull request #477 from nklomp/master
Nullpointer in code crashes Freemarker evaluation within Integration Testing
2017-09-22 09:24:50 +01:00
nklomp
228a98c566 Message of Failure delegates to getMessage() of the throwable which can be null in some cases (Nullpointer for instance) causing the Freemarker template evaluation to fail which in turn hides the real problem in the integration test 2017-07-09 19:05:05 +02:00
Tom.Vandepoele
82b7886a51 Feature request: adding support for custom solr config #474 2017-06-29 15:15:54 +02:00
Ole Hejlskov
012dc70f43 Update with 3.0.1 release info 2017-06-23 11:29:07 +02:00
alfresco-build
b8377041a5 [maven-release-plugin] prepare for next development iteration 2017-06-23 10:17:52 +01:00
alfresco-build
9071965850 [maven-release-plugin] prepare release alfresco-sdk-aggregator-3.0.1 2017-06-23 10:17:47 +01:00
Ole Hejlskov
1e5db412f7 Tidy up fixes for #461 2017-06-22 12:13:28 +02:00
Ole Hejlskov
37c26cfaa8 Correctly configure the artifact id for alfresco-platform, reported in #461
This also raises questions around the use of <alfresco.platform.war.artifactId />
since this will never have any effect currently
2017-04-21 18:21:41 +02:00
Ole Hejlskov
1cd4b82037 Revert MMT dependency version 2017-04-21 17:36:06 +02:00
Ole Hejlskov
758ab83faf Merge pull request #459 from douglascrp/201702-GA_and_fixes
Solution for #458 and #454
2017-04-21 11:49:13 +02:00
Douglas C. R. Paes
8862d67acd Rolled back the api-explorer version as there is no 5.2.f version yet. 2017-04-20 16:41:49 -03:00
Douglas C. R. Paes
e4402a741f plataform and share dependencies upgraded to match the latest GA release, which is 201702-GA 2017-04-20 16:04:44 -03:00
Douglas C. R. Paes
b1facc65de gitignore 2017-04-20 16:03:12 -03:00
Ole Hejlskov
7668096829 Grab fix from #449 for 5.2.f support 2017-04-10 11:15:25 +02:00
Ole Hejlskov
ce7c374c1e Remove beta-reference in name tag in archetype poms. Fixes #446 2017-04-05 16:30:03 +02:00
Ole Hejlskov
68dda3b211 Fix endpoint url to avoid "Share services" error and fix CMM. Fixes #445 2017-04-05 16:26:41 +02:00
alfresco-build
47a329a762 [maven-release-plugin] prepare for next development iteration 2017-03-30 11:12:25 +01:00
alfresco-build
3ae8d043aa [maven-release-plugin] prepare release alfresco-sdk-aggregator-3.0.0 2017-03-30 11:12:20 +01:00
Ole Hejlskov
ba36d1ad5e Update readme 2017-03-30 10:25:59 +01:00
Ole Hejlskov
f54fb5e3d3 Update site, still work in progress 2017-03-27 13:28:44 +02:00
Ole Hejlskov
1a8d8b76b6 Properly separate enterprise tests, execute with correct share version 2017-03-27 11:27:09 +02:00
Ole Hejlskov
55ac6917b7 Merge branch 'master' into sdk-3.0 2017-03-27 09:58:49 +02:00
Ole Hejlskov
993d5dcefe Add archetype tests for 4.2, 5.0 and 5.1 2017-03-24 20:33:07 +01:00
Ole Hejlskov
0411bc5b1d Redo enterprise tests for the archetypes. When running "mvn clean install" only archetype tests for community edition.
Enabling the enterprise-tests profile will run all the tests
2017-03-24 16:49:13 +01:00
Ole Hejlskov
07bb743cfd Tidy up default pom 2017-03-24 15:09:59 +01:00
Ole Hejlskov
ccb9f3d86f Merge branch 'sdk-3.0' of https://github.com/Alfresco/alfresco-sdk into sdk-3.0 2017-03-24 14:51:19 +01:00
Ole Hejlskov
aebda9bf06 Move alfrescoEdition / maven.alfresco.edition up 2017-03-24 14:50:33 +01:00
Samuel Langlois
b7dbbe8995 Downgrade alfresco-mmt dependency to 5.1.g, for plugin to work with JDK7 2017-03-23 17:17:55 +00:00
Samuel Langlois
c9b33b4f59 #443 Upgrade Maven plugins and dependencies 2017-03-23 16:08:31 +00:00
Ole Hejlskov
93dde46f51 Deploy default webapp to / which enables an index.html (for AIO) to point to the services (#434) 2017-03-23 16:40:29 +01:00
Ole Hejlskov
addbc750c4 Merge pull request #438 from jgoldhammer/sdk-3.0
fixes(spring): use xml schema instead of dtd
2017-03-23 16:23:15 +01:00
Ole Hejlskov
e302055caf Merge branch 'sdk-3.0' into sdk-3.0 2017-03-23 16:23:05 +01:00
Ole Hejlskov
3b7e32df20 Initial fix for archetype tests 2017-03-23 16:08:35 +01:00
Ole Hejlskov
8178eac5b8 Remove debugging for cleaner test run 2017-03-23 11:54:33 +01:00
Ole Hejlskov
b5ec7b415d Add default hotswap agent to platform jar archetype. Enable integration testing on the archetype as well 2017-03-23 10:55:58 +01:00
Ole Hejlskov
278ba7f600 Comment out AMP assembly by default 2017-03-22 22:35:02 +01:00
Ole Hejlskov
fef948b982 Bring back resources plugin to archetype, otherwise test-resources get added too late 2017-03-22 21:27:17 +01:00
Ole Hejlskov
245a51402d Close the loop on 4.2 support and Solr 2017-03-22 21:07:17 +01:00
Ole Hejlskov
3630cced6d Remove references to buildonly 2017-03-20 16:29:02 +01:00
Ole Hejlskov
892920c114 Add hotswap-agent.properties for both platform and share jars 2017-03-20 15:23:52 +01:00
Ole Hejlskov
24500024ed Add integration-test module as a dependency for the platform war and include it to allow remote execution 2017-03-10 16:46:35 +01:00
Ole Hejlskov
85c7e11bb6 Make port configurable and dynamic 2017-03-09 16:44:22 +01:00
Martin Bergljung
aede276f9b Made sure alfresco:run can be executed without interference from alfresco:it,#401 2017-02-28 08:14:27 +00:00
Martin Bergljung
264d326bf2 Removed assembly/lib dir and associated descriptor config, picked up from dependency config 2017-02-23 11:57:35 +00:00
Martin Bergljung
d2868bdfae Added integration-tests subproject to AIO, #401 2017-02-23 09:53:13 +00:00
Martin Bergljung
673461b6e2 Fixed hard-coded bean ID in DemoComponentIT, #401 2017-02-17 16:07:25 +00:00
Martin Bergljung
6f1d01394d Initial check-in of Bindu's AlfrescoTestRunner frameowork plus sample tests, #401 2017-02-16 10:45:51 +00:00
Martin Bergljung
f5404b9d40 Updated to latest GA 5.2 libs, #439 2017-02-01 12:48:14 +00:00
Jens Goldhammer
e6394e25b7 fixes(spring): use xml schema instead of dtd
also increased xsd to spring version 3.0

fixes #429
2016-11-26 22:35:26 +01:00
Ole Hejlskov
0fd842192b Merge pull request #435 from Alfresco/github-issuetemplate
chore(github) : new github issue template
2016-11-23 20:38:41 +01:00
Jens Goldhammer
be8e10a556 chore(github) : new issue template
This commit provides an issue template which will be used when users will report a bug or suggest a new feature.
This should help to provide better and quicker support for the reported issues of alfresco SDK.
2016-11-23 20:28:55 +01:00
Martin Bergljung
3031b401a2 Fix logging for Share extensions, #418 2016-10-10 13:31:51 +01:00
Martin Bergljung
723b309670 Added validation of existence of alfresco-global-*.properties files, #416 2016-10-10 10:10:48 +01:00
Martin Bergljung
051e967240 Merge branch 'sdk-3.0' of https://github.com/Alfresco/alfresco-sdk into sdk-3.0 2016-10-10 09:06:35 +01:00
Martin Bergljung
1f46a9e2ff Added the possibility to use custom context path for Share, #417 2016-10-10 09:06:19 +01:00
alfresco-build
3cbdb5dc8e [maven-release-plugin] prepare for next development iteration 2016-10-05 09:51:22 +01:00
alfresco-build
07543c68d3 [maven-release-plugin] prepare release alfresco-sdk-aggregator-3.0.0-beta-5 2016-10-05 09:51:19 +01:00
Martin Bergljung
a07219e6e6 Support for custom webapps and sysprops, #412,#413 2016-10-03 12:05:39 +01:00
Martin Bergljung
4e26291761 Merge branch 'sdk-3.0' of https://github.com/Alfresco/alfresco-sdk into sdk-3.0 2016-09-30 12:10:54 +01:00
Martin Bergljung
c2ac314930 Initial check-in of Activiti JAR module, #410, #415 2016-09-30 12:10:35 +01:00
alfresco-build
08acf1f433 [maven-release-plugin] prepare for next development iteration 2016-09-23 10:02:48 +01:00
alfresco-build
b9331c365f [maven-release-plugin] prepare release alfresco-sdk-aggregator-3.0.0-beta-4 2016-09-23 10:02:44 +01:00
Ole Hejlskov
63bd9a63c0 Remove sources and javadoc plugin. This is already handled by the release plugin 2016-09-23 10:56:47 +02:00
alfresco-build
f1dbb608d9 [maven-release-plugin] prepare for next development iteration 2016-09-23 09:40:38 +01:00
alfresco-build
657d16b91c [maven-release-plugin] prepare release alfresco-sdk-aggregator-3.0.0-beta-4 2016-09-23 09:40:34 +01:00
alfresco-build
7739556c94 [maven-release-plugin] prepare for next development iteration 2016-09-23 09:14:01 +01:00
alfresco-build
d7b0805cef [maven-release-plugin] prepare release alfresco-sdk-aggregator-3.0.0-beta-4 2016-09-23 09:13:57 +01:00
Martin Bergljung
0b8db99cd8 Added debug.* scripts 2016-09-19 14:45:25 +01:00
Martin Bergljung
eba635c8f8 All logging controlled by src/test/resources/alfresco/extension/dev-log4j.properties, #392 2016-09-19 14:13:36 +01:00
Martin Bergljung
2782f30a42 Improved support for using different databases, #400 2016-09-16 17:53:08 +01:00
Samuel Langlois
a32a537206 internal-release profile allows publishing release in our Nexus repo 2016-09-15 17:01:08 +01:00
Martin Bergljung
49160034cf Upgraded to Community release 201609 EA and added API Explorer app to AIO and Platform module, #402 2016-09-15 14:08:03 +01:00
Martin Bergljung
50dac567c2 Added filtering of web resources added to AMP, #409 2016-09-15 12:58:08 +01:00
Martin Bergljung
9a7630acfb Added excludes for resource filtering, so we don't filter for example FTL, #407 2016-09-15 11:33:37 +01:00
Martin Bergljung
be11344137 Switched to props config for compiler plugin, #404 2016-09-14 10:14:19 +01:00
Martin Bergljung
db9d7d637c Add compiler plugin and set Java 7, #404 2016-09-14 09:12:34 +01:00
Martin Bergljung
04fe0678d7 Support for MySQL, PostgreSQL, and custom Tomcat dependencies, #400 2016-09-12 16:57:02 +01:00
Martin Bergljung
b46f173fb4 Added WAR artifact id property to platform jar project, #403 2016-09-12 14:09:05 +01:00
Martin Bergljung
d69f7e4937 Added private/enterprise repo to POMs, #394 2016-09-12 11:31:23 +01:00
Martin Bergljung
788347a5dd Support for overriding out-of-the-box web resources and including 3rd party libs, #389 2016-09-07 11:28:40 +01:00
Martin Bergljung
d6f11dd977 Added license directory placeholders 2016-09-06 09:50:39 +01:00
Martin Bergljung
f0955cff98 Changed where Enterprise license should be located, #395 2016-09-06 09:19:34 +01:00
Martin Bergljung
05b2cfbb1e Fix so JAR project files are not duplicated in WAR, #391 2016-09-05 15:23:53 +01:00
alfresco-build
558d4b422c [maven-release-plugin] prepare for next development iteration 2016-09-05 14:35:29 +01:00
alfresco-build
d040ceb60d [maven-release-plugin] prepare release alfresco-sdk-aggregator-3.0.0-beta-3 2016-09-05 14:35:25 +01:00
alfresco-build
a8db2ddde0 [maven-release-plugin] prepare for next development iteration 2016-09-05 14:25:15 +01:00
alfresco-build
c9d1878cb9 [maven-release-plugin] prepare release alfresco-sdk-aggregator-3.0.0-beta-3 2016-09-05 14:25:02 +01:00
Martin Bergljung
99c0a14220 Fix loading from META-INF in JAR, such as share-config-custom.xml, fix loading of resources such as /alfresco/test.html, #388 2016-08-26 09:12:17 +01:00
alfresco-build
6a1b09c102 [maven-release-plugin] prepare for next development iteration 2016-08-25 18:56:03 +01:00
alfresco-build
3010c9773a [maven-release-plugin] prepare for next development iteration 2016-03-03 17:01:35 +00:00
alfresco-build
b7fff632e7 [maven-release-plugin] prepare release alfresco-sdk-aggregator-2.2.0 2016-03-03 17:01:29 +00:00
Ole Hejlskov
5b3b5d3914 Bump version down to 2.2.0-SNAPSHOT 2016-03-03 17:04:19 +01:00
Martin Bergljung
9b5db76577 Fix for share-amp/run.bat 2016-03-03 15:59:52 +00:00
Ole Hejlskov
43ad42aac8 Merge pull request #367 from jphuynh/master
Logo image source link was dead. Fixed that to use the logo published…
2016-03-03 16:33:35 +01:00
Jean-Pierre Huynh
9c5f1e9e0d Logo image source link was dead. Fixed that to use the logo published on wiki.alfresco.com. 2016-03-03 14:23:12 +00:00
alfresco-build
c46b0b86d2 [maven-release-plugin] prepare for next development iteration 2016-03-03 11:39:37 +00:00
alfresco-build
99031d5def [maven-release-plugin] prepare release alfresco-sdk-aggregator-2.2.0 2016-03-03 11:39:32 +00:00
Ole Hejlskov
0bdacc4787 Realign ID's for authentication with Nexus 2016-03-03 11:53:40 +01:00
Ole Hejlskov
b6e170a0ce Remove 5.1 EA repositories 2016-03-03 11:40:19 +01:00
Ole Hejlskov
a37b121cb6 Add Alfresco REST API Explorer, see #366 for more details 2016-03-03 11:12:10 +01:00
Martin Bergljung
c7591ca848 #364 2016-02-29 16:35:43 +00:00
Martin Bergljung
54a067325a #356 - minor fix in run.bat 2016-02-29 15:32:31 +00:00
Martin Bergljung
ceed7af6fe #356 2016-02-29 15:14:15 +00:00
Martin Bergljung
377aaa5459 #355 2016-02-29 11:27:04 +00:00
Martin Bergljung
b226302572 Merge pull request #331 from Alfresco/slanglois-issue-298
#298 Define argLine as a property, not in surefire
2016-02-29 09:18:08 +00:00
Martin Bergljung
876f6286fc Bring branch up to date 2016-02-29 09:16:50 +00:00
Martin Bergljung
5d59d6cd27 Added back Spring Loaded when running Share AMP 2016-02-29 08:58:22 +00:00
Martin Bergljung
6d4b901129 Merge pull request #359 from loftuxab/utf8-url-fix
The current configuration doesn't encode url:s tomcat7-maven-plugin.
2016-02-29 08:23:47 +00:00
Peter Löfgren
0854929d99 The current configuration doesn't encode url:s properly and this breaks any pages/webscripts that uses parameters that contains non us-ascii characters. Adding the uriEncoding solves this. 2016-02-19 12:39:22 +01:00
alfresco-build
8415da72b0 [maven-release-plugin] prepare for next development iteration 2016-02-04 10:41:55 +00:00
alfresco-build
14cd4be39c [maven-release-plugin] prepare release alfresco-sdk-aggregator-2.2.0-beta-1 2016-02-04 10:41:50 +00:00
Ole Hejlskov
f2f5698a3b Remove double activation tag from pull request #352 2016-02-04 11:00:46 +01:00
Ole Hejlskov
5b83b99549 Merge pull request #352 from michaeljmuller/master
change activation of enforce-sdk-rules so it's *really* on by default, as intended
2016-02-04 10:54:24 +01:00
Ole Hejlskov
181951ed99 Add MAVEN_OPTS that are compatible with JDK7 but comment out by default. See DEVPLAT-456 for more info 2016-02-04 10:50:21 +01:00
Ole Hejlskov
a4711142e6 Merge pull request #354 from michaeljmuller/chmod
make run.sh executable during the "validation" phase of the build
2016-02-04 10:39:06 +01:00
Michael Muller
78d1466220 make run.sh executable during the "validation" phase of the build 2016-02-03 12:00:13 -07:00
Michael Muller
d99539c9b0 change activation of enforce-sdk-rules so it's *really* on by default, as intended 2016-02-03 11:37:34 -07:00
Ole Hejlskov
30bfc14422 Fix escaping 2016-01-29 10:57:27 +01:00
Martin Bergljung
641aa6bb8e DEVPLAT-440 2016-01-25 14:37:57 +00:00
Ole Hejlskov
f031c76a41 Add JS to the nonFilteredFileExtension list. See #254 for more info 2016-01-22 16:12:30 +01:00
Ole Hejlskov
2ad03e3f5c Bump version to 2.2.0-SNAPSHOT 2016-01-22 16:05:37 +01:00
Martin Bergljung
7275ba32e8 DEVPLAT-452 2016-01-22 08:26:23 +00:00
Samuel Langlois
9bf50267dd Housekeeping: upgrading versions of dependencies and Maven plugins 2016-01-21 12:22:51 +00:00
Martin Bergljung
bbe3de2abb DEVPLAT-444 2016-01-21 11:26:15 +00:00
Samuel Langlois
5c01e8127c Change <id> of temporary Maven Repo hosting 5.1-EA, to fix CI 2016-01-21 11:20:35 +00:00
Martin Bergljung
9a1b97e64d DEVPLAT-442 2016-01-21 10:34:36 +00:00
Martin Bergljung
b3955a1b4f DEVPLAT-443 2016-01-20 10:41:06 +00:00
Martin Bergljung
2e546a1cae DEVPLAT-445 2016-01-20 10:18:04 +00:00
Martin Bergljung
9dd9f530bb DEVPLAT-333, DEVPLAT-435, DEVPLAT-436, DEVPLAT-437, DEVPLAT-438, DEVPLAT-439, DEVPLAT-447 2016-01-12 15:14:53 +00:00
Samuel Langlois
3e7a6d83a9 #298 Define argLine as a property, not in surefire
Allows other plugins (such as JaCoCo) to tune the argLine parameters of the JVM forked by surefire
2015-09-16 17:03:40 +01:00
174 changed files with 7865 additions and 3863 deletions

1
.gitignore vendored
View File

@@ -12,3 +12,4 @@ pom.xml.next
release.properties
**.settings
**bin
*.DS_Store

67
ISSUE_TEMPLATE.md Normal file
View File

@@ -0,0 +1,67 @@
<!--
If you are reporting a new issue, make sure that we do not have any duplicates
already open. You can ensure this by searching the issue list for this
repository. If there is a duplicate, please close your issue and add a comment
to the existing issue instead.
If you suspect your issue is a bug, please edit your issue description to
include the BUG REPORT INFORMATION shown below. If you fail to provide this
information within 7 days, we cannot debug your issue and will close it. We
will, however, reopen it if you later provide the information.
---------------------------------------------------
GENERAL SUPPORT INFORMATION
---------------------------------------------------
The GitHub issue tracker is for bug reports and feature requests.
General support can be found at the following locations:
- Alfresco Community - https://community.alfresco.com/community/ecm
- Post a question on StackOverflow, using the Alfresco tag
-->
## I'm submitting a ... (check one with "x")
```
[ ] bug report => search github for a similar issue or PR before submitting
[ ] feature request
```
<!--- Provide a general summary of the issue in the Title above -->
## Expected Behavior
<!--- If you're describing a bug, tell us what should happen -->
<!--- If you're suggesting a change/improvement, tell us how it should work -->
## Current Behavior
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
<!--- or ideas how to implement the addition or change -->
## Steps to Reproduce (for bugs)
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
5.
## Context
<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Your Environment
<!--- Include as many relevant details about the environment you experienced the bug in -->
* Alfresco SDK version used: <!-- 2.1 / 2.2 / 3.0betaX-->
* Alfresco version used: <!-- Enterprise 5.1, Community 5.0.f or ...-->
* Output of command 'mvn -version': <!-- Maven/JDK version-->
* Link to your project: <!-- optional for having a minimal example-->
## Additional information
<!-- include screenshots or any other hint you mave have for us -->

View File

@@ -1,57 +1,59 @@
# [![Alfresco SDK logo](https://github.com/Alfresco/alfresco-sdk/raw/master/src/site/resources/img/alfresco-maven-logo.jpg)](#features) Alfresco SDK
This is the home of the Alfresco SDK. The Alfresco SDK is used by developers to build extensions for the Alfresco content management system. It is based on [Apache Maven](http://maven.apache.org/), compatible with major IDEs and enables Rapid Application Development (RAD) and Test Driven Development (TDD).
This is the home of the Alfresco SDK. The Alfresco SDK is used by developers to build extensions for the Alfresco Digital Business Platform. It is based on [Apache Maven](http://maven.apache.org/), compatible with major IDEs and enables Rapid Application Development (RAD) and Test Driven Development (TDD).
## License
This project is released under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html). If you are an Enterprise customer check the [Support](#alfresco-enterprise-customers-and-partners-support) section.
This project is released under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) license.
If you are an Enterprise customer check the [Support](#alfresco-enterprise-customers-and-partners-support) section.
## News
- 2015-10-19: SDK 2.1.1 released to Maven Central. Docs for [Community](http://docs.alfresco.com/community/concepts/alfresco-sdk-intro.html), [Enterprise](http://docs.alfresco.com/5.0/concepts/alfresco-sdk-intro.html), [Release notes](https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-sdk-aggregator/latest/github-report.html)
- 2015-05-20: SDK 2.1.0 released to Maven Central. Docs for [Community](http://docs.alfresco.com/community/concepts/alfresco-sdk-intro.html), [Enterprise](http://docs.alfresco.com/5.0/concepts/alfresco-sdk-intro.html), [Release notes](https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-sdk-aggregator/latest/github-report.html)
- 2014-12-23: SDK 2.0.0 release to Maven Central. [Docs](http://docs.alfresco.com/sdk2.0/concepts/alfresco-sdk-intro.html), [Release Notes](https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-sdk-aggregator/archive/2.0.0/github-report.htm)
- 2017-06-23: Alfresco SDK 3.0.1 released, [containing a critical bugfix](https://github.com/Alfresco/alfresco-sdk/issues/461)
- 2017-04-01: Alfresco SDK 3.0.0 released
- 2017-03-27: After years of hard work, countless iterations and gathering feedback, SDK 3.0 has finally been merged into the master branch, ready for release in the coming days
- 2016-02-20: SDK 2.2.0 released to Maven Central. Docs for [Community](http://docs.alfresco.com/community/concepts/alfresco-sdk-intro.html), [Enterprise](http://docs.alfresco.com/5.1/concepts/alfresco-sdk-intro.html), [Release notes](https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-sdk-aggregator/latest/github-report.html)
- 2015-10-19: SDK 2.1.1 released to Maven Central. Docs for [Community](http://docs.alfresco.com/community/concepts/alfresco-sdk-intro.html), [Enterprise](http://docs.alfresco.com/5.0/concepts/alfresco-sdk-intro.html)
- 2015-05-20: SDK 2.1.0 released to Maven Central. Docs for [Community](http://docs.alfresco.com/community/concepts/alfresco-sdk-intro.html), [Enterprise](http://docs.alfresco.com/5.0/concepts/alfresco-sdk-intro.html)
- 2014-12-23: SDK 2.0.0 release to Maven Central. [Docs](http://docs.alfresco.com/sdk2.0/concepts/alfresco-sdk-intro.html), [Release Notes](https://artifacts.alfresco.com/nexus/content/repositories/alfresco-docs/alfresco-sdk-aggregator/archive/2.0.0/github-report.htm)
- 2014-08-22: First SNAPSHOT of SDK 2.0.0 in the [OSS Sonatype Repository](https://oss.sonatype.org/content/repositories/snapshots/org/alfresco/maven/alfresco-sdk-parent/2.0.0-SNAPSHOT/)!
- 2014-07: Project fully migrated from [Google Code](https://code.google.com/p/maven-alfresco-archetypes).
## User Getting Started
### Latest Documentation
To get started with Alfresco SDK 2.1.1 (latest) visit the offical Alfresco Documentation for:
To get started with **Alfresco SDK 4.0.x** (latest) visit the [Alfresco Documentation](https://docs.alfresco.com/6.0/concepts/dev-for-developers.html) (documentation pending).
- [Alfresco Community 5.0.d and above](http://docs.alfresco.com/community/concepts/alfresco-sdk-intro.html)
- [Alfresco Enterprise 5.0.1 and above](http://docs.alfresco.com/5.0/concepts/alfresco-sdk-intro.html)
#### Documentation about Previous Versions
| SDK Version | Alfresco Enterprise Version | Alfresco Community Version | Documentation |
| ------------- |:-------------:| :-----:|:-----|
| SDK 3.0 | Alfresco 5.2.x | Alfresco 5.2.x | http://docs.alfresco.com/5.2/concepts/sdk-intro.html |
| SDK 2.2 | Alfresco 5.1.x | Alfresco 5.1.x | https://docs.alfresco.com/5.1/concepts/alfresco-sdk-intro.html |
| SDK 2.1 | Alfresco 5.0.1 | Alfresco 5.0.d | https://docs.alfresco.com/sdk2.1/concepts/alfresco-sdk-intro.html |
| SDK 2.0 | Alfresco 5.0.0 | Alfresco 5.0.c | https://docs.alfresco.com/sdk2.0/concepts/alfresco-sdk-intro.html |
| SDK 1.1.1 | Alfresco 4.2.x | Alfresco 4.2.x | https://docs.alfresco.com/4.2/concepts/dev-extensions-maven-sdk-intro.html |
#### Previous versions Documentation
- Documentation for [Alfresco SDK 2.0](http://docs.alfresco.com/sdk2.0/concepts/alfresco-sdk-intro.html) (compatible with Alfresco 5.0.d Community and 5.0.0 Enterprise)
- Documentation for [Alfresco SDK 1.1.1](http://docs.alfresco.com/4.2/concepts/dev-extensions-maven-sdk-intro.html) (compatible with Alfresco 4.2)
### Samples
Sample extension projects that use the SDK, maintained by @ohej in the [Alfresco SDK Samples project](https://github.com/Alfresco/alfresco-sdk-samples/).
### Command reference
A list of supported features and commands, explanation of Maven profiles and commands is kept in the [Alfresco Official Docs](http://docs.alfresco.com/5.0/concepts/alfresco-sdk-cmd-reference.html).
### Want to get up to speed quickly in Eclipse? Check out this video!
[![Alfresco SDK 2.1 howto](http://img.youtube.com/vi/utYZaVe9Nd0/0.jpg)](https://www.youtube.com/watch?v=utYZaVe9Nd0)
## Reporting Issues and Community Support
Report issues (and contribute!) [here](https://github.com/Alfresco/alfresco-sdk/issues?milestone=1&state=open). You can also join the [Alfresco list on Google Groups](https://groups.google.com/forum/#!forum/maven-alfresco) or join us on the [IRC Channel](http://chat.alfresco.com/).
Report issues (and contribute!) [here](https://github.com/Alfresco/alfresco-sdk/issues?milestone=1&state=open) or join us on the [IRC Channel](http://chat.alfresco.com/).
## Alfresco Enterprise Customers and Partners Support
If you are an Alfresco Customer please check the [SDK Support status](http://www.alfresco.com/services/subscription/technical-support/product-support-status) for the version you are using and the [Compatibily Matrix](http://docs.alfresco.com/community/concepts/alfresco-sdk-compatibility.html) for the SDK / Alfresco compatibility. If your version is in Limited or Full Support, you can raise issues via the [Support Portal](http://support.alfresco.com).
If you are an Alfresco Customer
please check the [SDK Support status](http://www.alfresco.com/services/subscription/technical-support/product-support-status)
for the version you are using. If your version is in Limited or Full Support and you need help, visit the [Support Portal](http://support.alfresco.com).
## Maven repositories
- As of version 2.0-beta-1, The Alfresco SDK is released in [Maven Central](http://search.maven.org/#search|ga|1|alfresco-sdk). Previous versions are available in the [Alfresco Artifacts Repository](https://artifacts.alfresco.com/).
- Alfresco (Community and Enterprise) artifacts are hosted in the [Alfresco Artifacts Repository](https://artifacts.alfresco.com/).
- Alfresco Community artifacts (JARs, WARs, AMPs, poms) and SDK artifacts are publicly available.
*NOTE:* For Enterprise and Premiere licensed software access you need to get credential via the Alfresco Enterprise Support. See [Maven Alfresco Enterprise setup](http://docs.alfresco.com/5.0/concepts/alfresco-sdk-using-enterprise-edition.html).
*NOTE:* By default the Alfresco SDK will use Community Edition releases but it can be configured to use Enterprise Edition releases. Enterprise and Premier customers can use the SDK with
Enterprise Edition releases by following the process described in [Working with Enterprise](https://docs.alfresco.com/5.2/concepts/sdk-using-enterprise.html)
### Alfresco Artifacts Repository
#### Alfresco Releases
You can use the following snippet in your pom.xml to access releases on Alfresco Artifact repository:
You can use the following snippet in your pom.xml to access releases from the Alfresco Artifact repository:
```xml
<repository>
@@ -72,4 +74,3 @@ To test new unreleased (unsupported) features, you can use the following snippet
## For Developers that want to contribute to the SDK
See the [Developers Wiki page](https://github.com/Alfresco/alfresco-sdk/wiki/Developer-Wiki).

1
archetypes/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.DS_Store

View File

@@ -5,16 +5,16 @@
<groupId>org.alfresco.maven.archetype</groupId>
<artifactId>alfresco-allinone-archetype</artifactId>
<packaging>maven-archetype</packaging>
<name>Maven Alfresco SDK - All-in-One Archetype</name>
<description>Sample multi-module project for All-in-One development on the Alfresco plaftorm. Includes modules for: Repository WAR overlay, Repository AMP, Share WAR overlay, Solr configuration, and embedded Tomcat runner</description>
<name>Alfresco SDK - All-in-One Archetype</name>
<description>Sample multi-module project for All-in-One development on the Alfresco platform. Includes modules for Platform/Repository JAR and Share JAR</description>
<parent>
<groupId>org.alfresco.maven</groupId>
<artifactId>alfresco-sdk-aggregator</artifactId>
<version>3.0.0-beta-2</version>
<version>4.0.0-beta-1</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<build>
<resources>
<resource>
@@ -23,7 +23,6 @@
<include>archetype-resources/pom.xml</include>
<include>archetype-resources/run.sh</include>
<include>archetype-resources/run.bat</include>
<include>archetype-resources/runner/src/main/webapp/index.html</include>
<include>META-INF/maven/archetype-metadata.xml</include>
</includes>
<filtering>true</filtering>
@@ -34,7 +33,6 @@
<exclude>archetype-resources/pom.xml</exclude>
<exclude>archetype-resources/run.sh</exclude>
<exclude>archetype-resources/run.bat</exclude>
<exclude>archetype-resources/runner/src/main/webapp/index.html</exclude>
<exclude>META-INF/maven/archetype-metadata.xml</exclude>
</excludes>
<filtering>false</filtering>
@@ -43,8 +41,8 @@
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>

View File

@@ -0,0 +1,2 @@
def file = new File( request.getOutputDirectory(), request.getArtifactId()+"/run.sh" );
file.setExecutable(true, false);

View File

@@ -17,7 +17,7 @@
<fileSet filtered="false" packaged="false" encoding="UTF-8">
<directory>src/main/assembly</directory>
<includes>
<include>**/*.xml</include>
<include>**</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
@@ -39,26 +39,12 @@
</includes>
<excludes>
<exclude>**/*-context.xml</exclude>
<exclude>**/log4j.properties</exclude>
</excludes>
</fileSet>
<fileSet encoding="UTF-8" filtered="true" packaged="false">
<directory>src/main/resources</directory>
<includes>
<include>**/*-context.xml</include>
<include>**/log4j.properties</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/test/resources</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/test/properties</directory>
<includes>
<include>**/*.properties</include>
</includes>
</fileSet>
</fileSets>
@@ -66,8 +52,14 @@
<module id="${rootArtifactId}-share-jar"
name="${rootArtifactId}-share-jar"
dir="__rootArtifactId__-share-jar" >
dir="__rootArtifactId__-share-jar">
<fileSets>
<fileSet filtered="false" packaged="false" encoding="UTF-8">
<directory>src/main/assembly</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
@@ -102,25 +94,97 @@
<exclude>**/__artifactId__-example-widgets.xml</exclude>
</excludes>
</fileSet>
<fileSet filtered="true" packaged="false" encoding="UTF-8">
<directory>src/test/resources</directory>
</fileSets>
</module>
<module id="integration-tests" name="integration-tests" dir="integration-tests">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-platform-docker"
name="${rootArtifactId}-platform-docker"
dir="__rootArtifactId__-platform-docker">
<fileSets>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/main/docker/license</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/main/docker</directory>
<includes>
<include>license/**</include>
<include>Dockerfile</include>
<include>disable-webscript-caching-context.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</fileSet>
<fileSet encoding="UTF-8" filtered="true">
<directory>src/main/docker</directory>
<includes>
<include>**/*.properties</include>
</includes>
<excludes>
<exclude>license/**</exclude>
<exclude>Dockerfile</exclude>
<exclude>disable-webscript-caching-context.xml</exclude>
</excludes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-share-docker"
name="${rootArtifactId}-share-docker"
dir="__rootArtifactId__-share-docker">
<fileSets>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/main/docker</directory>
<includes>
<include>Dockerfile</include>
<include>share-config-custom.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</fileSet>
<fileSet encoding="UTF-8" filtered="true">
<directory>src/main/docker</directory>
<includes>
<include>**/*.properties</include>
</includes>
<excludes>
<exclude>Dockerfile</exclude>
<exclude>share-config-custom.xml</exclude>
</excludes>
</fileSet>
</fileSets>
</module>
</modules>
<fileSets>
<fileSet encoding="UTF-8">
<directory>src</directory>
<fileSet encoding="UTF-8" filtered="true">
<directory>docker</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<fileSet encoding="UTF-8" filtered="true">
<directory></directory>
<includes>
<include>run.sh</include>

View File

@@ -1,34 +1,44 @@
# Alfresco AIO Project - SDK 3
# Alfresco AIO Project - SDK 4.0
This is an All-In-One (AIO) project for Alfresco SDK 3.0.
This is an All-In-One (AIO) project for Alfresco SDK 4.0.
Run with `mvn clean install -DskipTests=true alfresco:run` or `./run.sh` and verify that it
Run with `./run.sh build_start` or `./run.bat build_start` and verify that it
* Runs the embedded Tomcat + H2 DB
* Runs Alfresco Platform (Repository)
* Runs Alfresco Solr4
* Runs Alfresco Content Service (ACS)
* Runs Alfresco Share
* Packages both as JAR and AMP assembly for modules
* Runs Alfresco Search Service (ASS)
* Runs PostgreSQL database
* Deploys the JAR assembled modules
All the services of the project are now run as docker containers. The run script offers the next tasks:
* `build_start`. Build the whole project, recreate the ACS and Share docker images, start the dockerised environment composed by ACS, Share, ASS and
PostgreSQL and tail the logs of all the containers.
* `start`. Start the dockerised environment without building the project and tail the logs of all the containers.
* `stop`. Stop the dockerised environment.
* `purge`. Stop the dockerised container and delete all the persistent data (docker volumes).
* `tail`. Tail the logs of all the containers.
* `reload_share`. Build the Share module, recreate the Share docker image and restart the Share container.
* `reload_acs`. Build the ACS module, recreate the ACS docker image and restart the ACS container.
* `build_test`. Build the whole project, recreate the ACS and Share docker images, start the dockerised environment, execute the integration tests from the
`integration-tests` module and stop the environment.
* `test`. Execute the integration tests (the environment must be already started).
# Few things to notice
* No parent pom
* No WAR projects, all handled by the Alfresco Maven Plugin
* No runner project - it's all in the Alfresco Maven Plugin
* No WAR projects, the jars are included in the custom docker images
* No runner project - the Alfresco environment is now managed through [Docker](https://www.docker.com/)
* Standard JAR packaging and layout
* Works seamlessly with Eclipse and IntelliJ IDEA
* JRebel for hot reloading, JRebel maven plugin for generating rebel.xml, agent usage: `MAVEN_OPTS=-Xms256m -Xmx1G -agentpath:/home/martin/apps/jrebel/lib/libjrebel64.so`
* JRebel for hot reloading, JRebel maven plugin for generating rebel.xml [JRebel integration documentation]
* AMP as an assembly
* [Configurable Run mojo](https://github.com/Alfresco/alfresco-sdk/blob/sdk-3.0/plugins/alfresco-maven-plugin/src/main/java/org/alfresco/maven/plugin/RunMojo.java) in the `alfresco-maven-plugin`
* No unit testing/functional tests just yet
* Persistent test data through restart thanks to the use of Docker volumes for ACS, ASS and database data
* Integration tests module to execute tests against the final environment (dockerised)
* Resources loaded from META-INF
* Web Fragment (this includes a sample servlet configured via web fragment)
# TODO
* Abstract assembly into a dependency so we don't have to ship the assembly in the archetype
* Purge
* Functional/remote unit tests

View File

@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<name>Alfresco Platform/Repository Docker Module</name>
<description>Platform/Repo Docker Module to generate the final Docker image</description>
<packaging>jar</packaging>
<parent>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}</artifactId>
<version>${version}</version>
</parent>
<properties>
</properties>
<dependencies>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-platform-jar</artifactId>
<version>${version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.2</version>
<executions>
<!-- Copy the repository extension and the dependencies required for execute integration tests -->
<execution>
<id>copy-repo-extension</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-platform-jar</artifactId>
<version>${version}</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<!-- Test dependencies -->
<!-- We need these dependencies installed in ACS in order to execute the test remotely making use of the Alfresco RAD module -->
<artifactItem>
<groupId>org.alfresco.maven</groupId>
<artifactId>alfresco-rad</artifactId>
<version>${alfresco.sdk.version}</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>${groupId}</groupId>
<artifactId>integration-tests</artifactId>
<version>${version}</version>
<classifier>tests</classifier>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
<!-- Copy other dependencies (JARs or AMPs) declared in the platform module -->
<execution>
<id>copy-third-party-dependencies</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- Filter the Dockerfile and the other files added to the container to be able to replace maven properties -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-and-filter-docker-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.jar</exclude>
<exclude>**/*.so</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-and-filter-docker-resources-non-filtered</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>false</filtering>
<includes>
<include>**/*.jar</include>
<include>**/*.so</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,18 @@
FROM ${docker.acs.image}:${alfresco.platform.version}
ARG TOMCAT_DIR=/usr/local/tomcat
# Copy Dockerfile to avoid an error if no JARs exist
COPY Dockerfile extensions/*.jar $TOMCAT_DIR/webapps/alfresco/WEB-INF/lib/
# Copy Dockerfile to avoid an error if no AMPs exist
COPY Dockerfile extensions/*.amp $TOMCAT_DIR/amps/
RUN java -jar $TOMCAT_DIR/alfresco-mmt/alfresco-mmt*.jar install \
$TOMCAT_DIR/amps $TOMCAT_DIR/webapps/alfresco -directory -nobackup -force
COPY alfresco-global.properties $TOMCAT_DIR/shared/classes/alfresco-global.properties
COPY dev-log4j.properties $TOMCAT_DIR/shared/classes/alfresco/extension
COPY disable-webscript-caching-context.xml $TOMCAT_DIR/shared/classes/alfresco/extension
# Copy Dockerfile to avoid an error if no license file exists
COPY Dockerfile license/*.* $TOMCAT_DIR/webapps/alfresco/WEB-INF/classes/alfresco/extension/license/

View File

@@ -1,3 +1,6 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
@@ -15,15 +18,12 @@
# RUN TIME PROPERTIES
# -------------------
########################################################################################################################
# Alfresco configuration for running locally
#
# Alfresco configuration for running locally with PostgreSQL Database
#
# Configuration when running Tomcat embedded from Maven.
# This will create the alf_data_dev directory relative to Tomcat run folder.
# Property values from the POM but it can also be edited here.
########################################################################################################################
dir.root=${alfresco.data.location}
#
# Alfresco Repo Webapp (alfresco.war) context, ports etc
alfresco.context=alfresco
@@ -34,14 +34,9 @@ alfresco.protocol=http
# Alfresco Share Webapp (share.war) context, ports etc
share.context=share
share.host=localhost
share.port=8080
share.port=8180
share.protocol=http
index.subsystem.name=solr4
solr.host=localhost
solr.port=8080
solr.secureComms=none
# Don't try and recover any index
index.recovery.mode=NONE
@@ -55,16 +50,30 @@ wcmqs.publishQueueProcessor.schedule=0 50 2 * * ? 2060
# Fail or not when there are node integrity checker errors
integrity.failOnError=true
# Database connection properties
db.driver=${alfresco.db.datasource.class}
db.url=${alfresco.db.url}
db.username=${alfresco.db.username}
db.password=${alfresco.db.password}
# Alfresco Repository PostgreSQL Database configuration.
# The PostgreSQL Driver is brought in via the tomcat7-maven-plugin as a dependency.
db.driver=org.postgresql.Driver
# This Alfresco Platform Configuration file should be used for custom properties that are introduced by this module.
# Define default values for all properties here.
# System Administrators can override these values in environment specific configurations in
# alfresco/tomcat/shared/classes/alfresco-global.properties.
#
index.subsystem.name=solr6
solr.host=${rootArtifactId}-ass
solr.port=8983
solr.secureComms=none
db.username=alfresco
db.password=alfresco
db.pool.initial=10
db.pool.max=100
hibernate.dialect=org.hibernate.dialect.H2Dialect
db.url=jdbc:postgresql://${rootArtifactId}-postgres:5432/alfresco
# File servers related properties
# For local runs we disable CIFS and FTP
cifs.enabled=false
ftp.enabled=false
ftp.enabled=false
csrf.filter.enabled=false

View File

@@ -1,7 +1,9 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Set root logger level to error
log4j.rootLogger=error, Console, File
###### Console appender definition #######
# All outputs currently set to be a ConsoleAppender.
log4j.appender.Console=org.apache.log4j.ConsoleAppender
@@ -11,7 +13,6 @@ log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} %x %-5p [%c{3}] [%t] %m%n
#log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
###### File appender definition #######
log4j.appender.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.File=alfresco.log
log4j.appender.File.Append=true
@@ -19,13 +20,11 @@ log4j.appender.File.DatePattern='.'yyyy-MM-dd
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{yyyy-MM-dd} %d{ABSOLUTE} %-5p [%c] [%t] %m%n
###### Hibernate specific appender definition #######
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
###### Log level overrides #######
# Commented-in loggers will be exposed as JMX MBeans (refer to org.alfresco.repo.admin.Log4JHierarchyInit)
# Hence, generally useful loggers should be listed with at least ERROR level to allow simple runtime
@@ -61,8 +60,7 @@ log4j.logger.org.apache.myfaces.taglib=error
# OpenOfficeConnection
log4j.logger.net.sf.jooreports.openoffice.connection=fatal
# log prepared statement cache activity ###
log4j.logger.org.hibernate.ps.PreparedStatementCache=info
# log prepared statement cache activity log4j.logger.org.hibernate.ps.PreparedStatementCache=info
# Alfresco
log4j.logger.org.alfresco=error
@@ -212,7 +210,6 @@ log4j.logger.org.jbpm.graph.def.GraphElement=fatal
#log4j.logger.org.alfresco.repo.googledocs=debug
###### Scripting #######
# Web Framework
log4j.logger.org.springframework.extensions.webscripts=info
@@ -261,4 +258,13 @@ log4j.logger.org.alfresco.repo.usage.RepoUsageMonitor=info
# Authorization
log4j.logger.org.alfresco.enterprise.repo.authorization.AuthorizationService=info
log4j.logger.org.alfresco.enterprise.repo.authorization.AuthorizationsConsistencyMonitor=warn
log4j.logger.org.alfresco.enterprise.repo.authorization.AuthorizationsConsistencyMonitor=warn
#-----------------------------------------------------------------------
# Platform module logging
#-----------------------------------------------------------------------
log4j.logger.${package}.platformsample.DemoComponent=debug
log4j.logger.${package}.platformsample.HelloWorldWebScript=debug

View File

@@ -0,0 +1,51 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Enable hotswap so that changes in this module will be automatically reloaded
# Watch for changed class files on watchResources path and reload class definition in the running application.
autoHotswap=true
#autoHotswap.port=8000
# Add a directory prior to application classpath (load classes and resources).
#
# This may be useful for example in multi module maven project to load class changes from upstream project
# classes. Set extraClasspath to upstream project compiler output and .class file will have precedence to
# classes from built JAR file.
# i.e. monitor /target/classes
# should work with extraClasspath=${project.build.outputDirectory}
# If not try
extraClasspath=/usr/local/tomcat/hotswap-agent
# Comma separated list of disabled plugins
# Use plugin name - e.g.
# Hotswapper, AnonymousClassPatch, WatchResources, Hibernate, Spring, Jersey2, Jetty, Tomcat,
# ZK, Logback, JSF, Seam, ELResolver, OsgiEquinox, Proxy, WebObjects, Weld, JBossModules, Resteasy, Gae
disabledPlugins=Hibernate,Spring
# Add a directory prior to webapp path (load webapp resources).
#
# Load web application resources (such as HTML, JSP, CSS, ...) from this directory prior to default processing.
# Use this setting to set to serve resources from source directory directly (e.g. src/main/webapp).
extraWebappContext=/usr/local/tomcat/hotswap-agent/${rootArtifactId}-platform-jar/target/classes/META-INF/resources;
# Load static web resources from different directory.
#
# This setting is dependent on application server plugin(Jetty, Tomcat, JBoss, ...)
webappDir=/usr/local/tomcat/hotswap-agent/${rootArtifactId}-platform-jar/target/classes/META-INF/resources;
# Watch for changes in a directory (resources only).
#
# Similar to extraClasspath this property adds classpath when searching for resources (not classes).
# While extra classpath just modifies the classloader, this setting does nothing until the resource
# is really changed.
#
# Sometimes it is not possible to point extraClasspath to your i.e. src/main/resources, because there are multiple
# replacements of resources in a building step (maven filtering resource option).
# This setting will leave i.e. src/target/classes as default source for resources, but after the resource is modified
# in src/main/resources, the new changed resource is served instead.
# watchResources=
LOGGER.org.hotswap.agent=DEBUG
#LOGGER.org.hotswap.agent.plugin=TRACE
#LOGGER.org.hotswap.agent.watch=TRACE
#LOGGER.org.hotswap.agent.command=TRACE

View File

@@ -0,0 +1,6 @@
# Enterprise License location
Put the Alfresco Enterprise license file in this directory.
It will then be copied into the ACS container in the
$TOMCAT_DIR/WEB-INF/classes/alfresco/extension/license directory.

View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<name>Alfresco Platform/Repository JAR Module</name>
<description>Platform/Repo JAR Module (to be included in the alfresco.war) - part of AIO - SDK 3
<description>Platform/Repo JAR Module (to be included in the alfresco.war) - part of AIO - SDK 4.0
</description>
<packaging>jar</packaging>
@@ -17,13 +17,7 @@
</properties>
<dependencies>
<!-- The main Alfresco Repo dependency for compiling Java code in src/main/java -->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-repository</artifactId>
</dependency>
<!-- Add here any JAR or AMP dependency that needs to be deployed to ACS -->
</dependencies>
<build>

View File

@@ -3,6 +3,19 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<!--
Note that the Module dependency specified in the configuration section for the Alfresco Maven Plugin
needs to be set to amp if any 3rd party libs should be applied by MMT:
`
<platformModules>
<moduleDependency>
<groupId>${project.groupId}</groupId>
<artifactId>some-platform-jar</artifactId>
<version>${project.version}</version>
<type>amp</type>
</moduleDependency>
-->
<id>build-amp-file</id>
<formats>
@@ -12,12 +25,33 @@
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<!-- Filter module.properties and put at top level in the AMP -->
<file>
<source>src/main/resources/alfresco/module/${project.artifactId}/module.properties</source>
<filtered>true</filtered>
</file>
<!-- Include AMP -> WAR mapping file (needed for custom mappings) -->
<file>
<source>src/main/assembly/file-mapping.properties</source>
<filtered>false</filtered>
</file>
</files>
<fileSets>
<!-- Anything in the assembly/web directory will end up in the /web directory in the AMP -->
<fileSet>
<directory>src/main/assembly/web</directory>
<outputDirectory>web</outputDirectory>
<filtered>true</filtered> <!-- Will filter files and substitute POM props such as for example ${project.name} -->
<excludes>
<exclude>README.md</exclude>
</excludes>
</fileSet>
</fileSets>
<!-- Include the project artifact (JAR) in the /lib directory in the AMP, and any 3rd party libraries (JARs)
used by the customization.
-->
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>

View File

@@ -0,0 +1,27 @@
# Custom AMP to WAR location mappings
#
# The following property can be used to include the standard set of mappings.
# The contents of this file will override any defaults. The default is
# 'true', i.e. the default mappings will be augmented or modified by values in
# this file.
#
# Default mappings are:
#
# /config=/WEB-INF/classes
# /lib=/WEB-INF/lib
# /licenses=/WEB-INF/licenses
# /web/jsp=/jsp
# /web/css=/css
# /web/images=/images
# /web/scripts=/scripts
# /web/php=/php
#
include.default=true
#
# Custom mappings. If 'include.default' is false, then this is the complete set.
# Map /web to / in AMP so we can override things like favicon.ico
#
/web=/

View File

@@ -0,0 +1,22 @@
# Web resources that should override out-of-the-box files
Put here any web resources that should override out-of-the-box
web resources, such as favicon.ico. They will then end up in the
*/web* directory in the AMP, and applied to the WAR, and override
any existing web resources in the Alfresco.WAR.
**Note**. Module dependency needs to be set to amp for the web resources to be applied by MMT:
`
<moduleDependency>
<groupId>${project.groupId}</groupId>
<artifactId>some-platform-jar</artifactId>
<version>${project.version}</version>
<type>amp</type>
</moduleDependency>
`
**Important**. New web resources should not be located here, but instead
in the usual place in the *src/main/resources/META-INF/resources* directory.

View File

@@ -1,6 +1,23 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
/**

View File

@@ -1,22 +1,23 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.alfresco.repo.module.AbstractModuleComponent;
@@ -35,7 +36,7 @@ import org.apache.commons.logging.LogFactory;
* @author Maurizio Pillitu
*/
public class DemoComponent extends AbstractModuleComponent {
Log log = LogFactory.getLog(DemoComponent.class);
private static Log logger = LogFactory.getLog(DemoComponent.class);
private NodeService nodeService;
@@ -55,8 +56,8 @@ public class DemoComponent extends AbstractModuleComponent {
@Override
protected void executeInternal() throws Throwable {
System.out.println("DemoComponent has been executed");
log.debug("Test debug logging. Congratulation your JAR Module is working");
log.info("This is only for information purposed. Better remove me from the log in Production");
logger.debug("Test debug logging. Congratulation your JAR Module is working");
logger.info("This is only for information purposes. Better remove me from the log in Production");
}
/**

View File

@@ -1,28 +1,31 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.DeclarativeWebScript;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.HashMap;
import java.util.Map;
@@ -34,10 +37,15 @@ import java.util.Map;
* @since 2.1.0
*/
public class HelloWorldWebScript extends DeclarativeWebScript {
private static Log logger = LogFactory.getLog(HelloWorldWebScript.class);
protected Map<String, Object> executeImpl(
WebScriptRequest req, Status status, Cache cache) {
Map<String, Object> model = new HashMap<String, Object>();
model.put("fromJava", "HelloFromJava");
logger.debug("Your 'Hello World' Web Script was called!");
return model;
}
}

View File

@@ -5,19 +5,25 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- The bootstrap-context.xml file is used for patch definitions, importers,
workflow, and loading custom content models. -->
<!-- Registration of new models -->
<bean id="${package}.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
<bean id="${artifactId}.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
<property name="models">
<list>
<value>alfresco/module/${project.artifactId}/model/content-model.xml</value>
<value>alfresco/module/${project.artifactId}/model/workflow-model.xml</value>
</list>
</property>
<property name="labels">
<list>
<!-- Bootstrap Resource Bundles for the content model types, aspects, properties etc -->
<value>alfresco/module/${project.artifactId}/messages/content-model</value>
</list>
</property>
</bean>
<bean id="${package}.sampleprocess.workflowBootstrap" parent="workflowDeployer">

View File

@@ -2,41 +2,43 @@
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- A simple class that is initialized by Spring -->
<bean id="${package}.exampleBean" class="${package}.platformsample.Demo" init-method="init" />
<bean id="${package}.Demo" class="${package}.platformsample.Demo" init-method="init" />
<!-- A simple module component that will be executed once.
Note. this module component will only be executed once, and then there will be an entry for it in the Repo.
So doing for example $ mvn clean install -Prun twice will only execute this component the first time.
Note. this module component will only be executed once, and then there will be an entry for it in the Repo DB.
So doing for example $ mvn clean install alfresco:run twice will only execute this component the first time.
You need to remove /alf_data_dev for it to be executed again. -->
<bean id="${package}.exampleComponent" class="${package}.platformsample.DemoComponent" parent="module.baseComponent" >
<bean id="${package}.DemoComponent" class="${package}.platformsample.DemoComponent" parent="module.baseComponent" >
<property name="moduleId" value="${artifactId}" /> <!-- See module.properties -->
<property name="name" value="exampleComponent" />
<property name="name" value="DemoComponent" />
<property name="description" value="A demonstration component" />
<property name="sinceVersion" value="1.0" />
<property name="appliesFromVersion" value="1.0" />
<property name="appliesFromVersion" value="0.99" /> <!-- 1.0 would not work here when using SNAPSHOT version in project -->
<property name="nodeService" ref="NodeService" />
<property name="nodeLocatorService" ref="nodeLocatorService" />
</bean>
</beans>

View File

@@ -2,7 +2,6 @@
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
@@ -19,7 +18,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="webscript.alfresco.tutorials.helloworld.get"
class="${package}.platformsample.HelloWorldWebScript"
parent="webscript">

View File

@@ -1,43 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#-----------------------------------------------------------------------
# ${artifactId} module log4j.properties
#
# NOTE
# ----
# Log4j uses the following logging levels:
# debug,info,warn,error,fatal
#
# To set the logging level of {fullClassName} to {loglevel},
# add a line to this file of the following form:
#
# log4j.logger.{fullClassName}={loglevel}
#
# For example, to make 'com.example.MyExample' produce 'debug'
# logs, add a line like this:
#
# log4j.logger.com.example.MyExample=debug
#
#
# WARNING
# -------
# Log properties in this log4j.properties file override/augment
# those in the webapp's main log4j.properties.
#
#-----------------------------------------------------------------------
log4j.logger.${package}.platformsample.DemoComponent=debug

View File

@@ -0,0 +1,6 @@
# This file should contain content model labels
acme_contentModel.type.acme_document.title=ACME Document
acme_contentModel.aspect.acme_securityClassified.title=ACME Security Classified
acme_contentModel.property.acme_documentId.title=Document Id
acme_contentModel.property.acme_securityClassification.title=Security Classification

View File

@@ -73,7 +73,6 @@
<atomic>true</atomic>
<stored>false</stored>
<tokenised>false</tokenised>
<facetable>true</facetable>
</index>
<constraints>
<constraint ref="acme:securityClassificationOptions"/>

View File

@@ -15,12 +15,18 @@
limitations under the License.
-->
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- This is filtered by Maven at build time, so that module name is single sourced. -->
<!-- Note. The bootstrap-context.xml file has to be loaded first.
Otherwise your custom models are not yet loaded when your service beans are instantiated and you
cannot for example register policies on them. -->
<import resource="classpath:alfresco/module/${project.artifactId}/context/bootstrap-context.xml" />
<import resource="classpath:alfresco/module/${project.artifactId}/context/service-context.xml" />
<import resource="classpath:alfresco/module/${project.artifactId}/context/bootstrap-context.xml" />
<import resource="classpath:alfresco/module/${project.artifactId}/context/webscript-context.xml" />
</beans>

View File

@@ -0,0 +1,56 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.extensions.webscripts.*;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Unit testing the Web Script Java Controller
*
* @author martin.bergljung@alfresco.com
* @version 1.0
* @since 3.0
*/
public class HelloWorldWebScriptControllerTest {
@Test
public void testController() {
WebScriptRequest req = Mockito.mock(WebScriptRequest.class);
Status status = Mockito.mock(Status.class);
Cache cache = Mockito.mock(Cache.class);
String helloPropName = "fromJava";
String helloPropExpectedValue = "HelloFromJava";
HelloWorldWebScript ws = new HelloWorldWebScript();
Map<String, Object> model = ws.executeImpl(req, status, cache);
assertNotNull("Response from Web Script Java Controller is null", model);
assertEquals("Incorrect Web Script Java Controller Response",
helloPropExpectedValue, model.get(helloPropName));
}
}

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<name>Alfresco Share Docker Module</name>
<description>Share Docker Module to generate the final Docker image</description>
<packaging>jar</packaging>
<parent>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}</artifactId>
<version>${version}</version>
</parent>
<properties>
</properties>
<dependencies>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-share-jar</artifactId>
<version>${version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.2</version>
<executions>
<!-- Copy the share extension -->
<execution>
<id>copy-repo-extension</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-share-jar</artifactId>
<version>${version}</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
<!-- Copy other dependencies (JARs or AMPs) declared in the share module -->
<execution>
<id>copy-third-party-dependencies</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- Filter the Dockerfile and the other files added to the container to be able to replace maven properties -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-and-filter-docker-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,16 @@
FROM ${docker.share.image}:${alfresco.share.version}
ARG TOMCAT_DIR=/usr/local/tomcat
# Copy Dockerfile to avoid an error if no JARs exist
COPY Dockerfile extensions/*.jar $TOMCAT_DIR/webapps/share/WEB-INF/lib/
# Copy Dockerfile to avoid an error if no AMPs exist
COPY Dockerfile extensions/*.amp $TOMCAT_DIR/amps_share/
RUN java -jar $TOMCAT_DIR/alfresco-mmt/alfresco-mmt*.jar install \
$TOMCAT_DIR/amps_share $TOMCAT_DIR/webapps/share -directory -nobackup -force
COPY share-config-custom.xml $TOMCAT_DIR/shared/classes/alfresco/web-extension
COPY log4j.properties $TOMCAT_DIR/webapps/share/WEB-INF/classes
COPY hotswap-agent.properties $TOMCAT_DIR/webapps/share/WEB-INF/classes

View File

@@ -0,0 +1,52 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Enable hotswap so that changes in this module will be automatically reloaded
# Watch for changed class files on watchResources path and reload class definition in the running application.
autoHotswap=true
#autoHotswap.port=8000
# Add a directory prior to application classpath (load classes and resources).
#
# This may be useful for example in multi module maven project to load class changes from upstream project
# classes. Set extraClasspath to upstream project compiler output and .class file will have precedence to
# classes from built JAR file.
# i.e. monitor /target/classes
# should work with extraClasspath=${project.build.outputDirectory}
# If not try
extraClasspath=/usr/local/tomcat/hotswap-agent
# Comma separated list of disabled plugins
# Use plugin name - e.g.
# Hotswapper, AnonymousClassPatch, WatchResources, Hibernate, Spring, Jersey2, Jetty, Tomcat,
# ZK, Logback, JSF, Seam, ELResolver, OsgiEquinox, Proxy, WebObjects, Weld, JBossModules, Resteasy, Gae
disabledPlugins=Hibernate,Spring
# Add a directory prior to webapp path (load webapp resources).
#
# Load web application resources (such as HTML, JSP, CSS, ...) from this directory prior to default processing.
# Use this setting to set to serve resources from source directory directly (e.g. src/main/webapp).
extraWebappContext=/usr/local/tomcat/hotswap-agent/${rootArtifactId}-share-jar/target/classes/META-INF/resources;
# Load static web resources from different directory.
#
# This setting is dependent on application server plugin(Jetty, Tomcat, JBoss, ...)
webappDir=/usr/local/tomcat/hotswap-agent/${rootArtifactId}-share-jar/target/classes/META-INF/resources;
# Watch for changes in a directory (resources only).
#
# Similar to extraClasspath this property adds classpath when searching for resources (not classes).
# While extra classpath just modifies the classloader, this setting does nothing until the resource
# is really changed.
#
# Sometimes it is not possible to point extraClasspath to your i.e. src/main/resources, because there are multiple
# replacements of resources in a building step (maven filtering resource option).
# This setting will leave i.e. src/target/classes as default source for resources, but after the resource is modified
# in src/main/resources, the new changed resource is served instead.
# watchResources=
LOGGER.org.hotswap.agent=DEBUG
#LOGGER.org.hotswap.agent.plugin=TRACE
#LOGGER.org.hotswap.agent.watch=TRACE
#LOGGER.org.hotswap.agent.command=TRACE

View File

@@ -0,0 +1,57 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Set root logger level to error
log4j.rootLogger=error, Console, File
# Console appender definition #
# All outputs currently set to be a ConsoleAppender.
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
# use log4j NDC to replace %x with tenant domain / username
log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} %x %-5p [%c{3}] [%t] %m%n
#log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
# File appender definition #
log4j.appender.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.File=share.log
log4j.appender.File.Append=true
log4j.appender.File.DatePattern='.'yyyy-MM-dd
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{yyyy-MM-dd} %d{ABSOLUTE} %-5p [%c] [%t] %m%n
# Spring
log4j.logger.org.springframework=warn
# Turn off Spring remoting warnings that should really be info or debug.
log4j.logger.org.springframework.remoting.support=error
log4j.logger.org.springframework.util=error
# MyFaces
log4j.logger.org.apache.myfaces.util.DebugUtils=info
log4j.logger.org.apache.myfaces.el.VariableResolverImpl=error
log4j.logger.org.apache.myfaces.application.jsp.JspViewHandlerImpl=error
log4j.logger.org.apache.myfaces.taglib=error
# Alfresco
log4j.logger.org.alfresco=error
log4j.logger.org.alfresco.config=warn
log4j.logger.org.alfresco.config.JndiObjectFactoryBean=warn
log4j.logger.org.alfresco.web=info
# Web Framework
log4j.logger.org.springframework.extensions.webscripts=info
log4j.logger.org.springframework.extensions.webscripts.ScriptLogger=warn
log4j.logger.org.springframework.extensions.webscripts.ScriptDebugger=off
# Freemarker
# Note the freemarker.runtime logger is used to log non-fatal errors that are handled by Alfresco's retrying transaction handler
log4j.logger.freemarker.runtime=
#-----------------------------------------------------------------------
# Custom Share module logging goes here...
#-----------------------------------------------------------------------

View File

@@ -0,0 +1,105 @@
<alfresco-config>
<config evaluator="string-compare" condition="WebFramework">
<web-framework>
<autowire>
<!-- Changing this to 'development' currently breaks the Admin Console.
Instead we make a POST to clear Share dependency caches, see 'clear-caches-refresh-ws' profile. -->
<mode>production</mode> <!-- not really need in the long run, used for YUI - deprecate -->
</autowire>
<!--
We don't need to do this when we have the new refresh mojos in the Alfresco plug-in.
If resource caching has been disabled then all the dependency caches will be cleared
before processing the Aikau jsonModel request...
(i.e. this.dojoDependencyHandler.clearCaches() )
For more information see the Aikau source code: https://github.com/Alfresco/Aikau
-->
<disable-resource-caching>false</disable-resource-caching>
</web-framework>
</config>
<!-- Global config section -->
<config replace="true">
<flags>
<!--
Developer debugging setting to turn on DEBUG mode for client scripts in the browser
-->
<client-debug>true</client-debug>
<!--
LOGGING can always be toggled at runtime when in DEBUG mode (Ctrl, Ctrl, Shift, Shift).
This flag automatically activates logging on page load.
-->
<client-debug-autologging>false</client-debug-autologging>
</flags>
</config>
<!--
Disable CSRF completely for now
It seems Share has issues on 4.2.x with the embedded tomcat and CSRFPolicy
-->
<config evaluator="string-compare" condition="CSRFPolicy" replace="true">
<filter/>
</config>
<!--
Change so it is picked up from property where the Alfresco Repo Webapp is running
(e.g. http://localhost:8080/alfresco)
-->
<config evaluator="string-compare" condition="Remote">
<remote>
<endpoint>
<id>alfresco-noauth</id>
<name>Alfresco - unauthenticated access</name>
<description>Access to Alfresco Repository WebScripts that do not require authentication</description>
<connector-id>alfresco</connector-id>
<endpoint-url>http://${acs.host}:8080/alfresco/s</endpoint-url>
<identity>none</identity>
</endpoint>
<endpoint>
<id>alfresco</id>
<name>Alfresco - user access</name>
<description>Access to Alfresco Repository WebScripts that require user authentication</description>
<connector-id>alfresco</connector-id>
<endpoint-url>http://${acs.host}:8080/alfresco/s</endpoint-url>
<identity>user</identity>
</endpoint>
<endpoint>
<id>alfresco-feed</id>
<name>Alfresco Feed</name>
<description>Alfresco Feed - supports basic HTTP authentication via the EndPointProxyServlet</description>
<connector-id>http</connector-id>
<endpoint-url>http://${acs.host}:8080/alfresco/s</endpoint-url>
<basic-auth>true</basic-auth>
<identity>user</identity>
</endpoint>
<endpoint>
<id>activiti-admin</id>
<name>Activiti Admin UI - user access</name>
<description>Access to Activiti Admin UI, that requires user authentication</description>
<connector-id>activiti-admin-connector</connector-id>
<endpoint-url>http://${acs.host}:8080/alfresco/activiti-admin</endpoint-url>
<identity>user</identity>
</endpoint>
<endpoint>
<id>alfresco-api</id>
<parent-id>alfresco</parent-id>
<name>Alfresco Public API - user access</name>
<description>Access to Alfresco Repository Public API that require user authentication.
This makes use of the authentication that is provided by parent 'alfresco' endpoint.</description>
<connector-id>alfresco</connector-id>
<endpoint-url>http://${acs.host}:8080/alfresco/api</endpoint-url>
<identity>user</identity>
</endpoint>
</remote>
</config>
</alfresco-config>

View File

@@ -5,7 +5,7 @@
<artifactId>${artifactId}</artifactId>
<name>Alfresco Share JAR Module</name>
<packaging>jar</packaging>
<description>Sample Share JAR Module (to be included in the share.war) - part of AIO - SDK 3</description>
<description>Sample Share JAR Module (to be included in the share.war) - part of AIO - SDK 4.0</description>
<parent>
<groupId>${groupId}</groupId>
@@ -22,15 +22,19 @@
<dependencies>
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>${alfresco.share.war.artifactId}</artifactId>
<artifactId>share</artifactId>
<classifier>classes</classifier>
</dependency>
<dependency>
<groupId>org.alfresco.surf</groupId>
<artifactId>spring-surf-api</artifactId>
</dependency>
<!-- Add here any JAR or AMP dependency that needs to be deployed to share -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@@ -3,6 +3,19 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<!--
Note that the Module dependency specified in the configuration section for the Alfresco Maven Plugin
needs to be set to amp if any 3rd party libs should be applied by MMT:
`
<shareModules>
<moduleDependency>
<groupId>${project.groupId}</groupId>
<artifactId>some-share-jar</artifactId>
<version>${project.version}</version>
<type>amp</type>
</moduleDependency>
-->
<id>build-amp-file</id>
<formats>
@@ -10,13 +23,35 @@
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<!-- Filter module.properties and put at top level in the AMP -->
<file>
<source>${project.basedir}/src/main/resources/alfresco/module/${project.artifactId}/module.properties</source>
<source>src/main/resources/alfresco/module/${project.artifactId}/module.properties</source>
<filtered>true</filtered>
</file>
<!-- Include AMP -> WAR mapping file (needed for custom mappings) -->
<file>
<source>src/main/assembly/file-mapping.properties</source>
<filtered>false</filtered>
</file>
</files>
<fileSets>
<!-- Anything in the assembly/web directory will end up in the /web directory in the AMP -->
<fileSet>
<directory>src/main/assembly/web</directory>
<outputDirectory>web</outputDirectory>
<filtered>true</filtered> <!-- Will filter files and substitute POM props such as for example ${project.name} -->
<excludes>
<exclude>README.md</exclude>
</excludes>
</fileSet>
</fileSets>
<!-- Include the project artifact (JAR) in the /lib directory in the AMP, and any 3rd party libraries (JARs)
used by the customization.
-->
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>

View File

@@ -0,0 +1,27 @@
# Custom AMP to WAR location mappings
#
# The following property can be used to include the standard set of mappings.
# The contents of this file will override any defaults. The default is
# 'true', i.e. the default mappings will be augmented or modified by values in
# this file.
#
# Default mappings are:
#
# /config=/WEB-INF/classes
# /lib=/WEB-INF/lib
# /licenses=/WEB-INF/licenses
# /web/jsp=/jsp
# /web/css=/css
# /web/images=/images
# /web/scripts=/scripts
# /web/php=/php
#
include.default=true
#
# Custom mappings. If 'include.default' is false, then this is the complete set.
# Map /web to / in AMP so we can override things like favicon.ico
#
/web=/

View File

@@ -0,0 +1,22 @@
# Web resources that should override out-of-the-box files
Put here any web resources that should override out-of-the-box
web resources, such as favicon.ico. They will then end up in the
*/web* directory in the AMP, and applied to the WAR, and override
any existing web resources in the Share.WAR.
**Note**. Module dependency needs to be set to amp for the web resources to be applied by MMT:
`
<moduleDependency>
<groupId>${project.groupId}</groupId>
<artifactId>some-share-jar</artifactId>
<version>${project.version}</version>
<type>amp</type>
</moduleDependency>
`
**Important**. New web resources should not be located here, but instead
in the usual place in the *src/main/resources/META-INF/resources/<module-id>/* directory.

View File

@@ -0,0 +1,420 @@
<!-- Share configuration related to this particular Share module extension, such as:
- Doclib action config
- Form config
- Aspect and Type config
- Advanced Search
Note. Any configuration related to the whole Share.war webapp
(i.e. not specific to this share extension) should be
placed in the environment specific config file:
alfresco/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml
-->
<alfresco-config>
<!--================================================================================================================
Make custom types and aspects visible in "Change Type" and "Manage Aspects" actions.
This will also make them visible when creating rules.
(will be merged with out-of-the-box configured types and aspects)
=============================================================================================================-->
<config evaluator="string-compare" condition="DocumentLibrary">
<aspects>
<visible>
<aspect name="acme:securityClassified"/>
</visible>
<addable> <!-- defaults to visible config -->
</addable>
<removeable> <!-- defaults to visible config -->
</removeable>
</aspects>
<types>
<!-- Define the ACME base doc type as decedent from cm:content -->
<type name="cm:content">
<subtype name="acme:document"/>
</type>
</types>
</config>
<!--================================================================================================================
Advanced Search Forms for types
(search forms for aspects are not available)
=============================================================================================================-->
<config evaluator="string-compare" condition="AdvancedSearch" replace="true">
<advanced-search>
<forms>
<!-- Standard out-of-the-box types -->
<form labelId="search.form.label.cm_content" descriptionId="search.form.desc.cm_content">cm:content
</form>
<form labelId="search.form.label.cm_folder" descriptionId="search.form.desc.cm_folder">cm:folder</form>
<!-- Custom type -->
<form labelId="form.label.advancedsearch.acmeDocument"
descriptionId="form.description.advancedsearch.acmeDocument">acme:document
</form>
</forms>
</advanced-search>
</config>
<!--================================================================================================================
View, Edit, Create, and Search forms for custom types
The following form configurations for the custom types
have not been created from scratch. We have instead copied
out-of-the-box form configurations for cm:content and cm:folder
from the tomcat/webapps/share/WEB-INF/classes/alfresco/share-form-config.xml file
in a standard Alfresco installation (with the version matching)
and used them as a starting point.
=============================================================================================================-->
<!-- __________________________________ acme:document base type _________________________________________________-->
<!-- View and Edit forms for acme:document -->
<config evaluator="node-type" condition="acme:document">
<forms>
<!-- Default form configuration for the cm:content type -->
<form>
<field-visibility>
<show id="cm:name"/>
<show id="cm:title" force="true"/>
<show id="cm:description" force="true"/>
<show id="mimetype"/>
<show id="cm:author" force="true"/>
<show id="size" for-mode="view"/>
<show id="cm:creator" for-mode="view"/>
<show id="cm:created" for-mode="view"/>
<show id="cm:modifier" for-mode="view"/>
<show id="cm:modified" for-mode="view"/>
<!-- tags and categories -->
<show id="cm:taggable" for-mode="edit" force="true"/>
<show id="cm:categories"/>
<!-- cm:dublincore aspect -->
<show id="cm:publisher"/>
<show id="cm:contributor"/>
<show id="cm:type"/>
<show id="cm:identifier"/>
<show id="cm:dcsource"/>
<show id="cm:coverage"/>
<show id="cm:rights"/>
<show id="cm:subject"/>
<!-- cm:complianceable aspect -->
<show id="cm:removeAfter"/>
<!-- cm:effectivity aspect -->
<show id="cm:from"/>
<show id="cm:to"/>
<!-- cm:summarizable aspect -->
<show id="cm:summary"/>
<!-- cm:translatable aspect -->
<show id="cm:translations"/>
<!-- cm:localizable aspect -->
<show id="cm:locale"/>
<!-- cm:ownable aspect -->
<show id="cm:owner"/>
<!-- cm:attachable aspect -->
<show id="cm:attachments"/>
<!-- cm:emailed aspect -->
<show id="cm:originator"/>
<show id="cm:addressee"/>
<show id="cm:addressees"/>
<show id="cm:sentdate"/>
<show id="cm:subjectline"/>
<!-- exif:exif aspect -->
<show id="exif:dateTimeOriginal"/>
<show id="exif:pixelXDimension"/>
<show id="exif:pixelYDimension"/>
<show id="exif:exposureTime"/>
<show id="exif:fNumber"/>
<show id="exif:flash"/>
<show id="exif:focalLength"/>
<show id="exif:isoSpeedRatings"/>
<show id="exif:manufacturer"/>
<show id="exif:model"/>
<show id="exif:software"/>
<show id="exif:orientation"/>
<show id="exif:xResolution"/>
<show id="exif:yResolution"/>
<show id="exif:resolutionUnit"/>
<!-- audio:audio aspect -->
<show id="audio:album"/>
<show id="audio:artist"/>
<show id="audio:composer"/>
<show id="audio:engineer"/>
<show id="audio:genre"/>
<show id="audio:trackNumber"/>
<show id="audio:releaseDate"/>
<show id="audio:sampleRate"/>
<show id="audio:sampleType"/>
<show id="audio:channelType"/>
<show id="audio:compressor"/>
<!-- cm:indexControl aspect -->
<show id="cm:isIndexed"/>
<show id="cm:isContentIndexed"/>
<!-- cm:geographic aspect -->
<show id="cm:latitude"/>
<show id="cm:longitude"/>
<!-- surf:widget aspect -->
<show id="surf:widgetType"/>
<show id="surf:mid"/>
<show id="surf:label"/>
<!-- ACME custom props -->
<show id="acme:documentId" force="true"/>
<show id="acme:securityClassification"/>
</field-visibility>
<appearance>
<field id="cm:name">
<control>
<control-param name="maxLength">255</control-param>
</control>
</field>
<field id="cm:title">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="cm:description">
<control>
<control-param name="activateLinks">true</control-param>
</control>
</field>
<set id="cm:content2cols" template="/org/alfresco/components/form/2-column-set.ftl"/>
<field set="cm:content2cols" id="mimetype">
<control template="/org/alfresco/components/form/controls/mimetype.ftl"/>
</field>
<field set="cm:content2cols" id="size">
<control template="/org/alfresco/components/form/controls/size.ftl"/>
</field>
<field set="cm:content2cols" id="cm:creator"/>
<field set="cm:content2cols" id="cm:created"/>
<field set="cm:content2cols" id="cm:modifier"/>
<field set="cm:content2cols" id="cm:modified"/>
<field id="cm:taggable">
<control>
<control-param name="compactMode">true</control-param>
<control-param name="params">aspect=cm:taggable</control-param>
<control-param name="createNewItemUri">/api/tag/workspace/SpacesStore</control-param>
<control-param name="createNewItemIcon">tag</control-param>
</control>
</field>
<field id="cm:categories">
<control>
<control-param name="compactMode">true</control-param>
</control>
</field>
<field id="cm:originator" read-only="true"/>
<field id="cm:addressee" read-only="true"/>
<field id="cm:addressees" read-only="true"/>
<field id="cm:sentdate" read-only="true"/>
<field id="cm:subjectline" read-only="true"/>
<!-- ACME Props appearance -->
<set id="acmeDocSet" appearance="bordered-panel" label-id="form.set.label.acme.document"/>
<field id="acme:documentId" label-id="form.field.label.acme.documentId" set="acmeDocSet">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="acme:securityClassification" label-id="form.field.label.acme.securityClassification"
set="acmeDocSet"/>
</appearance>
</form>
<!-- Document Library pop-up Edit Metadata form -->
<form id="doclib-simple-metadata">
<field-visibility>
<show id="cm:name"/>
<show id="cm:title" force="true"/>
<show id="cm:description" force="true"/>
<!-- tags and categories -->
<show id="cm:taggable" for-mode="edit" force="true"/>
<show id="cm:categories"/>
<!-- ACME custom props -->
<show id="acme:documentId" force="true"/>
<show id="acme:securityClassification"/>
</field-visibility>
<edit-form template="../documentlibrary/forms/doclib-simple-metadata.ftl"/>
<appearance>
<field id="cm:name">
<control>
<control-param name="maxLength">255</control-param>
</control>
</field>
<field id="cm:title">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="cm:description">
<control>
<control-param name="activateLinks">true</control-param>
</control>
</field>
<field id="cm:taggable">
<control>
<control-param name="compactMode">true</control-param>
<control-param name="params">aspect=cm:taggable</control-param>
<control-param name="createNewItemUri">/api/tag/workspace/SpacesStore</control-param>
<control-param name="createNewItemIcon">tag</control-param>
</control>
</field>
<field id="cm:categories">
<control>
<control-param name="compactMode">true</control-param>
</control>
</field>
<!-- ACME Props appearance -->
<set id="acmeDocSet" appearance="bordered-panel" label-id="form.set.label.acme.document"/>
<field id="acme:documentId" label-id="form.field.label.acme.documentId" set="acmeDocSet">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="acme:securityClassification" label-id="form.field.label.acme.securityClassification"
set="acmeDocSet"/>
</appearance>
</form>
<!-- Document Library Inline Edit form -->
<form id="doclib-inline-edit">
<field-visibility>
<show id="cm:name"/>
<show id="cm:content" force="true"/>
<show id="cm:title" force="true"/>
<show id="cm:description" force="true"/>
<!-- ACME custom props -->
<show id="acme:documentId" force="true"/>
<show id="acme:securityClassification"/>
</field-visibility>
<appearance>
<field id="cm:name">
<control>
<control-param name="maxLength">255</control-param>
</control>
</field>
<field id="cm:title">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="cm:content" label-id="">
<control>
<control-param name="editorAppearance">explorer</control-param>
<control-param name="forceEditor">true</control-param>
</control>
</field>
<!-- ACME Props appearance -->
<set id="acmeDocSet" appearance="bordered-panel" label-id="form.set.label.acme.document"/>
<field id="acme:documentId" label-id="form.field.label.acme.documentId" set="acmeDocSet">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="acme:securityClassification" label-id="form.field.label.acme.securityClassification"
set="acmeDocSet"/>
</appearance>
</form>
</forms>
</config>
<!-- Create and search forms for acme:document -->
<config evaluator="model-type" condition="acme:document">
<forms>
<form>
<field-visibility>
<show id="cm:name"/>
<show id="cm:content" force="true"/>
<show id="cm:title" force="true"/>
<show id="cm:description" force="true"/>
<show id="mimetype"/>
<show id="app:editInline" force="true"/>
<!-- ACME custom props -->
<show id="acme:documentId" force="true"/>
<show id="acme:securityClassification"/>
</field-visibility>
<appearance>
<field id="cm:name">
<control>
<control-param name="maxLength">255</control-param>
</control>
</field>
<field id="cm:title">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="cm:content" label-id="">
<control>
<control-param name="editorAppearance">explorer</control-param>
</control>
</field>
<field id="mimetype">
<control template="/org/alfresco/components/form/controls/hidden.ftl">
<control-param name="contextProperty">mimeType</control-param>
</control>
</field>
<field id="app:editInline">
<control template="/org/alfresco/components/form/controls/hidden.ftl">
<control-param name="contextProperty">editInline</control-param>
</control>
</field>
<!-- ACME Props appearance -->
<set id="acmeDocSet" appearance="bordered-panel" label-id="form.set.label.acme.document"/>
<field id="acme:documentId" label-id="form.field.label.acme.documentId" set="acmeDocSet">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="acme:securityClassification" label-id="form.field.label.acme.securityClassification"
set="acmeDocSet"/>
</appearance>
</form>
<!-- Search form -->
<form id="search">
<field-visibility>
<show id="cm:name"/>
<show id="cm:title" force="true"/>
<show id="cm:description" force="true"/>
<show id="mimetype"/>
<show id="cm:modified"/>
<show id="cm:modifier"/>
<!-- ACME custom props -->
<show id="acme:documentId" force="true"/>
<show id="acme:securityClassification"/>
</field-visibility>
<appearance>
<field id="mimetype">
<control template="/org/alfresco/components/form/controls/mimetype.ftl"/>
</field>
<field id="cm:modifier">
<control>
<control-param name="forceEditable">true</control-param>
</control>
</field>
<field id="cm:modified">
<control template="/org/alfresco/components/form/controls/daterange.ftl"/>
</field>
<!-- ACME Props appearance -->
<set id="acmeDocSet" appearance="bordered-panel" label-id="form.set.label.acme.document"/>
<field id="acme:documentId" label-id="form.field.label.acme.documentId" set="acmeDocSet">
<control template="/org/alfresco/components/form/controls/textfield.ftl"/>
</field>
<field id="acme:securityClassification" label-id="form.field.label.acme.securityClassification"
set="acmeDocSet"/>
</appearance>
</form>
</forms>
</config>
</alfresco-config>

View File

@@ -1,14 +0,0 @@
<!-- Share configuration related to this particular Share module extension, such as:
- Doclib action config
- Form config
- Aspect and Type config
Note. Any configuration related to the whole Share.war webapp
(i.e. not specific to this share extension) should be
placed in the environment specific config:
allinone/share-war/src/main/resources/alfresco/web-extension/share-config-custom.xml file
-->
<alfresco-config>
</alfresco-config>

View File

@@ -5,7 +5,7 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--
Define beans related to this Share extension here, such as

View File

@@ -6,4 +6,20 @@
# Doc Lib Action Forms labels
#
# Labels for custom types and aspects
# Used in "Manage Aspects" and "Change Type" dialogs
#
type.acme_document=ACME Document
aspect.acme_securityClassified=Security Classified
# View,Edit,Search,Create Form labels for types and aspects
#
form.set.label.acme.document= ACME Document Information
form.field.label.acme.documentId=ACME Document Id
form.field.label.acme.securityClassification=Security Classification
# Advanced Search Form labels (only for types)
#
form.label.advancedsearch.acmeDocument=ACME Documents
form.description.advancedsearch.acmeDocument=Search for any ACME Documents

View File

@@ -0,0 +1,59 @@
#set( $symbol_dollar = '$' )
version: '3.4'
services:
${rootArtifactId}-share:
image: alfresco-share-${rootArtifactId}:development
build:
dockerfile: ./Dockerfile
context: ../../../${rootArtifactId}-share-docker/target
environment:
CATALINA_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888"
REPO_HOST: ${rootArtifactId}-acs
REPO_PORT: 8080
ports:
- "${symbol_dollar}{share.port}:8080"
- "${symbol_dollar}{share.debug.port}:8888"
${rootArtifactId}-acs:
image: alfresco-content-services-${rootArtifactId}:development
build:
dockerfile: ./Dockerfile
context: ../../../${rootArtifactId}-platform-docker/target
environment:
CATALINA_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888"
ports:
- "${symbol_dollar}{acs.port}:8080"
- "${symbol_dollar}{acs.debug.port}:8888"
volumes:
- ${rootArtifactId}-acs-volume:/usr/local/tomcat/alf_data
depends_on:
- ${rootArtifactId}-postgres
${rootArtifactId}-postgres:
image: postgres:9.6
environment:
POSTGRES_DB: alfresco
POSTGRES_USER: alfresco
POSTGRES_PASSWORD: alfresco
ports:
- "${symbol_dollar}{postgres.port}:5432"
volumes:
- ${rootArtifactId}-db-volume:/var/lib/postgresql/data
${rootArtifactId}-ass:
image: alfresco/alfresco-search-services:1.2.0
environment:
SOLR_ALFRESCO_HOST: ${rootArtifactId}-acs
SOLR_ALFRESCO_PORT: 8080
SOLR_SOLR_HOST: ${rootArtifactId}-ass
SOLR_SOLR_PORT: 8983
SOLR_CREATE_ALFRESCO_DEFAULTS: alfresco,archive
ports:
- "8983:8983"
volumes:
- ${rootArtifactId}-ass-volume:/opt/alfresco-search-services/contentstore
- ${rootArtifactId}-ass-volume:/opt/alfresco-search-services/data
volumes:
${rootArtifactId}-acs-volume:
external: true
${rootArtifactId}-db-volume:
external: true
${rootArtifactId}-ass-volume:
external: true

View File

@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<name>Integration Tests Module</name>
<description>Integration Tests module for in-container integration testing - part of AIO - SDK 4.0</description>
<packaging>jar</packaging> <!-- Note. this just runs Integration Tests, but it needs to be a JAR otherwise
nothing is compiled (i.e. you cannot set it to pom) -->
<parent>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}</artifactId>
<version>${version}</version>
</parent>
<properties>
</properties>
<dependencies>
<!-- Bring in any custom module that should be tested, by default we bring in the Platform JAR module
that is generated for the AIO project -->
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-platform-jar</artifactId>
<version>${version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>jrebel-maven-plugin</artifactId>
<version>${jrebel.version}</version>
<configuration>
<rebelXmlDirectory>${project.build.testOutputDirectory}</rebelXmlDirectory>
</configuration>
</plugin>
<!-- Make sure we attach the tests so we can include them when running -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Runs the integration tests, any class that follows naming convention
"**/IT*.java", "**/*IT.java", and "**/*ITCase.java" will be considered an integration test -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<systemPropertyVariables>
<acs.endpoint.path>${test.acs.endpoint.path}</acs.endpoint.path>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify-test</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,191 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.alfresco.model.ContentModel;
import org.alfresco.rad.test.AbstractAlfrescoIT;
import org.alfresco.rad.test.AlfrescoTestRunner;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.nodelocator.CompanyHomeNodeLocator;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* Integration Test sample for a custom content model.
* See {@link DemoComponentIT} for more info.
*
* @author martin.bergljung@alfresco.com
* @since 3.0
*/
@RunWith(value = AlfrescoTestRunner.class)
public class CustomContentModelIT extends AbstractAlfrescoIT {
private static final String ACME_MODEL_NS = "{http://www.acme.org/model/content/1.0}";
private static final String ACME_MODEL_LOCALNAME = "contentModel";
private static final String ACME_DOCUMENT_TYPE = "document";
private static final String ACME_SECURITY_CLASSIFIED_ASPECT = "securityClassified";
private static final String ACME_DOCUMENT_ID_PROPNAME = "documentId";
@Test
public void testCustomContentModelPresence() {
Collection<QName> allContentModels = getServiceRegistry().getDictionaryService().getAllModels();
QName customContentModelQName = createQName(ACME_MODEL_LOCALNAME);
assertTrue("Custom content model " + customContentModelQName.toString() +
" is not present", allContentModels.contains(customContentModelQName));
}
@Test
public void testCreateAcmeDocument() {
// Create the ACME Doc file
QName type = createQName(ACME_DOCUMENT_TYPE);
String textContent = "Hello World!";
String documentId = "DOC001";
Map<QName, Serializable> nodeProperties = new HashMap<>();
nodeProperties.put(createQName(ACME_DOCUMENT_ID_PROPNAME), documentId);
nodeProperties.put(createQName("securityClassification"), "Company Confidential");
NodeRef nodeRef = createNode("AcmeFile.txt", type, nodeProperties);
addFileContent(nodeRef, textContent);
// Add an Aspect to the file (could be a custom aspect...)
Map<QName, Serializable> aspectProperties = new HashMap<>();
aspectProperties.put(ContentModel.PROP_TITLE, "Some Doc Title");
aspectProperties.put(ContentModel.PROP_DESCRIPTION, "Some Doc Description");
getServiceRegistry().getNodeService().addAspect(nodeRef, ContentModel.ASPECT_TITLED, aspectProperties);
// Assert that the file is created correctly
assertEquals("Invalid type", type, getServiceRegistry().getNodeService().getType(nodeRef));
assertTrue("Missing security aspect",
getServiceRegistry().getNodeService().hasAspect(nodeRef, createQName(ACME_SECURITY_CLASSIFIED_ASPECT)));
assertTrue("Missing titled aspect",
getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_TITLED));
assertEquals("Invalid property value", documentId,
getServiceRegistry().getNodeService().getProperty(nodeRef, createQName(ACME_DOCUMENT_ID_PROPNAME)));
readTextContent(nodeRef).equals(textContent);
// Clean up node
if (nodeRef != null) {
getServiceRegistry().getNodeService().deleteNode(nodeRef);
}
}
/**
* ==================== Helper Methods ============================================================================
*/
/**
* Create a QName for the ACME content model
*
* @param localname the local content model name without namespace specified
* @return the full ACME QName including namespace
*/
private QName createQName(String localname) {
return QName.createQName(ACME_MODEL_NS + localname);
}
/**
* Create a new node, such as a file or a folder, with passed in type and properties
*
* @param name the name of the file or folder
* @param type the content model type
* @param properties the properties from the content model
* @return the Node Reference for the newly created node
*/
private NodeRef createNode(String name, QName type, Map<QName, Serializable> properties) {
NodeRef parentFolderNodeRef = getCompanyHomeNodeRef();
QName associationType = ContentModel.ASSOC_CONTAINS;
QName associationQName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,
QName.createValidLocalName(name));
properties.put(ContentModel.PROP_NAME, name);
ChildAssociationRef parentChildAssocRef = getServiceRegistry().getNodeService().createNode(
parentFolderNodeRef, associationType, associationQName, type, properties);
return parentChildAssocRef.getChildRef();
}
/**
* Add some text content to a file node
*
* @param nodeRef the node reference for the file that should have some text content added to it
* @param fileContent the text content
*/
private void addFileContent(NodeRef nodeRef, String fileContent) {
boolean updateContentPropertyAutomatically = true;
ContentWriter writer = getServiceRegistry().getContentService().getWriter(nodeRef, ContentModel.PROP_CONTENT,
updateContentPropertyAutomatically);
writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);
writer.setEncoding("UTF-8");
writer.putContent(fileContent);
}
/**
* Read text content for passed in file Node Reference
*
* @param nodeRef the node reference for a file containing text
* @return the text content
*/
private String readTextContent(NodeRef nodeRef) {
ContentReader reader = getServiceRegistry().getContentService().getReader(nodeRef, ContentModel.PROP_CONTENT);
if (reader == null) {
return ""; // Maybe it was a folder after all
}
InputStream is = reader.getContentInputStream();
try {
return IOUtils.toString(is, "UTF-8");
} catch (IOException ioe) {
throw new RuntimeException(ioe);
} finally {
if (is != null) {
try {
is.close();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
}
/**
* Get the node reference for the /Company Home top folder in Alfresco.
* Use the standard node locator service.
*
* @return the node reference for /Company Home
*/
private NodeRef getCompanyHomeNodeRef() {
return getServiceRegistry().getNodeLocatorService().getNode(CompanyHomeNodeLocator.NAME, null, null);
}
}

View File

@@ -0,0 +1,68 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.alfresco.rad.test.AbstractAlfrescoIT;
import org.alfresco.rad.test.AlfrescoTestRunner;
import org.alfresco.rad.test.Remote;
import org.alfresco.model.ContentModel;
import org.alfresco.service.cmr.repository.NodeRef;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Integration Test of the DemoComponent using the Alfresco Test Runner.
* The Alfresco Test Runner (i.e. AlfrescoTestRunner.class) will check if it is running in an Alfresco instance,
* if so it will execute normally locally. On the other hand, if it detects no
* Alfresco Spring context, then it will make a call to a custom Web Script that
* will execute this test in the running container remotely. The remote location is
* determined by the @Remote config.
*
* @author martin.bergljung@alfresco.com
* @since 3.0
*/
@RunWith(value = AlfrescoTestRunner.class)
public class DemoComponentIT extends AbstractAlfrescoIT {
@Test
public void testGetCompanyHome() {
DemoComponent demoComponent = (DemoComponent) getApplicationContext().getBean("${package}.DemoComponent");
NodeRef companyHome = demoComponent.getCompanyHome();
assertNotNull(companyHome);
String companyHomeName = (String) getServiceRegistry().getNodeService().getProperty(
companyHome, ContentModel.PROP_NAME);
assertNotNull(companyHomeName);
assertEquals("Company Home", companyHomeName);
}
@Test
public void testChildNodesCount() {
DemoComponent demoComponent = (DemoComponent) getApplicationContext().getBean("${package}.DemoComponent");
NodeRef companyHome = demoComponent.getCompanyHome();
int childNodeCount = demoComponent.childNodesCount(companyHome);
assertNotNull(childNodeCount);
// There are 7 folders by default under Company Home
assertEquals(7, childNodeCount);
}
}

View File

@@ -0,0 +1,85 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Integration Test (IT) for Hello World web script.
*
* @author martin.bergljung@alfresco.com
* @version 1.0
* @since 3.0
*/
public class HelloWorldWebScriptIT {
private static final String ACS_ENDPOINT_PROP = "acs.endpoint.path";
private static final String ACS_DEFAULT_ENDPOINT = "http://localhost:8080/alfresco";
@Test
public void testWebScriptCall() throws Exception {
String webscriptURL = getPlatformEndpoint() + "/service/sample/helloworld";
String expectedResponse = "Message: 'Hello from JS!' 'HelloFromJava'";
// Login credentials for Alfresco Repo
CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("admin", "admin");
provider.setCredentials(AuthScope.ANY, credentials);
// Create HTTP Client with credentials
CloseableHttpClient httpclient = HttpClientBuilder.create()
.setDefaultCredentialsProvider(provider)
.build();
// Execute Web Script call
try {
HttpGet httpget = new HttpGet(webscriptURL);
HttpResponse httpResponse = httpclient.execute(httpget);
assertEquals("Incorrect HTTP Response Status",
HttpStatus.SC_OK, httpResponse.getStatusLine().getStatusCode());
HttpEntity entity = httpResponse.getEntity();
assertNotNull("Response from Web Script is null", entity);
assertEquals("Incorrect Web Script Response", expectedResponse, EntityUtils.toString(entity));
} finally {
httpclient.close();
}
}
private String getPlatformEndpoint() {
final String platformEndpoint = System.getProperty(ACS_ENDPOINT_PROP);
return StringUtils.isNotBlank(platformEndpoint) ? platformEndpoint : ACS_DEFAULT_ENDPOINT;
}
}

View File

@@ -5,69 +5,84 @@
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<name>AIO - SDK 3.0 Beta</name>
<description>All-In-One (AIO) project for SDK 3.0</description>
<name>AIO - SDK 4.0</name>
<description>All-In-One (AIO) project for SDK 4.0</description>
<packaging>pom</packaging>
<properties>
<!-- Alfresco Maven Plugin version to use -->
<alfresco.sdk.version>@@alfresco.sdk.parent.version@@</alfresco.sdk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Alfresco Data directory, which will contain:
Content Store (i.e. the files we upload)
Database (i.e. the metadata for the uploaded files)
Search index (i.e. the indexed content and metadata)
Configured in alfresco-global.properties with the 'dir.root' property.
-->
<alfresco.data.location>${session.executionRootDirectory}/alf_data_dev</alfresco.data.location>
<!-- Duplicated with alfresco.solrHome in the plugin, we need them out here to do filtering -->
<solr.home>${alfresco.data.location}/solr</solr.home>
<solr.model.dir>${solr.home}/alfrescoModels</solr.model.dir>
<solr.content.dir>${solr.home}/index</solr.content.dir>
<!-- Properties used in dependency declarations, you don't need to change these -->
<alfresco.groupId>org.alfresco</alfresco.groupId>
<alfresco.platform.war.artifactId>alfresco-platform</alfresco.platform.war.artifactId>
<alfresco.share.war.artifactId>share</alfresco.share.war.artifactId>
<alfresco.bomDependencyArtifactId>@@alfresco.bomDependency.artifactId@@</alfresco.bomDependencyArtifactId>
<alfresco.platform.version>@@alfresco.platform.version@@</alfresco.platform.version>
<alfresco.share.version>@@alfresco.share.version@@</alfresco.share.version>
<!-- Alfresco Platform and Share webapp versions, these are the original Alfresco webapps that will be
customized and then deployed and run by the tomcat maven plugin when
executing for example $ mvn clean install alfresco:run -->
<alfresco.platform.version>5.2.a-EA</alfresco.platform.version>
<alfresco.share.version>5.1.g</alfresco.share.version>
<!-- Alfresco Surf version, if you change Share version you might need to change Surf version -->
<alfresco.surf.version>6.5</alfresco.surf.version>
<!-- Aikau framework version, it is released separately, so it can be useful to be able
to bring in newer versions with bug fixes etc -->
<aikau.version>1.0.82</aikau.version>
<!-- Alfresco Repo Database configuration.
By default it uses a flat file H2 database to be able to run embedded.
The H2 database implementation is brought in via the tomcat7-maven-plugin as a dependency.
The data files for the H2 database will be created in a relative path, such as alf_data_dev/h2_data/alf_dev,
see alfresco.db.url below.
For more information about the db parameters see:http://www.h2database.com/html/features.html
-->
<alfresco.db.name>alf_dev</alfresco.db.name>
<alfresco.db.username>alfresco</alfresco.db.username>
<alfresco.db.password>alfresco</alfresco.db.password>
<alfresco.db.params>AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=10000;MVCC=FALSE;LOCK_MODE=0
</alfresco.db.params>
<alfresco.db.url>jdbc:h2:${alfresco.data.location}/h2_data/${alfresco.db.name};${alfresco.db.params}
</alfresco.db.url>
<alfresco.db.datasource.class>org.h2.jdbcx.JdbcDataSource</alfresco.db.datasource.class>
<!-- Docker images -->
<docker.acs.image>@@alfresco.platform.docker.image@@</docker.acs.image>
<docker.share.image>@@alfresco.share.docker.image@@</docker.share.image>
<!-- JRebel Hot reloading of classpath stuff and web resource stuff -->
<jrebel.version>1.1.6</jrebel.version>
<!-- Environment to use, Alfresco Maven Plugin will copy alfresco-global.properties from this directory -->
<env>local</env>
<!-- Compile with Java 8, default is 5 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- Environment configuration properties -->
<share.port>8180</share.port>
<share.debug.port>9898</share.debug.port>
<acs.host>${artifactId}-acs</acs.host>
<acs.port>8080</acs.port>
<acs.debug.port>8888</acs.debug.port>
<postgres.port>5555</postgres.port>
<!-- This parameter is only required for those cases in which ACS is not exposed in http://localhost:8080/alfresco (i.e. Windows Docker) -->
<test.acs.endpoint.path>@@test.acs.endpoint.path@@</test.acs.endpoint.path>
</properties>
<!-- Libs used in Unit and Integration tests -->
<!-- IMPORTANT - Test dependencies need to be here in the top parent POM as
the Alfresco Maven IT Mojo runs as part of the parent project ... -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
<scope>test</scope>
</dependency>
<!-- The main Alfresco Repo dependency for compiling Java code in src/main/java -->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-remote-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Bring in Alfresco RAD so we get access to AlfrescoTestRunner classes -->
<dependency>
<groupId>org.alfresco.maven</groupId>
<artifactId>alfresco-rad</artifactId>
<version>${alfresco.sdk.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- This will import the dependencyManagement for all artifacts in the selected Alfresco platform.
@@ -78,7 +93,7 @@
-->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-platform-distribution</artifactId>
<artifactId>${alfresco.bomDependencyArtifactId}</artifactId>
<version>${alfresco.platform.version}</version>
<type>pom</type>
<scope>import</scope>
@@ -87,14 +102,14 @@
They are defined in alfresco-platform-distribution... -->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>${alfresco.share.war.artifactId}</artifactId>
<artifactId>share</artifactId>
<version>${alfresco.share.version}</version>
<type>war</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>${alfresco.share.war.artifactId}</artifactId>
<artifactId>share</artifactId>
<version>${alfresco.share.version}</version>
<classifier>classes</classifier>
<scope>provided</scope>
@@ -107,27 +122,20 @@
<scope>provided</scope>
</dependency>
<!-- Redefine the following surf dependencies as they have no resolvable version in the
alfresco-platform-distribution artifact -->
<dependency>
<groupId>org.alfresco.surf</groupId>
<artifactId>spring-surf</artifactId>
<version>${alfresco.surf.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.alfresco.surf</groupId>
<artifactId>spring-surf-api</artifactId>
<version>${alfresco.surf.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<!-- Build an AMP if 3rd party libs are needed by the extensions -->
<!--
Build an AMP if 3rd party libs are needed by the extensions
JARs are the default artifact produced in your modules, if you want to build an amp for each module
you have to enable this plugin and inspect the src/main/assembly.xml file if you want to customize
the layout of your AMP. The end result is that Maven will produce both a JAR file and an AMP with your
module.
-->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
@@ -153,94 +161,78 @@
</dependency>
</dependencies>
</plugin>
-->
<!-- Filter resources in any sub-project with this config -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions> <!-- jpg, jpeg, gif, bmp and png are added automatically -->
<nonFilteredFileExtension>ftl</nonFilteredFileExtension>
<nonFilteredFileExtension>acp</nonFilteredFileExtension>
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>doc</nonFilteredFileExtension>
<nonFilteredFileExtension>docx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>ppt</nonFilteredFileExtension>
<nonFilteredFileExtension>pptx</nonFilteredFileExtension>
<nonFilteredFileExtension>bin</nonFilteredFileExtension>
<nonFilteredFileExtension>lic</nonFilteredFileExtension>
<nonFilteredFileExtension>swf</nonFilteredFileExtension>
<nonFilteredFileExtension>zip</nonFilteredFileExtension>
<nonFilteredFileExtension>msg</nonFilteredFileExtension>
<nonFilteredFileExtension>jar</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>eot</nonFilteredFileExtension>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>woff2</nonFilteredFileExtension>
<nonFilteredFileExtension>css</nonFilteredFileExtension>
<nonFilteredFileExtension>ico</nonFilteredFileExtension>
<nonFilteredFileExtension>psd</nonFilteredFileExtension>
<nonFilteredFileExtension>js</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<!-- Make sure resources in sub-projects are filtered -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<!--
The Alfresco Maven Plugin contains all the logic to run the extension
in an embedded Tomcat with the H2 database.
-->
<plugin>
<groupId>org.alfresco.maven.plugin</groupId>
<artifactId>alfresco-maven-plugin</artifactId>
<version>${alfresco.sdk.version}</version>
<configuration>
<!-- Default is to run with a Community edition, change to 'enterprise' if using Enterprise edition -->
<alfrescoEdition>community</alfrescoEdition>
<!-- We need the flat file H2 database to run the Repo -->
<enableH2>true</enableH2>
<!-- We always need the Platform/Repo webapp - alfresco.war -->
<enablePlatform>true</enablePlatform>
<!-- Enable Solr webapp so we can use search -->
<enableSolr>true</enableSolr>
<!-- We need Share webapp, so we got a UI for working with the Repo -->
<enableShare>true</enableShare>
<!--
JARs and AMPs that should be overlayed/applied to the Platform/Repository WAR
(i.e. alfresco.war)
-->
<platformModules>
<moduleDependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-share-services</artifactId>
<version>${alfresco.share.version}</version>
<type>amp</type>
</moduleDependency>
<!-- Bring in custom Modules -->
<moduleDependency>
<groupId>${project.groupId}</groupId>
<artifactId>${artifactId}-platform-jar</artifactId>
<version>${project.version}</version>
</moduleDependency>
</platformModules>
<!--
JARs and AMPs that should be overlayed/applied to the Share WAR (i.e. share.war)
-->
<shareModules>
<moduleDependency>
<!-- Bring in a newer version, can coexist with older versions in the WAR disttribution,
newest version is picked -->
<groupId>${alfresco.groupId}</groupId>
<artifactId>aikau</artifactId>
<version>${aikau.version}</version>
</moduleDependency>
<!-- Bring in custom Modules -->
<moduleDependency>
<groupId>${project.groupId}</groupId>
<artifactId>${artifactId}-share-jar</artifactId>
<version>${project.version}</version>
</moduleDependency>
</shareModules>
</configuration>
</plugin>
<!-- Filter the test resource files in the AIO parent project, and do property substitutions.
We need this here to get it done before the Alfresco Maven Plugin run is executed. -->
We need this config so this is done before the Alfresco Maven Plugin 'run' is executed. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<inherited>false</inherited> <!-- Run only for the AIO parent Project -->
<inherited>false</inherited>
<!-- Run only for the AIO parent Project -->
<executions>
<execution>
<id>copy-and-filter-test-resources</id>
<id>copy-and-filter-docker-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
<outputDirectory>${project.build.outputDirectory}/docker</outputDirectory>
<resources>
<testResource>
<directory>src/test/resources</directory>
<resource>
<directory>docker</directory>
<filtering>true</filtering>
</testResource>
</resource>
</resources>
</configuration>
</execution>
@@ -262,26 +254,27 @@
</execution>
</executions>
<configuration>
<!--
addResourcesDirToRebelXml - default is false
Required if the resource directories are to be added to rebel.xml
-->
<addResourcesDirToRebelXml>true</addResourcesDirToRebelXml>
<!-- For more information about how to configure JRebel plugin see:
http://manuals.zeroturnaround.com/jrebel/standalone/maven.html#maven-rebel-xml -->
<classpath>
<fallback>all</fallback>
<resources>
<resource>
<directory>${project.build.outputDirectory}</directory>
<directory>${project.build.testOutputDirectory}</directory>
</resource>
</resources>
</classpath>
<!-- Always generate the rebel.xml file no matter what timestamps -->
<!--
alwaysGenerate - default is false
If 'false' - rebel.xml is generated if timestamps of pom.xml and the current rebel.xml file are not equal.
If 'true' - rebel.xml will always be generated
-->
<alwaysGenerate>true</alwaysGenerate>
</configuration>
</plugin>
</plugins>
<resources>
<!-- Filter the resource files in all the sub-projects, and do property substitutions -->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<!--
@@ -300,7 +293,13 @@
<updatePolicy>daily</updatePolicy>
</snapshots>
</repository>
<!-- Alfresco Enterprise Edition Artifacts, put username/pwd for server in settings.xml -->
<repository>
<id>alfresco-private-repository</id>
<url>https://artifacts.alfresco.com/nexus/content/groups/private</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>alfresco-plugin-public</id>
@@ -315,5 +314,4 @@
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>

View File

@@ -1,9 +1,118 @@
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Dev environment startup script for Alfresco Community ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
#set( $symbol_dollar = '$' )
@ECHO OFF
set MAVEN_OPTS=-Xms256m -Xmx2G
SET COMPOSE_FILE_PATH=%CD%\target\classes\docker\docker-compose.yml
mvn clean install -DskipTests=true alfresco:run
IF [%M2_HOME%]==[] (
SET MVN_EXEC=mvn
)
IF NOT [%M2_HOME%]==[] (
SET MVN_EXEC=%M2_HOME%\bin\mvn
)
IF [%1]==[] (
echo "Usage: %0 {build_start|start|stop|purge|tail|reload_share|reload_acs|build_test|test}"
GOTO END
)
IF %1==build_start (
CALL :down
CALL :build
CALL :start
CALL :tail
GOTO END
)
IF %1==start (
CALL :start
CALL :tail
GOTO END
)
IF %1==stop (
CALL :down
GOTO END
)
IF %1==purge (
CALL:down
CALL:purge
GOTO END
)
IF %1==tail (
CALL :tail
GOTO END
)
IF %1==reload_share (
CALL :build_share
CALL :start_share
CALL :tail
GOTO END
)
IF %1==reload_acs (
CALL :build_acs
CALL :start_acs
CALL :tail
GOTO END
)
IF %1==build_test (
CALL :down
CALL :build
CALL :start
CALL :test
CALL :tail_all
CALL :down
GOTO END
)
IF %1==test (
CALL :test
GOTO END
)
echo "Usage: %0 {build_start|start|stop|purge|tail|reload_share|reload_acs|build_test|test}"
:END
EXIT /B %ERRORLEVEL%
:start
docker volume create ${rootArtifactId}-acs-volume
docker volume create ${rootArtifactId}-db-volume
docker volume create ${rootArtifactId}-ass-volume
docker-compose -f "%COMPOSE_FILE_PATH%" up --build -d
EXIT /B 0
:start_share
docker-compose -f "%COMPOSE_FILE_PATH%" up --build -d ${rootArtifactId}-share
EXIT /B 0
:start_acs
docker-compose -f "%COMPOSE_FILE_PATH%" up --build -d ${rootArtifactId}-acs
EXIT /B 0
:down
docker-compose -f "%COMPOSE_FILE_PATH%" down
EXIT /B 0
:build
docker rmi alfresco-content-services-${rootArtifactId}:development
docker rmi alfresco-share-${rootArtifactId}:development
call %MVN_EXEC% clean install -DskipTests
EXIT /B 0
:build_share
docker-compose -f "%COMPOSE_FILE_PATH%" kill ${rootArtifactId}-share
docker-compose -f "%COMPOSE_FILE_PATH%" rm -f ${rootArtifactId}-share
docker rmi alfresco-share-${rootArtifactId}:development
call %MVN_EXEC% clean install -DskipTests -pl ${rootArtifactId}-share-jar
EXIT /B 0
:build_acs
docker-compose -f "%COMPOSE_FILE_PATH%" kill ${rootArtifactId}-acs
docker-compose -f "%COMPOSE_FILE_PATH%" rm -f ${rootArtifactId}-acs
docker rmi alfresco-content-services-${rootArtifactId}:development
call %MVN_EXEC% clean install -DskipTests -pl ${rootArtifactId}-platform-jar
EXIT /B 0
:tail
docker-compose -f "%COMPOSE_FILE_PATH%" logs -f
EXIT /B 0
:tail_all
docker-compose -f "%COMPOSE_FILE_PATH%" logs --tail="all"
EXIT /B 0
:test
call %MVN_EXEC% verify -pl integration-tests
EXIT /B 0
:purge
docker volume rm ${rootArtifactId}-acs-volume
docker volume rm ${rootArtifactId}-db-volume
docker volume rm ${rootArtifactId}-ass-volume
EXIT /B 0

View File

@@ -1,3 +1,113 @@
#!/bin/bash
#set( $symbol_dollar = '$' )
#!/bin/sh
MAVEN_OPTS="-Xms256m -Xmx2G" mvn clean install -DskipTests=true alfresco:run
export COMPOSE_FILE_PATH=${symbol_dollar}{PWD}/target/classes/docker/docker-compose.yml
if [ -z "${symbol_dollar}{M2_HOME}" ]; then
export MVN_EXEC="mvn"
else
export MVN_EXEC="${symbol_dollar}{M2_HOME}/bin/mvn"
fi
start() {
docker volume create ${rootArtifactId}-acs-volume
docker volume create ${rootArtifactId}-db-volume
docker volume create ${rootArtifactId}-ass-volume
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH up --build -d
}
start_share() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH up --build -d ${rootArtifactId}-share
}
start_acs() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH up --build -d ${rootArtifactId}-acs
}
down() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH down
}
purge() {
docker volume rm ${rootArtifactId}-acs-volume
docker volume rm ${rootArtifactId}-db-volume
docker volume rm ${rootArtifactId}-ass-volume
}
build() {
docker rmi alfresco-content-services-${rootArtifactId}:development
docker rmi alfresco-share-${rootArtifactId}:development
${symbol_dollar}MVN_EXEC clean install -DskipTests=true
}
build_share() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH kill ${rootArtifactId}-share
yes | docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH rm -f ${rootArtifactId}-share
docker rmi alfresco-share-${rootArtifactId}:development
${symbol_dollar}MVN_EXEC clean install -DskipTests=true -pl ${rootArtifactId}-share-jar
}
build_acs() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH kill ${rootArtifactId}-acs
yes | docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH rm -f ${rootArtifactId}-acs
docker rmi alfresco-content-services-${rootArtifactId}:development
${symbol_dollar}MVN_EXEC clean install -DskipTests=true -pl ${rootArtifactId}-platform-jar
}
tail() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs -f
}
tail_all() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs --tail="all"
}
test() {
${symbol_dollar}MVN_EXEC verify -pl integration-tests
}
case "${symbol_dollar}1" in
build_start)
down
build
start
tail
;;
start)
start
tail
;;
stop)
down
;;
purge)
down
purge
;;
tail)
tail
;;
reload_share)
build_share
start_share
tail
;;
reload_acs)
build_acs
start_acs
tail
;;
build_test)
down
build
start
test
tail_all
down
;;
test)
test
;;
*)
echo "Usage: ${symbol_dollar}0 {build_start|start|stop|purge|tail|reload_share|reload_acs|build_test|test}"
esac

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Context crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="${solr.home}" override="true"/>
<Environment name="solr/model/dir" type="java.lang.String" value="${solr.model.dir}" override="true"/>
<Environment name="solr/content/dir" type="java.lang.String" value="${solr.content.dir}" override="true"/>
</Context>

View File

@@ -1,4 +0,0 @@
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=allInOneTest
package=it.pkg

View File

@@ -1,5 +0,0 @@
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=allInOneTestRunEnterprise
package=it.pkg

View File

@@ -1 +0,0 @@
verify -Prun -Penterprise -Dmaven.tomcat.fork=true

View File

@@ -1,4 +0,0 @@
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=allInOneTestRun
package=it.pkg

View File

@@ -1 +0,0 @@
verify -Prun -Dmaven.tomcat.fork=true

View File

@@ -3,16 +3,16 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.alfresco.maven.archetype</groupId>
<artifactId>alfresco-amp-archetype</artifactId>
<artifactId>alfresco-platform-jar-archetype</artifactId>
<packaging>maven-archetype</packaging>
<name>Maven Alfresco SDK - Repository AMP Archetype</name>
<description>Sample project with full support for lifecycle and rapid development of Repository AMPs (Alfresco Module Packages)</description>
<name>Alfresco SDK - Platform JAR Archetype</name>
<description>Sample project with full support for lifecycle and rapid development of Platform/Repository JARs and AMPs (Alfresco Module Packages)</description>
<parent>
<groupId>org.alfresco.maven</groupId>
<artifactId>alfresco-sdk-aggregator</artifactId>
<version>3.0.0-beta-2</version>
<version>4.0.0-beta-1</version>
<relativePath>../../pom.xml</relativePath>
</parent>
@@ -39,10 +39,11 @@
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>

View File

@@ -0,0 +1,2 @@
def file = new File( request.getOutputDirectory(), request.getArtifactId()+"/run.sh" );
file.setExecutable(true, false);

View File

@@ -11,12 +11,46 @@
</requiredProperties>
<fileSets>
<fileSet encoding="UTF-8" filtered="true">
<directory>docker</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet filtered="false" packaged="false" encoding="UTF-8">
<directory>src/main/assembly</directory>
<includes>
<include>**/*.xml</include>
<include>**</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/main/docker/license</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/main/docker</directory>
<includes>
<include>license/**</include>
<include>Dockerfile</include>
<include>disable-webscript-caching-context.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</fileSet>
<fileSet encoding="UTF-8" filtered="true">
<directory>src/main/docker</directory>
<includes>
<include>**/*.properties</include>
</includes>
<excludes>
<exclude>license/**</exclude>
<exclude>Dockerfile</exclude>
<exclude>disable-webscript-caching-context.xml</exclude>
</excludes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
@@ -36,29 +70,15 @@
</includes>
<excludes>
<exclude>**/*-context.xml</exclude>
<exclude>**/log4j.properties</exclude>
</excludes>
</fileSet>
<fileSet encoding="UTF-8" filtered="true" packaged="false">
<directory>src/main/resources</directory>
<includes>
<include>**/*-context.xml</include>
<include>**/log4j.properties</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/test/resources</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/test/properties</directory>
<includes>
<include>**/*.properties</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<fileSet encoding="UTF-8" filtered="true">
<directory></directory>
<includes>
<include>run.sh</include>

View File

@@ -1,35 +1,42 @@
# Alfresco Platform JAR Module - SDK 3
# Alfresco ACS JAR Module - SDK 4.0
To run use `mvn clean install -DskipTests=true alfresco:run` or `./run.sh` and verify that it
This is an ACS project for Alfresco SDK 4.0.
* Runs the embedded Tomcat + H2 DB
* Runs Alfresco Platform (Repository)
* Runs Alfresco Solr4
* Packages both as JAR and AMP assembly
Try cloning it, change the port and play with `enableShare`, `enablePlatform` and `enableSolr`.
Protip: This module will work just fine as a Share module if the files are changed and
if the enablePlatform and enableSolr is disabled.
Run with `./run.sh build_start` or `./run.bat build_start` and verify that it
* Runs Alfresco Content Service (ACS)
* (Optional) Runs Alfresco Share
* Runs Alfresco Search Service (ASS)
* Runs PostgreSQL database
* Deploys the JAR assembled module
All the services of the project are now run as docker containers. The run script offers the next tasks:
* `build_start`. Build the whole project, recreate the ACS docker image, start the dockerised environment composed by ACS, Share (optional), ASS
and PostgreSQL and tail the logs of all the containers.
* `start`. Start the dockerised environment without building the project and tail the logs of all the containers.
* `stop`. Stop the dockerised environment.
* `purge`. Stop the dockerised container and delete all the persistent data (docker volumes).
* `tail`. Tail the logs of all the containers.
* `reload_acs`. Build the ACS module, recreate the ACS docker image and restart the ACS container.
* `build_test`. Build the whole project, recreate the ACS docker image, start the dockerised environment, execute the integration tests and stop
the environment.
* `test`. Execute the integration tests (the environment must be already started).
# Few things to notice
* No parent pom
* WAR assembly is handled by the Alfresco Maven Plugin configuration
* No WAR projects, the jars are included in the custom docker images
* No runner project - the Alfresco environment is now managed through [Docker](https://www.docker.com/)
* Standard JAR packaging and layout
* Works seamlessly with Eclipse and IntelliJ IDEA
* JRebel for hot reloading, JRebel maven plugin for generating rebel.xml, agent usage: `MAVEN_OPTS=-Xms256m -Xmx1G -agentpath:/home/martin/apps/jrebel/lib/libjrebel64.so`
* JRebel for hot reloading, JRebel maven plugin for generating rebel.xml [JRebel integration documentation]
* AMP as an assembly
* [Configurable Run mojo](https://github.com/Alfresco/alfresco-sdk/blob/sdk-3.0/plugins/alfresco-maven-plugin/src/main/java/org/alfresco/maven/plugin/RunMojo.java) in the `alfresco-maven-plugin`
* No unit testing/functional tests just yet
* Persistent test data through restart thanks to the use of Docker volumes for ACS, ASS and database data
* Resources loaded from META-INF
* Web Fragment (this includes a sample servlet configured via web fragment)
# TODO
* Abstract assembly into a dependency so we don't have to ship the assembly in the archetype
* Purge,
* Functional/remote unit tests

View File

@@ -0,0 +1,55 @@
#set( $symbol_dollar = '$' )
version: '3.4'
services:
# Optional
# ${rootArtifactId}-share:
# image: ${symbol_dollar}{docker.share.image}:${symbol_dollar}{alfresco.share.version}
# environment:
# REPO_HOST: ${rootArtifactId}-acs
# REPO_PORT: 8080
# ports:
# - "${symbol_dollar}{share.port}:8080"
${rootArtifactId}-acs:
image: alfresco-content-services-${rootArtifactId}:development
build:
dockerfile: ./Dockerfile
context: ../../../target
environment:
CATALINA_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888"
ports:
- "${symbol_dollar}{acs.port}:8080"
- "${symbol_dollar}{acs.debug.port}:8888"
volumes:
- ${rootArtifactId}-acs-volume:/usr/local/tomcat/alf_data
depends_on:
- ${rootArtifactId}-postgres
${rootArtifactId}-postgres:
image: postgres:9.6
environment:
POSTGRES_DB: alfresco
POSTGRES_USER: alfresco
POSTGRES_PASSWORD: alfresco
ports:
- "${symbol_dollar}{postgres.port}:5432"
volumes:
- ${rootArtifactId}-db-volume:/var/lib/postgresql/data
${rootArtifactId}-ass:
image: alfresco/alfresco-search-services:1.2.0
environment:
SOLR_ALFRESCO_HOST: ${rootArtifactId}-acs
SOLR_ALFRESCO_PORT: 8080
SOLR_SOLR_HOST: ${rootArtifactId}-ass
SOLR_SOLR_PORT: 8983
SOLR_CREATE_ALFRESCO_DEFAULTS: alfresco,archive
ports:
- "8983:8983"
volumes:
- ${rootArtifactId}-ass-volume:/opt/alfresco-search-services/contentstore
- ${rootArtifactId}-ass-volume:/opt/alfresco-search-services/data
volumes:
${rootArtifactId}-acs-volume:
external: true
${rootArtifactId}-db-volume:
external: true
${rootArtifactId}-ass-volume:
external: true

View File

@@ -5,72 +5,94 @@
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<name>${artifactId} Platform Jar Module - SDK 3</name>
<description>Platform JAR Module (to be included in the alfresco.war) - SDK 3</description>
<name>${artifactId} Platform/Repository JAR Module</name>
<description>Platform/Repo JAR Module (to be included in the alfresco.war)</description>
<packaging>jar</packaging>
<properties>
<!-- Alfresco Maven Plugin version to use -->
<alfresco.sdk.version>@@alfresco.sdk.parent.version@@</alfresco.sdk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Alfresco Data directory, which will contain:
Content Store (i.e. the files we upload)
Database (i.e. the metadata for the uploaded files)
Search index (i.e. the indexed content and metadata)
Configured in alfresco-global.properties with the 'dir.root' property.
-->
<alfresco.data.location>${session.executionRootDirectory}/alf_data_dev</alfresco.data.location>
<!-- Duplicated with alfresco.solrHome in the plugin, we need them out here to do filtering -->
<solr.home>${alfresco.data.location}/solr</solr.home>
<solr.model.dir>${solr.home}/alfrescoModels</solr.model.dir>
<solr.content.dir>${solr.home}/index</solr.content.dir>
<!-- Properties used in dependency declarations, you don't need to change these -->
<alfresco.groupId>org.alfresco</alfresco.groupId>
<alfresco.bomDependencyArtifactId>@@alfresco.bomDependency.artifactId@@</alfresco.bomDependencyArtifactId>
<alfresco.platform.version>@@alfresco.platform.version@@</alfresco.platform.version>
<alfresco.share.version>@@alfresco.share.version@@</alfresco.share.version>
<!-- Alfresco Platform webapp version, this is the original Alfresco webapp that will be
customized and then deployed and run by the tomcat maven plugin when
executing for example $ mvn clean install alfresco:run -->
<alfresco.platform.version>5.2.a-EA</alfresco.platform.version>
<!-- Alfresco Share version, so we can bring in correct alfresco-share-services artifact -->
<alfresco.share.version>5.1.g</alfresco.share.version>
<!-- Alfresco Repo Database configuration.
By default it uses a flat file H2 database to be able to run embedded.
The H2 database implementation is brought in via the tomcat7-maven-plugin as a dependency.
The data files for the H2 database will be created in a relative path, such as alf_data_dev/h2_data/alf_dev,
see alfresco.db.url below.
For more information about the db parameters see:http://www.h2database.com/html/features.html
-->
<alfresco.db.name>alf_dev</alfresco.db.name>
<alfresco.db.username>alfresco</alfresco.db.username>
<alfresco.db.password>alfresco</alfresco.db.password>
<alfresco.db.params>AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=10000;MVCC=FALSE;LOCK_MODE=0
</alfresco.db.params>
<alfresco.db.url>jdbc:h2:${alfresco.data.location}/h2_data/${alfresco.db.name};${alfresco.db.params}
</alfresco.db.url>
<alfresco.db.datasource.class>org.h2.jdbcx.JdbcDataSource</alfresco.db.datasource.class>
<!-- Docker images -->
<docker.acs.image>@@alfresco.platform.docker.image@@</docker.acs.image>
<docker.share.image>@@alfresco.share.docker.image@@</docker.share.image>
<!-- JRebel Hot reloading of classpath stuff and web resource stuff -->
<jrebel.version>1.1.6</jrebel.version>
<!-- Environment to use, Alfresco Maven Plugin will copy alfresco-global.properties from this directory -->
<env>local</env>
<!-- Compile with Java 8, default is 5 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- Environment configuration properties -->
<share.port>8180</share.port>
<acs.host>${artifactId}-acs</acs.host>
<acs.port>8080</acs.port>
<acs.debug.port>8888</acs.debug.port>
<postgres.port>5555</postgres.port>
<!-- This parameter is only required for those cases in which ACS is not exposed in http://localhost:8080/alfresco (i.e. Windows Docker) -->
<test.acs.endpoint.path></test.acs.endpoint.path>
</properties>
<!-- This will import the dependencyManagement for all artifacts in the selected Alfresco platform.
NOTE: You still need to define dependencies in your POM,
but you can omit version as it's enforced by this dependencyManagement.
NOTE: It defaults to the latest version this SDK pom has been tested with,
but alfresco version can/should be overridden in your project's pom
-->
<!-- Libs used in Unit and Integration tests -->
<!-- IMPORTANT - Test dependencies need to be here in the top parent POM as
the Alfresco Maven IT Mojo runs as part of the parent project ... -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
<scope>test</scope>
</dependency>
<!-- The main Alfresco Repo dependency for compiling Java code in src/main/java -->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-remote-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- Bring in Alfresco RAD so we get access to AlfrescoTestRunner classes -->
<dependency>
<groupId>org.alfresco.maven</groupId>
<artifactId>alfresco-rad</artifactId>
<version>${alfresco.sdk.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- This will import the dependencyManagement for all artifacts in the selected Alfresco platform.
NOTE: You still need to define dependencies in your POM, but you can omit version as
it's enforced by this dependencyManagement.
NOTE: It defaults to the latest version this SDK pom has been tested with,
but alfresco version can/should be overridden in your project's pom
-->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-platform-distribution</artifactId>
<artifactId>${alfresco.bomDependencyArtifactId}</artifactId>
<version>${alfresco.platform.version}</version>
<type>pom</type>
<scope>import</scope>
@@ -78,56 +100,218 @@
</dependencies>
</dependencyManagement>
<dependencies>
<!-- The main Alfresco Repo dependency for compiling Java code in src/main/java -->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-repository</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!--
The Alfresco Maven Plugin contains all the logic to run the extension
in an embedded Tomcat with the H2 database.
-->
<!-- Filter the test resource files in the AIO parent project, and do property substitutions.
We need this config so this is done before the Alfresco Maven Plugin 'run' is executed. -->
<plugin>
<groupId>org.alfresco.maven.plugin</groupId>
<artifactId>alfresco-maven-plugin</artifactId>
<version>${alfresco.sdk.version}</version>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<!-- Default is to run with a Community edition, change to 'enterprise' if using Enterprise edition -->
<alfrescoEdition>community</alfrescoEdition>
<!-- We need the flat file H2 database to run the Repo -->
<enableH2>true</enableH2>
<!-- This is a platform extension JAR, so we need the platform webapp (alfresco.war) -->
<enablePlatform>true</enablePlatform>
<!-- Enable Solr so we can use search, our Repo extension probably need search -->
<enableSolr>true</enableSolr>
<!-- We don't need the share.war if we don't have any UI extensions -->
<enableShare>false</enableShare>
<!--
JARs and AMPs that should be overlayed/applied to the Platform/Repository WAR
(i.e. alfresco.war)
No need to include our self...
-->
<platformModules>
<!-- This AMP is needed if we are going to access the platform webapp from a Share webapp -->
<moduleDependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-share-services</artifactId>
<version>${alfresco.share.version}</version>
<type>amp</type>
</moduleDependency>
</platformModules>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions> <!-- jpg, jpeg, gif, bmp and png are added automatically -->
<nonFilteredFileExtension>ftl</nonFilteredFileExtension>
<nonFilteredFileExtension>acp</nonFilteredFileExtension>
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>doc</nonFilteredFileExtension>
<nonFilteredFileExtension>docx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>ppt</nonFilteredFileExtension>
<nonFilteredFileExtension>pptx</nonFilteredFileExtension>
<nonFilteredFileExtension>bin</nonFilteredFileExtension>
<nonFilteredFileExtension>lic</nonFilteredFileExtension>
<nonFilteredFileExtension>swf</nonFilteredFileExtension>
<nonFilteredFileExtension>zip</nonFilteredFileExtension>
<nonFilteredFileExtension>msg</nonFilteredFileExtension>
<nonFilteredFileExtension>jar</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>eot</nonFilteredFileExtension>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>woff2</nonFilteredFileExtension>
<nonFilteredFileExtension>css</nonFilteredFileExtension>
<nonFilteredFileExtension>ico</nonFilteredFileExtension>
<nonFilteredFileExtension>psd</nonFilteredFileExtension>
<nonFilteredFileExtension>js</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
<executions>
<execution>
<id>copy-and-filter-docker-compose-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.outputDirectory}/docker</outputDirectory>
<resources>
<resource>
<directory>docker</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-and-filter-docker-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.jar</exclude>
<exclude>**/*.so</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-and-filter-docker-resources-non-filtered</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>false</filtering>
<includes>
<include>**/*.jar</include>
<include>**/*.so</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!-- Build an AMP if 3rd party libs are needed by the extension -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.2</version>
<executions>
<!-- Copy the repository extension and the dependencies required for execute integration tests -->
<execution>
<id>copy-repo-extension</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<!-- Test dependencies -->
<!-- We need these dependencies installed in ACS in order to execute the test remotely making use of the Alfresco RAD module -->
<artifactItem>
<groupId>org.alfresco.maven</groupId>
<artifactId>alfresco-rad</artifactId>
<version>${alfresco.sdk.version}</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
<!-- Copy other dependencies (JARs or AMPs) declared in the platform module -->
<execution>
<id>copy-third-party-dependencies</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- Runs the integration tests, any class that follows naming convention
"**/IT*.java", "**/*IT.java", and "**/*ITCase.java" will be considered an integration test -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<systemPropertyVariables>
<acs.endpoint.path>${test.acs.endpoint.path}</acs.endpoint.path>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify-test</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.19.1</version>
</dependency>
</dependencies>
</plugin>
<!--
Build an AMP if 3rd party libs are needed by the extensions
JARs are the default artifact produced in your modules, if you want to build an amp for each module
you have to enable this plugin and inspect the src/main/assembly.xml file if you want to customize
the layout of your AMP. The end result is that Maven will produce both a JAR file and an AMP with your
module.
-->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
@@ -151,6 +335,7 @@
</dependency>
</dependencies>
</plugin>
-->
<!-- Hot reloading with JRebel -->
<plugin>
@@ -167,13 +352,23 @@
</execution>
</executions>
<configuration>
<!--
addResourcesDirToRebelXml - default is false
Required if the resource directories are to be added to rebel.xml
-->
<addResourcesDirToRebelXml>true</addResourcesDirToRebelXml>
<!-- For more information about how to configure JRebel plugin see:
http://manuals.zeroturnaround.com/jrebel/standalone/maven.html#maven-rebel-xml -->
<classpath>
<fallback>all</fallback>
<resources>
<resource>
<directory>${project.build.outputDirectory}</directory>
<directory>${project.build.testOutputDirectory}</directory>
</resource>
</resources>
</classpath>
<!-- Always generate the rebel.xml file no matter what timestamps -->
<!--
alwaysGenerate - default is false
If 'false' - rebel.xml is generated if timestamps of pom.xml and the current rebel.xml file are not equal.
If 'true' - rebel.xml will always be generated
-->
<alwaysGenerate>true</alwaysGenerate>
</configuration>
</plugin>
@@ -211,7 +406,13 @@
<updatePolicy>daily</updatePolicy>
</snapshots>
</repository>
<!-- Alfresco Enterprise Edition Artifacts, put username/pwd for server in settings.xml -->
<repository>
<id>alfresco-private-repository</id>
<url>https://artifacts.alfresco.com/nexus/content/groups/private</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>alfresco-plugin-public</id>
@@ -226,5 +427,4 @@
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
</project>

View File

@@ -1,8 +1,87 @@
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Dev environment startup script for Alfresco Community ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
#set( $symbol_dollar = '$' )
@ECHO OFF
set MAVEN_OPTS=-Xms256m -Xmx2G
SET COMPOSE_FILE_PATH=%CD%\target\classes\docker\docker-compose.yml
mvn clean install -DskipTests=true alfresco:run
IF [%M2_HOME%]==[] (
SET MVN_EXEC=mvn
)
IF NOT [%M2_HOME%]==[] (
SET MVN_EXEC=%M2_HOME%\bin\mvn
)
IF [%1]==[] (
echo "Usage: %0 {build_start|start|stop|purge|tail|build_test|test}"
GOTO END
)
IF %1==build_start (
CALL :down
CALL :build
CALL :start
CALL :tail
GOTO END
)
IF %1==start (
CALL :start
CALL :tail
GOTO END
)
IF %1==stop (
CALL :down
GOTO END
)
IF %1==purge (
CALL:down
CALL:purge
GOTO END
)
IF %1==tail (
CALL :tail
GOTO END
)
IF %1==build_test (
CALL :down
CALL :build
CALL :start
CALL :test
CALL :tail_all
CALL :down
GOTO END
)
IF %1==test (
CALL :test
GOTO END
)
echo "Usage: %0 {build_start|start|stop|purge|tail|build_test|test}"
:END
EXIT /B %ERRORLEVEL%
:start
docker volume create ${rootArtifactId}-acs-volume
docker volume create ${rootArtifactId}-db-volume
docker volume create ${rootArtifactId}-ass-volume
docker-compose -f "%COMPOSE_FILE_PATH%" up --build -d
EXIT /B 0
:down
docker-compose -f "%COMPOSE_FILE_PATH%" down
EXIT /B 0
:build
docker rmi alfresco-content-services-${rootArtifactId}:development
call %MVN_EXEC% clean install -DskipTests
EXIT /B 0
:tail
docker-compose -f "%COMPOSE_FILE_PATH%" logs -f
EXIT /B 0
:tail_all
docker-compose -f "%COMPOSE_FILE_PATH%" logs --tail="all"
EXIT /B 0
:test
call %MVN_EXEC% verify
EXIT /B 0
:purge
docker volume rm ${rootArtifactId}-acs-volume
docker volume rm ${rootArtifactId}-db-volume
docker volume rm ${rootArtifactId}-ass-volume
EXIT /B 0

View File

@@ -1,3 +1,80 @@
#!/bin/bash
#set( $symbol_dollar = '$' )
#!/bin/sh
MAVEN_OPTS="-Xms256m -Xmx2G" mvn clean install -DskipTests=true alfresco:run
export COMPOSE_FILE_PATH=${symbol_dollar}{PWD}/target/classes/docker/docker-compose.yml
if [ -z "${symbol_dollar}{M2_HOME}" ]; then
export MVN_EXEC="mvn"
else
export MVN_EXEC="${symbol_dollar}{M2_HOME}/bin/mvn"
fi
start() {
docker volume create ${rootArtifactId}-acs-volume
docker volume create ${rootArtifactId}-db-volume
docker volume create ${rootArtifactId}-ass-volume
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH up --build -d
}
down() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH down
}
purge() {
docker volume rm ${rootArtifactId}-acs-volume
docker volume rm ${rootArtifactId}-db-volume
docker volume rm ${rootArtifactId}-ass-volume
}
build() {
docker rmi alfresco-content-services-${rootArtifactId}:development
${symbol_dollar}MVN_EXEC clean install -DskipTests=true
}
tail() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs -f
}
tail_all() {
docker-compose -f ${symbol_dollar}COMPOSE_FILE_PATH logs --tail="all"
}
test() {
${symbol_dollar}MVN_EXEC verify
}
case "${symbol_dollar}1" in
build_start)
down
build
start
tail
;;
start)
start
tail
;;
stop)
down
;;
purge)
down
purge
;;
tail)
tail
;;
build_test)
down
build
start
test
tail_all
down
;;
test)
test
;;
*)
echo "Usage: ${symbol_dollar}0 {build_start|start|stop|purge|tail|build_test|test}"
esac

View File

@@ -3,6 +3,19 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<!--
Note that the Module dependency specified in the configuration section for the Alfresco Maven Plugin
needs to be set to amp if any 3rd party libs should be applied by MMT:
`
<platformModules>
<moduleDependency>
<groupId>${project.groupId}</groupId>
<artifactId>some-platform-jar</artifactId>
<version>${project.version}</version>
<type>amp</type>
</moduleDependency>
-->
<id>build-amp-file</id>
<formats>
@@ -12,12 +25,33 @@
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<!-- Filter module.properties and put at top level in the AMP -->
<file>
<source>src/main/resources/alfresco/module/${project.artifactId}/module.properties</source>
<filtered>true</filtered>
</file>
<!-- Include AMP -> WAR mapping file (needed for custom mappings) -->
<file>
<source>src/main/assembly/file-mapping.properties</source>
<filtered>false</filtered>
</file>
</files>
<fileSets>
<!-- Anything in the assembly/web directory will end up in the /web directory in the AMP -->
<fileSet>
<directory>src/main/assembly/web</directory>
<outputDirectory>web</outputDirectory>
<filtered>true</filtered> <!-- Will filter files and substitute POM props such as for example ${project.name} -->
<excludes>
<exclude>README.md</exclude>
</excludes>
</fileSet>
</fileSets>
<!-- Include the project artifact (JAR) in the /lib directory in the AMP, and any 3rd party libraries (JARs)
used by the customization.
-->
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>

View File

@@ -0,0 +1,27 @@
# Custom AMP to WAR location mappings
#
# The following property can be used to include the standard set of mappings.
# The contents of this file will override any defaults. The default is
# 'true', i.e. the default mappings will be augmented or modified by values in
# this file.
#
# Default mappings are:
#
# /config=/WEB-INF/classes
# /lib=/WEB-INF/lib
# /licenses=/WEB-INF/licenses
# /web/jsp=/jsp
# /web/css=/css
# /web/images=/images
# /web/scripts=/scripts
# /web/php=/php
#
include.default=true
#
# Custom mappings. If 'include.default' is false, then this is the complete set.
# Map /web to / in AMP so we can override things like favicon.ico
#
/web=/

View File

@@ -0,0 +1,22 @@
# Web resources that should override out-of-the-box files
Put here any web resources that should override out-of-the-box
web resources, such as favicon.ico. They will then end up in the
*/web* directory in the AMP, and applied to the WAR, and override
any existing web resources in the Alfresco.WAR.
**Note**. Module dependency needs to be set to amp for the web resources to be applied by MMT:
`
<moduleDependency>
<groupId>${project.groupId}</groupId>
<artifactId>some-platform-jar</artifactId>
<version>${project.version}</version>
<type>amp</type>
</moduleDependency>
`
**Important**. New web resources should not be located here, but instead
in the usual place in the *src/main/resources/META-INF/resources* directory.

View File

@@ -0,0 +1,18 @@
FROM ${docker.acs.image}:${alfresco.platform.version}
ARG TOMCAT_DIR=/usr/local/tomcat
# Copy Dockerfile to avoid an error if no JARs exist
COPY Dockerfile extensions/*.jar $TOMCAT_DIR/webapps/alfresco/WEB-INF/lib/
# Copy Dockerfile to avoid an error if no AMPs exist
COPY Dockerfile extensions/*.amp $TOMCAT_DIR/amps/
RUN java -jar $TOMCAT_DIR/alfresco-mmt/alfresco-mmt*.jar install \
$TOMCAT_DIR/amps $TOMCAT_DIR/webapps/alfresco -directory -nobackup -force
COPY alfresco-global.properties $TOMCAT_DIR/shared/classes/alfresco-global.properties
COPY dev-log4j.properties $TOMCAT_DIR/shared/classes/alfresco/extension
COPY disable-webscript-caching-context.xml $TOMCAT_DIR/shared/classes/alfresco/extension
# Copy Dockerfile to avoid an error if no license file exists
COPY Dockerfile license/*.* $TOMCAT_DIR/webapps/alfresco/WEB-INF/classes/alfresco/extension/license/

View File

@@ -1,3 +1,6 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
@@ -15,15 +18,12 @@
# RUN TIME PROPERTIES
# -------------------
########################################################################################################################
# Alfresco configuration for running locally
#
# Alfresco configuration for running locally with PostgreSQL Database
#
# Configuration when running Tomcat embedded from Maven.
# This will create the alf_data_dev directory relative to Tomcat run folder.
# Property values from the POM but it can also be edited here.
########################################################################################################################
dir.root=${alfresco.data.location}
#
# Alfresco Repo Webapp (alfresco.war) context, ports etc
alfresco.context=alfresco
@@ -34,19 +34,11 @@ alfresco.protocol=http
# Alfresco Share Webapp (share.war) context, ports etc
share.context=share
share.host=localhost
share.port=8080
share.port=8180
share.protocol=http
index.subsystem.name=solr4
solr.host=localhost
solr.port=8080
solr.secureComms=none
# Don't try and recover any index
index.recovery.mode=NONE
# As we run embedded, we set Lucene
# TODO: Find a better solution for indexing, as buildonly (embedded Lucene) is deprecated and going to be removed soon
#index.subsystem.name=buildonly
# These jobs seem to require Lucene (Unsupported Operation with Solr) so we disable them / set to future date
# See https://forums.alfresco.com/en/viewtopic.php?f=52&t=41597
@@ -58,16 +50,30 @@ wcmqs.publishQueueProcessor.schedule=0 50 2 * * ? 2060
# Fail or not when there are node integrity checker errors
integrity.failOnError=true
# Database connection properties
db.driver=${alfresco.db.datasource.class}
db.url=${alfresco.db.url}
db.username=${alfresco.db.username}
db.password=${alfresco.db.password}
# Alfresco Repository PostgreSQL Database configuration.
# The PostgreSQL Driver is brought in via the tomcat7-maven-plugin as a dependency.
db.driver=org.postgresql.Driver
# This Alfresco Platform Configuration file should be used for custom properties that are introduced by this module.
# Define default values for all properties here.
# System Administrators can override these values in environment specific configurations in
# alfresco/tomcat/shared/classes/alfresco-global.properties.
#
index.subsystem.name=solr6
solr.host=${rootArtifactId}-ass
solr.port=8983
solr.secureComms=none
db.username=alfresco
db.password=alfresco
db.pool.initial=10
db.pool.max=100
hibernate.dialect=org.hibernate.dialect.H2Dialect
db.url=jdbc:postgresql://${rootArtifactId}-postgres:5432/alfresco
# File servers related properties
# For local runs we disable CIFS and FTP
cifs.enabled=false
ftp.enabled=false
ftp.enabled=false
csrf.filter.enabled=false

View File

@@ -1,7 +1,9 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Set root logger level to error
log4j.rootLogger=error, Console, File
###### Console appender definition #######
# All outputs currently set to be a ConsoleAppender.
log4j.appender.Console=org.apache.log4j.ConsoleAppender
@@ -11,7 +13,6 @@ log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} %x %-5p [%c{3}] [%t] %m%n
#log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
###### File appender definition #######
log4j.appender.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.File=alfresco.log
log4j.appender.File.Append=true
@@ -19,13 +20,11 @@ log4j.appender.File.DatePattern='.'yyyy-MM-dd
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{yyyy-MM-dd} %d{ABSOLUTE} %-5p [%c] [%t] %m%n
###### Hibernate specific appender definition #######
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
###### Log level overrides #######
# Commented-in loggers will be exposed as JMX MBeans (refer to org.alfresco.repo.admin.Log4JHierarchyInit)
# Hence, generally useful loggers should be listed with at least ERROR level to allow simple runtime
@@ -61,8 +60,7 @@ log4j.logger.org.apache.myfaces.taglib=error
# OpenOfficeConnection
log4j.logger.net.sf.jooreports.openoffice.connection=fatal
# log prepared statement cache activity ###
log4j.logger.org.hibernate.ps.PreparedStatementCache=info
# log prepared statement cache activity log4j.logger.org.hibernate.ps.PreparedStatementCache=info
# Alfresco
log4j.logger.org.alfresco=error
@@ -212,7 +210,6 @@ log4j.logger.org.jbpm.graph.def.GraphElement=fatal
#log4j.logger.org.alfresco.repo.googledocs=debug
###### Scripting #######
# Web Framework
log4j.logger.org.springframework.extensions.webscripts=info
@@ -261,4 +258,13 @@ log4j.logger.org.alfresco.repo.usage.RepoUsageMonitor=info
# Authorization
log4j.logger.org.alfresco.enterprise.repo.authorization.AuthorizationService=info
log4j.logger.org.alfresco.enterprise.repo.authorization.AuthorizationsConsistencyMonitor=warn
log4j.logger.org.alfresco.enterprise.repo.authorization.AuthorizationsConsistencyMonitor=warn
#-----------------------------------------------------------------------
# Platform module logging
#-----------------------------------------------------------------------
log4j.logger.${package}.platformsample.DemoComponent=debug
log4j.logger.${package}.platformsample.HelloWorldWebScript=debug

View File

@@ -0,0 +1,51 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Enable hotswap so that changes in this module will be automatically reloaded
# Watch for changed class files on watchResources path and reload class definition in the running application.
autoHotswap=true
#autoHotswap.port=8000
# Add a directory prior to application classpath (load classes and resources).
#
# This may be useful for example in multi module maven project to load class changes from upstream project
# classes. Set extraClasspath to upstream project compiler output and .class file will have precedence to
# classes from built JAR file.
# i.e. monitor /target/classes
# should work with extraClasspath=${project.build.outputDirectory}
# If not try
extraClasspath=/usr/local/tomcat/hotswap-agent
# Comma separated list of disabled plugins
# Use plugin name - e.g.
# Hotswapper, AnonymousClassPatch, WatchResources, Hibernate, Spring, Jersey2, Jetty, Tomcat,
# ZK, Logback, JSF, Seam, ELResolver, OsgiEquinox, Proxy, WebObjects, Weld, JBossModules, Resteasy, Gae
disabledPlugins=Hibernate,Spring
# Add a directory prior to webapp path (load webapp resources).
#
# Load web application resources (such as HTML, JSP, CSS, ...) from this directory prior to default processing.
# Use this setting to set to serve resources from source directory directly (e.g. src/main/webapp).
extraWebappContext=/usr/local/tomcat/hotswap-agent/${rootArtifactId}/target/classes/META-INF/resources;
# Load static web resources from different directory.
#
# This setting is dependent on application server plugin(Jetty, Tomcat, JBoss, ...)
webappDir=/usr/local/tomcat/hotswap-agent/${rootArtifactId}/target/classes/META-INF/resources;
# Watch for changes in a directory (resources only).
#
# Similar to extraClasspath this property adds classpath when searching for resources (not classes).
# While extra classpath just modifies the classloader, this setting does nothing until the resource
# is really changed.
#
# Sometimes it is not possible to point extraClasspath to your i.e. src/main/resources, because there are multiple
# replacements of resources in a building step (maven filtering resource option).
# This setting will leave i.e. src/target/classes as default source for resources, but after the resource is modified
# in src/main/resources, the new changed resource is served instead.
# watchResources=
LOGGER.org.hotswap.agent=DEBUG
#LOGGER.org.hotswap.agent.plugin=TRACE
#LOGGER.org.hotswap.agent.watch=TRACE
#LOGGER.org.hotswap.agent.command=TRACE

View File

@@ -0,0 +1,6 @@
# Enterprise License location
Put the Alfresco Enterprise license file in this directory.
It will then be copied into the ACS container in the
$TOMCAT_DIR/WEB-INF/classes/alfresco/extension/license directory.

View File

@@ -1,6 +1,23 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
/**

View File

@@ -1,22 +1,23 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.alfresco.repo.module.AbstractModuleComponent;
@@ -35,7 +36,7 @@ import org.apache.commons.logging.LogFactory;
* @author Maurizio Pillitu
*/
public class DemoComponent extends AbstractModuleComponent {
Log log = LogFactory.getLog(DemoComponent.class);
private static Log logger = LogFactory.getLog(DemoComponent.class);
private NodeService nodeService;
@@ -55,8 +56,8 @@ public class DemoComponent extends AbstractModuleComponent {
@Override
protected void executeInternal() throws Throwable {
System.out.println("DemoComponent has been executed");
log.debug("Test debug logging. Congratulation your JAR Module is working");
log.info("This is only for information purposed. Better remove me from the log in Production");
logger.debug("Test debug logging. Congratulation your JAR Module is working");
logger.info("This is only for information purposes. Better remove me from the log in Production");
}
/**

View File

@@ -1,28 +1,31 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.DeclarativeWebScript;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.HashMap;
import java.util.Map;
@@ -34,10 +37,15 @@ import java.util.Map;
* @since 2.1.0
*/
public class HelloWorldWebScript extends DeclarativeWebScript {
private static Log logger = LogFactory.getLog(HelloWorldWebScript.class);
protected Map<String, Object> executeImpl(
WebScriptRequest req, Status status, Cache cache) {
Map<String, Object> model = new HashMap<String, Object>();
model.put("fromJava", "HelloFromJava");
logger.debug("Your 'Hello World' Web Script was called!");
return model;
}
}

View File

@@ -5,19 +5,25 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- The bootstrap-context.xml file is used for patch definitions, importers,
workflow, and loading custom content models. -->
<!-- Registration of new models -->
<bean id="${package}.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
<bean id="${artifactId}.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
<property name="models">
<list>
<value>alfresco/module/${project.artifactId}/model/content-model.xml</value>
<value>alfresco/module/${project.artifactId}/model/workflow-model.xml</value>
</list>
</property>
<property name="labels">
<list>
<!-- Bootstrap Resource Bundles for the content model types, aspects, properties etc -->
<value>alfresco/module/${project.artifactId}/messages/content-model</value>
</list>
</property>
</bean>
<bean id="${package}.sampleprocess.workflowBootstrap" parent="workflowDeployer">

View File

@@ -2,41 +2,43 @@
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- A simple class that is initialized by Spring -->
<bean id="${package}.exampleBean" class="${package}.platformsample.Demo" init-method="init" />
<bean id="${package}.Demo" class="${package}.platformsample.Demo" init-method="init" />
<!-- A simple module component that will be executed once.
Note. this module component will only be executed once, and then there will be an entry for it in the Repo.
So doing for example $ mvn clean install -Prun twice will only execute this component the first time.
Note. this module component will only be executed once, and then there will be an entry for it in the Repo DB.
So doing for example $ mvn clean install alfresco:run twice will only execute this component the first time.
You need to remove /alf_data_dev for it to be executed again. -->
<bean id="${package}.exampleComponent" class="${package}.platformsample.DemoComponent" parent="module.baseComponent" >
<bean id="${package}.DemoComponent" class="${package}.platformsample.DemoComponent" parent="module.baseComponent" >
<property name="moduleId" value="${artifactId}" /> <!-- See module.properties -->
<property name="name" value="exampleComponent" />
<property name="name" value="DemoComponent" />
<property name="description" value="A demonstration component" />
<property name="sinceVersion" value="1.0" />
<property name="appliesFromVersion" value="1.0" />
<property name="appliesFromVersion" value="0.99" /> <!-- 1.0 would not work here when using SNAPSHOT version in project -->
<property name="nodeService" ref="NodeService" />
<property name="nodeLocatorService" ref="nodeLocatorService" />
</bean>
</beans>

View File

@@ -2,7 +2,6 @@
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
@@ -19,7 +18,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="webscript.alfresco.tutorials.helloworld.get"
class="${package}.platformsample.HelloWorldWebScript"
parent="webscript">

View File

@@ -1,43 +0,0 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#-----------------------------------------------------------------------
# ${artifactId} module log4j.properties
#
# NOTE
# ----
# Log4j uses the following logging levels:
# debug,info,warn,error,fatal
#
# To set the logging level of {fullClassName} to {loglevel},
# add a line to this file of the following form:
#
# log4j.logger.{fullClassName}={loglevel}
#
# For example, to make 'com.example.MyExample' produce 'debug'
# logs, add a line like this:
#
# log4j.logger.com.example.MyExample=debug
#
#
# WARNING
# -------
# Log properties in this log4j.properties file override/augment
# those in the webapp's main log4j.properties.
#
#-----------------------------------------------------------------------
log4j.logger.${package}.platformsample.DemoComponent=debug

View File

@@ -0,0 +1,6 @@
# This file should contain content model labels
acme_contentModel.type.acme_document.title=ACME Document
acme_contentModel.aspect.acme_securityClassified.title=ACME Security Classified
acme_contentModel.property.acme_documentId.title=Document Id
acme_contentModel.property.acme_securityClassification.title=Security Classification

View File

@@ -73,7 +73,6 @@
<atomic>true</atomic>
<stored>false</stored>
<tokenised>false</tokenised>
<facetable>true</facetable>
</index>
<constraints>
<constraint ref="acme:securityClassificationOptions"/>

View File

@@ -15,12 +15,18 @@
limitations under the License.
-->
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- This is filtered by Maven at build time, so that module name is single sourced. -->
<!-- Note. The bootstrap-context.xml file has to be loaded first.
Otherwise your custom models are not yet loaded when your service beans are instantiated and you
cannot for example register policies on them. -->
<import resource="classpath:alfresco/module/${project.artifactId}/context/bootstrap-context.xml" />
<import resource="classpath:alfresco/module/${project.artifactId}/context/service-context.xml" />
<import resource="classpath:alfresco/module/${project.artifactId}/context/bootstrap-context.xml" />
<import resource="classpath:alfresco/module/${project.artifactId}/context/webscript-context.xml" />
</beans>

View File

@@ -0,0 +1,56 @@
#set($symbol_pound='#')
#set($symbol_dollar='$')
#set($symbol_escape='\' )
/**
* Copyright (C) 2017 Alfresco Software Limited.
* <p/>
* This file is part of the Alfresco SDK project.
* <p/>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ${package}.platformsample;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.extensions.webscripts.*;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Unit testing the Web Script Java Controller
*
* @author martin.bergljung@alfresco.com
* @version 1.0
* @since 3.0
*/
public class HelloWorldWebScriptControllerTest {
@Test
public void testController() {
WebScriptRequest req = Mockito.mock(WebScriptRequest.class);
Status status = Mockito.mock(Status.class);
Cache cache = Mockito.mock(Cache.class);
String helloPropName = "fromJava";
String helloPropExpectedValue = "HelloFromJava";
HelloWorldWebScript ws = new HelloWorldWebScript();
Map<String, Object> model = ws.executeImpl(req, status, cache);
assertNotNull("Response from Web Script Java Controller is null", model);
assertEquals("Incorrect Web Script Java Controller Response",
helloPropExpectedValue, model.get(helloPropName));
}
}

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Context crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="${solr.home}" override="true"/>
<Environment name="solr/model/dir" type="java.lang.String" value="${solr.model.dir}" override="true"/>
<Environment name="solr/content/dir" type="java.lang.String" value="${solr.content.dir}" override="true"/>
</Context>

View File

@@ -1,5 +0,0 @@
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=repoAmpTest
package=it.pkg

View File

@@ -1,4 +0,0 @@
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=repoAmpTestRun
package=it.pkg

View File

@@ -1 +0,0 @@
verify -Pamp-to-war -Dmaven.tomcat.fork=true

View File

@@ -1,4 +0,0 @@
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=repoAmpTestRunEnterprise
package=it.pkg

View File

@@ -1 +0,0 @@
verify -Pamp-to-war -Penterprise -Dmaven.tomcat.fork=true

View File

@@ -3,18 +3,18 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.alfresco.maven.archetype</groupId>
<artifactId>share-amp-archetype</artifactId>
<artifactId>alfresco-share-jar-archetype</artifactId>
<packaging>maven-archetype</packaging>
<name>Maven Alfresco SDK - Share AMP Archetype</name>
<description>Share project with full support for lifecycle and rapid development of AMPs (Alfresco Module
<name>Alfresco SDK - Share JAR Archetype</name>
<description>Share project with full support for lifecycle and rapid development of JARs and AMPs (Alfresco Module
Packages)
</description>
<parent>
<groupId>org.alfresco.maven</groupId>
<artifactId>alfresco-sdk-aggregator</artifactId>
<version>3.0.0-beta-2</version>
<version>4.0.0-beta-1</version>
<relativePath>../../pom.xml</relativePath>
</parent>
@@ -44,8 +44,8 @@
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>

View File

@@ -0,0 +1,2 @@
def file = new File( request.getOutputDirectory(), request.getArtifactId()+"/run.sh" );
file.setExecutable(true, false);

View File

@@ -11,12 +11,38 @@
</requiredProperties>
<fileSets>
<fileSet encoding="UTF-8" filtered="true">
<directory>docker</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet filtered="false" packaged="false" encoding="UTF-8">
<directory>src/main/assembly</directory>
<includes>
<include>**/*.xml</include>
<include>**</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="false">
<directory>src/main/docker</directory>
<includes>
<include>Dockerfile</include>
<include>share-config-custom.xml</include>
</includes>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</fileSet>
<fileSet encoding="UTF-8" filtered="true">
<directory>src/main/docker</directory>
<includes>
<include>**/*.properties</include>
</includes>
<excludes>
<exclude>Dockerfile</exclude>
<exclude>share-config-custom.xml</exclude>
</excludes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
@@ -51,14 +77,7 @@
<exclude>**/__artifactId__-example-widgets.xml</exclude>
</excludes>
</fileSet>
<fileSet filtered="true" packaged="false" encoding="UTF-8">
<directory>src/test/resources</directory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<fileSet encoding="UTF-8" filtered="true">
<directory></directory>
<includes>
<include>run.sh</include>

View File

@@ -1,33 +1,43 @@
# Alfresco Share JAR Module - SDK 3
# Alfresco Share JAR Module - SDK 4.0
To run this module use `mvn clean install -DskipTests=true alfresco:run` or `./run.sh` and verify that it
This is a Share project for Alfresco SDK 4.0.
* Runs the embedded Tomcat + H2 DB
Run with `./run.sh build_start` or `./run.bat build_start` and verify that it
* Runs Alfresco Content Service (ACS)
* Runs Alfresco Share
* Packages both as JAR and AMP assembly
* Runs Alfresco Search Service (ASS)
* Runs PostgreSQL database
* Deploys the JAR assembled module
All the services of the project are now run as docker containers. The run script offers the next tasks:
* `build_start`. Build the whole project, recreate the Share docker image, start the dockerised environment composed by ACS, Share, ASS and
PostgreSQL and tail the logs of all the containers.
* `start`. Start the dockerised environment without building the project and tail the logs of all the containers.
* `stop`. Stop the dockerised environment.
* `purge`. Stop the dockerised container and delete all the persistent data (docker volumes).
* `tail`. Tail the logs of all the containers.
* `reload_share`. Build the Share module, recreate the Share docker image and restart the Share container.
* `reload_acs`. Build the ACS module, recreate the ACS docker image and restart the ACS container.
* `build_test`. Build the whole project, recreate the Share docker image, start the dockerised environment, execute the integration tests from the
`integration-tests` module and stop the environment.
* `test`. Execute the integration tests (the environment must be already started).
Note. You access Share as follows: http://localhost:8081/share
Note. You need an Alfresco Platform instance running at http://localhost:8080/alfresco that Share can talk to.
Typically you will just kick off a platform-jar module for that.
# Few things to notice
* No parent pom
* WAR assembly is handled by the Alfresco Maven Plugin configuration, if needed
* No WAR projects, the jars are included in the custom docker images
* No runner project - the Alfresco environment is now managed through [Docker](https://www.docker.com/)
* Standard JAR packaging and layout
* Works seamlessly with Eclipse and IntelliJ IDEA
* JRebel for hot reloading, JRebel maven plugin for generating rebel.xml, agent usage: `MAVEN_OPTS=-Xms256m -Xmx1G -agentpath:/home/martin/apps/jrebel/lib/libjrebel64.so`
* JRebel for hot reloading, JRebel maven plugin for generating rebel.xml [JRebel integration documentation]
* AMP as an assembly
* [Configurable Run mojo](https://github.com/Alfresco/alfresco-sdk/blob/sdk-3.0/plugins/alfresco-maven-plugin/src/main/java/org/alfresco/maven/plugin/RunMojo.java) in the `alfresco-maven-plugin`
* No unit testing/functional tests just yet
* Persistent test data through restart thanks to the use of Docker volumes for ACS, ASS and database data
* Resources loaded from META-INF
* Web Fragment (this includes a sample servlet configured via web fragment)
# TODO
* Abstract assembly into a dependency so we don't have to ship the assembly in the archetype
* Functional/remote unit tests

View File

@@ -0,0 +1,66 @@
#set( $symbol_dollar = '$' )
version: '3.4'
services:
${rootArtifactId}-share:
image: alfresco-share-${rootArtifactId}:development
build:
dockerfile: ./Dockerfile
context: ../../../target
environment:
CATALINA_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888"
REPO_HOST: ${rootArtifactId}-acs
REPO_PORT: 8080
ports:
- "${symbol_dollar}{share.port}:8080"
- "${symbol_dollar}{share.debug.port}:8888"
${rootArtifactId}-acs:
image: ${symbol_dollar}{docker.acs.image}:${symbol_dollar}{alfresco.platform.version}
environment:
JAVA_OPTS: "
-Ddb.driver=org.postgresql.Driver
-Ddb.username=alfresco
-Ddb.password=alfresco
-Ddb.url=jdbc:postgresql://${rootArtifactId}-postgres:5432/alfresco
-Dsolr.host=${rootArtifactId}-ass
-Dsolr.port=8983
-Dsolr.secureComms=none
-Dsolr.base.url=/solr
-Dindex.subsystem.name=solr6
-Dcsrf.filter.enabled=false
"
ports:
- "${symbol_dollar}{acs.port}:8080"
volumes:
- ${rootArtifactId}-acs-volume:/usr/local/tomcat/alf_data
depends_on:
- ${rootArtifactId}-postgres
${rootArtifactId}-postgres:
image: postgres:9.6
environment:
POSTGRES_DB: alfresco
POSTGRES_USER: alfresco
POSTGRES_PASSWORD: alfresco
ports:
- "${symbol_dollar}{postgres.port}:5432"
volumes:
- ${rootArtifactId}-db-volume:/var/lib/postgresql/data
${rootArtifactId}-ass:
image: alfresco/alfresco-search-services:1.2.0
environment:
SOLR_ALFRESCO_HOST: ${rootArtifactId}-acs
SOLR_ALFRESCO_PORT: 8080
SOLR_SOLR_HOST: ${rootArtifactId}-ass
SOLR_SOLR_PORT: 8983
SOLR_CREATE_ALFRESCO_DEFAULTS: alfresco,archive
ports:
- "8983:8983"
volumes:
- ${rootArtifactId}-ass-volume:/opt/alfresco-search-services/contentstore
- ${rootArtifactId}-ass-volume:/opt/alfresco-search-services/data
volumes:
${rootArtifactId}-acs-volume:
external: true
${rootArtifactId}-db-volume:
external: true
${rootArtifactId}-ass-volume:
external: true

View File

@@ -5,98 +5,217 @@
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<name>${artifactId} Share Jar Module - SDK 3</name>
<description>Share JAR Module (to be included in the share.war) - SDK 3</description>
<name>${artifactId} Share JAR Module</name>
<description>Sample Share JAR Module (to be included in the share.war)</description>
<packaging>jar</packaging>
<properties>
<alfresco.sdk.version>@@alfresco.sdk.parent.version@@</alfresco.sdk.version>
<!-- Alfresco Maven Plugin version to use -->
<alfresco.sdk.version>@@alfresco.sdk.parent.version@@</alfresco.sdk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Properties used in dependency declarations, you don't need to change these -->
<alfresco.groupId>org.alfresco</alfresco.groupId>
<alfresco.share.war.artifactId>share</alfresco.share.war.artifactId>
<alfresco.bomDependencyArtifactId>@@alfresco.bomDependency.artifactId@@</alfresco.bomDependencyArtifactId>
<alfresco.platform.version>@@alfresco.platform.version@@</alfresco.platform.version>
<alfresco.share.version>@@alfresco.share.version@@</alfresco.share.version>
<!-- Alfresco Share webapp version, this is the original Alfresco webapp that will be
customized and then deployed and run by the tomcat maven plugin when
executing for example $ mvn clean install alfresco:run -->
<alfresco.share.version>5.1.g</alfresco.share.version>
<!-- Alfresco Surf version, if you change Share version you might need to change Surf version -->
<alfresco.surf.version>6.5</alfresco.surf.version>
<!-- Aikau framework version, it is released separately, so it can be useful to be able
to bring in newer versions with bug fixes etc -->
<aikau.version>1.0.82</aikau.version>
<!-- Since alfresco.war (i.e. the Platform/Repository) is already running on port 8080, we run Share.WAR on port 8081.
If Alfresco Platform is not running, then generate a platform-jar-module and start it up. -->
<maven.tomcat.port>8081</maven.tomcat.port>
<!-- Docker images -->
<docker.acs.image>@@alfresco.platform.docker.image@@</docker.acs.image>
<docker.share.image>@@alfresco.share.docker.image@@</docker.share.image>
<!-- JRebel Hot reloading of classpath stuff and web resource stuff -->
<jrebel.version>1.1.6</jrebel.version>
<!-- Compile with Java 8, default is 5 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- Environment configuration properties -->
<share.port>8180</share.port>
<share.debug.port>9898</share.debug.port>
<acs.host>${artifactId}-acs</acs.host>
<acs.port>8080</acs.port>
<postgres.port>5555</postgres.port>
</properties>
<!-- Libs used in Unit and Integration tests -->
<!-- IMPORTANT - Test dependencies need to be here in the top parent POM as
the Alfresco Maven IT Mojo runs as part of the parent project ... -->
<dependencies>
<!-- Following dependencies are needed for compiling Java code in src/main/java -->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>${alfresco.share.war.artifactId}</artifactId>
<version>${alfresco.share.version}</version>
<artifactId>share</artifactId>
<classifier>classes</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.alfresco.surf</groupId>
<artifactId>spring-surf-api</artifactId>
<version>${alfresco.surf.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- This will import the dependencyManagement for all artifacts in the selected Alfresco platform.
NOTE: You still need to define dependencies in your POM, but you can omit version as
it's enforced by this dependencyManagement.
NOTE: It defaults to the latest version this SDK pom has been tested with,
but alfresco version can/should be overridden in your project's pom
-->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>${alfresco.bomDependencyArtifactId}</artifactId>
<version>${alfresco.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Redefine the following Share dependencies as they have different version numbers than platform.
They are defined in alfresco-platform-distribution... -->
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>share</artifactId>
<version>${alfresco.share.version}</version>
<type>war</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>share</artifactId>
<version>${alfresco.share.version}</version>
<classifier>classes</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>${alfresco.groupId}</groupId>
<artifactId>alfresco-web-framework-commons</artifactId>
<version>${alfresco.share.version}</version>
<classifier>classes</classifier>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!--
The Alfresco Maven Plugin contains all the logic to run the extension
in an embedded Tomcat with the H2 database.
-->
<!-- Filter the test resource files in the AIO parent project, and do property substitutions.
We need this config so this is done before the Alfresco Maven Plugin 'run' is executed. -->
<plugin>
<groupId>org.alfresco.maven.plugin</groupId>
<artifactId>alfresco-maven-plugin</artifactId>
<version>${alfresco.sdk.version}</version>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<!-- Default is to run with a Community edition, change to 'enterprise' if using Enterprise edition -->
<alfrescoEdition>community</alfrescoEdition>
<!-- We assume that the platform/repository is already running on localhost:8080 -->
<enableH2>false</enableH2>
<enablePlatform>false</enablePlatform>
<enableSolr>false</enableSolr>
<!-- Enable the Share webapp, which is what we customize with Share JAR modules -->
<enableShare>true</enableShare>
<!--
JARs and AMPs that should be overlayed/applied to the Share WAR
(i.e. share.war)
No need to include our self...
-->
<shareModules>
<moduleDependency>
<!-- Bring in a newer version, can coexist with older versions in the WAR disttribution,
newest version is picked. -->
<groupId>${alfresco.groupId}</groupId>
<artifactId>aikau</artifactId>
<version>${aikau.version}</version>
</moduleDependency>
</shareModules>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions> <!-- jpg, jpeg, gif, bmp and png are added automatically -->
<nonFilteredFileExtension>ftl</nonFilteredFileExtension>
<nonFilteredFileExtension>acp</nonFilteredFileExtension>
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>doc</nonFilteredFileExtension>
<nonFilteredFileExtension>docx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>ppt</nonFilteredFileExtension>
<nonFilteredFileExtension>pptx</nonFilteredFileExtension>
<nonFilteredFileExtension>bin</nonFilteredFileExtension>
<nonFilteredFileExtension>lic</nonFilteredFileExtension>
<nonFilteredFileExtension>swf</nonFilteredFileExtension>
<nonFilteredFileExtension>zip</nonFilteredFileExtension>
<nonFilteredFileExtension>msg</nonFilteredFileExtension>
<nonFilteredFileExtension>jar</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>eot</nonFilteredFileExtension>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>woff2</nonFilteredFileExtension>
<nonFilteredFileExtension>css</nonFilteredFileExtension>
<nonFilteredFileExtension>ico</nonFilteredFileExtension>
<nonFilteredFileExtension>psd</nonFilteredFileExtension>
<nonFilteredFileExtension>js</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
<executions>
<execution>
<id>copy-and-filter-docker-compose-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.outputDirectory}/docker</outputDirectory>
<resources>
<resource>
<directory>docker</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>copy-and-filter-docker-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!-- Build an AMP if 3rd party libs are needed by the extension -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.2</version>
<executions>
<!-- Copy the share extension -->
<execution>
<id>copy-repo-extension</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
<!-- Copy other dependencies (JARs or AMPs) declared in the share module -->
<execution>
<id>copy-third-party-dependencies</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/extensions</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!--
Build an AMP if 3rd party libs are needed by the extensions
JARs are the default artifact produced in your modules, if you want to build an amp for each module
you have to enable this plugin and inspect the src/main/assembly.xml file if you want to customize
the layout of your AMP. The end result is that Maven will produce both a JAR file and an AMP with your
module.
-->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
@@ -120,6 +239,7 @@
</dependency>
</dependencies>
</plugin>
-->
<!-- Hot reloading with JRebel -->
<plugin>
@@ -136,13 +256,23 @@
</execution>
</executions>
<configuration>
<!--
addResourcesDirToRebelXml - default is false
Required if the resource directories are to be added to rebel.xml
-->
<addResourcesDirToRebelXml>true</addResourcesDirToRebelXml>
<!-- For more information about how to configure JRebel plugin see:
http://manuals.zeroturnaround.com/jrebel/standalone/maven.html#maven-rebel-xml -->
<classpath>
<fallback>all</fallback>
<resources>
<resource>
<directory>${project.build.outputDirectory}</directory>
<directory>${project.build.testOutputDirectory}</directory>
</resource>
</resources>
</classpath>
<!-- Always generate the rebel.xml file no matter what timestamps -->
<!--
alwaysGenerate - default is false
If 'false' - rebel.xml is generated if timestamps of pom.xml and the current rebel.xml file are not equal.
If 'true' - rebel.xml will always be generated
-->
<alwaysGenerate>true</alwaysGenerate>
</configuration>
</plugin>
@@ -180,7 +310,13 @@
<updatePolicy>daily</updatePolicy>
</snapshots>
</repository>
<!-- Alfresco Enterprise Edition Artifacts, put username/pwd for server in settings.xml -->
<repository>
<id>alfresco-private-repository</id>
<url>https://artifacts.alfresco.com/nexus/content/groups/private</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>alfresco-plugin-public</id>
@@ -195,5 +331,4 @@
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>

View File

@@ -1,9 +1,103 @@
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Dev environment startup script for Alfresco Community. ::
:: ::
:: Note. requires Alfresco.war to be running in another ::
:: Tomcat on port 8080. ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
#set( $symbol_dollar = '$' )
@ECHO OFF
mvn clean install -DskipTests=true alfresco:run
SET COMPOSE_FILE_PATH=%CD%\target\classes\docker\docker-compose.yml
IF [%M2_HOME%]==[] (
SET MVN_EXEC=mvn
)
IF NOT [%M2_HOME%]==[] (
SET MVN_EXEC=%M2_HOME%\bin\mvn
)
IF [%1]==[] (
echo "Usage: %0 {build_start|start|stop|purge|tail|reload_share|build_test|test}"
GOTO END
)
IF %1==build_start (
CALL :down
CALL :build
CALL :start
CALL :tail
GOTO END
)
IF %1==start (
CALL :start
CALL :tail
GOTO END
)
IF %1==stop (
CALL :down
GOTO END
)
IF %1==purge (
CALL:down
CALL:purge
GOTO END
)
IF %1==tail (
CALL :tail
GOTO END
)
IF %1==reload_share (
CALL :build_share
CALL :start_share
CALL :tail
GOTO END
)
IF %1==build_test (
CALL :down
CALL :build
CALL :start
CALL :test
CALL :tail_all
CALL :down
GOTO END
)
IF %1==test (
CALL :test
GOTO END
)
echo "Usage: %0 {build_start|start|stop|purge|tail|reload_share|build_test|test}"
:END
EXIT /B %ERRORLEVEL%
:start
docker volume create ${rootArtifactId}-acs-volume
docker volume create ${rootArtifactId}-db-volume
docker volume create ${rootArtifactId}-ass-volume
docker-compose -f "%COMPOSE_FILE_PATH%" up --build -d
EXIT /B 0
:start_share
docker-compose -f "%COMPOSE_FILE_PATH%" up --build -d ${rootArtifactId}-share
EXIT /B 0
:down
docker-compose -f "%COMPOSE_FILE_PATH%" down
EXIT /B 0
:build
docker rmi alfresco-content-services-${rootArtifactId}:development
docker rmi alfresco-share-${rootArtifactId}:development
call %MVN_EXEC% clean install -DskipTests
EXIT /B 0
:build_share
docker-compose -f "%COMPOSE_FILE_PATH%" kill ${rootArtifactId}-share
docker-compose -f "%COMPOSE_FILE_PATH%" rm -f ${rootArtifactId}-share
docker rmi alfresco-share-${rootArtifactId}:development
call %MVN_EXEC% clean install -DskipTests
EXIT /B 0
:tail
docker-compose -f "%COMPOSE_FILE_PATH%" logs -f
EXIT /B 0
:tail_all
docker-compose -f "%COMPOSE_FILE_PATH%" logs --tail="all"
EXIT /B 0
:test
call %MVN_EXEC% verify
EXIT /B 0
:purge
docker volume rm ${rootArtifactId}-acs-volume
docker volume rm ${rootArtifactId}-db-volume
docker volume rm ${rootArtifactId}-ass-volume
EXIT /B 0

Some files were not shown because too many files have changed in this diff Show More