Liferay 7 Milestone 4 - The Adventure is getting serious

Did you like what you saw in previous milestones? You didn’t feel there was enough meat to be worth your time? Get ready for Milestone 4 which comes bundled with many improvements and new features. Not only that, with this release we are launching the Liferay 7 Community Expedition program which will allow intrepid adventurers to work with the Liferay developers to find bugs and provide early feedback on the new features.


This milestone includes +130 stories finished since M3 was released. Let’s take a look at the most interesting improvements.

Web Content Management


There are several super-cool feature in the design kitchen, but for now the work is being focused on modularizing and adding new extension points. As a result of these work many portlets have been converted to OSGi modules (RSS, XSL Content, Nested Portlets, IFrame,  Sitemap, Breadcrumb, Tags Navigation, Tags Administration, Categories Navigation,  Categories Administration and Web Content Display) which among other benefits will allow us to improve them much faster than before going forward (since it won’t require a new release of the whole product).


In addition to this, one small frequently requested feature was added: Ability to translate the site and name description.




In a previous milestone I described how in Liferay 7 it will be possible to create custom export/publication configurations. Early feedback has shown that this feature can be so frequently used that in some cases there will be many of them. Because of that we have added the ability to search through the saved export configurations.


Also, we’ve made it easier to select which configuration a site admin wants to use when publishing right from the dockbar:



WYSIWYG Editing  


The highlight of Milestone 2 was Alloy Editor and the feedback we have received so far has been great. However there is one feature that several power users reported missing: the ability to edit the HTML code directly. We didn’t want just to attend this request but we wanted you to be as amazed as many people were with the new WYSIWYG edition. Because of this our frontend gurus have been using their great skills to good use in order to create the best HTML editing experience you’ve seen in this type of environment.


You can check it out in the blogs portlet (which is the first to adopt Alloy Editor, more will come later). You can now see an small icon in the upper right corner to enable the code editor:




When you click it the WYSIWYG editor will be converted to a code editor, with numbered lines and syntax highlight (courtesy of AceEditor).




And of course if you are used to coding with a dark background (quite common these days) we have you covered as well. Just click on the small moon icon in the upper right corner:




But this is not all. Several of us thought that for certain cases you want more space (the full screen) to do the editing. And since we are just making a wish list here, what if you could preview the result as you are typing your code? … You have it :)


Pretty neat, right?

We are quite proud of the result and hope you like it. We actually got so excited about the result that we might take it a bit further, but I will keep the surprise until next milestone.




In Milestone 3 we presented the new out of the box support for geolocalization. We received some pretty good feedback that is making us rethink the feature backend a little bit. While we do that we have improved the presentation logic so that the map shown to geolocalize the assets is configurable to be OpenStreeMap, Google Map or a custom implementation.


Document Management


Google Docs can now be linked inside the Document Library alongside other documents. When this feature is enabled a new option appears in the Document Library to add a Google Doc. A dialog will appear letting you browse your Google Drive and choose a document to include in the Document Library. The document can also be edited from the Document Library.


Collaboration Suite


Three small but useful improvement were made to our collaboration suite:

Developer oriented improvements


To finish I’d like to highlight a few new extension points and API improvements for developers:

  1. Ability to add custom icons or menus to the portlet decoration (aka portlet box or portlet borders).

  2. New API layer that allows manipulating form definitions and values as objects, instead of having to manipulate the underlying XML directly.

  3. Implemented the capability of adding new field types for DDM through OSGI modules (See the Text type for an example). We hope to see a lot of third party types.



That’s it, if you haven checked previous milestones I hope this large list motivated you to go to the downloads page for Milestone 4 at sourceforge and get it. If you want to get really involved in testing it and giving feedback, check the Liferay 7 Community Expedition program and join many other enthusiastic explorers :)


PS: I'd like to thank Esther Sanz for all her help gathering the data presented at this blog. Without her I wouldn't have made it on time :)

Hi Jorge,

