Liferay 2014 Marketplace App Contest

Community Blogs April 16, 2014 By James Falkner Staff

It's back! To celebrate and reward our outstanding community of Marketplace developers, I am happy to announce the opening of the 2014 Liferay Marketplace App Contest! Last year, we had over 70 submissions and many winners (so many that we had to extend the review period an extra week). We saw some really great and innovative apps, and also saw a nice bump in Marketplace activity in general. Last year's winners saw an average of 7x increase in downloads and 2000+ views! So while the prizes are nice, the increased visibility (and bragging rights) are even sweeter. So we're doing it again.

Contest Timeline

  • April 16: Contest Open
  • August 8: Last day for submitting apps
  • August 25: Winners announced

That gives you around 4 months to complete and submit apps for the contest. Note that apps that were already on the Marketplace as of December 31, 2013 are not eligible to be entered into the contest, except for those apps submitted last year that did not win anything (giving our previous contestants a chance to improve and re-submit!).

What can I win?

This year, we have 4 categories: Community/Free, Community/Paid, Commercial/Free, and Commercial/Paid. In each of those categories, there is a chance to win a grand prize (a paid trip to a Liferay Conference, plus other benefits), or a runner-up prize (US $300 gift cards, plus other benefits). See the contest page for more details and official rules.

Why should I enter the contest?

Besides the great prizes offered, your apps will be listed in various places ("Featured Apps", contest follow-up, and at future events) which has historically been shown to greatly increase your apps visibility and subsequent downloads and activity. Not only that, you will forever be recorded in the annals of Liferay history as an awesome app contest winner, and can even make tee shirts about it. Woo!

So how do I compete?

It's easy:

  1. Develop a Liferay App
  2. Submit App to Marketplace
  3. Fill out contest entry form
  4. Win! (Maybe)

Remember, you have until August 8, 2014 at 11:59pm US/Pacific to enter, so be sure to check out the Marketplace Developer Portal for everything you need to get started. Don't forget, even after you submit the app itself to the Marketplace, you still need to fill out the contest entry form!

We've seen a lot of great apps this year in the Marketplace (I happen to use several on a daily basis, and I am immensely grateful to the developers of those apps). I can't wait to see what our community can do this year!

Liferay Mobile SDK Now Available

Staff Blogs April 1, 2014 By James Falkner Staff

Today Liferay released the first version of the Liferay Mobile SDK! [Download | Documentation | Project Page]

The Liferay Mobile SDK makes it super-easy for mobile developers to integrate mobile apps with Liferay Portal, by taking care of common tasks like authentication, exception handling, parsing responses, and exposing Liferay's JSON web services in their preferred mobile app development environment (e.g. Objective-C interfaces for iOS developers, Java interfaces for Android, and potentially others in the future). Custom objects and their web services (created via Service Builder) can also be accessed through the Mobile SDK just as easily as core services.

The Liferay Mobile SDK is compatible with Liferay Portal 6.2 and later. The Mobile SDK's official project page gives you access to the SDK releases, provides the latest SDK news, and has forums for you to engage in mobile app development discussions. Bruno Farache also did an excellent blog post for the beta release earlier this year with some working code examples and technical discussion.

Download and Install

There are two ways to get and use the Mobile SDK:

Liferay IDE / Developer Studio / Eclipse Plugin (for Android apps)

For Android developers, Liferay provides the Liferay Mobile SDK Eclipse plugin for you to use in developing your mobile Android apps. It's powerful Mobile SDK Builder generates libraries that enable your app to communicate with Liferay Portal and with the custom portlet services deployed on your Liferay Poral instance. Check out the Developer Guide for details on how to install the plugin into your environment.

Manual Installation (iOS / Android)

For Android and iOS developers, manual installation is pretty simple: download a JAR or ZIP file and import it into your project, either in Eclipse, XCode, or other development environment. The Developer Guide contains details on how to install the SDK into virtually any mobile development environment.

Versioning

Due to the close relationship between the Mobile SDK and Liferay itself, the Mobile SDK follows a similar release version scheme, and each release works with both CE and EE. Multiple Mobile SDKs can also be used in parallel (e.g. to support multiple major Liferay releases in a given app) thanks to the versioning present in the package namespaces.

Source Code

As an open source project, the Liferay Mobile SDK's source code can be found it its main Github repository or as a downloadable zip bundle.

Contributing

Contributions are the lifeblood of our community, and as an open source project, the Mobile SDK is no different. The process for contribution to the SDK is the same process used for Liferay itself. Simply fork the repository, make your contribution, and issue pull requests to the project lead(s). It's a great way to get involved and to give a little back to our community!

Documentation

The Mobile SDK's official documentation lives in the Liferay Developer Guide, covering everything you need to know, including detailed guides for installation and development in both Java (Android) and Objective-C (iOS and XCode) and will be updated as necessary as new features are added or changed.

Getting Support

Support for the Liferay Mobile SDK is included in Liferay's Enterprise Subscription, which provide regular service packs, a commercial SLA, and more.

If you are using Liferay Community Edition, visit the project site or check out the Mobile SDK Forums to find out more about the myriad avenues through which you can get your questions answered.

Bug Reporting

Like other Liferay projects, the Mobile SDK project uses issues.liferay.com to report and manage bug and feature requests. If you believe you have encountered a bug in the new release (shocking, I know), please be cognizant of the bug reporting standards and report your issue on issues.liferay.com, selecting the Mobile SDK Project and 6.2.0.1 release as the value for the Affects Version/s field.

Feature Requests

If you have a great idea for the next Mobile SDK, be sure to file a Feature Request through the JIRA project or on the Ideas Dashboard (they both go to the same place!). If you have the time, consider contributing your amazing new idea to the project, we in the community would love to see what you've done!

 

 

Liferay 6.2 CE GA2 Now Available

Community Blogs March 21, 2014 By James Falkner Staff

Today Liferay released an update of its flagship software: Liferay Portal 6.2 CE GA2! [Download] [Quick Start]

This update corrects several issues found since the GA1 release in late 2013 found by our community and Liferay's continuous testing teams. Want to know more? Read on!

Release Naming

Following Liferay's official versioning scheme, this release is Liferay Portal 6.2 CE GA2. The internal version number is 6.2.1 (i.e. the first update release of 6.2). Future CE releases of 6.2 will be designated GA3, GA4, .. and so on (assuming they are needed to fix issues, which is not always the case). See below for upgrade instructions from 6.2 CE GA1, 6.1.x, 6.0.x, and 5.x.

Downloads

You can find the 6.2 CE GA2 release on the usual downloads page. If you need additional files (for example, the source code, or dependency libraries), visit the additional files page.

Source Code

As Liferay is an open source project, many of you will want to get at its guts. The source is available as a zip archive on the downloads page, or in its source code repository on Github. Many community contributions went into this release, and hopefully many more in future releases! If you're interested in contributing, take a look at our contribution page.

What's New / Changed?

This update fixes many issues, but here are some of the more important and/or popular ones that you may be interested in:

Documentation

The Liferay Documentation Team has been continuously adding and improving on the official documentation. This includes updated javadoc and related reference documentation, an updated User Guide and Developer Guide, and a new properties listing in convenient web page form. Our community has been instrumental in identifying the areas of improvement, and we are constantly updating the documentation to fill in any gaps.

Support Matrix

Also, Liferay recently published the official support matrix for 6.1 and 6.2, which lists the exact versions of software that Liferay is supported with. You no longer have to wonder which exact version of GNU Hurd you can run Liferay on (Hint: The Hurd is not supported :) ).

Liferay Marketplace

Most Liferay-authored plugins were updated to support 6.2 GA1 when it was first released, and remain compatible with this updated GA2 release.

If you are a Marketplace Developer, and have authored a 6.2 CE GA1-compatible app, you should ensure your app continues to work with this 6.2 CE GA2 release. It is Liferay's aim to remain compatible within a given release family, so in the unlikely event that your app works with GA1 but NOT GA2, you will need to make any necessary changes and re-submit, and let the Marketplace team know about any incompatibilities you discovered. Chances are you will have nothing to do (since you declared compatibility with 6.2.0+, which includes 6.2.1).

Also, Marketplace developers should be sure to check out the new Marketplace Developer Portal, and get access to a one-stop shop of resources for... well, you get the idea. It's for app developers. Go there and learn.

Bug Reporting

As always, the project continues to use issues.liferay.com to report and manage bug and feature requests. If you believe you have encountered a bug in the new release (shocking, I know), please be cognizant of the bug reporting standards and report your issue on issues.liferay.com, selecting the 6.2.1 CE GA2 release as the value for the Affects Version/s field.

Upgrading

Good news for those of you on 6.0 or prior! Liferay introduced the seamless upgrade feature with Liferay 6.1. Seamless upgrades allow Liferay to be upgraded more easily. In most cases, pointing the latest version of Liferay to the database of the older version is enough. There are some caveats though, so be sure to check out the Upgrading Liferay chapter of the Liferay User Guide for more detail on upgrading to this release.

Getting Support

Support for Liferay 6.2 CE comes from the wonderful and active community, from which Liferay itself was nurtured into the enterprise offering it is today. Please visit the community pages to find out more about the myriad avenues through which you can get your questions answered.

Liferay and its worldwide partner network also provides services, support, training, and consulting around Liferay via its Enterprise Subscription.

Also note that customers on existing releases such as 6.0 and 6.1 continue to be professionally supported, and the documentation, source, and other ancillary data about these releases will remain in place.

What's Next

Of course we in the Liferay Community are interested in your take on the new features in Liferay 6.2 and the updates in this GA2 release. Work has already begun on the next evolution of Liferay, based on user feedback and community ideas. If you are interested in learning more about how you can get involved, visit the Liferay Community pages and dig in.

Kudos!

This release was produced by Liferay's worldwide portal engineering team, and involved many hours of development, testing, writing documentation, translating, testing some more, and working with the wider Liferay community of customers, partners, and open source developers to incorporate all sorts of contributions, both big and small. We are glad you have chosen to use Liferay, and hope that it meets or exceeds your expectations!

In addition to Liferay's engineering staff, a special thanks goes to the many open source developers who volunteered their time and energy to help with the release, whether it was bugfixing, idea generation, documentation, translations, testing, or other contribution that helped to improve this release. Check out the Community Contributor Hall of Fame and be sure to thank them if you run across them in the community!

Marketplace E-Commerce Now Available

Staff Blogs March 18, 2014 By James Falkner Staff

The Liferay Marketplace has come a long way since opening its doors in August 2012. Since then it has grown almost 5x in number of apps and has registered more than 600 developers from over 25 countries. And we continue to evolve the Marketplace so that it creates value for Liferay customers, while staying relevant to our community of partners and developers.

I'm happy to announce today that the Liferay Marketplace now supports paid apps, using the much-anticipated new E-commerce feature of the Marketplace! The Liferay Marketplace engineering team and our community of Liferay developers have combined efforts over many, many months to bring this fantastic opportunity to our ecosystem, and we hope it meets or exceeds your expectations. With E-Commerce, the vision put into motion several years ago reaches a new milestone, one that benefits everyone that has chosen Liferay for their web platform needs.

How does it work?

If you've developed and published an app on the Marketplace, you are already familiar with the process, but there are some new concepts in play with the advent of E-Commerce:

  • License Types and Regional Pricing - As the developer, you have ultimate control over how to price your app. You choose the license type (Standard vs. Developer), license terms (Perpetual vs. Annual), pricing structure (bundled pricing and discounting), and regional availability. You can specify discounted prices for bulk orders, or different prices (and different currencies) in different purchasing regions. You can also optionally offer paid support for your software, giving purchasers peace of mind that you stand behind your paid apps. For example, suppose you offer a perpetual license for your app at a one-time cost of €100. You can optionally add support for an additional €20 per Instance per year. If, on the other hand, you want to offer an annual license, you could charge €100 per Instance per year for an unsupported license, or €120 per Instance per year for a license that includes support (an Instance refers to a single installation of Liferay Portal, which corresponds to one (1) Liferay Portal .WAR file.)
  • Payments - The Liferay Marketplace uses PayPal for payment processing, developer payments, and for purchasing paid apps. You will need a PayPal Verified Business Account to publish paid apps. Liferay will automatically collect Sales Tax / VAT for most countries, which is typically one of the most complex issues in international E-Commerce.
  • 30-Day Trials - You can also offer free trial licenses, which allows consumers to test drive your apps before they purchase, to ensure that it meets their needs. Once satisfied, your customers can upgrade their licenses at will.
  • Revenue Sharing - For each app sale, you will receive 80% and Liferay will receive 20% of the sales proceeds. We believe this type of fee structure is extremely competitive vis-a-vis other online app marketplaces, and Liferay uses its share to continually improve the Marketplace and Liferay ecosystem.

