Take your Alfresco productivity to the next level with the Alfresco SDK 2.1.0

As a first tangible result (first relase out!) in my new role in Alfresco Product Management and of the renewed investment Alfresco is putting in the developer platform, developer services and communications, no more than 5 months later than the 2.0.0 release, I am pleased to announce that the Alfresco SDK 2.1.0 is now released and available in Maven Central.

Many thanks go to Martin, for bringing new life to the Alfresco Developer Platform team and to Ole for stepping above and beyond his Developer Evangelist role and help tie up the release. Kudos also to Community members like Bindu who helped with testing and feedback.

This release works for Community and Enterprise (fully supported by Alfresco) and it shows strong signs of our cross-department (Dev, Product, Docs, Support) effort on a much more seamless and productive developer experience for our beloved ecosystem out there.

Here are the full release notes, but let me give you a couple of highlights:

  1. First off, building on the SDK 2.0.0 Spring Loaded approach, we have completed the effort for a full hot reloading experience, both for Alfresco and Share. Until more fixes go in product, we have introduced for this purpose a couple of plugin goals in the alfresco-maven-plugin, which are automatically invoked (or you can manually do that) to refresh webscripts on Alfresco and Share. If you are using your Eclipse, this should happen automatically on save, for IDEA you might night a bit of manual configuration. See RAD (Rapid Application Development) documentation for details.
  2. The SDK now supports Solr4 in the All-in-One archetype: this was the top-most requested issue in 2.0.0, so I am glad we got that out!
  3. In an effort to deliver higher and higher quality extension, we have introduced support for functional and regression testing, leveraging the Selenium based share-po library, which we use internally at Alfresco to perform black box testing. For details, here’s the issue and command details on how to regression test your customizations.
  4. Thanks to Martin and the Docs team  have fully re-written and improved documentation for the SDK 2.1.0  and we also started properly versioning docs for all SDK supported versions (e.g. see 2.0.0 docs)
  5. The SDK is an officially supported Alfresco product as of 1.1.1, but the SDK 2.1.0 marks an important step towards a much more predictable, supported, sustainable development support on the SDK. From now on, you can check the Product Support Status to verify the support status of the SDK and also, if you are an Enterprise customer, engage with Developer Support to get Dev savvy engineering help you on Development matters

I do hope you guys enjoy the new SDK and I am eager to collect feedback, via comments to this post, forums or you can reach out to me or Ole, as well as raise issues in the SDK project.

Handing my baby, the SDK, off :)

One more service announcement: as followers of this blog, you know I have always used this channel to announce SDK news and releases. While I’ll keep posting on SDK usage tips and more in general on my visions on the Alfresco Developer Platform directions, I think it’s time to hand off the baby and in line with the full Alfresco (“the company”) support for the SDK, move all communications to the Alfresco Developer Blog.

In particular, our Developer Evangelist is going to play a key role in keeping you updated and collecting feedback on our development experience.

So stay tuned on our Dev Blog, as Ole will soon post a more comprehensive update on this release.

My #AlfrescoSummit 2014 San Francisco recap, and tips for a successful Alfresco project!

