dev.life Community Developer Sessions

Community Blogs 2014/07/15 投稿者 James Falkner Staff

I'm not sure if I've said it enough -- our community is awesome! Each of us comes from different geographic places, cultural backgrounds, and Liferay experiences and we bring that collective story together through software by developing contributions, cool apps, and ultimately learning through sharing. And in that spirit I'm happy to announce a new initiative for our developer community: dev.life Community Developer Sessions!

2 weeks from today will begin a regular series of online hangouts designed for you, the Liferay Developer. Don't worry, these won't be boring slide presentations, but instead will each be unique and interactive hands-on coding sessions with a small, focused goal that each of us can achieve during the session and can then take home for later. Think of it like a mini-"workshop/hacking session" with a small, well-defined goal, led by your fellow developers from around the community. You won't find intro to portlets or here's my fully baked project - good luck kinds of sessions here. You will however learn something new every 2 weeks.

Specifically, these will be 60-90 minute hangouts every 2 weeks using Google+ Hangouts and YouTube, along with interactive features like a dedicated IRC chat room for Q&A, online collaborative coding whiteboards, Q&A and more. Simply show up with your mind (and your development environment) and start hacking! We are all stuck behind a monitor and keyboard most of the day, so this gives us all a chance to “get out there” and get more personal with our community and meet and engage with others in the world of Liferay and teach small things that can lead to larger things later on. And best of all, it's totally free (as in beer).

To give you a taste of what's coming, here are some example sessions (some of which are already on the calendar):

  • Calling a Liferay service from a mobile app
  • Sending out mass emails using Liferay's SubscriptionSender
  • OSGi and Gogo Shell interface examples
  • Extending AlloyUI's FormBuilder 
  • How to use other Databases/data sources in your app 
  • Creating a service using ServiceBuilder
  • Integrating custom assets into Recycle Bin
  • Creating a custom JSON Web Service that's anonymously accessible -
  • Defining a custom resource and permissions
  • Lucene/Solr integration for custom apps
  • Creating a simple Spring MVC Portlet
  • Converting an out-of-box Bootstrap theme to Liferay
  • Using Application Display Templates in your app
  • Creating power macros for FreeMarker
  • Integrating custom assets into ADT
  • Using Liferay JavaScript to call a service
  • Configuring a simple cluster
  • Integrating Liferay with an external CMIS repository
  • Turning on and using Social Activities features in custom apps
  • (And my personal favorite) Answering random posts from the community forums!

It's a big experiment that I hope you will enjoy and participate in. The first session is on July 29 at 1400 GMT (that's 0400 HAST, 0700 PDT, 1000 EDT, 1600 CEST, 1700 EEST, 1930 IST, 2200 CST, 2300 JST, 0000 AEST, and so on...) where we'll go over the typical dev environment one might use, how to use the collab tools, and introduce the upcoming sessions. As we go along we might change the tools, but the spirit of the sessions will remain the same. Following the first session, we'll do one every 2 weeks at about the same time of day. We have about 10 sessions in the pipeline so far (the next 3 sessions are on the upcoming sessions page).

How to Participate

To participate, check out http://liferay.com/community/dev.life and join us on July 29. On the site you'll also find a list of upcoming sessions (along with any prerequisites for each session), a calendar to which you can subscribe, and more information about the sessions. Each session will be broadcasted via Google+ and YouTube, but you need only visit the home page to join the session (there is an embedded YouTube stream and IRC chat on the page). You should also join IRC (specifically, the #liferay-dev-life channel for use during the session, and #liferay for general community chat) to join in the online chat in parallel to the hangout, as useful links and other information will be given, and you can directly interact with others. 