Getting Started and Staying Informed

Be sure to bookmark the new Liferay Marketplace Developer Portal and get access to all of the resources you need to design, develop, and distribute apps for the Liferay Portal platform. Whether you're looking to showcase your capabilities or reach new customers, becoming a Liferay Marketplace developer is your launching point to half-a-million-plus Liferay deployments worldwide, and this new developer portal is the best place to get to all of the resources you will need for app development.

Be sure to register yourself as a developer (either as an individual or a company). You will need a liferay.com account to do this (it's free to register on liferay.com!).

During the app publishing process, you will select whether your app is a Free or Paid app. Publishing a free app remains free (as in beer). The first time you attempt to publish a Paid app, you will be required to upgrade your account to enroll as a paid app developer. This ordinarily requires a $99 annual fee, but for the remainder of 2014, Liferay is waiving this fee for all developers as an added incentive to get started with paid apps (yeah!). You will also need to provide a tax form to identify yourself or your company for tax purposes, and have an active PayPal account to receive periodic payments from Liferay for the apps you sell.

Once you've upgraded your account for paid apps, you're ready to begin publishing!

Develop a Paid App

Since apps are nothing more than collections of individual plugins, your first step in developing a Marketplace app is to develop the functionality in the form of one or more Liferay plugins. The Liferay Developer Guide contains everything you'll need to develop apps.

Security and trust are important concepts, and become even more relevant with the advent of E-Commerce and paid apps. To that end, paid apps must enable the Liferay Plugin Security Manager (this has been optional for free apps, but is required for paid apps). The Liferay Developer Guide has details on how developers can make use of this.

To reach the widest possible customer base, you are encouraged to develop apps for both the Liferay CE and Liferay EE software versions (this is not new, but important to re-iterate when considering paid apps). Developers wishing to target EE can request a free developer license.

Publish a Paid App

Now the fun part begins - getting paid for all that hard work! Check out the latest additions to the Liferay Developer Guide, where you'll find a complete walk-through of publishing a paid app, including details on licensing and pricing options. E-commerce in a multi-cultural, multi-currency, multi-governmental world can be challenging but the Marketplace team has worked with our community to make it as painless and simple as possible, but no simpler than that!

Also, be sure to read the App Pricing, App Metadata Guidelines and App Review Process to understand how each app is reviewed. These guides will help you choose the best options for your paid apps, and ensure a smooth flow during the publication process!

Managing Paid Apps

Once published, you can track the sales performance of your apps, as well as see order histories, and manage purchased licenses across all of your customers. When you're ready, you can publish updates to your apps for customers to provide bugfixes or new features.

Enhanced metrics have been added for developers to track the performance of their apps over time and spot important trends in the lifecycle of their apps.

Buying Paid Apps

Purchasing a paid app is straightforward - The Marketplace uses the familiar concepts of shopping carts and "checking out". During the purchase process, you'll create a shopping cart and specify how many of each license type you wish to purchase. During the checkout process, you'll be directed to PayPal where you can pay with a credit card, existing PayPal balance, or other payment option. You can also elect to pay via a manual invoicing process, which is completed via email. Paid apps will only function with a valid license.

After the sale, customers can upgrade or renew their purchased licenses using the same concepts as in the initial purchase.

More Questions?

Check out the Frequently Asked Questions forum on the Developer Portal to get answers to questions such as "What is the Marketplace Refund Policy?" or "Why is app licensing only on a 'per Instance' basis?" and many others.

Reporting Problems

If you have additional questions about how the Liferay Marketplace works, please post your questions on the Marketplace Forums. If you have issues with accounting, billing, or finance-related questions, contact the Marketplace team.

In Closing

The Liferay ecosystem thrives on the creativity and innovation of its worldwide community of developers, service partners, ISVs, and contributors. The Liferay Marketplace and its new E-Commerce capability gives all of us new opportunities to grow with Liferay and showcase the power of a solid Liferay platform coupled with a rich selection of apps and functionality from the community, both free and paid. There are a lot of really great ideas out there, and it's great to see them available through this Marketplace!

 

Dumping ADT+WCM Template Variables

Community Blogs February 18, 2014 By James Falkner Staff

Ever wonder what exactly is available to you as a WCM Template author, or ADT wizard, or Theme developer? Ever forget the name of that weird request variable that gives you the current URL? Or wonder what happened to VelocityVariables in 6.2? Of course you have. Well, wonder no more! With this handy context dumper, you can see all of the available utilities, variables, their values, and their callable methods from your template, ADT, or theme context. Here's what it looks like:

It also dumps a hierarchical view of the request variable at the bottom of the listing, for ADTs and WCM Templates:

Just copy and paste this code into your theme (should be compatible with 6.2 and 6.1), ADT or WCM template, and explore. If I had more skills as a designer I'd make this into some kind of auto-expanding AlloyUI table with music. But I don't, so I can't. Any volunteers?

 

Special thanks to Chaquotay for the base code. I had to modify it because if you try to do a deep expansion of everything (i.e. the .data_model special variable), it opens a black hole in your server as it recursively tries to expand everything in the universe.

Community Roundup

Community Blogs February 7, 2014 By James Falkner Staff

Hello, wonderful World of Liferay! It's (way past) time for another Community Roundup! This is an ongoing (but sadly sporadic) series of blog posts that summarize the latest news from around our community. As your community manager, I'm very humbled and thankful for all of you who take the time to participate or give back to our community in some way. It would be a sad and lonely place without you, so I will try and highlight relevant news and activities from around the community.

First I'd like to recognize our awesome Top Contributors from the last half of 2013. These women and men have gone above and beyond the call of community in many ways, and deserve a hearty thanks for their contribution. Andrew, Jan, Dhrituka, Nagul Meera, Denis, and Pier exemplify what our community is all about by spending their time and resources helping others. Thank you to them and to all that selflessly contribute to our little corner of the world! Now, on with the links!

  • This year, we're renewing our focus and efforts on the Liferay Developer experience. There are many different areas we can improve, and here are a few we've identified that we're working on for you:
    • Getting started / onboarding - Liferay has historically had a steep learning curve. Aside from ongoing efforts to improve documentation, usability, and quality of the platform, we're also trying to add content for new and existing developers to quickly get up to speed on Liferay and related technology.
    • Developer Network - a new site dedicated to developers, to put the resources you need only a few clicks away, organized to not only for participation (e.g. blogs and forums), but with easy to follow guides, samples, and content geared toward development with Liferay.
    • Forum improvements, such as additional view options (best answer first), categorization of developer topics, badging/achievements, and more ways to find relevant and timely posts besides "Recent Posts" (feel free to add comments in this thread!).
    • More interactive/live tech sessions - We've done these sporadically over the years, and I'd like to make it a regular (i.e. scheduled) series with focused topics in each session. No "Intro to Liferay" here!
    • Much of it is still in progress, but hopefully in the next few months you'll start to see more content dedicated to our community developers, and we can together make it a fun and exciting place to be :)
  • As a community grows, it becomes more important to document the nature of the community and expectations between its members. This gives the community a greater sense of identity, direction, and purpose, and helps new members understand what the community is all about and what they can expect from it when considering joining. To that end, our leadership team has created a Community Ethos for this purpose, documenting who we are and what we collectively stand for.
  • Last year, Bitergia worked with Liferay to better understand our project and the trends in the development of Liferay in our community. It's an interesting read on how we're doing, and we're using much of this data to drive community initiatives in the coming year.
  • Peter Mesotten has written up a nice piece on Liferay 6.2 "Under the hood". Also, I wish Liferay had a Marketing "machine"!
  • Although we get a ton of community traffic on the liferay.com forums, it is not the only place where one can get some awesome Liferay action. Check out the Liferay leaders on stackoverflow.com, who tirelessly help our community wherever they may be needed.
  • The Liferay Portal 6.2 Community Beta program was a smashing success, with over 70 participants, 130 issues reported, and 81 resolved! As you can see, a lot of work went into this release, both from Liferay staff and our generous and ambitious community, and I would like to personally congratulate and thank each and every person who contributed to this release. Participants even got a fancy custom tee shirt for the program! Expect more in the coming months as we march toward more releases!
  • Since the opening of blogs on liferay.com to the community last year, I've seen a lot of really great blogs by many of you. We're going to be making it even more of an exciting adventure in the near future, through regular highlighting of blogs, and adding categorization so you can more easily subscribe and find blogs of interest. In the meantime, we have a new Community Content policy guide which covers things about what is and is not allowed in liferay.com content. Please give it a read if you are contributing on our forums, wikis, or blogs!
  • JavaScript is cool again (but you can still write bad JavaScript)! And several traditionally server-side programming paradigms like MVC are moving into that place where JavaScript has awesome support - the ubiquitous client side browser. Check out Sampsa's experiments with AngularJS!
  • Speaking of Frontends, Liferay's very own Frontend engineer Zeno Rocha (@zenorocha) has been nominated for Net Awards' Young Developer of the Year! Take a moment and vote for Zeno, and let's see if this Liferay guy can make it big time!
  • Do you love Jenkins? We certainly do. We even continuously develop and integrate Liferay with it. Manuel has written a sweet Jenkins Dashboard portlet for Liferay, with awesome status graphics and a nice AlloyUI-based user interface.
  • Nightly builds of portal have begun again (after quietly and accidentally dying for a brief period of time). This is a nightly build of the master portal branch, and is very useful to see if things have been fixed, or to check out upcoming new features. It also likely has bugs, instability, and other attributes of most open source nightlies :) Occasionally the build fails entirely, so there may be a day or two lapse of the builds, but rest assured we know who broke it (evil grin).
  • I am always a fan of clever ways to do things programmatically. Who wants to click and click and click? Check out Daniel's example of programamtically setting workflows on Document Library folders!
  • Radio Liferay is back in action, with some really awesome episodes from Alberto Chaparro, Iliyan Peychev, Daniel Sanz, The folks behind Valamis, and more! If you have pressing questions you'd like answered, head over to the Radio Liferay Google+ Community and ask away!
  • All about versioning of Liferay's document library and how to integrate it into Amazon S3, from our friends at profiq.cz
  • The Liferay Spain office holds regular Tech Talks about focused technical topics in and around Liferay. You can see many of the slides and code at in the repo, and stay tuned for more talks in the future!
  • Getting involved with a local Liferay User Group is one of the best ways to grow your Liferay chops. New user groups in China, Seattle, Tunisia, and Vietnam have started, and are looking for new members! If you are interested in starting your own User Group, there are new resources (and a nice video intro from Savoir-faire Linux) available on the User Group site. And don't miss our user group's and local community's upcoming events, such as Frankfurt, Portland (Oregon), Bangalore, Bloomington (Minnesota), Den Haag, and more!
  • Support RTL (Right-to-left) languages and Bi-directional pages is really important in our multi-cultural and multi-language projects, especially in the Arabic world. Thanks to the work from Iliyan and several others, Liferay now has exceptional support for this, and most of it is automatic.
  • From the releases desk: If you're watching the releases dashboard, you'll know that there have been recent releases of Liferay Portal (6.2), Liferay Faces (3.1.3), Liferay Sync, and Liferay IDE (2.0)! Next up will be Social Office 3.0, and the Liferay Mobile SDK will go Beta. Lots of new goodies to get us started this year!
  • The Liferay conference season gets underway early this year, starting with the popular Portal Solutions Forum in May in Amsterdam. The full schedule will be released soon, with new conferences in many yet-to-be-visited places, so stay tuned!
  • Meera Prince (also a top contributor from Q4 2013) shows us how to open any portlet inside an AlloyUI popup dialog window. Very handy for certain data entry portlets, as you don't lose your place on the page by having to switch pages. Thanks, Meera!
  • Ideas: everyone has them, and they drive innovation into many things in life, including Software. With Liferay's Community Ideas Dashboard, we now have an easy to use tool to let our creativity loose, and get that awesome feature or Marketplace app you've been dreaming of to become reality.
  • Speaking of Marketplace apps, we're up to around 230+ apps on the Marketplace. All of them free, but coming up in Q1 of 2014 will be the ability to sell apps via the E-commerce feature that many of you have been waiting for. Also, for those of you who wish to get notified of new and updated apps, check out the @LiferayApps twitter feed, and don't miss a single update.
  • Lots of awesome and informative blog posts on the community blogroll. A few highlights: The Nitty-Gritty: Theme Improvements and Bootstrap in Liferay, OAuth Client Portlet ImplementationLiferay Portal SSL ConfigurationFast development using Compass/Sass and Liferay PortalMicrobenchmarking Liferay Registry with JMHStaging in Liferay 6.2 - basicsCriando um ADT que acesse a estrutura de um Web Content (em português)