Last week’s Alfresco’s Summit in San Francisco was a blast. Every single day. Every single moment (ok well not the night before the preso, when I had to finish

Here’s a day by day recap of my #AlfrescoSummit, the uncountable reasons why I love this event and why you might want to book a last minute spot at Alfresco Summit, and join us in London next week:

Maven Hipsters
Mehven hipsters sabotage!
  • On day 1: together with Mao, we delivered a 4 hands talk called “Get Your Alfresco Project from Zero to Hero with Maven Alfresco SDK and Alfresco Boxes”, finally covering the automation of the full Alfresco project lifecycle! Check out the slides below, for the ultimate approach to Alfresco project lifecycle, a combination of the:
    • the world class developer experience provided by the Alfresco SDK 2.0
    • the highly automated provisioning / deployment of arbitrarily complex architectures provided by Alfresco Boxes (supporting technologies like Vagrant, Packer, Docker and chef-alfresco).

  • On day 2: I delivered a (hopefully) very well received talk called “10 things you need to know to have a successful Alfresco Project”. I tried in a few slides to gather the top ten common mistakes or overlooks I have seen in my now 7+ years of Alfresco career, in every phase of the project lifecycle, from inception to development, from release to deployment and distribution. As part of this talk, I also introduced for the first time a pilot of the Alfresco Developer Support service, a support add-on package dedicated to Enterprise customers and partners who extensively develop on our platforms and require access to highly skilled senior Alfresco engineers on development matters. Check out the slides below and don’t hesitate reaching out to me if you are interested in the Dev Support service:

On top of my contributions to this Summit, it’s been amazing to:

  • Attend Doug’s, John‘s and Thomas’ keynotes, which were were simply FANTASTIC! So excited to be part of a hugely growing product, which is revolutionizing the way knowledge workers can be  productive in their daily job, while being fully engaged and driving the humongous amount of content that we produce everyday to the degree of control the modern Enterprise requires. Come and join in London for this fantastic outlook on the upcoming Alfresco 5!
  • Get to meet (again) many of the Alfresco gurus I remotely work with on a daily basis. Spending a whole week with great Alfrescans like Peter Monks, Maurizio Pillitu, Greg Mehlan, Gethin James and so many other is really refreshing! Not just from a purely technical standpoint, but most importantly that’s was REAL fun – as Peter’s picture clearly here on the right shows – btw the Italian mullet is a present of mine!)

    Peter Monks, the first Mulleteer! :)
    Peter Monks, the first Mulleteer! :)
  • Network with so many smart partners and customers, getting their feedback on the product, the SDK and how we can help driving you to continuous customer success!
  • Get to meet the Community and not only get (very personally satisfying, have to admit) exciting feedback on the SDK 2.x version but also seeing Order of the Bee t-shirts proliferating was a really positive sign of a growing, lively and never so important Alfresco Community! Nice to see you again Bindu and looking forward to see you Ole! (just to name 2!)

Well I hope I have given you one more reason to come and see us at Summit.

Especially as I relocated to the US, I really look forward to meet many of the long term Alfrescans Community & Enterprise members of the good old European community next week in London!

See you there? 🙂

Alfresco SDK 2.0-beta-4 released in Maven Central!

It’s with extreme pleasure that, thanks to the great support from the Order of the Bee and the Community at large, we have released the Alfresco SDK 2.0.0-beta-4 … this time in Maven Central!

And 2.0.0 release is on the way, definitely out for you to use at the Alfresco Summit!

If you just can’t wait, check out a full tutorial and overview of new hot reloading features and IDE integration in this video (kudos to Ole for putting this together):

If you check out docs and release notes, I hope you’ll be gladly surprised by the number of enhancements and bug-fixes that went in this release, which, without any doubt, is to date the greatest ever achievement in ergonomics, productivity, quality and automation of Alfresco development! This represents a major step towards driving the Alfresco Community to become an organic, self sustained, proactive ecosystem of extensions and plugins for our favorite platform, Alfresco!

There are so many new features in this release, some of them very notable and I’d like to share them with you:

  • Compatibility with Alfresco Community 5.0.a+ (and soon with the upcoming Alfresco Enterprise 5.0.x). For 4.2 and below, you still need to use the SDK 1.x (see full SDK / Alfresco compatibility matrix here)
  • Availability on Maven central (see screenshot below)! Any Maven developer can just run a simple mvn archetype:generate and quickly create Alfresco projects directly from Maven Central! Is this JUST awesome?