great news, in particular the possibilty to implement DDM field types as OSGI modules! (Is there a way to get the same result on 6.2 or we still need an ext plugin to get the same result?.

Is there a forecast for Standalone Apps avalability (which mileston can we expect to get it included) ?

Many Thanks,
Thanks Denis, I'm glad you liked it.

Regarding Standalone Apps, it encompasses many ideas of how to develop frontend apps. What specific idea are you looking forward to? Is it the concept of full page apps? REST services? Datastore service? something else?
For me it'd be great to have more info on SPA enabler support (maybe some API description, example or whatever else). Thank you!
DDM Fields in 6.2:
Well you can "kinda sorta" avoid using an ext plugin.

Note: In earlier builds "liferay-ddm-structure_6_2_0.xsd" in portal-impl enforced a check on the datatypes used in DDMs. Not sure when this check was removed. At least in SP 7 it isn't there anymore. Before that patch it's more complicated.

You need to hook

and add your own field to Formbuilder. That covers the "admin part", adding a field to a structure.

Alas, when a formfield is shown to the user it is rendered using ftl templates in portal-impl.jar. You need to add your own ftl into the template folder. And that requires an ext plugin ...

The only thing I found as a workaround was to put my ftl files into the classes folder instead:

Great news!
Whats about support for Wildfly?

Best regards
Daniel :-)
This is great news and progress. I am sure our current and future customers will appreciate the hard work and results fro Liferay 7.0.
Thinking about Document Management, obviously integrating Google Drive will be superb, but how about also adding Microsoft OneDrive and Apple iCloud. support? Maybe a wild idea but both Microsoft and Apple are opening up their cloud storage solutions to others.
Hi Jorge,

you write in one of your Blogs that in Liferay 7 it is possible to configure mail notification templates in multiple languages. (Very nice and long-awaited feature ;))
I have see this function only for apps/portlets, which send mails.
But what about the general mails like "member request" for a site or something else? I don't find this for that.
Would it not make sense to make it possible to change also all other global mails, like member request, how you can do that for Password Reset Notification, Password Changed Notification, etc. under "Control Panel->Portal Settings->Email Notifications"?
This would fit well under the point "Email Notifications".

We have do that in 6.2 with an Ext-Plugin for all mail templates, but this is very bad to handle.

I hope you know what I mean and if I have overlook this, can you please tell me where I can find this?

Kind regards,
Hey Lukas,

I think it was only done for portlets and not in the places you mention. However it might not be difficult to do it as well leveraging the infrastructure built already. I will forward your feedback to the team responsible for this improvement.
Hi Jorge,

thank you very much for your reply and that you forward the feedback from me.
I think that it would be perfect if you could customize all emails in Liferay also system/general mails without to build an ext or something else.

I'm looking forward for the next Milestone release.
Hey Lukas,

Thanks for your feedback. In 7.0 we include the feature to be able to localize mail templates in every place we had an interface to do so. However, there are some places that didn't have an UI to localize templates and it could only be done via modifications in the source code.

I guess that's the case you are referring to. We will evaluate the possibility of including this for 7.0 to make sure that all email templates can be modified and localized from the User interface.

Drag-and-Drop portlets into new location does not work; but I was able to make it working after installing fake 'classic'-based theme built in Liferay M3 SDK. Which means bug in a theme in M4.
The bug is in "portlet.css" file; the (temporary) fix is to copy this file from Liferay 7 M3 into Liferay 7 M4.

Sorry to hear about such trivial (and critical!!! how can I manage portal without moving portlets on a page?) issues ;) fortunately fix was found quickly.
Hi Faud,
Do you have any details on this, such as browser and version, if this happens in the Classic theme (or is it only in your custom theme), and if it's all portlets, or only some portlets?
We haven't ever seen this in portal, but I'm interesting in seeing if we can spot a cause emoticon

Thanks Faud!
Hi Nate,

It happens with all browser versions I have, with the default Liferay theme (which is "classic"); note that I removed LiferayWelcomeTheme and I configured MySQL before first/initial Liferay startup. The same happened in both, MacOS and Windows.
Solution for me was to create "classic"-based theme in Liferay 7 M4 SDK, and to copy there "portlet.css" file from Liferay 7 M3 "classic" theme.
- Fuad
I mean: I installed Liferay & SDK in MacOS and followed the same steps; and in WIndows (on different machine) and followed the same steps; everything was installed locally, at "localhost"
Hi Faud,
I actually took a look, and this was fixed in
So you can still drag and drop portlets in M4, but you need to do so by clicking on the title of the text.
Again, sorry it popped up, but we've squashed it emoticon