That's all for now. I look forward to seeing all of you out and about in our community, and hope this year brings you peace and prosperity!

DevCon 2013: Liferay WCM Apps and an Expando Browser

Community Blogs November 15, 2013 By James Falkner Staff

At Liferay's first ever Developer Conference in Berlin last month, I had the privilege to present my experiences in building apps with Liferay WCM (similar to the techniques discussed in a prior blog post, and this one too). I make use of this feature to quickly build relatively simple apps for our community, saving a lot of time during development and deployment. At DevCon, I demoed a bunch of simple apps, building up to a more complex app used to browse and modify Expando values in Liferay's Expando subsystem (this post is not about Expando specifically; for more details about Expando, check out Ray's excellent series of blog posts [1][2][3]).

In this post you will find the code from the examples shown at Liferay DevCon 2013, along with additional detail about the code above and beyond the amount I was able to squeeze in 30 minutes.

New templating Features in 6.2

In Liferay 6.2 there are a number of new features that enhance this, both in terms of security and development ease, and I briefly touched on them.

  • Enhanced Template Editor - no longer "just a text area", the new editor has automatic code completion, syntax highlighting, and more.
  • Freemarker Debugging in Liferay IDE - starting with Liferay IDE 2.x, you can will be able to do true debugging of Freemarker templates, e.g. stepping line-by-line, inspecting variables, etc.
  • Template Security Configuration - In prior versions it was possible for one to write a poorly- or maliciously-constructed web content template that could do anything its author desired. In 6.2, the default configuration now restricts that using portal properties like freemarker.engine.restricted.classes. To undo all of this (with an understanding of the consequences), you can add this to your portal-ext.properties:
velocity.engine.restricted.classes=
velocity.engine.restricted.variables=
freemarker.engine.restricted.classes=
freemarker.engine.restricted.variables=

You can also fine-tune the above to restrict it down to just the stuff you need/want (or that your web content template developers need/want). For the below examples, the only ones that do not work without this are examples 8 and 9, as they use a Class.forName as an example (which is not needed with Freemarker, see below). Other examples should work without any extra configuration.

Examples from DevCon

The examples I showed were done so in a particular order, from super-simple to more complex, in order to demonstrate some of the important concepts one needs to know to build apps with WCM. So I will repeat this here, using snippets of code with explanation below each.

All of these apps are written in Velocity, however I have started using Freemarker for new stuff, due to its (what I believe to be) superior feature set (like a ton of cool builtins, sophisticated macro features, stronger typing, no silent failures, and more). These apps are all simple enough to be easily converted to Freemarker, but I have not yet done so. It would be a good exercise for Velocity users who may be looking to pick up Freemarker skills. Also, for Freemarker and Liferay fans, check out Andreas Magnusson's awesome solution for using Freemarker to render true portlet views, with storage and versioning of templates provided by Liferay's Document Library.

Each app consists of a Liferay WCM Template, which is used to render a WCM Article based on a WCM Structure. Since the point of this is to demonstrate features using the templating bit, the structure is not important, and a 'dummy' one is used. However, structures with multiple fields can be used to essentially provide configuration options for the app if so desired.

To use these examples, simply create a WCM Structure with one or more fields, then create a template associated with the structure using the example code, and then create an article based on the structure, and add it to a Liferay page.

Example 1: The Hello World app

About as simple as you can get. It shows you how many users are registered on the Liferay instance on which it runs. It also shows how to access structure field values (e.g. if you wanted users of your 'app' to be able to provide customized values for one or more features in your app, using WCM structures)

Example 2: A sucky Hello World app

This is the same app, but with horrible performance, showing what happens when an article is rendered that has a lot of code or long-running process in it. Don't do this.

Example 2a: An improved Hello World app

Here we show how the Portlet lifecycle is exposed when writing WCM templates. As Liferay WCM apps are run in the context of a portlet (the "Web Content Display" portlet or "Asset Publisher" if you use that), you can separate code to run during the RENDER_PHASE of the portlet (when the browser is requesting the page) from the code that runs during the RESOURCE_PHASE, a JSR 286-defined lifecycle event that lets you call back into the template to do asynchronous processing (not synchronous with the RENDER_PHASE) and return stuff, separate from the rendering of the app/portlet itself.

Example 3: Passing parameters to the RESOURCE_PHASE via an HTML form

Here we show how to pass parameters into the RESOURCE_PHASE and access them using the $request variable. Handy for lots of things, but still forces a full page refresh on form submittal (hello, 1998).

Example 4: AJAXification with AUI and JSON

Here we show how to use AlloyUI's built-in AJAX utility to periodically (every second) call the app's RESOURCE_PHASE to get stuff. The 'stuff' in this case is a JSON payload which is then parsed by the app and displayed in the browser. Good times ahead (note there is no parameter passing - that's example 6).

Example 5: Same thing, but using jsonFactoryUtil to properly create and emit JSON objects

The point of this example is that it is difficult and unnecessary to form a JSON string using the templating language. Instead, we use Liferay's built-in jsonFactoryUtil to construct a proper JSON object, fill it with data, then emit it using its toString(), thereby not having to worry about escaping special characters or that we possibly left off a { or a ] or a ,.

Example 6: Same thing as example 5, but passing parameters via AlloyUI and accessing in the RESOURCE_PHASE

Not terribly interesting, we pass parameters during the AJAX call to the app's RESOURCE_PHASE, and use the values to construct a JSON object which is returned and displayed. Note the use of the ${pns} (Portlet Namespace) variable - this is required as of 6.2 to ensure all parameters are namespaced to avoid conflicts from other instances of the same app on the same page. See LPS-39748 for details, and also note that when we pass the parameters we prefix the names with ${pns} but when accessing from code in the RESOURCE_PHASE, we just use the name of the variable without the prefix.

Example 7: Intermission

In this example we illustrate how to asynchronously call Liferay services (like UserLocalService) using a client-side JavaScript library included out of the box, rather than having to do it yourself via an AJAX request to your own code. All of Liferay's services are exposed in this way, as are any custom JSON Web Services you may have running on Liferay. Whee!!

Example 8: Expando Basics

In this example we demonstrate how to use Liferay's Expando services to create new data schemas and get/set data using according to that schema. From templates, you have access to services for creating new tables, rows, columns, and data (e.g. $expandoTableLocalService.getExpandoTable()). In this example, we use it to create a new Expando table, populate it with some fake data, and echo that back, all done in the RENDER_PHASE for brevity.

One thing you see in this example is some complaining about Velocity vs. Freemarker. Since Velocity has no way to natively access static member variables of a Java Class, I had to resort to an ugly workaround. With Freemarker, it's much simpler (see commented-out code). A note for Velocity fans, the Velocity Tools project does include a utility method to access statics, but Liferay does not include this out of the box (I dunno why). We do with Freemarker though (via the staticUtil object).

Example 9: Expando Basics, but slightly better

Same as example 8, but here we are using an AJAX call to the RESOURCE_PHASE of the app, and $jsonFactoryUtil to properly construct the response. The same fake data is created each time the RESOURCE_PHASE is accessed.

Example 10: The complete meal

In most cooking shows, they skip the part of meal preparation where the meal is cooking in the oven for an hour. They instead show you the ingredients, a few basics about how the meal is constructed, then walk over to the oven and pull out the complete dish, and the audience oohs and aahs.

Well, here we are doing the same thing. We put the concepts of Liferay WCM (for templating), accessing Liferay Services like UserService and ExpandoService, AlloyUI (for AJAX calls and a fancy DataTable), parameter passing, JSON object construction, and whip it all together into a single app which is basically a glorified Database browser and editor, but built on top of Liferay Expando. If you use Expando a lot, and are using a traditional RDBMS browser to inspect values, then this final example may be of use to you!

Here's what it looks like when browsing some sample data:

And here's the code

This 'app' renders a few drop-down selectors, and to use this app, do this:

  1. Select one of the Classes from the first dropdown (this list is generated through an AJAX call to the RESOURCE_PHASE, retrieving all possible class names that have one or more Expando Tables associated with it). To understand the relationship between Expando classes and tables, read the wiki page.
  2. After selecting a class, select an Expando Table that is associated with the class (this list is generated the same way as #1 is).
  3. Once a class and table has been selected, an AUI DataTable will be displayed containing all of the rows and columns of the selected Expando Table (again, using an AJAX call to retrieve the data).
  4. If you want to change one of the values, double-click on it, make the change, and click Save. The value will be stored via another AJAX call back to the RESOURCE_PHASE, passing the identification and value of the edited cell, which is used to update the data in the Expando Table.

Because it shows all tables and all classes, you can even see the values for a User's "Custom Fields" (a feature in Liferay). For example, if you go to Control Panel->Custom Fields and create a new field for Users (e.g. "Favorite Color"), and then visit "My Account" and give yourself a value for that field, you can then see that entry in the com.liferay.portal.User / CUSTOM_FIELDS Expando table. Editing that value will change the resulting value for the user, if you re-visit your "My Account" page you will see this in action. Good times indeed.

Liferay Client-side IPC

You may also notice a Google map in the above screenshot. This was a simple demo of Liferay's built-in client-side IPC, which is just a glorified messaging using JavaScript, firing an event with Liferay.fire(eventName, payload) and receiving it in the other portlet with Liferay.on(event). In this example, I am sending data from the clicked row, and displaying the results (the row contains a latitude, longitude, name, pic, etc).

Magic Upload Button

One other tidbit I showed at DevCon - I was using IntelliJ IDEA to show these example templates, and then clicking a magic button in IDEA to cause the template to be immediately updated in Liferay (vs. the old school way of copy/pasting it into Liferay's built-in template editor). Several people wondered about this magic.

There were actually two buttons: one to download all of the WCM templates on a given Site into a directory (the filenames are then the same as the templateId's of the templates on the site). And then another to upload the currently open template back onto the site, overwriting any other templates that may have been found. Yes, this is a big time hack to make it easier to quickly build apps, and could be improved to handle multiple templates. The files are renamed to have a .vm extension, so that IDEA recognizes it as a Velocity template file.

These button were linked to an IDEA External Tool which is a just a convenient way to execute an OS-level command (e.g. a bash script or any other executable) with textual substitution of the path of the file being edited, the root directory of the project, etc. So I had pre-created two "External Tool" buttons which, when I clicked that button, it called one of my custom scripts.

So, if I clicked the Download button, it would end up calling:

/bin/bash get-templates.sh

This script contained:

You can see I hard-coded several things (including the name of the subdirectory containing the downloaded templates, the hostname/port, and the name of the Site from which to download ("guest")). It simply downloads every template into a directory, and renames the file from [number] to [number].vm so that IDEA would "know" it was a Velocity template.

If I clicked the upload button, it would call:

/bin/bash put-templates.sh [path-of-file-being-edited]

This script simply uploaded the currently opened template on top of any other template, based on the filenames contained in the subdirectory:

Both of these scripts relied on a tool called cadaver which is a WebDAV command like client for Mac OS X. The only reason I had to use this is because on Mac OS X, read/write WebDAV is not supported (thanks to Mac OS X, not Liferay). On Windows, it is properly supported, and so you could simply mount the WebDAV directory and edit the files directly on disk, and each time you saved them, they would automatically be updated.

Summary

So, that's it for the demos. The point of the presentation was that Liferay WCM is a good tool for rapidly prototyping (eventually converting to a 'real' app), and a quick and easy way to build simple "apps" on Liferay, without the need to deploy portlets (e.g. no IT needed), but it is NOT a substitution for java or true enterprise app development, and there are performance and security concerns that one must understand and accept. But it sure is fun!

2013 Liferay Community Pulse Awards

Community Blogs November 11, 2013 By James Falkner Staff

As 2013 comes to a close, I'd like to once again thank each and every one of you who have done your part to improve our community through valued participation and contribution. I know I sound like a broken record when I say this, but it's absolutely true that Liferay would not enjoy the success it has enjoyed nor be anywhere close to the same level of worldwide usefulness if it wasn't for our open source community.

One of the things I strongly believe in is recognizing those that give back, especially those that do so more than others. I believe peer recognition of achievements is of great value to the entire community, not just to those that receive it. So, as we close out this year, I'd like to once again recognize those individuals and companies that contributed more than most to our community over the last year, and hope that by doing so it not only encourages them to continue to give value to the community, but also sets a good example for others to follow in the future!

This year, Liferay re-branded all of the awards as Liferay Pulse Awards, and so what follows is a list and description of the community awards I was honored to be able to reveal and present at a few of the Liferay Conferences that took place this year. So.. on with the show!

Liferay Pulse Award: Community Contributor of the Year

This award is given to individuals (not employed by Liferay or its partners) that volunteer their time and effort to make Liferay and its community better. This year, extra marks were given for well-rounded participation and contribution in different areas, as well as for value given through non-liferay.com venues (e.g. personal blogs, stackoverflow.com, and others).

In no particular order, I present to you our Liferay Community Contributors of the Year for 2013!

Aniceto P. Madrid

Aniceto Pérez y Madrid is CEO and founder of Innovasoft Proyectos y Servicios, based in Madrid, Spain. Aniceto actively contributed to Liferay in Community Verifier and other programs, and is involved with the Liferay developer community and participates in the Liferay Forums.

 

David Kubitza

Based in Germany, David's main contributions have been in Liferay core technology, and he's done a great job in BugSquad, finding and/or fixing almost 40 non-trivial fixes and improvements for Liferay projects. David is a regular IRC user and regularly visits the #liferay IRC channel to discuss bugs, features etc., get some help, and give some help back to other users.

Luis Mas

Another of our valued Spanish community members, Luis had probably the most well-rounded participation out of the bunch, singlehandedly translating all of Liferay Portal into Catalan, but also active on the forums and finding bugs in BugSquad. Luis is also an active member of the Spain User Group.
 
 

Gnaniyar Zubair

Gnaniyar is a Liferay consultant in Saudi Arabia and also has a very well-rounded profile in our community. He is very helpful on our forums (he had one of the highest answer-to-post ratio in the community), fixed several 6.2 bugs, and spreads his knowledge via his personal blogRecently, Gnaniyar contributed a WCM feature in Liferay for publishing any versions of the article and has been involved many R&D process which will be available soon in the Liferay Marketplace.
 

David Nebinger

A repeat winner from the USA, David is extremely helpful to newcomers and experts alike on our forums, with the highest total of posts and answers (over 1700 high quality forum posts in the last year), contributions to our wiki, an active blogger, and contributions to Liferay Portal core as well.

 

If you see these folks in our community, be sure to congratulate them on a job very well done this year!

 

Liferay Pulse Award: Community Excellence

The Community Excellence award is given to those worldwide companies in our Liferay Partner community who demonstrate a unique and valuable dedication to our open source community. Companies here have spent their own time and resources to make our community better, which of course benefits everyone, so we recognize them here and thank them for their dedication to growing Liferay and its community.

EmDev (Russia)

EmDev continued their unique track record this year with a team of highly dedicated and smart community members that were active on our Russian and English forums, and were one of the first to contribute to the Liferay Marketplace (and was a runner-up in the Marketplace App Contest), along with ensuring that the Liferay Portal Russian translation was 100% complete and of super-high quality.

 

Permeance (Australia)

Permeance had yet another stellar year in our community, super-active in both Community Verifier and in our 6.2 Beta program. In addition, Permeance helps to organize and contribute to the Australia user group, contributed over 7 apps to the Marketplace (and was a runner-up Marketplace App Contest winner).

 

 

Cignex Datamatics (Worldwide)

Cignex Datamatics has always been a hugely valuable member of our partner and open source communities, and this year is no different. They are again recipients of this Community Excellence award through their contributions in many areas including our forums, wiki curation, the Marketplace (where their app Mercado was a runner-up prize winner), and heavily contributed to BugSquad and Community Verifier.

 

Componence (Netherlands)

Again this year, Componence demonstrated their value through their tireless and well-rounded community activity on the forums, Marketplace, bugfixing, website contributions, and at local events for the Netherlands User Group and Liferay Conferences. Componence also ensured the Dutch translation was 100% complete and correct, and was active in BugSquad and our Community Leadership Team as well. We're very lucky to have them in our community!

 

Savoir-faire Linux (Canada)

Savoir-faire Linux is a long time contributor to open source (like the Montreal Python community) and Liferay. They lead the Montreal Liferay User Group as well, and have contributed major features in the past, and continue to do so this year. In addition, they are active on the Liferay forums, and actively maintain the French Canadian translation for Liferay Portal.

 

 

SMC Treviso (Italy)

SMC was one of the first partners of Liferay (and the first in Italy), and this year continued its tradition of supporting our community through contributions to our forums, several Marketplace apps, and is active in BugSquad and founded and continues to build the Italy User Group. They also help coordinate and contribute to our Italian translations (now at 100%), and even translated this year's mobile app for our Liferay Events.

 

 

Dunn Solutions (USA)

Dunn stepped up their game quite a bit this year, and firmly planted their flag in our community through high quality blogging of technical issues in Liferay, several Marketplace apps, and helping our community on the forums. Dunn also participates in and presented at the Chicago User Group.

 

 

Rookies of the Year

The final two awards went to relative newcomers to the partner ecosystem in the last year, and are quickly building their community chops by volunteering their time and energy to give back to the community in various ways. We want to welcome them and recognize their achievements using this award and hope they continue to build on their work done this year in the months and years to come, and set a great example of how our community can grow through consistent and quality participation and contribution.

DCCS (Austria)

Since becoming a Liferay partner in late 2012, DCCS used their prior Liferay expertise to immediately jump into the community and help out those in need on our forums. Looking beyond the dates considered for this award, DCCS looks to be continuing to participate and contribute, and I look forward to seeing them in 2014!

 

 

Solea Solutions (USA)

Solea Solutions, based in Portland, has displayed the kind of passion and willingness to contribute that makes our community great. Since becoming a partner in 2012, they have revived the Portland User Group with a number of outreach community events, contributed a handful of Marketplace apps, and even painted their ride for the North America Symposium.
 

Please join me in congratulating all of these individual contributors and partners. They, along with the rest of our community, are what make my job so rewarding and what I believe makes Liferay stand out above all as an example of open source and community at its best. Great job everyone! I am very happy to see all the enthusiasm and passion for open source and for Liferay, and I look forward to seeing what we can accomplish in 2014.

Liferay Portal 6.2 CE Release

Community Blogs November 1, 2013 By James Falkner Staff

Today Liferay released the next version of its flagship software: Liferay Portal 6.2 CE! [Download] [Quick Start]

The Liferay product and engineering teams, in close concert with our awesome community, have spent many months getting the 6.2 release ready, and it is finally here.  "A great platform with polished features to make it easier than ever for you to create web experiences that engage your audience." Sounds great, right? Start your download, and continue reading for the gory details...

Release Nomenclature

Following Liferay's versioning scheme established in 2010, this release is Liferay 6.2 CE GA1.  The internal version number is 6.2.0 (i.e. the first release of 6.2).  Future CE releases of 6.2 will be designated GA2, GA3, .. and so on.  See below for upgrade instructions from 6.1, 6.0, and 5.x.

Downloads

You can find the 6.2 release on the usual downloads page.  If you need additional files (for example, the source code, or dependency libraries), visit the additional files page.

Source Code

As Liferay is an open source project, many of you will want to get at its guts. The source is available as a zip archive on the downloads page, or on its home on GitHub. Many community contributions went into this release, and hopefully many more in future releases! If you're interested in contributing, take a look at our contribution page.

New Features

In addition to the numerous bugs that have been fixed since 6.1, Many new features have gone into this release. Highlights include:

  • Updated Support Matrix - Liferay's general policy is to update our support matrix for each release, testing Liferay against newer major releases of supporting operating systems, app servers, browsers, and databases (we reguarly update the bundled upstream open source libraries to fix bugs or take advantage of new features in the open source we depend on).  For example, for 6.2 we are aiming to add support for Websphere 8.5, GlassFish 4.0, JBoss EAP 6.1, Tcat 7.0, Weblogic 12c, Windows Server 2012, SQL Server 2012, DB2 10.1, Postgres 9.1, and others. The final list will be produced once the EE release is ready.
  • UI/UX Refinements - Too numerous to list here.  Responsive themes by default, in-context editing, many Mobile enhancements (including mobile previews), Control Panel awesomeness, a revamped Dockbar (with Notifications support), an easy to use and unobtrusive "Add" function on the sidebar (which drastically reduces the number of clicks for most content operations), and the new default "classic" theme all add up to a sweet UX improvement. A lot of polish has gone into this release, and you will see it immediately on first glance, but there are many subtle changes that will improve your daily lives. A lot of it comes from upgrading to AlloyUI 2.0 (and Bootstrap 2.3.2) and a focus on the user experience.
  • Staging Improvements, including a sweet publishing preview, background publishing, validation, and a revamped staging administrative interface.
  • Improved Marketplace support. A revamped and intuititve management of all custom apps installed on Liferay. 
  • Liferay as an OSGi container. A lot of work has gone into Liferay in support of OSGi and its modularization features. While we have not yet reached OSGi nirvana (and there is not yet documentation), you can deploy and manage OSGi components with Liferay. For more detail about what's under the hood, check out Radio Liferay Episode 34.
  • Site Hierarchies. Easily organize sites in a hierarchial relationship, allowing easy content sharing and navigation.
  • The Recycle Bin. Recover deleted per-site content quickly and painlessly. Quick undo. Automatic flushing, and full search.
  • An easy to use web content structure editor and a template editor with auto-complete, structure field access, a palette of commonly used Liferay services, and syntax highlighting for Freemarker and Velocity templates. In addition, managing web content gets easier with a revamped interface for managing content, structures, and templates through a hierarchy of folders, drag and drop, and more.
  • I18N enhancements including localizable friendlyUrls, a super-easy and consistent way to enter translations for multi-language fields, localizable custom content type field names and web content structure field names, and more! Liferay is now translated into over 45 languages thanks to our tireless community contributors.
  • Document Management. With 6.2, you can now subscribe to folders to be notified of changes, and drag-n-drop multiple files from your desktop into the library with ease.
  • A revamped calendar with major UI and functionality enhancements, including personal calendars, site calendars, event invites, resource management, a responsive UI, and much more.
  • In-place blog editing. Seriously? Yep.
  • Ever override one of Liferay's built-in application's JSPs to customize its display? You probably cried a little when faced with an upgrade. No more, with Application Display Templates you can easily override Liferay's apps' displays using custom Freemarker or Velocity templates.
  • Web Forms and Dynamic Data Lists get new field types like documents, images, rich content, and more. You can also have repeatable fields. Power users: rejoice!
  • Enhancements for Liferay IDE - It's never been easier to develop for the Liferay Platform, using the latest features of Liferay 6.2 and the Liferay IDE version 2.0.  IDE Enhancements include Maven support (yay!), theme creation wizards, proper Freemarker template debugging, creating Control Panel portlets, and much more. The new IDE version will be available very soon after this CE release.
  • Better Scalability and Performance, including a Portlet Sandboxing feature to isolate portlet execution into separate JVMs and separate servers using an efficient over-the-wire protocol (EE only).
  • Better Auditing, Analytics (including Piwik and custom analytics engine support), Management and Monitoring
  • Better Documentation
  • Better Security , including the ability for Liferay to act as an OAuth 1.0 server (EE only) 
  • Better Quality
  • ... And more!

Documentation

The Liferay Documentation Team has been hard at work updating all of the documentation for the new release.  This includes updated (and vastly improved/enlarged) javadoc and related reference documentation, and and updated User Guide and Developer Guide. Our community has been instrumental in identifying the areas of improvement, and we are constantly updating the documentation to fill in any gaps.
 

Plugins and the Marketplace

With the advent of the Liferay Marketplace, plugins are now decoupled from the core platform, and are released (and updated) separately. All Liferay-authored plugins have been updated to declare support for 6.2, and will be installable (and supported) on this release. There may be a few (e.g. the Zoe themes) which will take a little more time to bake in the 6.2 oven.

If you or your company have published plugins on the Marketplace, and are interested in updating your plugins for this release, be sure to check out the process in this post.

Bug Reporting

As always, the project continues to use issues.liferay.com to report and manage bug and feature requests.  If you believe you have encountered a bug in the new release (shocking, I know), please be cognizant of the bug reporting standards and report your issue on issues.liferay.com, selecting the "6.2.0 CE GA1" release as the value for the "Affects Version/s" field.
 

Upgrading

Good news for those of you on 6.0 or prior! Liferay introduced the seamless upgrade feature with Liferay 6.1. Seamless upgrades allow Liferay to be upgraded more easily. In most cases, pointing the latest version of Liferay to the database of the older version is enough. There are some caveats though, so be sure to check out the Upgrading Liferay chapter of the Liferay User Guide for more detail on upgrading to 6.2.

Getting Support

Support for Liferay 6.2 CE comes from the wonderful and active community, from which Liferay itself was nurtured into the enterprise offering it is today.  Please visit the community pages to find out more about the myriad avenues through which you can get your questions answered.

Liferay and its worldwide partner network also provides services, support, training, and consulting around its flagship enterprise offering, Liferay Portal 6.2 EE, which is due to be released shortly after this CE release.

Also note that customers on existing releases such as 6.0 and 6.1 continue to be professionally supported, and the documentation, source, and other ancillary data about these releases will remain in place.

What's Next?

Of course we in the Liferay Community are interested in your take on the new features in Liferay 6.2.  Work has already begun on the next evolution of Liferay, based on user feedback and community ideas.  If you are interested in learning more about how you can get involved, visit the Liferay Community pages and dig in.

Kudos!

This release was produced by Liferay's worldwide portal engineering team, and involved many hours of development, testing, writing documentation, translating, testing some more, and working with the wider Liferay community of customers, partners, and open source developers to incorporate all sorts of contributions, both big and small. We are glad you have chosen to use Liferay, and hope that it meets or exceeds your expectations!
 
In addition to Liferay's engineering staff, a special thanks goes to the many open source developers who volunteered their time and energy to help with the release, whether it was bugfixing, idea generation, documentation, translations, or other contribution that helped to improve this release. Check out the Community Contributor Hall of Fame and be sure to thank them if you run across them in the community!
 
----
6.2 Spacemen image courtesy of Jorge Ferrer

Liferay's First Developer Conference

Community Blogs October 31, 2013 By James Falkner Staff

As we approach the end of 2013, we also approach the end of the annual Liferay Conferences (the final two events are coming up: Liferay Portal Solutions Forum in London, and the Liferay Italy Symposium in Florence). I was privileged to be able to attend many of these, and while I always love seeing our community and the magic that can happen in person, I was especially excited to attend our first ever 3-day Developer Conference and UnConference in Berlin. This event was tailored to our developer community and featured not only some awesome talks from our community leaders, but an UnConference as well. Check out the video recap if you want to see some of the attendees and what they had to say, or read on for more detail.

The UnConference

If you've never attended or heard of an UnConference before, here's the short version: A conference where the attendees decide the agenda and topics to discuss. Olaf did an amazing job as organizer and event chief, and made it an event worth remembering (Literally -- you'll find summaries below). The first session was an agenda building session, and I was curious what would happen.. I attended an UnConference earlier this year with a bunch of community managers, and the moment the floor opened up for requests, 50 people stood up with pen in hand and a twinkle in their eye, so I was wondering what our community would do when faced with publicly speaking and stating their desires for topics. And I was happy to see there were almost 40 proposed topics ranging from Translation improvements to Clustering Architecture to Disc Golf!

While it's always fun to sit around and talk about Liferay, many of the sessions resulted in discovering new ways of doing things, improvements that can be made, connections between community members who only knew of each other from the forums, and many other benefits of a face-to-face conversation. I was only able to attend one talk per timeslot, so I don't have details on each and every one, but kudos to all of the note-takers for each session! It is a tough job trying to participate and write, so if you happen to benefit from any of this, be sure to thank the note takers.

UnConference Summaries

Below are all of the sessions held during the UnConference. If the note-takers took notes, you'll find them linked either to an image of the physical piece of paper used for the notes, or a link to an online/digital version.

If you took notes and do not find your notes below, OR if you took notes via a laptop/mobile, please post them to the wiki, let me know, and I'll link to them here. Time permitting, I'll also try and link these to the agenda itself if it is to remain online (will need to check with the web team on that). If some of these are illegible, I believe Olaf has the high-res versions somewhere on his mobile!

The Developer Conference

The final 2 days were dedicated to a traditional pre-set agenda featuring many of our community leaders talking about their experiences with and knowledge of Liferay and related technologies. It was quite far removed from your typical lead-generating business / technical conference. We had the Julio and Sergio cooking show, Marian and Sampsa broke (and fixed) Liferay, late night Table Football, and I even snuck in some naked Finns into my community talk! For that I'd be quietly shown the door at many other conferences :)

I also saw an unexpected yet very real and very welcome benefit: our community literally sitting down with Liferay engineering and support experts, debugging issues in real-time on production sites, and getting immediate resolution to something that would have taken a lot longer online. That alone paid for their trip to Berlin, and really shows the power of our community: people with shared experiences (and sometimes shared suffering) getting together to make something better than before. This happened again in San Francisco two weeks ago! Very cool.

All in all it was a great event for me, and hopefully for everyone who attended. I know I sound like a broken record, but I think our community has the absolute best mix of positive outlook (even in the face of Liferay's ... quirks), a good grasp of reality, technical skills, and camaraderie that I don't see anywhere else. I hope we can repeat this kind of event in the near future, in Germany or elsewhere, and make it even more awesome!

Community Awards

I'm saving this for my next blog post (separation of concern, modularity, eh Ray?), but I also want thank all of our community that contributed over the last year. We've had a lot of nice contributions in many areas (and more in the pipeline), and it's nice to be recognized for this, so we recognized 5 individuals and 9 partners (worldwide) for their Community Excellence. I'll detail their achievements and what they give back to our community in my next post!

In Summary

All in all, I was honored and privileged to attend and meet many of you. We are all stuck behind IDEs, monitors and keyboards, mobiles, endless internal meetings, Impress/Keynote/PowerPoint presentations, and other distractions, so I would like to thank all of you that took the time out of your busy schedules to pay for, travel to, and participate in these Liferay events.

Presentation slides for most if not all of the sessions will be available soon, so keep an eye out. I met a lot of new and old community members (I also realize I screw up new names, especially after a few sponsor-paid beers, and I deeply apologize for that), and I hope to see you at a future event, Liferay or otherwise, or online. Cheers!

PS: Happy Halloween! If you've ever heard of the Konami Code, give it a go on liferay.com.

Liferay Portal 6.2 Release Candidate 1

Community Blogs September 24, 2013 By James Falkner Staff

You may have noticed over the weekend that Liferay released a first "Release Candidate" build named RC1. Download it here:

This is a build that could potentially be promoted to the first GA release! From here on out, Liferay's release and QA teams will be testing each RC, and if issues are found that need to be fixed (characterized as a "Show Stopper" bug), another RC will be done the following week, and repeat. Once a suitable RC is produced, it will simply be renamed GA1 and the party can begin. So we are officially on "Release Watch".

Around 220 fixes and 37 "Stories" (minor improvements) have been committed to this RC since the last development release. And, as usual, the community has been a huge help with finding, fixing, and writing regression tests for all those issues that Liferay can never find - issues that occur in your specific environments and upgrade scenarios that will help us improve the product and make your transition to the release (or the first impression for newcomers) that much better! So kudos to the many of you that have contributed to this release - it is a testament to open source and to the enthusiasm and passion shared by those in our community (if you contributed, be sure to add your name to the Community Contributor Hall of Fame!).

In this post, I'd like to briefly share some statistics from the community about this release, as well as some stats from our various community programs that offered a diverse and focused way to give something back.

Overall 6.2 Contributions by non-Liferay staff

  • 1025 New Bugs filed (885 Bugs, 114 Feature Request Ideas, 690 total Resolved)
  • 224 Community Contributions (!)
  • 10,000+ Issues resolved (since Jan 6, 2012, the day 6.1 was released, and including all ticket types like bugs, features, stories, tasks, etc, regardless of origin)

Community Verifiers in 6.2

  • 691 Bugs Verified
  • 645 Resolved
  • 46 Unresolved

Bugsquad in 6.2

6.2 Translations (for Portal and Plugins)

  • A sum total of over 100,000 combined individual new submissions, suggested modifications, and approval actions (The version of Pootle used by the Translation Team is not good at generating statistics, so this is a sum total of all users and their actions, including contributions of string translations, as well as "approvals", via a screen-scrape!).

6.2 Community Beta Program

  • 72 Participants
  • 130 Issues reported
  • 81 Issues Resolved

As you can see, a lot of work went into this release, both from Liferay staff and our generous and ambitious community, and I would like to personally congratulate and thank each and every person who contributed to this release. I've been using the new release for a couple of months for day-to-day tasks and have to say it is well worth the upgrade.

If you're curious what the new release is all about, check out the RC build, and read the official docs to learn more about the release. A lot of blood, sweat, and tears has gone into this release, and I hope you find that it meets or exceeds your needs! As always, keep an eye on the Release Dashboard for up-to-the-minute information about the final builds and ultimate release.

2013 Liferay Marketplace App Contest Results

Community Blogs August 30, 2013 By James Falkner Staff

Today Liferay announced the winners of the 2013 Liferay Marketplace App Contest, and I'm particularly happy to see so many great entries and apps in the contest! The contest entries covered a wide range of use cases and employed some pretty cool technology above and beyond Liferay itself, and is a testament to the flexibility and power of Liferay. But it's more than that. Seeing the passion from our community and the innovations in these apps underscores the fact that Liferay is a great platform, but the true power comes from the ideas and applications from you, our community of customers, partners, and enthusiasts.

As of today, there are about 100 community, non-Liferay apps on the Marketplace, with another 100 in the pipeline in various stages of approval. All of them bring new value and ideas to our community, and many of them are open source (including our two grand prize winners). These apps and their developers bring huge value to our community and to your Liferay deployments. Of those entries submitted, I personally found 10 or so apps I will be regularly using in my daily work from now on, and I can't wait to see what other gems you come up with in the months and years ahead.

Below are our winners and runners-up, along with some interesting facts about the app and/or the developers. You should check these apps out, and while you're at it, check out the rest of the really cool apps on the marketplace. It was really tough to choose the best of the best, because there were so many awesome entries! Great job, everyone!

Note that due to several issues in the previous Liferay release (6.1 CE GA2 and EE GA2), several of these apps would not work out of the box with GA2 without workarounds, so couldn't be on the Marketplace, but were still able to participate in the contest anyway (it wouldn't have been fair otherwise!). So some of the below apps do not have links, as they are still in the process of being vetted against the new release.

Valamis (grand prize winner)

Valamis is a social learning environment for sharing and receiving knowledge. You can use it as your organization's social learning environment. You can also use it to encourage individuals to collaboratively share tacit knowledge which cannot be found from books, but which is a combination of experience and wisdom.

Valamis was formerly known as Project Learn, one of our first Liferay Community projects! It's awesome to see this project graduate into a commercial open source tool. Also, they can make sweet videos! Janne and Jari have done a fantastic job and we're lucky to have them.

Props 'n' Prefs (grand prize winner)

This application allows to search and view system properties, portal properties, portal preferences and server preferences. It also allows you to delete portal preferences or server preferences, with full search of properties and their values, full content popups, one-click resetting of portal and server settings, and more!

Sébastien actually submitted around 5 or so apps to the contest. One prize per person! But pretty much every app is useful, and the scripting apps are in my go-to list now, but this one provides a huge help to admins everywhere that get stuck with some of Liferay's quirks when it comes to configuration, and integrates nicely with the platform.

Mercado

Mercado is a marketplace for software applications for an IT enterprise to create a user centric collaborative interface within a controlled environment. Create a knowledge repository of products, reports, videos, photos, code, and other downloadable items, with included workflow, dashboards, moderation, search, ratings, and other features.

Cignex Datamatics needs no introduction, and has been a long-time community and professional partner. If you're attending the Liferay North America Symposium this year, you'll have a chance to talk to them about this and other apps.

Remote jBPM Workflow

A drop-in workflow engine which features REST services exposed by a GWT-based console, and integration with JBPM 5.4. Other features include form management, programmatic access to form values, and more!

Liferay is a well-known integration platform, and this app gives a nice turn-key solution for your JBPM needs.

BTop

BTop is an online payment app which will help you optimize transactions and facilitate online payments services management. By using an easy administration board you will be able to manage payment plugins, sellers configuration, payment methods and get a report for each transaction. Other features include a customizable rules engine, secure payments, geolocalization of payments, and integration with Liferay's shopping portlet.

This is an app that is currently in the pipeline for the Marketplace, so not yet available, but will be very soon! 

Workflow Selection by Web Content Structure Type

This handy app allows you to assign different Liferay workflows based on the type (structure) of web content articles. Simple, yet powerful addition to your workflow arsenal. Why didn't I think of that! :)

Permeance is also a heavy contributor to our various community initiatives like the Bugsquad, Community Verifier, and most recently (and still in progress) the Liferay 6.2 Community Beta Program.

Webtown Web Content Display

This app is an enhanced web content display portlet. It allows you to filter the web content you want to display in several added ways, including by scope, structure, tags, and categories. It also lets you specify the listing and detailed view templates you want to use for each of the structures, and has additional extra features like paging, social bookmarks, ordering, and more.

PDF Viewer

An enhanced PDF viewer, supporting features such as browsing the document structure (chapters, subchapters), zoom, and searching within the PDF. It also integrates with LIferay's global search capabilities, and a friendly URL scheme for documents.

Alexey was also recognized as a Contributor of the Year last year.

OpenScape Web Collaboration

OpenScape embeds a real-time document sharing capability into your team collaboration space. With a simple click from your Liferay Portal, you can select contacts, friends, or team members that need to participate in a web collaboration session, and start up a collaborative session between participants.

The team at Siemens did a great job integrating their web collab product with LIferay. It's not just an IFrame!

Ajaxable search container paginator

This handy hook turns every use of Liferay's Search Container taglibs and APIs into an ajax-powered, no-page-refresh-needed pagination tool (this includes even Liferay's own use of the Search Container).

Omar did an awesome job recognizing a shortcoming of typical portals (and the portlet 2.0 spec), and provided a simple and elegant solution. It just works.

Liferay Instant Messaging System

Do you like to chat with your friends on your favorite social network? Have you been missing the same functionality in Liferay? Not anymore! Brand new Liferay Instant Messaging System brings you all you ever wanted packed in a single plugin.

Shout

A simple yet powerful app to exchange short messages on a Liferay site. Another really simple yet cool way to engage audiences on a Liferay site. It breaks down barriers to communication in a nice looking and performant way.

AjaxQuote Portlet

Real-time market quote data is streamed to one or more portlets on the page by Ajax and JavaScript technology. Watch the tickers move in real-time on the screen (with no stress on the back-end; all client side services). Supports anonymous and personalized tickers.

Popups

This app lets you write custom popups (using Liferay's WCM system), and target those popups using a flexible, rules-based interface. Target based on URL, site role (with autocomplete), and select the frequency for the popups.

BonitaBPM Integration

This app provides a complete integration with BonitaBPM. Manage BonitaBPM processes, cases and user tasks from Liferay Portal & Synchronize Bonita users with Liferay.

Jack Rider was also featured on Radio LIferay recently, and has also been an avid supporter of Liferay and our community. Thanks, Jack!

Custom Landing Page Hook

After a user logs into Liferay, it is a common requirement to be able to redirect them to a different page based on their Organization or Site membership. This hook allows you to specify the desired redirection behavior using a properties file setting.

Tejas was also recognized as a Top Contributor, and this app is one of the most often requested on our forums. Now I have a place to point people.

Categories Multi Select

This app provides a new search facet, integrated with Liferay's Faceted Search, allowing one to select multiple categories to "drill down" into, while searching for assets, as well as a handy portlet that can be used to filter existing asset publisher apps on a given page.

stickyNotes

stickyNotes allow you to have a dashboard to post sticky notes, and it can be located anywhere on the portal. With stickyNotes you can post ads, events, reminders, or anything you can think of, in a visual and simple way, using multiple layouts and colors.

Random Content Rotator

This portlet allows a random piece of web content (text, image, document, video, or any combination) to be randomly displayed on page load. This is great for rotating banner images, side bar text/images, quotes, or testimonials.

Ask IRC

A handy way to integrate your portal with Liferay's official IRC channel! With this app, administrators and users have an easy and foolproof way to contact other community members in the official Liferay chat channel on FreeNode (#liferay). About a month ago I started noticing new users like "LRAdminInNeed824" join the Liferay chat channel and begin asking intelligent questions. Now I know why they are showing up! Thanks Bijan!

...In closing

A big thanks goes to each of the 70+ people who participated in our first ever app contest. It's great to see so many of you willing to showcase your awesome talents and ideas! Liferay would not be where it is today without the contributions, innovations, enthusiasm from our community. I can't wait for the next one!

New Release - Liferay Portal 6.1 CE GA3

Community Blogs August 23, 2013 By James Falkner Staff

I’m happy to announce that today, Liferay released the much anticipated Liferay Portal 6.1 CE GA3 release! DOWNLOADS: [Tomcat Bundle | GlassFish Bundle | JBoss Bundle | Maven Artifacts and Info | Source Bundle | Github Repoother bundles and support files].

This update contains over 500 fixes, most importantly those fixes related to Liferay’s Security Manager (née PACL) and Spring MVC, which prevented many of you from successfully publishing your apps to the Marketplace. These issues should now be fixed.

Version Name

Following Liferay's versioning scheme established in 2010, this release is called Liferay Portal 6.1 CE GA3. The internal version number is 6.1.2. See below for upgrade instructions from previous releases.

PACL Fixes

Earlier this year, Liferay made the use of its Security Manager optional, for those that wish to publish free apps. This will continue to be optional, though you are highly encouraged to make use of PACL in your apps - this is an important step for securing your apps, especially paid apps (once this feature is added to Marketplace).

In support of PACL, a new quasi-feature has also been added in this release - the PACL Policy Generator. This feature will automatically generate the necessary PACL policy declarations for you, saving you from having to manually test, modify, and re-test your apps. See the PACL Policy Generator's official documentation for details on how to use the generator.

If you’ve been waiting for this release to publish your app to the Marketplace, be sure to test your app with this release, and indicate that your apps are compatible with this release (and the associated EE release) by using liferay-versions=6.1.2+,6.1.30+ in your liferay-plugin-package.properties file. If you’ve already successfully published apps with liferay-versions=6.1.1+ or liferay-versions=6.1.1+,6.1.20+ then you don’t need to re-publish, but you should test against the release to ensure compatibility (see the compatibility note below).

For more detail, see:

  • LPS-33047 - PACL - As a developer I would like reasonable java operations such as classloading, reflection, native library access within libraries I include to not prevent me from developing plugins for the marketplace
  • LPS-32200 As a Liferay Marketplace Developer, it should be less time consuming and less error prone to identify and declare necessary PACL declarations

Security Fixes

Liferay is committed to producing high quality and secure products. As with all of Liferay’s CE update releases, many security bugs have been fixed, including all of the security issues reported to, and fixed in the context of, the Liferay Community Security Team. The security of our products is very important to our customers and the wider Liferay community, and we have processes in place to ensure that any security-related issues are promptly addressed and that our customers' data is kept secure. For more detail, check out Liferay's “/security” URL.

JDK 7 Support

Another addition to this release is support for Java 7. Typically, Liferay will add support for new underlying platforms in a minor release, but this one was too important to pass up. See LPS-29538 Java 7 Support for details.

Spring MVC Fixes

6.1 CE GA2 had a bug that prevented many Spring MVC-based apps from properly initializing. See LPS-29103 Custom Spring MVC -portlets broken after upgrading to Liferay 6.1 GA2 (web.xml listener order) for more detail, but rest assured it's no longer an issue!

Compatibility

Liferay aims to make releases within a given “release family” compatible, and are continually improving the development process to catch compatibility issues early and go through the proper deprecation process, and it is no different in this release. A handful of APIs have been deprecated in this release as a result of bugfixing. If you are using them, you should strongly consider modifying your apps to use their documented replacement APIs.

LPS-28713

  • com.liferay.portlet.documentlibrary.util.AudioProcessorUtil::setAudioProcessor()
  • com.liferay.portlet.documentlibrary.util.ImageProcessorUtil::setImageProcessor()
  • com.liferay.portlet.documentlibrary.util.PDFProcessorUtil::setPDFProcessor()
  • com.liferay.portlet.documentlibrary.util.RawMetadataProcessorUtil::setRawMetadataProcessor()
  • com.liferay.portlet.documentlibrary.util.VideoProcessorUtil::setVideoProcessor()

LPS-24411

  • com.liferay.portal.util.Portal::getAlternateURL()
  • com.liferay.portal.util.Portal::getCanonicalURL()
  • com.liferay.portal.util.PortalUtil::getAlternateURL()
  • com.liferay.portal.util.PortalUtil::getCanonicalURL()

Upgrade

As a general rule, you can upgrade from one major release to the next major release. For example, you can upgrade directly from Liferay 6.0.x to 6.1.2, but not from 5.2.x to 6.1.2. If you need to upgrade over several major releases, you'll need to run the upgrade procedure for each major release until you reach the release you want. See the official upgrade documentation for more detail and the explicit steps for upgrading. In particular, you can upgrade from 6.0.x, 6.1.0, and 6.1.1 to this release (6.1.2).

Known Issues

1. The GlassFish bundle has a known first-start issue (LPS-39095) with the following workarounds:

  • Stop and restart the domain
  • Add portal.security.manager.strategy=default to your portal-ext.properties file (this causes Liferay to use the default security manager configured by the application server. A security manager will not be used if the application server did not configure one) 

2. Due to a last minute JSP compilation build failure, the Liferay+Resin bundle is not yet available. Engineers are working on the fix as I type and it should be available soon! 

In closing

A special community shout-out goes to Rotterdam CS and Emeldi for helping us with the PACL and Spring MVC testing - their apps and staff helped us find several important issues before the release, which is an awesome by-product of all the great apps people are making! Thanks, ya'll!

This is most likely the last update for the 6.1 CE vintage - 6.2 CE is right around the corner, so if you’re interested in seeing what’s coming in the next release, be sure to get involved in the 6.2 Beta program!

Calling All Stations: Liferay Community Beta Program

Community Blogs August 6, 2013 By James Falkner Staff

We need your help!

The next release of Liferay Portal - version 6.2 - has been under development for over a year, and many of you have been instrumental in getting new features in, fixing old bugs (and new bugs), and generally improving the quality of each of the prior Milestone releases, and for that you should all be proud (and add your name to the Community Hall of Fame while you're at it!). We've made a lot of progress in terms of release quality and development process, and have exposed it through various avenues, such as the JIRA Development Board, Release Dashboard, Ideas Site, and the ongoing effort to improve the responsiveness to contributions (which we really, really value).

I am excited to announce the latest initiative in our community - the Community Beta Program! This program is kicking off in concert with the first release of Liferay 6.2 Beta, and is continues to serve as yet another way to improve quality. What better way to ensure the next release is suitable for you, than to give it a go and report the good, bad, and the ugly?

The Process

It's simple: sign up for the program, pick the 'tracks' you wish to follow (based on functional areas of Liferay), and then try out the Beta release, making note (in the form of JIRA tickets) of the bugs or confusing aspects of Liferay that you find.

Each track will have a dedicated written guide, and one or more members of Liferay's engineering team dedicated to your success.  The written guide will explain in more detail what is involved in the particular track, so you're not just left to your own devices (though you're free to explore anything you wish!) We will also have an area on liferay.com with a dedicated forum and supporting FAQ on which to collaborate by next week.

Liferay (the company) has a dedicated and awesome QA team that will be heavily involved in this program, and are going to be available for questions, collaboration, and will also be paying particular attention to the Beta team and its findings. If you're willing to try out the Beta, you'll get the attention you deserve.

How to get involved

The program is open to the entire community, all we ask is that you fill out the Beta Program Signup Form, so that we can ensure we get enough coverage in all of the functional areas of the release. We are asking for anyone interested to sign up by August 11 (next Sunday), so that we can kick off the program the following week.

Why should I participate?

Now the good part! Besides the tremendous gratitude you'll get from the Liferay Community (and the Liferay QA, Engineering, and Release teams), there are other benefits:

  • Get a sneak peek at new stuff in Liferay
  • Help us help you ensure that your future migration to the new version will be as smooth as possible
  • Meet and engage with others in our community, including our awesome QA and Engineering teams
  • Get enshrined in the annals of Liferay history (ok, it's just a README embedded in the release, but still..)
  • Get a leg up on the competition for Top Contributor awards
  • SWAG: Everyone loves SWAG. We have some special gifts for those that participate
  • The knowledge that you helped make a difference, gave a little back, and hopefully learn more about yourself and Liferay

So please, if you have some time in the next month to help us make this release the best ever, sign up and be on the lookout for additional communication in the days to come!

For more information about the Beta program, please see the Beta Program Wiki which has additional information about the tracks, and what to expect.

 

Community Roundup

Community Blogs June 11, 2013 By James Falkner Staff

What's the time? It's time to get ill, with another Community Roundup! The Liferay Community has done some amazing things these last few months since the last roundup, and so here we go with another collection of things our community has been up to. On with the links!

  • Mobile apps and responsive design are all the rage these days, but how does that translate to Liferay? Visit these Liferay-powered sites on your mobile and see what all the fuss is about. Also, check out this video on Mobile Apps with Liferay from last year's EU Symposium.
  • As you know, last year we began the Community Verifier team, to help verify existing issues in Liferay, and clean up our JIRA database of backlogged issues. Earlier this year the team embarked on a competition to cut down the number of unverified bugs. I'm happy to report the team was able to verify over 360 of the 480 unverified bugs! The team will get free goodies and recognition for their efforts, and deserve a hearty thanks!
  • Jelastic has done an excellent write-up of how to deploy a highly available Liferay Cluster to their cloud, including configuration of Nginx, Tomcat, Liferay, and MySQL (with a sharded Liferay database).
  • Contributions from our community continue to roll in, with over 100 individual contributions for the upcoming 6.2 release. Edward Gonzales from Liferay's project management team has been instrumental in directing and encouraging community contributions, so if you see his name on your JIRA tickets from time to time, know that he's working to make sure contributions are treated with the respect and priority they deserve.
  • Speaking of contributors, our quarterly Top Contributor awards for Q1 2013 were awarded to Oli BayerGnaniyar Zubair, and Alexey Kakunin.  These three did some great work in Q1, and are examples of what our community is all about. Q2 is rapidly coming to a close, so keep those contributions coming! Bug fixes, features, translations, Marketplace apps, documentation, helping out on the forms, it all counts!
  • Want to test-drive Liferay in the cloud, for free? Check out BitNami's one-click Liferay Launcher and get an hour of a Liferay server to play with (of course with options to upgrade).
  • Although we get a ton of community traffic on the liferay.com forums, it is not the only place where one can get some awesome Liferay action. Check out the Liferay leaders on stackoverflow.com, who tirelessly help our community whereever they may be needed.
  • Zhao made an impressive 3D Liferay rendering, suitable for desktops, and drawing the ire of branding gurus everywhere :)
  • Anyone up for some LAR-gery (that's pronounced like "large-erry"). Ok, bad joke. Anyway, Terry shows you how to perform some surgery on LAR files to filter out junk and get clean data for a new Liferay instance.
  • I am enjoying the random tweets mentioning Liferay that have absolutely nothing to do with Liferay. I'm sure it's some sort of scam or SEO play, but they are enjoyable for a moment. Take this one: An quotation squander temporary so that java trust in there with liferay approximation. Come again?
  • Radio Liferay is back in action, with some really awesome episodes from Ville Ingman (Vaadin), Eduardo and Zeno on AlloyUI 2.0, and Zsolt Balogh on LESA. Future episodes will include myself, Jorge Ferrer, and Juan Gonzalez. If you have pressing questions you'd like answered, head over to the Radio Liferay Google+ Community and ask away!
  • KL shows us some awesome Advanced Navigation techniques for your Liferay Themes, to make it easier to navigate.
  • Back in April, we embarked on an interesting experiment: a 24 hour marathon tour around the world and visited Liferay Community members from almost every continent on the earth. The complete replay (along with person-by-person indexes) can be found on the Day Of Liferay page. One day I'll find time to cut and paste these into a nice summary. Also, I was very impressed with the Google Hangouts peformance, and will be using this in an upcoming regular virtual meetup (details coming soon!).
  • One of our first Liferay Community Projects has graduated! Check out Project Learn on the Liferay Marketplace. Hopefully we'll see more and more community projects exposed in this way. It's a great testament to the power of open source and open collaboration.
  • Getting involved with a local Liferay User Group is one of the best ways to grow your Liferay chops. New user groups in Birmingham (Alabama) and Cuba have started, and are looking for new members! If you are interested in starting your own User Group, there are new resources (and a nice video intro from Savoir-faire Linux) available on the User Group site. And don't miss our user group's upcoming events, such as India, or Hamburg.
  • From the releases desk: If you're watching the releases dashboard, you'll know that there have been recent releases of Liferay Faces, Social Office, Liferay IDE, and AlloyUI! New Liferay Portal CE releases expected later this year include Liferay Portal 6.1 CE GA3 and Liferay Portal 6.2.
  • Liferay Portal 6.2 is slated for release later this year, and it is packed with updates and new features. If you're interested in checking out the latest, Grab the latest Milestone build and dig in. We are quickly approaching the first Beta build of 6.2, and will once again rely on our awesome community to ferret out issues before GA.
  • Standards form the backbone of today's interoperable web, and Liferay also believes strongly in their advancement. Though at times they may be slow, they are critical to our industry. Don't miss the Java EE 7 Launch broadcast tomorrow, and be on the lookout for Liferay's involvement in this important standard.
  • If you're an Ubuntu fan, you may be aware of Ubutu Juju, a quick and easy way to deploy Ubuntu and its apps to public and private clouds. One such app is Liferay, whose Juju Charm is under development and will enable quick and easy deploying of Liferay, but more importantly, of wiring up dependent services like databases, app servers, load balancers, clustering support, etc. Contributions are always welcome :)
  • The Liferay conference season is officially underway, with the first symposium concluding on June 6 in Paris. If you've invested time and resources into Liferay, attending a Liferay conference is the absolute best way to strengthen that investment and ensure future dividends. Look for conferences in Berlin, Frankfurt, Madrid, San Francisco, London, and Florence this fall. And don't forget to grab the companion app [iOS, Android] on the way to the conference!
  • The Liferay Marketplace has relaxed its publication requirements, and the use of Liferay's Security Manager (aka PACL) is now optional, while usability issues are worked out. In the meantime, we've seen a lot of activity on the Marketplace, including over 50 community apps available now, with another 70 in the pipeline.  Keep 'em coming! And don't forget, amost every app1 on the Marketplace is eligible to enter the Liferay Marketplace App Contest, and win a free trip to a conference or an iPad Mini. See the official rules for details (you know there had to be some, right?).
  • Ideas: everyone has them, and they drive innovation into many things in life, including Software. With Liferay's Community Ideas Dashboard, we now have an easy to use tool to let our creativity loose, and socialize them throughout the community, in the hope that enterprising developers out there (including Liferay, Inc.) will run with them. Check it out, and let's hear your best ideas! Since its inception, there have been 135 ideas submitted, and the two highest vote-getting ideas have either been implemented (as a Marketplace app, thanks Rotterdam CS!) or are under development.
  • You may have noticed a subtle change at liferay.com - the web team has rolled out with the first phase of a website refresh, including better performance on mobile devices (no more menus taking up half the page, and a nice slide out navigator), and improved (and localizable) headers/footers. More to come!
  • Usually in this space I would list recent blog entries from Liferay staff members, since historically they were the only ones who could blog on liferay.com. That's no longer true, everyone can now blog, so check out the recent blog entries by our wonderful community, and learn something new each day!
  • There have been many awesome blog posts and wiki updates, and we try to keep everyone up to date monthly via the Community Pulse newsletter. If you wish to receive this, sign up here.
  • Liferay is in the running again this year for @cmscritic's 2013 Critic's Choice CMS Award! Please, take a moment to nominate Liferay for this prestigous award, and see if we can repeat again this year!
  • If you're attending CMSDay, Mitarbeiterportale, Jenkins User Conference, Community Leadership Summit, OSCON, or JavaOne this year, please.. stop by and say hi!

Well, that's all I have for now. Hope everyone has a safe and fun summer (or winter, for our southern hemisphere friends)! See you on the interwebs...

Liferay, WebSockets, and Node: Good Times!

Community Blogs May 8, 2013 By James Falkner Staff

Lately I've been tinkering a lot with lightweight, asynchronous, event-driven apps on Liferay using a variety of established techniques and frameworks. It's a nice way to build apps! After working it for a while, I wanted to share what I've learned, so put together a talk and was fortunate to be selected to attend and speak at this year's KCDC, and presented my learnings and a demo via a presentation on Event-driven Programming with Java and HTML5 WebSockets.
 
You can find the slides on SlideShare, and the demo code on GitHub.
 
At the end of the presentation I showed a demo, and I wanted to go into a bit more detail here. It is essentially a WebSockets demo using a Google Heatmap to visualize the location of bloggers who are blogging on a Liferay site. I used Tomcat 8.x for the JSR-356 WebSockets implementation, partly because I am comfortable it, but also because it has a bug that I wanted to use to demonstrate a point I made during the talk :) I'm pretty sure GlassFish doesn't suffer from this!
 

Social Driver

To simulate lots of people doing activity on Liferay (and therefore generating activities for which I can listen), I re-used my Social Driver, resurrected from 7Cogs. This code spawns theads that programmatically create users and create blog entries, wiki pages, forum posts, and do other activities like vote and comment on content. It does this in separate threads, which simulates lots of people doing things on your Liferay site.
 
I have covered the basics of the SocialDriver in my series of "7Cogs is Dead! Long Live 7Cogs!" posts (here, and here), which I hope to finish off in the next couple of weeks. 
 

Demo Part 1

In the first part of the demo, I have a Google Heatmap which visualizes the location of the fake users, based on their registered address (which is also faked). When content (blogs, wikis, forums) is created, a SocialActivity is generated. My hook listens for these events, and sends them to my WebSocket endpoint, which ships them to my client webpage with the Google map.
It all works great when you have a single thread generating events.  The map builds nicely, and all is well. However, a few seconds after you start up more threads, things get weird, and WebSocket messages emitted from the server get jumbled and mixed together, causing the browser to immediately fail the websocket connection, and the client comes to a grinding halt (Liferay happily continues to create activities, though).
 

Demo Part 2

In part 2 we used Wireshark to inspect the network traffic, in an attempt to debug the problem.  Looking at the network traffic reveals that in the end, the last few WebSockets frames are mixed up / jumbled up, causing the browser to misinterpret the bytes, and fail quickly (which is nice!).
 
The problem appears to be that the code in Tomcat for sending messages down the pipe isn't multithread-safe.  Two or more threads can get into the same area of code, and send content at the same time, and this is exactly what happened here: my blog thread and my wiki thread tried to send messages to the client at the same time, and one's message was mixed in with the other, causing the browser to issue a cryptic Could not decode a text frame as UTF-8.  Looking at the offending packet in Wireshark:
You can see the complete message of {"address":"Sudan"} but then some more bits that is the beginning of the next message, which the browser tries to interpret as text, and fails (it's actually the beginning of the next websocket frame).
 
Synchronizing the code that calls into Tomcat does the trick (e.g. via synchronized), but a) I shouldn't have to do that because it's part of the spec (and I think this is a bug in Tomcat), and b) Tomcat might not be the best place to scale out, especially because it's hosting Liferay already.  Node.js to the rescue!
 

Demo Part 3

Here, we let Node handle the websockets broadcasts to the clients, while Tomcat and Liferay handle the portal itself.
The code in my tiny node server (which requires websockets.js, via npm install websockets) does the trick.  It listens for messages over HTML (this could have, and probably should have been done with redis pub/sub but I was out of time), and then broadcasts them to all clients listening on the websocket. In this demo there's only one client, 
 
With node in place, and click the switch on the portlet, to switch over to it and then happily start up many threads and watch our heatmap build nicely:
 

Lessons learned

  • Coding event-based, asynchronous web program is fun and exciting! There are many frameworks and technologies to make it easy, both on client and server, and if I can do it, anyone can do it :)
  • It's really easy to integrate awesome apps with Liferay, due to its Java heritage, rich APIs and lightweight JSON or RESTful web services.
  • Java EE features (like JSR-356, aka WebSockets) and other upcoming technologies in Java EE 7 will lower the Java EE learning curve even further.
Enjoy!

Marketplace, PACL, and Community Plugins

Community Blogs May 1, 2013 By James Falkner Staff

If you've been developing plugins for the Liferay Marketplace, you're undoubtedly aware of the issues surrounding the development and publication process for apps.  The main issues are around the required use of the Security Manager (aka PACL), which has proven challenging to get right (or not even possible to make work, depending on the nature of the app, and the use of certain frameworks/libraries). This, plus other issues in the most recent release (such as LPS-29103) has meant that many of our most valued community members have been prevented from publishing to the Marketplace through no fault of their own, and they have not been shy about letting us know of their concerns (see here, and here). I personally find it very encouraging to see such passion and constructive criticism from our community, and I'm happy to report that we're making significant changes to the Marketplace to address these concerns and make Marketplace the high quality, go-to place for Liferay apps.

Here's what the team is working on right now:
  • Remove the requirement for Security Manager (aka PACL) to be enabled
  • Improve the "Denial Reasons" given when apps are rejected (usually because they fail a test case)
  • Document the environments in which apps are tested and more clearly specify requirements for metadata
  • Improve the Security Manager developer experience
The first item in particular is intended to bring back the kind of functionality we had in the legacy community plugins repository, but still ensure that the Marketplace contains quality apps that actually work as advertised (since apps will still be run through anti-virus checks and basic smoke tests). App developers will have a choice to publish their app with or without the use of PACL, and apps will be marked as such when viewed on the Marketplace. This will also make it less ambiguous for developers looking to enter the Marketplace App Contest with apps that otherwise work without PACL. PACL will still be required for apps offered for sale (once that feature is available). 
 
The other items relate to improving the developer experience of developing for Marketplace. We now have hundreds of apps and registered developers (not including Liferay itself) who are publishing to the Marketplace, and it's critical that the development and publishing process be as smooth, intuitive, and informative as possible. This is foremost on the team's mind, and if you have any additional feedback (besides those mentioned above), don't hesitate to make yourself heard either in the comments below, or in the Marketplace Developer forums.  We are hoping to implement these changes in the next couple of months, to resolve the difficulties with Marketplace development.
 
As far as the PACL experience, in the next Liferay releases (for both 6.1 and 6.2) will be a new PACL policy generator tool (LPS-32200) which will vastly simplify the creation of a PACL-enabled app. If you want to test-drive it now, go grab the 6.2 Milestone 5 build - it's fully implemented and ready for you to try out (here's how).
 
Finally, I want to let you know that we (as a company) make every effort to listen and respond to the open source community. We don't always get everything perfect right out of the gate, and sometimes it takes a while to make a change, but please know that Liferay depends on its community to point out the good and the bad, and make corrections as necessary. This is another example of why open source and open development processes are vastly superior to the alternative.

Community Blogging - Now Available

Community Blogs April 16, 2013 By James Falkner Staff

I am very excited to announce that as of today, all Liferay community members can now create and maintain their own blogs on liferay.com! Wooo!! This was announced near the end of the A Day of Liferay, and has been on the TODO list for a while. The problem has always been how to maintain the quality of content on liferay.com, as blogs are generally considered to be a more reliable source of information about Liferay, and are generally expected to be of higher quality than your typical stream-of-conciousness found in other publishing areas like the community forums.

Blog Streams

Every community member's blog is maintained in their Profile (more on this later). What follows is a description of how all of our blog posts are aggregated and visualized on the community site:

The first important point is that we will start with two separate (visually) blog streams - the Staff Blog and the Community Blog. As you guessed, the Community Blog is for topics by and for the community. Anyone can post here, including Liferay staffers, and will do so more often than not. The Staff Blog is for posts by Liferay staffers that may have a more general target audience than just our community. As an example, Ray Auge would post his most recent work on OSGi to the Community Blog. Caris Chan would likely post her blog about Liferay's new offices in France to the Staff Blog.

There are three areas where these streams are evident:

  1. On the Community Dashboard"Recent Bloggers" remains on the dashboard, but each post is further decorated with a gray Staff tag for Liferay staffers, and each post is categorized according to which stream it appears in.
  2. On the Community Bloggers PageEach stream is separately shown. In addition, a list of individual bloggers appears on the right, for bloggers both on and off of liferay.com, sorted by total number of posts, with Liferay staffers receiving the Staff tag. If you maintain an external blog centered around Liferay and wish to have it listed, fill out the form!
  3. On an individual blog post - The stream in which the post appears is tagged, along with a tag for Liferay staffers.

Creating your Blog

At Liferay, we drink our own champagne, so you'll be using the Liferay Blogs Portlet to enter your blogs.

To start off, we are going to ask that if you wish to blog that you manually request it. We will never refuse to enable blogging for anyone (unless you don't appear to be a human), but do not want a flood of spammy posts clogging up the system. To get things started, we have enabled blogging for the vast majority of you already (over 500 community members), that have done even a very small amount of activity in the last 12 months, so chances are it's already turned on for you. So go check your profile to see if you have a Blog link, before requesting it, by checking if you have the "Blog" link on your liferay.com profile.

To create a new blog, navigate to Places -> User Profile:

you will land on your personal (private) "Home" page.  Next, click Profile:

and then click Blog (if you do not see a Blog link, request to get upgraded!):

To add a new blog entry, click on (yep, you guessed it):  You will be presented with a WYSIWYG editor in which to enter content. Each post is sanitized to remove potentially dangerous content that clever folks might try to enter via the "source" mode, such as javascript, IFrames to other sites (however, embedded gists are allowed!), and other questionable CSS tricks.

You can save your blog as a Draft, and come back later to work on it, or just click Publish to publish!  Once you publish, your post should immediately appear in the Community Stream as described above. You can always come back and edit your entries, or delete them if you wish.

External Blogs

I know that many of you actively maintain your own blog off of liferay.com. If you wish to have your blog listed on the Community Blogs page, you can also request this via the external blog listing request page. That list is constructed by looking at the top 50 liferay.com bloggers (ranked by # of posts), and then external blogs are randomly inserted.

Tips and Tricks

  • You can include uploaded images in your blogs by clicking the Image button, and uploading to your personal space on liferay.com.
  • You can use certain CSS classes like callout to make images have rounded corners and shadows, etc. Go look at old blogs and use your favorite web page inspector to discover items.
  • You can include gists (code snippets) using the 'Embed' option, and cutting/pasting the necessary javascript. This is the only kind of js allowed in your blog.

Blogger Policies

Blogging has been around forever, as have the written and unwritten rules, so this should not be new to any of you. Here are some of the written rules:

  • Be courtous and respectful. Don't use foul language, don't be mean, don't disrespect, don't hate, don't pre-judge, etc.
  • Don't post advertisements for your business or post job offers.
  • Check your syntax and spelling. No one will take u srsly if u write like a txt msg to your bf.
  • Don't use your blog to post questions about Liferay that belong in the forums, unless you already have an answer and wish to educate. Blogs are for well-formed thoughts about a particular subject, not for getting help connecting Liferay to your corporate LDAP server.
  • Cite your sources, don't use copyrighted content without permission, give credit where credit is due.
  • Be sure to read and respond to follow-up comments.
  • If you have not yet added a profile picture, please do so before blogging. Seeing a list of anonymous faces in the blog stream is just sad :)
  • No tricks! (Such as continuously updating your entry's Display Date so that your blog is always at the top of the list)

There are more, and I'm sure I left a few out. I really hope this can be a great, free, open resource for all of us, so please play nice :) All blogs and posts are subject to deletion and with no warning if you violate these rules, but you'll probably get a warning first.

Have fun, I know it's been a long time coming, and I can't wait to see what kinds of interesting posts our community has in store!

Acknowledgements

Giving credit where credit is due! Amos Fong led the implementation team, and David Miyabe did the design. I acted as Chief Pestering Officer on behalf of our community.

A Day of Liferay - That's a Wrap!

Community Blogs April 12, 2013 By James Falkner Staff

Liferay.com Web Team SingingEarlier this week we wrapped up A Day of Liferay - a 24 hour epic  trip around the globe to meet our amazing community and get to know more about their interests and work they do on and around Liferay and other open source projects. I want to personally thank everyone who took time out of their day to participate - it was great to see the diversity of people we have in our little corner of open source, and hear about what they're up to! I had a lot of fun doing it, and learned a lot, and hope you did to!

On the A Day of Liferay page, I have added a complete index of links for each of the significant parts of the broadcast (or you can spend the next 24 hours watching the broadcast in its entirety :) ).

Also, for those that won stuff (shirts, pi's, etc). Rest assured you will be notified next week to arrange for you to recieve your hard-earned prizes! Now, where's my 10 million-gram mega-sugary Cachaça

Liferay Community Ideas (Beta)

Staff Blogs March 12, 2013 By James Falkner Staff

The Liferay open source project relies on its community for many of the evolutionary and revolutionary ideas for features that eventually find their way into a release. Liferay strongly believes in empowering the community not only to be able to create change through feature requests but also to feel responsible for socializing, communicating, recommending, and even implementing their own and others' ideas.
 
Today we are opening up a new community process centered around the concept of Ideation. This process brings a new emphasis on teasing out and promoting the best ideas from the community, for the community. It gives all of us new and easy ways to submit, understand, and promote ideas within the community. The most sought-after feature ideas will float to the top, from which anyone can choose the best, and implement!
 
This is for the YOU. While Liferay staff, partners, customers, and ISVs are all a part of our community, this process is going to be very organic. Our community is the key to its success, generating and implementing innovative ideas, pointing out the duplicates, providing important cross-ticket references, and helping to promote Feature Requests that they wish to see completed. Liferay is a BIG project and we know that there are many different perspectives in our community as to what features are most important but we also have a large number of capable developers in our community that can contribute these features (to either the core platform or as a Marketplace App). 
 
Along with this process, we have implemented a new Liferay Community Ideas Dashboard, on which you can see feature requests as they flow through the community, and can comment/vote/promote your favorites. This dashboard brings some needed visibility and simplification to JIRA for working with Feature Requests. You can read more about the concepts, workflow, and the dashboard on the Feature Request wiki page.
 
As a corporate sponsor of the Liferay project, Liferay Inc. will also pick up Feature Requests to be implemented by Liferay staff, but this is not always going to happen!  All community members are encouraged to consider implementing and contributing the ideas most important to them. Liferay Inc. can probably get to .1%-1% of the amazing ideas coming out of the community, so if a feature is super-important to you, get as many people talking about it as you can, and let the community decide whether it gets implemented, or break out your IDE and take a crack at it!
 
There are a few important changes as a result of this which are detailed below:
  • Though most of the process changes (e.g. JIRA workflows, etc) are complete, it's still a Beta (or Beta++) as there are some remaining items to do, like localization of the dashboard, and we want your feedback on the feature request process sooner rather than later.
  • This process continues to use our JIRA system at issues.liferay.com. The New Feature and Improvement ticket types have been consolidated into a single ticket type of Feature Request.  The dashboard pulls data from JIRA for display.
  • The process for contributing to Liferay remains the same: Submit your patches and git pull requests against the appropriate Feature Request ticket by clicking the "Contribute Solution" button.
  • Creating new Feature Requests is now simplified, and the form only requires a summary, description, and component with which the request is associated. No more weird fields with funny names.
  • Feature Requests remain Open until they are implemented, either in the core Liferay platform or as a Marketplace App, at which time they'll be Closed with one of 4 possibilities.
  • The Proposals Wiki will be deprecated as part of this process, but the Suggestions and Feature Requests forum will remain for additional discussion avenues related to Feature Requests. Authors who have entered ideas into either of these will be encouraged to "port" their ideas over to the new Ideation process, using a Feature Request JIRA ticket.

What's Next?

Go to the Liferay Community Ideas dashboard (or peruse the entire list), and read over a few of the ideas generated by the community. Vote on a few that you like, and click the social icons     next to the feature to generate some social buzz. If you have an idea of your own related to a potential Liferay feature, click  next to the appropriate area and let the community know what you're thinking! This system relies on the community's willingness to share ideas and promote others, so get started!
Showing 1 - 20 of 85 results.
Items 20
of 5