Generate Alfresco Projects from Maven Central!
Generate Alfresco Projects from Maven Central!
  • True IDE integration with Eclipse, Idea and Netbeans (just Import Maven Projects) with rapid development support, by hot reloading of your Java classes, Web resources, webscripts, freemarker templates, using Spring Loaded and advanced Tomcat7 features (check out again the video above, you likely need to see it twice to believe it 🙂, to get all excited and farewell to all those ugly slow Alfresco restarts 🙂
  • Unit and integration testing support, with remote JUnit testing features to avoid context reloading and run unit tests (from your IDE) in seconds (or less)
  • Easy new starter setup and run scripts in each archetype. Just create the project, execute ./run.sh and off you go!
  • Updated SDK 2.x docs (separate from SDK 1.x docs)
  • rm profile (enable with -Prm) in the all-in-one archetype to enable Records Management development
  • Multiple bug fixes and stabilization

The feedback we got is that this new version is just AMAZING and enables levels of productivity never seen before on Alfresco project. And, for those of you that have followed me in this journey started 6 years ago, this shouldn’t be anything less than mind-boggling.

I really wish you will experience the same and I’d love to hear your feedback and contributions. I’d welcome comments here, issues or pull requests on the SDK project, or even emails on the Maven Alfresco mailing list. Also, stay tuned, since 2.0.0 final is targeted to introduce new juicy features, like easy Selenium functional testing,  even easier configuration of Community / Enterprise artifacts via a simple profile and integration of the Alfresco Technical Validation tool to ensure quality of your extensions.

And if this is getting you half as excited as I am right now, make sure you come to the next month’s Alfresco Summit (in San Francisco or London) where, together with Maurizio, we’ll extensively present how, in just 50 minutes, you can leverage the Alfresco SDK to get your project from inception to its first release and how, using Alfresco Boxes, you can consume this release and deploy arbitrarily complex architectures, on premise or in the cloud, in FULL automation.  Now that’s what I call an overarching vision

And if you really want to become a Guru, come join the Maven Alfresco training that Maurizio will run in both venues, one very worth day spent to save days of sub-optimal development 🙂

Stay tuned and send us your feedback!

Maven Alfresco SDK 1.1.0 is out and supports Rapid Application Development!

 

 

 

 

Just in time for the Alfresco Summit in Barcelona, we are proud to announce that the Maven Alfresco SDK 1.1.0 is out!

In this release (tested with Alfresco 4.2.e Community and supported with Alfresco 4.2.0 Enterprise) we have focused to make the development experience even faster, on top of keeping all process oriented and automation SDK features.

Key features that you might be interested in (and hopefully very excited about) are:

  • JRebel integration to allow zero redeployments when developing Alfresco Java components
  • Support for running JUnit test on a running Alfresco instance, in fractions of a second, not minutes. This leverages junit-remote and requires JRebel to hot reload classes
  • A new profile ‘-Prad’ to enable the 2 aforementioned features
  • Jetty replaced with Tomcat7 embedded, for improved supportability
  • Multiple fixes and improvements in the Eclipse integration
  • Works with Alfresco 4.2.e Community and Alfresco 4.2.0 Enterprise

This release represents a major improvement towards a full supportability of the SDK when working with Alfresco Enterprise, as well as providing a way to develop customizations in minutes, not hours.

Hope you enjoy it, feedback and contributions more than welcome, here or in the Google Code project!

EDIT: Slides are available on the Summit website. Apologies to everyone who asked before for not having uploaded them before the presentation!

[Maven is not so evil] Plexus-archives 2.3 is a life saver

Maven is very good with J2EE WARs. Resources, packaging, overlays.

I admit that if it wasn’t for the great features and clean development model imposed by the maven-war-plugin, I would not even probably looked at Maven in the first place when I developed the first version of the Maven Alfresco SDK.

Lately though, especially working with large WARs overlays like Alfresco (120MB) and Share (40MB), I have seen all my efforts for standardized development falling badly short on the rapid development side. Suddenly (on my Mac, or I assume on any Unix/Linux environment) my WAR overlays started to take minutes to complete, with a big so long to the quick dev-fix-test cycle. As a Java performance expert, I decided to debug it and understand where it was actually wasting time.

Turns out that for each and every unpacked resource from WAR overlays the Maven unarchiver would fork a chmod process, to modify some file permissions!!! (Windows users, you can stop reading here 🙂

Leaving out that I’m not sure of the original reason for this, I later found out (also thanks to Samuel, kudos!) that this was due to a misconfiguration of the plexus-archiver package, which instead of using native JVM chmod capabilities was forking the process. All details unfolded in a related maven-dependency-plugin issue, MDEP-368.

Basically turns out this properly fixed in plexus-archiver-2.3 (the Maven shared component used by plugins to manage ZIP & co. archives), where no process is forked and the overall WAR packaging / overlay time is reduced drastically. And now the fix, and later the wow effect (I hope) :)))

Luckily enough the fix is pretty simple and only requires to have your plugins (unless they do it already) depend explicitly on plexus-archiver version 2.3. In other words just add the following snippet (the example is for the maven-war-plugin, but you can use the trick for the maven-dependency-plugin and any other plugin you see poorly performing on resource unpacking) to your pom.xml:

 <plugin>
     <artifactId>maven-war-plugin</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.codehaus.plexus</groupId>
             <artifactId>plexus-archiver</artifactId>
             <version>2.3</version>
         </dependency>
     </dependencies>
 </plugin>

EDIT: This is fixed in the maven-war-plugin version 2.4 (and you don’t need the explicit plexus-archiver dependency anymore), see related issue MWAR-280).

Just to give you an idea how the performance improvements with this little fix, I will use as an example the Maven Alfresco All-In-One Archetype, which allows to develop and run an Alfresco Repository, Share, Solr and an AMP in the same Maven multi-module project. The SDK currently does NOT use plexus-archiver 2.3 (there is an issue for it), so it’s extremely (and unnecessary) slow in the Alfresco and Share overlays.

After I created the project from the archetype as per docs, here’s the output of a simple

mindthemac:alfresco-parent mindthegab$ mvn clean install -DskipTests
...
[INFO] Reactor Summary:
[INFO]
[INFO] Quickstart of Alfresco and Share with DB and runner embedded  SUCCESS [0.978s]
[INFO] Alfresco AMP Module ............................... SUCCESS [11.271s]
[INFO] Alfresco Repository and Explorer Client ........... SUCCESS [4:10.599s]
[INFO] Alfresco Apache Solr customization ................ SUCCESS [6.504s]
[INFO] Alfresco Share Client ............................. SUCCESS [4:08.038s]
[INFO] Alfresco and Share Runner ......................... SUCCESS [0.045s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8:41.062s
[INFO] Finished at: Thu Jun 20 14:54:35 CEST 2013
[INFO] Final Memory: 38M/782M
[INFO] ------------------------------------------------------------------------

What? 8m41s total build time? 4 minutes for each WAR? On my very decent Mac 8GB RAM+SSD?

Such a slow cycle is just going to kill the Maven Alfresco Community, to be a little dramatic 🙂

And now, get ready for the wow…after applying the little plexus-archiver fix above (in the parent POM <plugins> or <pluginManagement> sections) this is the amazingly improved performance of the vary same build:

mindthemac:alfresco-parent mindthegab$ mvn clean install -DskipTests
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Quickstart of Alfresco and Share with DB and runner embedded  SUCCESS [0.848s]
[INFO] Alfresco AMP Module ............................... SUCCESS [5.630s]
[INFO] Alfresco Repository and Explorer Client ........... SUCCESS [35.372s]
[INFO] Alfresco Apache Solr customization ................ SUCCESS [5.054s]
[INFO] Alfresco Share Client ............................. SUCCESS [23.945s]
[INFO] Alfresco and Share Runner ......................... SUCCESS [0.019s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:13.143s
[INFO] Finished at: Thu Jun 20 15:56:43 CEST 2013
[INFO] Final Memory: 44M/496M
[INFO] ------------------------------------------------------------------------

WOW!!!  Only 1m13 total build time…a neat 85.96% build speed up 🙂

I think it’s really worth making sure this trick is known as it’s going to be a life saver to the Maven Alfresco SDK and I’m also using it to speed up our internal Alfresco Maven builds.

Hope you find this useful, to the next tip of this newly born Maven post series!

Maven Alfresco SDK 1.0 is finally out and ready for you to enjoy!

It’s been a long journey, but we made it 😉

It started almost 5 years ago, and through the years, little by little, we made giant steps towards an open development platform.

If you have followed this blog earlier, you probably have shared some of the pain for an unnecessary difficult integration process of Alfresco artifacts, therefore today we should all re-joy as development on Alfresco got just so much better 😉

Thanks to the great work of the whole Maven Alfresco Community and the strong momentum and Support from Alfresco Engineering and Release Management, it’s with extreme pleasure and pride that I announce you that a fully fledged Maven Alfresco SDK™ 1,0 is now available for your enjoyment and to drastically improve your development productivity on Alfresco projects.

While I recommend to you have a look at the full docs and to the release notes to understand the full extent of features of this brand new piece of software, let me just give you here an overview of the  most exciting features:

  • Zero configuration approach: create an AMP or All-in-One archetype and with one command you are ready to run and customize Alfresco. In the very same place 🙂
  • Zero download approach: the SDK will take care of downloading the appropriate Alfresco artifacts from the Alfresco Artifacts Repository. Also no DB or application server is required, as the SDK will runAlfresco emdedded on Jetty + H2.
    Note:
    this configuration is not part of the supported stacks, so should be used only for development purposes
  • Zero BS development approach: with new SDK the focus is your creativity, no more boring configuration or hacks to make a particular work.  Just get the setup right with an archetype and start to kicking it on Alfresco 🙂
  • Zero defect is the main objective of the SDK: with support for AMP unit and integration testing, as well as integration with the strong enterprise development process feature of Maven (e.g. CI, release mgmt, etc.), you can get you Alfresco development to another level. This was made thanks to the availability of POM files for Alfresco Artifacts (as of Alfresco 4.2.b).

NOTE: For those of you wondering about naming and version: yes, the Maven Alfresco SDK 1.0 superseded the old version of the Maven Alfresco Archetypes / Lifecycle 3.9.1.  As of Alfresco Community 4.2.b the Maven Alresco SDK 1.o is the recommended solution.

But without further ado, I can’t wait to join the other Alfresco Rockstarts at the DevCon hackaton, I’m sure we can boost some productivity down then with this SDK. Once again, check out the project website for full docs.

I want to thank you everyone involved in making this happen (especially Mao and Samuel) as we believe it will be a major improvement for the developers, architects and administrators of Alfresco project, finally providing a solid foundation to doGreatWork() and this great product.

Enjoy and let us know your feedback!

Maven and Scalability @ DevCon

Sounds like it’s happening. More, much more that I could expect. Much better than before.

At Alfresco in fact we are finally about to close on two fundamental areas like ECM Scalability and on the availability of a fully fledged Maven based SDK.

As you might know (if you are reading this blog you probably will), these on the two areas I’ve always been passionate and involved for in the last few years. Just to let you understand how passionate (or romantic, almost Italian) about these topics, enough for you to know that:

    • I ranted about Maven for a few years now and, in this last year, I experienced a momentum never seen before both from a corporate and from a community standpoint. Literally, about to cry here 🙂
    • I worked for many years as Alfresco Partner and Solution Engineer, without having a quantitative sizing and performance reference for my implementations. In the last year I participated to the Alfresco Benchmarks project, which has shown very interesting results and improved the scalability of our system exponentially. I am so excited about these improvements, both at process and product level, that I can’t wait to share those with you 🙂

So it’s just a great pleasure and excitement for me to confirm we have a couple of so much awaited HUGE surprises on those areas 😉

But without further ado then, it’s my pride to officially announce that …


…no wait, I have a better idea.

If you are really interested and you want to know what’s going on around Performance and SDK, it’s quite simple: you should just come by for one of the two great DevCons (Berlin and San Jose) that are approaching in November 🙂

I will give two speeches at both EMEA and Americas DevCon, surprisingly enough about:

And if you are not convinced, hear is a little teaser 😉

Introducing the Alfresco Artifacts Repository – yes, with Alfresco Enterprise :)

Native American Artifacts
Native American Artifacts

It’s my honor – and a a huge personal satisfaction after a few years working on this – to announce the full availability and support of the Alfresco Artifacts Repository, a fully fledged Maven repository hosting the major Alfresco releases and of its flourishing projects ecosystem, both for the Alfresco Community and Enterprise Networks.

For those of you already following this blog this might be no big news, as somehow the information was already around in the Alfresco-sphere and an Alfresco Maven repository has been already unofficially (AKA maintained by me) around for a while. But the great news is that now the repository is officially maintained and artifacts are kept up to date 🙂

Based on the Nexus OSS mature Artifact Repository technology, and following a few weeks Partner only beta, the repository is now publicly available at:

http://artifacts.alfresco.com (formerly http://maven.alfresco.com)
The Alfresco Artifact Repository
The Alfresco Artifact Repository

What can you find in there (AKA the screenshot is not enough)? Very well, at the moment the Artifact Repository hosts:

  1. Alfresco Community full releases (JARs/WARs) identified with the groupId org.alfresco
  2. NEW: Alfresco Enterprise full releases identified with the groupId org.alfresco.enterprise
  3. NEW: Alfresco Hotfix full releases identified with the groupId org.alfresco.enterprise
  4. Activiti (BPMN 2.0 implementation) Releases and Snapshots
  5. All the versions of the open source Maven Alfresco Lifecycle, a long term but quickly growing Maven SDK approach to Alfresco development
  6. All Spring repository proxies, to ease Spring Surf development by only referring to this repository developing Surf

NOTE: At the moment no POM files / dependency declarations are available, but if you are interested please feel free to vote on this issue 🙂

Still not sure about the potential? Well, let me just give you an idea:

Read more Introducing the Alfresco Artifacts Repository – yes, with Alfresco Enterprise 🙂

What’s going on with Maven and Alfresco ? (WIP)

Just in case you were wondering, this is the time things are actually happening.

If you are working or willing to work on Alfresco ECM platform with Maven, you better stay tuned and keep your patience for a few weeks more.

Why?

Well for a few interesting reasons:

*  The Maven Alfresco Community is growing and every day there is more activity in the lists and on the code contributions side. If you need information around Maven and Alfresco, the Maven Alfresco discussion group is the place to be.

* Alfresco is integrating Maven artifacts deployment in its build process (see issue): we are literally days away from having 3.4 and 4.0 Community and Enterprise versions available on the Alfresco Artifacts Repository. BTW, bear with us in these days as some changes might be undergoing in the repositories. This is great news for all of you who are hosting corporate repositories (especially for Alfresco Enterprise) as this way you will just have to point to maven.alfresco.com to retrieve Alfresco artifacts

* We are working actively (kudos to Mau) on a clean, neat, supportable version of the Maven Alfresco Lifecycle project: if you check out the experimental branch you’ll find a nicely merged, lean, fully functional set of parent POMs and archetypes to allow you, for example, to run a full Alfresco Repository, Share, AMP, etc. as a single project embedded in Jetty and H2. Nice, ain’t it? Stay tuned there because we are aligning that to the automated deployment at point #2, so we’re just really weeks away from a nice, fully featured, extensible but above all standard open Maven Alfresco SDK.

As we do lots of progress on this area, your feedback is more than welcome and, once again, bear with us while we actively work to make your Maven Alfresco developer life easier.

Maven Alfresco Lifecycle 3.9.1 Released

Hey guys,

I’m proud to announce that thanks to a vigorous Community help (special mentions and kudos to Mao and Stijnr for the great help in the last period), we have been able to pull out the 3.9.1 release of the Maven Alfresco LIfecycle.

Multiple bug-fixes, a zero defect targeted release and a couple of juicy new features like:

make of this one probably the most stable and tested release of the Maven Alfresco Lifecycle. The release is tested against Alfresco 4.0b Community, and it’s the perfect foundation to the great work we are going to do in the next weeks to clean it up completely and support Alfresco Enterprise.

The releases is available in the Maven Alfresco Repository (in case you are wondering, I still need to update the archetype-catalog.xml, but that will happen just after Easter, as I have no permissions right now 🙁 ). Full release notes are also published on the Google Code project and per component documentation is available in the brand new published Maven Site (using the HUGELY COOL Maven Fluido Skin).

Feedback is always welcome in the Maven Alfresco List and we also have a Skype chat so feel free to contact me on Skype if you want to contribute / participate in any way 🙂

Have fun and let us know what you think!