Thanks for the feedback!
Hi Nate,

Thanks for the research;

I tried clicking on the title text of the portlet... it works! But it is absolutely non-intuitive because cursor icon is everywhere else is "four-arrows" (corresponding to "drag-and-drop" action), but on a text title it is "pointer" (corresponding to "click" action)

But it does work; thank you!
Cannot add WIKI to the Public Page. No error message output; page becomes broken/empty; I am going to create JIRA ticket for this if it does not exist yet.

I noticed that WIKI is deployed as OSGI module, and I couldn't find related *.class files in Tomcat "temp" folder.
I think this is problem specific to OSGI modules not having precompiled JSPs inside; same problem with Polls Display.

As of version 7, OSGi module's JSPs are no longer precompiled. This is because you need the full OSGi runtime up and running to resolve all dependencies. That's the reason why you don't see the JSP class files.

Regarding the error about the wiki page, can you provide more info? Any logs or any error message?

No any error logs.
Simply: download Tomcat-based distribution, start it, and try to add WIKI to a page. The same with few other OSGI-based portlets.
Trying to refresh a page after that: empty page shown, no any error message.
Easy to reproduce.
No any error logs; perhaps someone tried to swallow Throwable emoticon

Also, M4 distribution has broken Docs archive (yes, some people need it to configure IDE)
Perhaps this is the root of the problem, OSGI simply stops after that:

17:37:38,342 ERROR [com.liferay.portal.log.bridge.internal.LogBridge@59ca3022][com_liferay_social_networking_web:75] FrameworkEvent ERROR
org.osgi.framework.BundleException: Could not resolve module: [87]_ Unresolved requirement: Import-Package:
ocoder_ [Sanitized]
at org.eclipse.osgi.container.Module.start(
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(
at org.eclipse.osgi.container.SystemModule.startWorker(
at org.eclipse.osgi.container.Module.doStart(
at org.eclipse.osgi.container.Module.start(
at org.eclipse.osgi.container.SystemModule.start(
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(
at org.eclipse.osgi.launch.Equinox.start(
at com.liferay.portal.bootstrap.ModuleFrameworkImpl.startFramework(
at com.liferay.portal.module.framework.ModuleFrameworkUtilAdapter.startFramework(
at com.liferay.portal.spring.context.PortalContextLoaderListener.contextInitialized(
at org.apache.catalina.core.StandardContext.listenerStart(
at org.apache.catalina.core.StandardContext.startInternal(
at org.apache.catalina.util.LifecycleBase.start(
at org.apache.catalina.core.ContainerBase.addChildInternal(
at org.apache.catalina.core.ContainerBase.addChild(
at org.apache.catalina.core.StandardHost.addChild(
at org.apache.catalina.startup.HostConfig.deployDescriptor(
at org.apache.catalina.startup.HostConfig$
at java.util.concurrent.Executors$
at java.util.concurrent.ThreadPoolExecutor.runWorker(
at java.util.concurrent.ThreadPoolExecutor$
Apr 01, 2015 5:37:38 PM org.apache.catalina.core.ApplicationContext log
Today I tried to recompile GIT "master" version, and WIKI works fine.

Though, this is mandatory:

Without that WIKI will output log messages regarding not available JSPs from tag library.
Hi Fuad:

As you found out, the issue is fixed in master, as stated here:

Thanks a lot for your feedback, anyway. :-)

Nevertheless, I would suggest that for further feedback you use the feedback forums in the link I'm sending you so that you can get a faster response and everybody knows of your findings.

Thanks again,
Really Cool:
- moving from Struts to MVCPortlet (I love it!!!)
Hey Fuad, Have you signed up to the Liferay 7 Community Expedition?
This feedback you are providing is very useful and doing it in the Expedition site will ensure it gets the best visibility: