Liferay is very well known as a good platform for building portals. It provides a nice combination of out of the box features, extensibility and application development options to build almost any website, portal or complex application without starting from scratch every time. But is that all it can do?
For a few years the development world has been focusing more and more on developing for mobile and tablets, glasses and TVs or even provide public web APIs for any developers to build on top of a company’s services and content. And we have noticed “There isn’t a Liferay for those developers!”, most of that type development is started from scratch, “What if Liferay filled that gap?”
During this talk we will show how the most recent developments of the Liferay team are building a more versatile and modular platform than ever, an environment to leverage the most modern frontend development tools for enterprise needs, a set of tools to build mobile apps (for any device) with a powerful backend in a tenth of the time it typically takes. And all of it Open Source and fully standards based.
44. Goal 1
Use just the pieces of
Liferay you really need
45. Maintainable & Scalable
Breaking down
the monolith
Author: Mike Richard / Source: vagabondish.com
46. Modular Platform
Breaking the platform and reusable services into
OSGi modules yields many benefits
F Only deploy needed modules.
B Uses standard OSGi extension points.
New!
A Dependencies are declared.
Scale indiv. C modules separately.
D True hot deployment.
Blogs
μ μ
μ μ E μservices
47. Dependency Management
MANIFEST
Import-Package:
com.liferay.polls,
com.liferay.blogs,
com.liferay.users
Export-Package:
com.liferay.messageboards
Can be autogenerated with bnd
Fixes the class loading hell in a very elegant way
Miguel
Ray
49. OSGi Extensions
Instead of
auto.login.hooks=com.liferay.samples.MyAutoLogin
Use an annotation
@Component
public class MyAutoLogin implements AutoLogin {
...
}
Using OSGi Declarative Services
50. Make any custom class
extensible
@Component
public class MyMenuClass {
...
@Reference
public void setMenuRenderer(MenuRenderer mr) {
_menuRenderer = mr;
}
}
Using OSGi Declarative Services
51. Make any custom class
extensible
@Component
public class MyMenuClass {
...
@Reference(
cardinality = ReferenceCardinality.MULTIPLE,
policy = ReferencePolicy.DYNAMIC,
...
)
public void addMenuItem(MenuItem mi) {
_menuItems.add(mi);
}
}
Using OSGi Declarative Services
52. @Component
public class MyMenuItem implements MenuItem {
...
}
Make any custom class
extensible
53. Audience Targeting
A great example
1 App
made of
30+
modules
Highly
Extensible
Julio Eduardo Eudaldo
54. Better ways to develop
UI Extensions
Granularity + Maintainability
No more need for
JSP overrides!
Carlos
56. Semantic Versioning
Version each module independently
Standard to differentiate breaking
changes
Automatic compatibility checks
semver.org
✓Dependencies on
specific modules and
versions, not a big
Liferay version
60. Autogenerated conf UI
1. Injected in your service
@Activate
protected void activate(AmazonRankingsConfiguration conf) {
String rankingsId = conf.amazonRankingsId();
...
}
2. Fully dynamic
Change the configuration at any time
Draft API
Ray
61. State of the art dev tooling
Embrace and contribute to best of breed applications
instead of building our own
+
63. You can reuse your
knowledge to do
more than ever before
64. Mobile Apps/IoT
Native, Hybrid, Web, ...
Amazing sites & portals
Which keep getting better
Innovative Web Apps
With any technology
Liferay Platform
More modular and extensible
65. The Liferay Way
Open Source
Following Standards
Using state-of-the-art tools