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.

Alfresco SDK 2.0.0 is (finally) out! Merry XMas Alfresco Devs :)

1182
Christmas according to JoyOfTech

I could not possibly hold onto this anymore. After about 3 months of very caring testing of the Community, nurturing, launches, 4 betas and 2 Release Candidates, it’s with extreme pleasure that I can finally announce the so much awaited (and hopefully the best to date) Christmas present for all Alfresco developers out there: the Alfresco SDK 2.0.0 is now released and available in Maven Central!

Here all the details for this release:

Apart from some major internal refactoring to simplify POMs, maximize OOTB cross IDE (tested with Eclipse Luna and IDEA) compatibility and improve performances, key features for this release include (but are not limited to):

  • All Alfresco SDK 2.0.0-beta-4 features, including hot Java code reloading, native IDE integration, a Share AMP archetype and  remote JUnit testing,
  • Simplification of Enterprise development, with the introduction of a -Penterprise profile to simply configure your build to work against Alfresco Enterprise 5.0.
  • Embedded h2 database support, deprecating the external project alfresco-h2-support … thank Carlo for filling this gap for way too long already!

I really do hope this is a welcomed and so much needed addition to the Alfresco Development ecosystem and just the first step in my new Product Management career towards an ever improving developer experience on top of the coolest ECM framework out there!

Looking forward to your feedback here in the comments or even better as issues or contributions to the Alfresco SDK Github project.

Happy Holidays, now off to some well deserved rest since next year is going to be full of exciting challenges!

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 is not so evil] Avoid webapp redeployment with hot reloading of your Maven project in Eclipse and IDEA. For free? Yes, with Spring-loaded and Tomcat7 :)

This might be the most important feature we have ever added to the (Maven) Alfresco SDK, which explains why we are getting such an amazing feedback following yesterday Tech Talk Live, where we presented the fully hot reloading (no webapp-context reload) early 2.0 version of the SDK.

BTW, if you are an Alfresco Developer and you have missed the talk, I (and not just myself) really recommend you take a hour of your time and check out the recording of the talk and / or the slide deck, because, if you are used to the sometimes frustrating world of WAR reloading (especially with a 100M+ webapp like Alfresco), I really do hope the demo of the new SDK will be no less than mind boggling for you…

Or, well, at least half as excited as I was when I first saw Ole‘s early attempts and when I finally got it working integrated in the SDK just a couple of days ago. Eureka! was my reaction to say the least (and in honor of my Sicilian past, a reference to Archimedes never hurts :).

I figured though that it’s not only Alfresco Developers that can benefit from this new approach, but more in general the community at large of Java developers using Maven to develop J2EE webapps in conjunction with an IDE (tested on Eclipse, IDEA, Netbeans).

And I know first hand the pain it takes to wait for neverending reloads, being this one of the main concerns around Java development with respect to newer / interpreted frameworks which make RAD (Rapid Application Development) their mantra.

So I figured I shared with all of you, eager blog readers, the couple of (simple) tricks that we used to define what, hopefully once and for all, can become the standard de facto to boost rapid develop Java webapps on Maven, in a completely IDE independent (but integrated) way and without the need for proprietary tools like JRebel.

So here we go. Assuming you have a WAR project, follow this steps to forget once and for all lengthy and boring WAR reloading (and contextually drink less coffeee!):

  1. The first building block is spring-loaded, a library from Spring.io (used to provide hot reloading to the GRails2 framework). This library (free of charge) provides a JVM agent which, transparently, provides class files reloading. All you need to do is get the spring-loaded.jar (e.g. from here) and then run your build with the agend enabled as such:
    MAVEN_OPTS="-javaagent:/path/to/downloads/springloaded-1.2.0.RELEASE.jar -noverify" 
mvn <goals>
  2. The second building block is based on the Tomcat7 VirtualWebapp features. This allows to: configure, via webapp context.xml, your webapp to dynamically load classpath resources (with the and webapp Loader component) and web resources (via ResourcesVirtualDirContext)  from outside a physical WAR / exploded folder. This way it’s very easy to configure your Maven <war> packaging project to automatically load classpath and web-resources directly from where Maven (or your IDE) would compile them, i.e. ${project.build.outputDirectory} (for your classpath resources) and ${project.build.directory}/${project.build.finalName} for your webapp resources. Basically you just need to create a context.xml file in your Maven project (e.g. in this example in the ${project.basedir}/tomcat folder that looks like this:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context docBase="${alfresco.client.war.folder}" path="${alfresco.client.contextPath}">
      <Resources className="org.apache.naming.resources.VirtualDirContext" 
      extraResourcePaths="/=${project.build.directory}/${project.build.finalName}" />
    <Loader searchVirtualFirst="true" className="org.apache.catalina.loader.VirtualWebappLoader" virtualClasspath="${project.build.outputDirectory}" />
    </Context>
  3. Once the two building blocks are in place, you just need to wire this in the Maven pom.xml for your war packaging project. You could use Cargo but my dark memories of pain using that plugin suggest that a better, easier and more maintained route is to use the shiny tomcat7-maven-plugin. All you need to do is telling tomcat to use the previously defined context file by specifying:
     <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>run-embedded</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>pre-integration-test</phase>
            <configuration>
               <useSeparateTomcatClassLoader>true</useSeparateTomcatClassLoader>
               <contextFile>${project.basedir}/tomcat/context.xml</contextFile>
            </configuration>
          </execution>
        </executions>
      </plugin>

    NOTE: this is going to bind the tomcat7 plugin to run your WAR, with the RAD configuration, during the pre-integration-test phase.

  4. Now you can run your build with:
    mvn clean integration-test

    and you will see your webapp run in Tomcat7. Nothing spectacular yet, but go the next point 🙂

  5. Now import your Maven project in Eclipse (Luna has already the Maven integration by default) or IDEA and there the fun begins! If you make a change to an existing Java class or web resource, all it takes is for you to hit refresh on your browser and AUTOMAGICALLY changes are there! No more webapp reloads, no more waiting time, just have fun!
  6. If you want an example of how this approach can save you huge amounts of time (and hairloss :P) check out the video below:

Hope you enjoyed what you see and hope you can leverage this ASAP! Feedback and comments are welcome, but in the meanwhile a nice collective farewell to silly webapp reloads 🙂

(Maven) Alfresco SDK migrated to Github!

As anticipated, I have today completed the migration of the (Maven) Alfresco SDK to the Alfresco Organization in Github.

The new location for the project is https://github.com/Alfresco/alfresco-sdk. Issues and code are already there, let me know if I missed something obvious or if you don’t have the right access to the project.

After 6 years in Google Code, we decided to move to Github to foster even more contributions and an ever growing flourishing community around the Alfresco SDK! I’m excited! 🙂visualcage.ru

The old Google Code project location is temporarily still there for a limited amount of time, but I plan to close it for good and redirect to the Github location.

So, what else can I say?

Well, FORK US 🙂

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

ceoec.ru

 

 

 

 

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:

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 Alfresco SDK 1.0.2 is out and ready for your enjoyment :)

Just a quick update for the Alfresco Mavenistas, as yesterday we released the Maven Alfresco SDK 1.0.2!

This is a (major) maintenance release for our preferred Alfresco SDK (see full 1.0.2 release notes), and I wanted to stress a couple of fixes who went in there which might drastically improve your development experience:

  1. As I described in my last post, if you are a Linux/Mac SDK user, then your build is probably going to speed up 5x to 10x times. This is thanks to a fix using the plexus-archiver…I look forward to hear your wows from here 🙂
  2. The latest MMT fixes are in there. This should fix any weird issues of your build in case you were overriding Alfresco resources

You can find official documentation and artifacts on the Alfresco Artifacts repository.

And BTW, I suggest you stay tuned on this channel as I have worked hard in the last months on a plan for a full Mavenization of Alfresco…and you all know what that would mean for the functionality and “coolness” of our SDK 🙂