These sessions are geared toward Liferay Developers, and so you should also have your preferred development environment set up and ready to go if you intend to participate (and I highly recommend you do - you'll learn quite a bit more when forced to do things vs. passively watching!)

Calling all Developers

This is an ambitious effort to undertake, and your fellow community members would be super-appreciative to see what you're working on or what you've achieved with Liferay. Why not lead your own session? If you're interested, email me at james.falkner@liferay.com with your ideas - everything development-related is welcome, but please no sales pitches or theoretical physics papers :) These are real world tasks with real results, buddy! And you'll get a small gift in return for your efforts!

So get fired up for dev.life, be sure to read the prerequisites for each session and get your toolbox ready to rock. It should be fun!

iBeacons and Liferay for Audience Engagement: Part 2

Community Blogs 2014/07/01 投稿者 James Falkner Staff

This blog is part of a series of entries documenting how we are using iBeacons and Liferay to better engage our audiences at events throughout the year. [Part 1] [Part 2]

In Part 1 I introduced the concept of using iBeacons for Audience Engagement and reviewed knowing your audience and the physical space. In this entry, we'll cover more technical details about beacon programming and management, and what we learned in Amsterdam and Paris. First off, let's explore how devices "listen" for beacons.

Beacon Identification

As we discussed previously, each iBeacon you put in a space continuously emits a Bluetooth LE signal, that contains data that uniquely identifies the beacon. Your app must be coded to enable beacon listening, and then provide code (callbacks) that is called when beacons are detected. In addition, devices must have turned on their Bluetooth radio and the user must have explicitly given the app permission to use the incoming data (this varies by device - for example on iOS the user must grant the Location Services permission, and on Android the user must grant the permission during app installation).

Beacons are uniquely identified with 3 pieces of information: UUID, Major, and Minor. Your app must know of these identifiers and be coded to respond in various ways when beacons are detected. These identifiers are part of the Bluetooth LE signal sent by each beacon. It's important to understand this - the beacons themselves aren't sending any "real" content (no web content, no credentials, no Java or HTML or JavaScript or PHP or Assembly code or pictures of your cat). It's up to your app to detect the presence of beacons and respond appropriately.

Beacon Regions and Region Monitoring

Suppose you have 100 beacons placed in various places at a venue (hotel, grocery store, football stadium, etc). In one large room, you might have 5 beacons to cover the entire space. To detect when the user has entered that room, your code would need to scan for all beacons at all times, and then if one of those 5 beacons were detected, your app would know the person has entered the room. When you can no longer detect any of those 5, then the person has exited the room. Your app would have to remember that a person entered a room so that it can also know when they exit (and what happens if one enters your room, and then restarts your app?) In addition, some beacons might be part of multiple and physically overlapping places to which you wish to respond. For example, at the Liferay France Symposium, the Registration Desk beacons were also in the Rotonde room, for which we had separate events. In a football stadium, Section 232 might be part of both the East and North seating area.

Coding for all that detection logic for each of your 100 beacons would quickly get tiresome, so some smart designers introduced an abstraction to help deal with the complexity. In this case, the abstraction is known as a Beacon Region. A Beacon Region is defined in software only - beacons themselves don't "know" they are "part of" a region. Only your app and device "knows" of these regions, and your app can be notified when the device "enters" or "exits" a region without you having to explicitly code for each individual beacon. This is known as Region Monitoring and is what occurs most of the time during your beacon-powered app's lifecycle.

One thing to keep in mind - even though your app will only get notified on entry or exit of a region, additional logic in your app can set you up to respond to things like "person has been in this region for XX minutes" or "person has gone from region A->B->C->A" and that sort of thing. It can be useful for better engagement (more on this later).

Beacon Proximities and Ranging

In addition to monitoring and responding to Region entry/exit events, your app can also be notified of its proximity (how close you are) to each individual beacon. Thanks to real world physics, the proximity isn't all that accurate - you can't know for certain that you are exactly 1.233 meters away from a beacon, due to multiple sources of interference and the frequency of broadcasts. iBeacons designers also knew this, and introduced 4 "zones" in which a beacon might be. The immediate zone is (from our testing) about 1m away or less. The near zone is about 1-5 meters. The far zone is 5m or further, until you reach the unknown zone which is usually a temporary zone just before the beacon becomes undetectable (and this also where you end up if you dig too deeply in Minecraft). This again is a software abstraction to help your code be simpler. Beacons don't "know" which zone they are in, no do they do anything different due to an approaching person or device.

Proximity detection (also known as Ranging) is also much more expensive in terms of energy consumption (i.e. drains your battery faster), because the hardware must scan for beacons frequently to get a somewhat accurate reading on each one. So you don't typically want your app continuously ranging for nearby beacons. In fact, some devices like the iPhone do not let your app do ranging when it is in the background for this reason. In the Liferay Events app, we only turn on ranging when the app is in the foreground and you have positively entered a region.

During ranging, your app will receive reports of each detected beacon, and in some cases reports of "boundary crossings" (e.g. when you go from near to immediate for a given beacon, and you want your app to do something special). Each beacon's hardware broadcast strength can be set by an administrator, and that setting is included in the packets sent over the air in the Bluetooth broadcast, so the beacon software in devices can do fancy math to calculate an approximate distance based on the power setting and the actual strength of the signal received. For example, if you crank the broadcast power to maximum on the beacon itself, but then the actual received signal is fairly weak by a device, then you can kind of know you're pretty far from the beacon.

Foreground vs. Background

From early testing we discovered most people don't run your app and walk around staring at the screen waiting for popups, looking like Dr. McCoy with a tricorder. Should be obvious, but sometimes you get blinded by the awesomeness of new tech and forget about how people really get along with it. So in reality, for your app to be engaging it has to provide value even when the app is in the background, or it is quit entirely.

For example, iOS allows monitoring but does not allow ranging when the app is in the background or quit entirely, so if all your app does is respond to ranging events, it's not going to be very interesting to most people, because it's not going to do anything while backgrounded/locked/quit. You need to combine region events with proximity events, and we did exactly this for the Liferay Events app. Again, people don't attend our events just to play with an app or their phone, they are there to learn about Liferay, attend sessions, and meet people, so most of the time their phone is in their pocket and not top of mind.

iOS 7.1 introduced a new feature that allows your app to receive beacon event messages even if the app is hard-closed. Again, only beacon monitoring works in this case, so your app should use region monitoring to ensure your users can be engaged even if the app is backgrounded or closed.

How we configured our beacons for events

So now that you understand how beacons work at a slightly lower level, let's talk about how we used them at our events. As part of this experiment, we decided to start small and feature the following types of engagements to engage both business and technical attendees:

  • Venue information and workflow - for example, a welcome message on arrival to the venue, with directional maps to the registration desk and WC, and a quick way to check in on social media, or some reminders to pick up name badges, or discounts at the cafe.
  • Sponsor Engagement - Interactive sponsor and partner marketing, including lead generation (e.g. "fill out our form for more info" or QR code scanning)
  • Speaker Engagement - Information about upcoming sessions occurring in the area you are in, or getting feedback from attendees as they leave a session
  • Gamification - Rewarding attendees by making them go to places (like a scavenger hunt) or using the app as a "virtual railpass" to force them to visit with and engage sponsors
  • Analytics - we wanted to (anonymously) see how people moved through the venue, to see if elements of the event (e.g. sponsor booths, hands-on demos, different food areas) were effective or not.

To support all these types, we defined several beacon regions (one for each discrete room that we wanted to act on) and also a venue-wide region encompassing all beacons (so we could show welcome messages even for those who snuck in through the back door.) We also used individual beacon proximities and ranging for certain triggers, such as when you approached a sponsor's booth, you'd get interactive and engaging content, or when you approached a "mystery guest", you got a trigger to engage in a game (more on gamification later).

Beacons are not super-expensive, ranging from USD 5 [reportedly] - USD 30 each. At typical Liferay events we can have up to 5 or 6 different rooms, and we also wanted to support sponsors, so we ended up needing around 20 beacons (a few more than absolutely needed, for backup purposes). You will also lose some, unless you hide them really well or lock them in a box.

Liferay Portal Solutions Forum Benelux 2014 Configuration

This event took place in a somewhat compact venue (Pakhuis De Zwijger), with the registration area, sponsor area, and main speaking room all within about 50m of each other. We configured the following beacon regions and individual beacons:

iBeacon Config for Benelux Symposium

Region Name UUID Major Minor
Venue B9407F30-F5F8-466E-AFF9-25556B57FE6D [Any] [Any]
Grote Zaal B9407F30-F5F8-466E-AFF9-25556B57FE6D 1 [Any]
Registration B9407F30-F5F8-466E-AFF9-25556B57FE6D 0 [Any]
Expo B9407F30-F5F8-466E-AFF9-25556B57FE6D 2 [Any]
Cafe B9407F30-F5F8-466E-AFF9-25556B57FE6D 3 [Any]

So any beacon with the UUID of B9407F30-F5F8-466E-AFF9-25556B57FE6D would be considered in the "Venue" region (and we had entry/exit triggers setup for entering or exiting the Venue, e.g. "Welcome" and "Goodbye" with links for event surveys, social media, etc). Any beacon with a UUID of B9407F30-F5F8-466E-AFF9-25556B57FE6D and a major of 2 would be considered in the Expo region (this is where the sponsor booths were). Further, each sponsor booth had a beacon dedicated for it, using B9407F30-F5F8-466E-AFF9-25556B57FE6D for the UUID, a major value of 2, and a minor value starting at 0 and going up (we had 6 sponsors). If you're wondering, that special UUID is simply the default UUID of Estimote Beacons, the vendor from which we sourced the beacons.

The main hall (Grote Zaal) was a large space, so we used two beacons placed on either side of the room, up high, to cover the entire room, and this worked pretty good (each were configured with a major value of 1). The other areas were served with 1 beacon each.

We also featured a "mystery guest" game. The goal of the game was to engage attendees through a game, while at the same time forcing them to engage with the sponsors at the event. To play the game, attendees had to find a special person who was secretly carrying a beacon. When you got close to this person, the app would respond and ask you a question, to which only the mystery guest had the answer. Upon learning the answer (and typing it in correctly), you could then proceed to each sponsor booth, and on approaching the booth, you would get more notifications with marketing messages from the sponsors and a form to enter your info, along with the answer to another question (the answer would be found by talking to the sponsors, forcing attendees to engage!).

We then configured the app and Liferay to support the following beacon notifications

  • Venue Entry - Welcome message with registration maps and social media checkins
  • Venue Exit - Farewell message, encouraging you to fill out survey or visit liferay.com
  • Registration Entry - Reminder of what to not forget, links to agenda and social media checkin
  • Registration Linger (5 minutes or more) - Detail about venue and what's upcoming and interesting
  • Expo Entry - Detail about sponsors along with sponsor links and content
  • Expo Linger - More sponsor info
  • Grote Zaal Entry - Links for speaker, session topic, session survey, twitter
  • Grote Zaal Exit - Thanks message, links to agenda, and encourages survey feedback
  • Mystery Guest Proximity - encourages you to find them and pops up form to enter the game
  • Sponsor Proximity - Individual sponsor-provided content and forms (one per sponsor)

There are many details about how these worked and were configured in Liferay - more on that in the next post!

What we learned in Amsterdam

  1. Attendees aren't there to play with your app. We didn't get nearly as many people engaged with the mystery guest game as we'd hoped. About 20% of the attendees began the game, but only about 2% actually finished the game (visited all the booths, entered all the answers correctly). It took quite a bit of effort to complete the challenge, and there was limited time (the event was only a 1-day affair). So the lesson here is don't make things too hard to use! Perhaps at DevCon we may do something more technically difficult yet interesting, but for the two events we've had so far, they just weren't that into it :)
  2. There are many Android devices :) We knew this up front, but were unable to purchase and test all 8,432 Android devices the app supports, so we found several glaring bugs on certain devices (which were fixed either during or shortly after the event). Lesson: Test on as many devices as you can. Ask your friends and colleagues to test the app. Use simulators with reduced memory footprints and weird device types.
  3. Beacon ranging is useful, but cannot be relied upon for initial engagement, since it is disabled when the app is backgrounded/locked/quit.

Liferay France Symposium 2014 Configuration

This venue (Shangri-La Hotel) was a little more spread out, offering a bit more breathing room and chances for engagement. The crowd was also more technical (the first day's sessions were entirely technical). The beacon configuration here was similar to Benelux, but we had several more regions to support the additional areas, and we converted the beacon proximity events for sponsors into beacon region events (so that they worked even when phones were backgrounded/locked/quit).

What we learned in Paris

For the France Symposium, we decided to make the game part much easier to "complete" and took out the mystery guest element entirely, which proved to be too much "game for the game". Instead, we did a simple scavenger hunt (We had a Beacon region named Trésors cachés) - we hid 4 beacons in various places, and when you got close to one, you were given a hint as to where it was, and if you found it, you could enter your information for a chance to win a prize. We gave away all 10 prizes that day, and people were generally more engaged (the analytics data also revealed this fact - we had about 30% more attendees using the app and looking for secret beacons than we had at Benelux).

We also finally decided that any engagement actions in the app must begin through region monitoring, because that is what works when the app is closed or the device is locked (which is like 90% of the time for most people). So, for example, the Trésors cachés game began through beacon region monitoring (as opposed to only relying on beacon ranging and proximity to find the beacons, which would not work when the phone was locked/backgrounded/quit). The other events (entering/exiting breakout rooms, getting notified of upcoming sessions, visiting booths) were also triggered by region monitoring vs. ranging. So people are much more likely to engage with your app and your content if they can get notified when they're not explicitly staring at the screen.

And finally, we learned a hard lesson in upgrading - our beacon vendor decided a couple of days before the event to update the app I was using to program the beacons to require login and that each beacon be associated with the account used to order the beacons. This is great because previously, anyone could re-program your beacons and mess with yo stuff. But not so great when the beacons weren't properly linked to my account. So 2 hours before the France Symposium began, as I sat down to program the individual beacon UUIDs/Majors/Minors, I found that I could not! After several frantic emails to their HQ in Poland, their customer service reps were able to fix the issue - so that's +1 for Estimote.

Coming up next...

That's it for this entry. In the next entry I'll discuss:

  • How the Liferay Events app integrates with Liferay Portal
  • What kinds of beacon actions are good for different audience types, and how to not annoy people
  • Dealing with unintended audience behavior - using a Death Row analogy
  • Android vs. iOS considerations
  • Data collection, analytics and Privacy
  • Future Enhancements

Stay tuned!

---

[Region image courtesy of TheNewStack. Proximity image courtesy of PassKit.]

iBeacons and Liferay for Audience Engagement: Part 1

Community Blogs 2014/06/24 投稿者 James Falkner Staff

This blog is part of a series of entries documenting how we are using iBeacons and Liferay to better engage our audiences at events throughout the year. [Part 1] [Part 2]

Earlier this year my colleague Ruud Kluivers introduced me to a new technology called iBeacons - it has gained a lot of traction since Apple introduced it last year, and more and more devices get support for it each day. We thought it would be interesting to apply it to our ongoing audience engagement efforts at Liferay, so the past several months I've been integrating it into our hybrid mobile app for Liferay Events. We've used it at two events so far (the Benelux Solutions Forum in May and France Symposium earlier this month), and have learned quite a bit about what worked well and what didn't work so well.

During development I found a lot of technical resources for iBeacons, but little or no research on how to apply it in engagement applications. What kinds of triggers are useful for different audiences? How often should my phone buzz in my pocket? How to avoid annoying people and having them uninstall your app and complain on Twitter? What about privacy?

This series of blog posts will attempt to document what we've done and what we've learned about getting over the hype of the new technology and really thinking about how it can deliver on its promises, without being annoying or just "fluff".

What is an iBeacon?

An iBeacon is a small Bluetooth LE transmitter that continuously sends out a unique code up to about 50m. When sprinkled throughout a space, these beacons can be "seen" by devices capable of receiving the transmissions and can trigger location-aware events like notifications, automatic app navigation, and other kinds of events. As each iBeacon transmits a different code, the app can respond differently based on the user’s location, providing location awareness and contextual engagement possibilities.

You may have heard of them already - several companies are using them in retail stores and other public places, including Apple, Macy's, Fluwel's Tulpenland, Major League Baseball, and more. These companies provide engaging content depending on where their audience is at the moment, making the experience more enjoyable while at the same time developing a closer relationship to customers. It's effective outdoors and indoors where there is often no way to receive GPS signals from satellites. It's cool, but can be creepy, so keep reading...

You got iBeacons to work - congratulations! Now what?

Making iBeacons work at it's lowest level is pretty straightforward - there are some really good blogs and even ready-made libraries (like this one we developed for Titanium) for various mobile and desktop operating systems and the APIs for talking to iBeacons are pretty straightforward (you turn it on with one API call, then it calls your callbacks when various beacons are detected or un-detected). But true benefit comes not just from the technology, but also in understanding human behavior and and applying it to your specific situation.

For our use case, we wanted to provide additional value for attendees, sponsors, and event staff, as well as show off Liferay (of course!). To that end, our goals specifically were:

  • To showcase Liferay’s flexibility and power to integrate with bleeding-edge technology and show how it can be used to more fully engage Liferay users through a combination of mobile and desktop features.
  • To provide great value to attendees by giving them location-aware contextual information and interactive features to help them get the most out of their investment in attending, without being annoying.
  • To provide great value to potential event sponsors to help them drive booth traffic, and be able to interactively engage with attendees for awareness, metrics, and lead generation.
  • To provide great value to Liferay event staff for pre-planning, realtime, and post-event metrics to measure effectiveness of the agenda, venue layout, special events, and other items associated with the event.

Knowing Your Audience

This is the most critical part of any effort to engage an audience - you have to know your audience. In this case, Liferay has held different kinds of events with different kinds of audiences over the years, and we're constantly learning new things about what drives people to attend and what they're looking for. Why do people attend?

  • To learn more about past, present, and future Liferay technology and overcome business and technical challenges
  • To network with other companies and people with the same real world problems
  • To meet our community of experts (employees, partners, sponsors, ISVs, developers, etc)

Attendees come from a broad spectrum of business and technical knowledge, vertical industries, and professional roles, so it's important to understand exactly the kinds of people you expect to engage before doing so. For example, a more business-oriented professional will seek information on ROI, ability for Liferay and its community to support a specific business need, and contacts from similar professionals with the same role (e.g. CTO-to-CTO encounters). A more technical-oriented attendee wants to know specifications, architectural best practices, upcoming features, wants to attend workshops, and wants to understand how Liferay and related software will work in their technical environments.

So how does this knowledge translate into iBeacons? Well, for starters, understand this: attendees aren't there to play with your app! They can do that at home. They are physically there (and spent money to be there) because of the above reasons, which involves person-to-person exchanges. No amount of clever smartphone notifications can replace intimate contact with experts or tell them why their Liferay deployment is slow. However, mobile apps and iBeacons can be an effective tool to help them get the most from their investment in your technology and your event, giving supporting information about the venue and sessions, or suggesting which sessions to attend, or encouraging them to visit sponsor booths using gamification. And to be honest, there is still a certain "coolness"/newness factor that exists with iBeacons which will wear off eventually. But in summary, there are many ways to engage, so you need to know your audience and decide what you think they will want.

One other thing to consider: iBeacons are relatively new, and not every device supports them, so don't assume all of your audience will be able to use them. In particular, it requires Bluetooth 4.0, found only on newer iOS and Android devices. So, for example, we can't (yet) replace the paper surveys and "railpass" games that we typically have at events with iBeacons, as not everyone would be able to participate.

Knowing the Physical Space

Before deciding exactly what you want your app to do, consider the typical space in which they (and your beacons) will be. For our purposes, the main consideration is the overall size of the venue and number of rooms. At it's lowest level, iBeacons transmit an EM signal at a frequency of about 2.4GHz. These signals can be attenuated or blocked entirely by metal and concrete, other 2.4GHz signals (think microwaves and cordless phones), and water. And ideally your space will be filled by lots of moving buckets of water (a.k.a. attendees), so that can present challenges.

In the ideal case, you can place iBeacons in each of your discrete areas (breakout rooms, main hall, entrance, cafe, etc) with no signal overlap. This provides the most possibilities with location awareness, because you'll be able to accurately detect and respond to movement (or lack thereof) into, within, and out of those areas. Of course, this never works in practice, because most buildings and rooms are square, whereas the Bluetooth signal emanating from each beacon is spherical. Round peg into a square hole, that sort of thing. But you can get close by placing beacons in strategic spots, using walls and other blockers to try to contain the signal to the areas in which you want them, and adjusting the signal strength. Walk around the venue beforehand, and see what you've got to work with. For example, here's the quick & dirty diagram from the Benelux Symposium:

We ended up using two beacons turned "all the way up to 11" to cover the Grote Zaal space, and placed them in the rafters. The rest of the areas were served by a single beacon each, and then we had individual beacons for each sponsor booth as well. We had plenty of "overlap" and the potential for attendees to get flooded with notifications, so there is a lot of code to deal with that. We also wanted to re-use it for different events and audience types, so there are lots of configuration options for the app. More on the technical side of things in a future post!

After you place your beacons, walk around with any 3rd-party iBeacon detector app and see what it sees. Also, code in a "debug" easter egg into your app, to make your app report what it "sees". There is one in the Liferay Events app (press and hold your finger on the Gallery title bar, then return to the main screen, and you'll see it!) 

What we learned is that even though the Benelux space was more compact than I'd envisioned, it was still possible to map out discrete locations and serve them with iBeacons by placing the beacons in strategic (and hidden) spots and tuning and broadcast power to suit the space. Assume you will have overlap, and that people will do unexpected things such as walking into and out of a space quickly, detecting beacons through what you consider impermeable walls, or lingering in a "Lagrange Point" between two overlapping beacons :) If your app is to be effective, you must consider these kinds of behaviors.

In the next few posts we'll get into more technical detail, including:

  • True engagement - not just popups
  • Understanding and programming beacon regions and proximities
  • What kinds of beacon actions are good for different audience types, and how to not annoy people
  • Gamification possibilities and what we learned
  • Dealing with unintended audience behavior - using a Death Row analogy
  • Android vs. iOS considerations
  • How the Liferay Events app integrates with Liferay Portal
  • Data collection, analytics and Privacy
  • Future Enhancements

Hopefully this intro whets your appetite for future posts. See you next time!

Liferay Cloud Services Beta

Staff Blogs 2014/05/20 投稿者 James Falkner Staff

Today we are announcing an open Beta of Liferay Cloud Services! If you're interested in participating, check out the landing page - you won't be able to miss the big form on the right (there are only 50 slots left - hurry!).

What is Liferay Cloud Services?

"Liferay Cloud Services is a new online platform that offers tools and services that will help our customers suceed on Liferay projects."  That sounds great, right? So, for example, you have 10 Liferay servers in your farm - do you know if they are all up to date? Do you want to manually go through each one and update them? What if one is running low on memory - wouldn't it be great to get an alert on your mobile and correcting the issue instead of receiving an angry customer call an hour or two later?

LIferay Cloud Services will do all that - and more! The more: Fix Pack Management, Metrics, Dashboards, and Alerts. I won't ruin the surprise here, so please check out the Beta landing page to see more information about these. The best part is we can easily add new services without impacting existing services. It's all on the cloud!

Availability

Liferay Cloud Services will be available for systems running on 6.1 CE/EE GA3 or later (and of course 6.2 CE/EE GA1 or later). And yes, my community brothers and sisters, it is also available for Liferay CE (although limited, still very useful, otherwise I wouldn't be blogging about it here!) It also works with on-premesis or cloud deployments, so we can target the maximum number of kinds of deployments.

Beta Program

This beta program is intended find issues (what??), and get real feedback from real customers using it in an as-close-to-real-as-possible way. It also gives our community a way to interact directly with the product team(s) at Liferay, before it is finally launched. We learn a lot about our products from you, we rely on you to tell us what to fix, what to improve upon, and how to best meet your goals. In short, we cannot be successful without you, so we really need your help! The beta is a great way to do this, so I highly recommend you sign up. There are only 50 spots total, if you're interested, you should move quickly!

What's Next

The good news: it's a cloud-based service, and the team is looking at a range of new features to offer to you - not only health services, but also processing services (e.g. offline video transcoding), more analytics, and others. So get involved in the Beta today and see what it can do for your Liferay deployments!

Amsterdam Liferay Community Meetup

Community Blogs 2014/05/16 投稿者 James Falkner Staff

If you're in or around Amsterdam next week, we're having a community meetup prior to the Benelux Solutions Forum event and you're all invited! Join our local community of rockstars for some knowledge sharing, and drinks in the center of town at the Café The Flying Dutchman [map], May 19 (Monday) starting at 20.30! The entire community is invited (you don't have to be attending the event the following day).

There is no agenda or set presentation, but there will be plenty of great conversation and interesting characters from our Dutch community, along with myself and a motley crew of Liferay'ers from around the world. Looking forward to seeing everyone!

If you're planning on attending, please let us know how many you will be in the comments below, to give us some idea of how many of us will be there!

 

 

Liferay Benelux Solutions Forum - Amsterdam

Staff Blogs 2014/05/12 投稿者 James Falkner Staff

As part of my community party planner role at Liferay (aka community manager), I try to get out and meet many of you at industry and Liferay conferences and other events. I think it's really important in this webified world that we keep the human touch at least a little! At our events I get to learn about new cultures and make new friends, learn how people are using Liferay and getting along in our community, and try to contribute back a little through knowledge sharing on what I've learned over the last couple of years.

Next week I'm attending the first ever Liferay Benelux Solutions Forum in Amsterdam, and wanted to let you know about some of the awesomeness in store for you, and encourage you to check it out if you can make it!

First, I'm happy to go to the home pitch of one of our most active and influential user groups, the Liferay Netherlands User Group, housing many of our community rock stars, indicative of the selfness nature of our Dutch Liferay community and surrounding regions. When people like this come together, it makes for one of the best places to come to learn more about our community, and about Liferay. It reminds me of an experience I had last year at another Liferay event (actual picture over there on the right), where a couple of engineers from Liferay and other companies sat together with a customer for 15 minutes and figured out a perplexing issue on a production Liferay server -- during one of the breaks. That would have normally taken countless emails, IMs, and phone calls. It happens all the time at Liferay user group meetups and official conferences such as this one when sharp people get together, and I haven't yet seen the Dutch disappoint!

It's also one of our first "big" events of 2014, with what looks to be some fantastic speakers, and I can't wait to see the first official roadmap presentation of the year (no pressure, Ed!), hopefully with some details on what lies in store for the future of Liferay, version 7 and beyond. Also featured at the Solutions Forum will be the return of the Expert Exchange discussion groups, in the style of the World Café. It's speed dating with basically every other attendee on various focused topics related to getting the most out of Liferay as your audience engagement platform. I loved this style of event last year, and learned some interesting ways our customers and community are engaging their own communities of partners, employees, and customers.

On a more technical level, I've had the privilege to work on some exciting new technology we'll be demoing at the Benelux Solutions Forum, using Liferay and iBeacons. We're going to sprinkle several of them throughout the venue and in conjunction with our Liferay Events mobile app [iOS | Android] you'll receive localized and contextually-aware messages and helpful hints throughout the event (with a few surprises thrown in for good measure, none of which involve tracking your every move! I value privacy as much as you!). We'll also demo how the whole thing works, from the Bluetooth transmitters, through the mobile environment, and into Liferay as the core engagement platform, hopefully spurring you to think and ask about how you can get more out of your investment in Liferay.

Finally, the venue itself (Pakhuis De Zwijger) has a lot of history (ok, not as much as the city itself, but you get the idea). It used to be a cold storage facility that fell into disrepair in the late 20th century, and was planned to be demolished to make way for a new bridge over the nearby haven only to be brought back to life thanks to some innovative dutchies, and is now a "Cultural meeting place, multi-arts center and gallery, with multimedia studios" (and soon to be acquiring a few strategically-placed iBeacons). A bridge through a building! Nice one.

So I hope to see you there next week!

PS: I'm also dropping in on the Vaadin crew later next week after the solutions forum, for a Liferay+Vaadin developer hangout. More on this later, but be sure to sign up if you are into great user experiences and awesome portal platforms, with a great developer community behind it all. How can you say no to that?

L.A. Liferay Community Meetup

Community Blogs 2014/05/01 投稿者 James Falkner Staff

If you're in or around the L.A. area next week, we're having a community meetup during Gartner's "Portals, Content, and Collaboration" event and you're all invited! Join me and several others for some technical and non-technical presentations/discussions, knowledge sharing, and free drinks/food in downtown L.A. at the Caña Rum Bar [map], May 5 (Monday) starting at 8pm! The entire community is invited (you don't have to be attending PCC) and Xtivia and Solea have graciously decided to sponsor it, making it all that much more fun and exciting :)

Registration and participation is free. We're going to do a few short presentations to get things started, and I would love to see any of you in the area drop by and say hi, discuss or ask anything you like, and hopefully learn a few things about Liferay in the process from our community leaders and experts. Our fearless presenters will discuss:

  • The Multimedia Blog Journey
  • Liferay.com Nuggets of Wisdom
  • 5 Common Trends in Liferay Implementations

We'll also be giving away T-shirts and books and a few other goodies. So if you're in the area, be sure to sign up and I will see you next week! 

Liferay 2014 Marketplace App Contest

Community Blogs 2014/04/16 投稿者 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 2014/04/01 投稿者 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 2014/03/21 投稿者 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 2014/03/18 投稿者 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 2014/02/18 投稿者 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 2014/02/07 投稿者 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 2013/11/15 投稿者 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 2013/11/11 投稿者 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 2013/11/01 投稿者 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 2013/10/31 投稿者 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 2013/09/24 投稿者 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 2013/08/30 投稿者 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 2013/08/23 投稿者 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!

該当件数: 92 件中 1 - 20
ページごとのアイテム数 20
/ 5