SlideShare a Scribd company logo
1 of 41
Download to read offline
Liferay in Real Projects
Common mistakes on Liferay projects and
ways how to avoid them
Aleš Rybák
Portal Specialist / Consultant
IBA CZ, s. r. o.
Typical problems
●

Disfunctions and
non-standard behaviour

●

Poor performance

●

●

Stability problems

●
●

●

Security vulnerabilities
Overloading of integrated
systems
Usability issues

●

●

●

●

Liferay's potential not fully
leveraged
Maintenance and service
continuity is expensive
Multi vendor env.
doesn't exist
Hard to implement
changes
Low business flexibility
Change needed, but how?
What the customer does see
What the customer doesn't see

Themes
Integrations
Customizations

Portlets
Databases
Jobs
Audit
Problem areas
●

Architecture & design

●

Build & release

●

Code & technical realization
–

Unit tests

–

Frameworks

●

Insufficient knowledge about Liferay Portal (not only)

●

Governance & processes
Absence of Information architecture
●

●

Gap between applications
and customer's needs /
final state
Only developed portlets
and customizations. Let
the customer to do the
rest.

●
●

●

●

Content first
Connection between
technology and real world
problems
Define structure of
content and context for
applications
Base for usability
Misusing Liferay plugins
●

Use plugins for the right purpose
–

portlet plugin for new functionality

–

themes and layouts for L&F

–

hooks for JSP changes, mild changes via exposed APIs

–

ext plugin for more drastical changes

●

Use as non-invasive approaches as possible

●

Avoid JS hooks
Portlet decomposition
●

God portlet / Über-portlet
–
–

●

one big portlet doing
everything
one portlet placed several
times in portal with different
configuration

●

●

●

One portlet per use-case is
good start
merge some to avoid evidently
unnecessary IPC
this needs experience and
sort of sense

Hard to
–

change

–

reuse

–

optimize

●

when checking roles consider
division into more smaller
portlets for each role
Outnumbered by JavaScript libs
“Exotic” infrastructure
●

Well tested
–

Linux

●

Non-standard deploys

●

“Enterprise stack”
–

Liferay EE

–

Oracle DB

–
–

MySQL & Oracle

–

IBM Websphere AS

–
●

Tomcat
Apache

–

MS Windows Server

KISS, use “exotic”
components only if you
know what you're doing
(usually you don't)

●

Compatibility problems

●

Extra knowledge required

●

WAS & WebLogic
–

things which take 10 minutes
on Tomcat can take hours
Build
Optimal solution
mvn clean install
...
BUILD SUCCESSFUL

Reality
●
●

●
●

●

●

For anything else have
documentation and e.g.
maven profile
Use CI / automatic builds

Missing artifacts
Need to build each module
separately
Always needs to connect to VPN
Side effects (e.g. deleting files
on servers, accessing DB)

●

Environment variables needed

●

OS dependency
Snapshot version in production
●

Supplier isn't tagging releases

●

All changes go to the trunk which is only source

●

Customer has no idea
–

what is deployed on production

–

what to test / accept

–

whether reported bugs are fixed

–

what's the state of the project

●

Very good excuse for supplier

●

FIX: release new versions with change log
Code and file system anarchy
●
●

●
●

●

Mess everywhere
Every single thing in code is
done in different way

●

Unification

●

Automatization
–

No rules for VCS
Ad-hoc file/class/... naming
and structures (depends on
creator's fantasy)
Backups into different
places – no one knows if
they are still valid/needed

●

Scripts / tools for most
tasks

In the code - do things
in a same way even
though it's not the best
way!
Code style
●

“How to write unmaintainable code”
–

http://mindprod.com/jgloss/unmain.html

–

if you follow all these rules religiously, you will even
guarantee yourself a lifetime of employment, since no one
but you has a hope in hell of maintaining the code
Code style 2
●
●

High complexity – thousands of SLOC per method
Unreadable code (sometimes it's better to remove all comments
and reformat all sources automatically)

●

Wrong decomposition and unclear structure

●

Cyclic dependencies

●

Massive duplication

●

Unreachable code

●

Code commented-out

●

Bypassing conventions

●

and many more (also in next slides)
Code and style 3
●

Static controls of the code
–

CheckStyle

–

PMD

–

FindBugs

–

SonarQube

●

Read the book

●

Have guidelines

●

Do quick code reviews
and refactorings
Thread danger (the evil brother of Thread safety)
public class MyPortlet extends GenericPortlet {
private PageData data; // to be displayed in JSP
public void processAction(actionReq, actionResp) {
data = prepareData(req);
}
public void doView(renderReq, renderResp) {
dispatchToJSP(renderReq, renderResp, data);
}
...
}
Resources wasting
●

Not closing streams

●

Not closing connections

●

Missing cleanup actions
(e. g. temp files)

●

●

Use tested mature
frameworks where
possible
Use static analysis
Logging
●

●
●

●
●

Logging too many
messages and
unimportant info

●
●

Crucial info is missing
Missing context info (e.g.
user ID, request ID, etc.)
Logging private data
Not using
LOG.ifDebugEnabled()

●
●

Define rules for logging
Logs are most used (and
sometimes the only) way
to find out what went
wrong on production
If using Log4J use LogMF
Read and analyze your
logs – optimize the
logging levels
Exceptions
●

catching Throwable

●

disposing caught Exceptions
–

not wrapping exceptions

●

exception-driven development

●

overusing of controlled Exceptions

●

FIX: just don't ;-)
Unit tests

FIXES:
●
define, what to test and how and stick to it
●
make tests standard part of your delivery
Unit tests

FIXES:
●
define, what to test and how and stick to it
●
make tests standard part of your delivery
Portlets mistakes
●

Big data in session

●

Stateful portlets

●

●

unnecessary
weird

Friendly URLs

●

start with standard pure
Java portlets (read
JSR-286 standard)

–

IPC
–

Learn how to develop
portlets
–

processAction instead
render
–

●

●

look if framework you
are using has support
for portlets or portlet
bridge

Stick with best practices
Frameworks non-usage
●

●

Reinventing the wheel in
code

●

Developing my own
framework
–

–

formatting dates

–

controllers

–

file handling

Apache Commons

–
●

Spring

–

UI

Standards & RI

–

JMS

–

–

cache

–

Look for suitable
framework first

Other sources

Select the mature
supported one
JPA / Hibernate
●

Doing in Java what DB should do (e. g. list size)

●

Combination with pure JDBC
–

problem with 2nd level cache

●

Cascades

●

Explicit entity refresh

●

Many requests
–

very often can be optimized
Security

OWASP Top 10 is the minimum
Liferay users, roles, groups, permissions...
●

One of the most used Liferay's APIs

●

“Patterns”
–

one role per user
●

–

one global role per organization
●

–

only for small number of users
define and use organization roles

one role per document
●

never ever do this
Liferay clustering
●

Sessions

●

Indexes

●

Caches

●

File storage

●

Timers

●

Underlying apps. & other
frameworks

●

web.xml
–

●

distributable

Session objects
–

serializable
Business knowledge of Liferay
●
●

Unable to provide consultancy in required or any quality
Customer is able to maneuver supplier into unnecessary
drastic customizations
–

“bender and narrower”
Technical knowledge of Liferay
●

Many customizations are done programmatically
–
–

●

changes in Java code, JSPs, sometimes across whole
solution including interfaces
some of these changes can be done via configuration

Examples
–

Registration

–

no-cache headers

–

Changes of tag libs
Undefined competences
●

Hidden responsibilities
and costs for customer
–

portal platform

–

application servers

–

connected systems

–

monitoring and
maintenance

●

●

Define what is and what
isn't part of the project
Identify risks and owners
Final advices
●

●

Copy-paste code from StackOverflow
– it's in acceptable quality
Don't make tags or release any versions
(this one is final)!

●

Read “how to write unmaintainable code” and follow it

●

Never test your code!

●

Write your own frameworks! The more, the better.
–

Never test your frameworks!

●

Be agile! = Never write any documentation!

●

Act like fools and just don't care!
●

●

Copy-paste code from StackOverflow
– it's in acceptable quality
Don't make tags or release any versions
(this one is final)!

●

Read “how to write unmaintainable code” and follow it

●

Never test your code!

●

Write your own frameworks! The more, the better.
–

Never test your frameworks!

●

Be agile! = Never write any documentation!

●

Act like fools and just don't care!

●

Don't blame Liferay for another application's problems!
visit us
www.ibacz.eu
follow us
@IBACZ
the end

More Related Content

What's hot

Liferay portal – moving beyond content management
Liferay portal – moving beyond content managementLiferay portal – moving beyond content management
Liferay portal – moving beyond content managementAmbientia
 
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...Milen Dyankov
 
Liferay Italy Symposium 2015 Liferay Mobile SDK and Liferay Screens
Liferay Italy Symposium 2015 Liferay Mobile SDK and Liferay ScreensLiferay Italy Symposium 2015 Liferay Mobile SDK and Liferay Screens
Liferay Italy Symposium 2015 Liferay Mobile SDK and Liferay ScreensDenis Signoretto
 
Liferay Configuration and Customization
Liferay Configuration and CustomizationLiferay Configuration and Customization
Liferay Configuration and CustomizationThành Nguyễn
 
Creating Better Customer and Employee Experiences with Liferay Portal and Cra...
Creating Better Customer and Employee Experiences with Liferay Portal and Cra...Creating Better Customer and Employee Experiences with Liferay Portal and Cra...
Creating Better Customer and Employee Experiences with Liferay Portal and Cra...Crafter Software
 
Liferay Portal Introduction
Liferay Portal IntroductionLiferay Portal Introduction
Liferay Portal IntroductionNguyen Tung
 
Liferay DevCon 2014: Lliferay Platform - A new and exciting vision
Liferay DevCon 2014: Lliferay Platform - A new and exciting visionLiferay DevCon 2014: Lliferay Platform - A new and exciting vision
Liferay DevCon 2014: Lliferay Platform - A new and exciting visionJorge Ferrer
 
01/2009 - Portral development with liferay
01/2009 - Portral development with liferay01/2009 - Portral development with liferay
01/2009 - Portral development with liferaydaveayan
 
2014 Liferay Roadshow Ambientia Finland
2014  Liferay Roadshow Ambientia Finland2014  Liferay Roadshow Ambientia Finland
2014 Liferay Roadshow Ambientia FinlandRuud Kluivers
 
Liferay plugin customization to change the behavior in portal
Liferay plugin customization to change the behavior in portalLiferay plugin customization to change the behavior in portal
Liferay plugin customization to change the behavior in portalAegis Software Canada
 
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...Chris Sparshott
 
What's new in WebSphere Portal 8 roundtable 27 september 2012
What's new in WebSphere Portal 8 roundtable 27 september 2012What's new in WebSphere Portal 8 roundtable 27 september 2012
What's new in WebSphere Portal 8 roundtable 27 september 2012MooijBert
 

What's hot (20)

Liferay portal – moving beyond content management
Liferay portal – moving beyond content managementLiferay portal – moving beyond content management
Liferay portal – moving beyond content management
 
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
 
Liferay Italy Symposium 2015 Liferay Mobile SDK and Liferay Screens
Liferay Italy Symposium 2015 Liferay Mobile SDK and Liferay ScreensLiferay Italy Symposium 2015 Liferay Mobile SDK and Liferay Screens
Liferay Italy Symposium 2015 Liferay Mobile SDK and Liferay Screens
 
Liferay Configuration and Customization
Liferay Configuration and CustomizationLiferay Configuration and Customization
Liferay Configuration and Customization
 
Creating Better Customer and Employee Experiences with Liferay Portal and Cra...
Creating Better Customer and Employee Experiences with Liferay Portal and Cra...Creating Better Customer and Employee Experiences with Liferay Portal and Cra...
Creating Better Customer and Employee Experiences with Liferay Portal and Cra...
 
Liferay Portal Introduction
Liferay Portal IntroductionLiferay Portal Introduction
Liferay Portal Introduction
 
Liferay DevCon 2014: Lliferay Platform - A new and exciting vision
Liferay DevCon 2014: Lliferay Platform - A new and exciting visionLiferay DevCon 2014: Lliferay Platform - A new and exciting vision
Liferay DevCon 2014: Lliferay Platform - A new and exciting vision
 
Overview of Liferay 7 Technology
Overview of Liferay 7 TechnologyOverview of Liferay 7 Technology
Overview of Liferay 7 Technology
 
Liferay 7
Liferay 7Liferay 7
Liferay 7
 
01/2009 - Portral development with liferay
01/2009 - Portral development with liferay01/2009 - Portral development with liferay
01/2009 - Portral development with liferay
 
Liferay and Cloud
Liferay and CloudLiferay and Cloud
Liferay and Cloud
 
Making a decision between Liferay and Drupal
Making a decision between Liferay and DrupalMaking a decision between Liferay and Drupal
Making a decision between Liferay and Drupal
 
Liferay on docker
Liferay on dockerLiferay on docker
Liferay on docker
 
2014 Liferay Roadshow Ambientia Finland
2014  Liferay Roadshow Ambientia Finland2014  Liferay Roadshow Ambientia Finland
2014 Liferay Roadshow Ambientia Finland
 
Liferay plugin customization to change the behavior in portal
Liferay plugin customization to change the behavior in portalLiferay plugin customization to change the behavior in portal
Liferay plugin customization to change the behavior in portal
 
Liferay Portal Customizing to Business Needs
Liferay Portal Customizing to Business NeedsLiferay Portal Customizing to Business Needs
Liferay Portal Customizing to Business Needs
 
Liferay DXP Training
Liferay DXP TrainingLiferay DXP Training
Liferay DXP Training
 
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
Integrating IBM Web Sphere Portal With Web Analytic Hosted And Non Hosted Sit...
 
Liferay (DXP) 7 Tech Meetup for Developers
Liferay (DXP) 7 Tech Meetup for DevelopersLiferay (DXP) 7 Tech Meetup for Developers
Liferay (DXP) 7 Tech Meetup for Developers
 
What's new in WebSphere Portal 8 roundtable 27 september 2012
What's new in WebSphere Portal 8 roundtable 27 september 2012What's new in WebSphere Portal 8 roundtable 27 september 2012
What's new in WebSphere Portal 8 roundtable 27 september 2012
 

Similar to Liferay portals in real projects

OutSystems Tips and Tricks
OutSystems Tips and TricksOutSystems Tips and Tricks
OutSystems Tips and TricksOutSystems
 
Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"Fwdays
 
Node.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scaleNode.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scaleDmytro Semenov
 
Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)ncoghlan_dev
 
Moodle Development Best Pracitces
Moodle Development Best PracitcesMoodle Development Best Pracitces
Moodle Development Best PracitcesJustin Filip
 
Path dependent-development (PyCon India)
Path dependent-development (PyCon India)Path dependent-development (PyCon India)
Path dependent-development (PyCon India)ncoghlan_dev
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020OdessaJS Conf
 
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Theo Jungeblut
 
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Theo Jungeblut
 
Ad109 - XPages Performance and Scalability
Ad109 - XPages Performance and ScalabilityAd109 - XPages Performance and Scalability
Ad109 - XPages Performance and Scalabilityddrschiw
 
µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015Izzet Mustafaiev
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureYshay Yaacobi
 
Scaling Magento
Scaling MagentoScaling Magento
Scaling MagentoCopious
 
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012Blend Interactive
 
Introduction to Test Automation
Introduction to Test AutomationIntroduction to Test Automation
Introduction to Test AutomationPekka Klärck
 
DevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsDevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsFedir RYKHTIK
 

Similar to Liferay portals in real projects (20)

OutSystems Tips and Tricks
OutSystems Tips and TricksOutSystems Tips and Tricks
OutSystems Tips and Tricks
 
Sdlc
SdlcSdlc
Sdlc
 
Spring batch overivew
Spring batch overivewSpring batch overivew
Spring batch overivew
 
Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"
 
Node.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scaleNode.js Web Apps @ ebay scale
Node.js Web Apps @ ebay scale
 
Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)
 
on log messages
on log messageson log messages
on log messages
 
Moodle Development Best Pracitces
Moodle Development Best PracitcesMoodle Development Best Pracitces
Moodle Development Best Pracitces
 
Path dependent-development (PyCon India)
Path dependent-development (PyCon India)Path dependent-development (PyCon India)
Path dependent-development (PyCon India)
 
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
 
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
 
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
 
Ad109 - XPages Performance and Scalability
Ad109 - XPages Performance and ScalabilityAd109 - XPages Performance and Scalability
Ad109 - XPages Performance and Scalability
 
µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015
 
DDD with Behat
DDD with BehatDDD with Behat
DDD with Behat
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructure
 
Scaling Magento
Scaling MagentoScaling Magento
Scaling Magento
 
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012
 
Introduction to Test Automation
Introduction to Test AutomationIntroduction to Test Automation
Introduction to Test Automation
 
DevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsDevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and Projects
 

Recently uploaded

Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 

Recently uploaded (20)

Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 

Liferay portals in real projects

  • 1. Liferay in Real Projects Common mistakes on Liferay projects and ways how to avoid them Aleš Rybák Portal Specialist / Consultant IBA CZ, s. r. o.
  • 2.
  • 3.
  • 4.
  • 5. Typical problems ● Disfunctions and non-standard behaviour ● Poor performance ● ● Stability problems ● ● ● Security vulnerabilities Overloading of integrated systems Usability issues ● ● ● ● Liferay's potential not fully leveraged Maintenance and service continuity is expensive Multi vendor env. doesn't exist Hard to implement changes Low business flexibility
  • 7. What the customer does see
  • 8. What the customer doesn't see Themes Integrations Customizations Portlets Databases Jobs
  • 10. Problem areas ● Architecture & design ● Build & release ● Code & technical realization – Unit tests – Frameworks ● Insufficient knowledge about Liferay Portal (not only) ● Governance & processes
  • 11. Absence of Information architecture ● ● Gap between applications and customer's needs / final state Only developed portlets and customizations. Let the customer to do the rest. ● ● ● ● Content first Connection between technology and real world problems Define structure of content and context for applications Base for usability
  • 12. Misusing Liferay plugins ● Use plugins for the right purpose – portlet plugin for new functionality – themes and layouts for L&F – hooks for JSP changes, mild changes via exposed APIs – ext plugin for more drastical changes ● Use as non-invasive approaches as possible ● Avoid JS hooks
  • 13. Portlet decomposition ● God portlet / Über-portlet – – ● one big portlet doing everything one portlet placed several times in portal with different configuration ● ● ● One portlet per use-case is good start merge some to avoid evidently unnecessary IPC this needs experience and sort of sense Hard to – change – reuse – optimize ● when checking roles consider division into more smaller portlets for each role
  • 15. “Exotic” infrastructure ● Well tested – Linux ● Non-standard deploys ● “Enterprise stack” – Liferay EE – Oracle DB – – MySQL & Oracle – IBM Websphere AS – ● Tomcat Apache – MS Windows Server KISS, use “exotic” components only if you know what you're doing (usually you don't) ● Compatibility problems ● Extra knowledge required ● WAS & WebLogic – things which take 10 minutes on Tomcat can take hours
  • 16. Build Optimal solution mvn clean install ... BUILD SUCCESSFUL Reality ● ● ● ● ● ● For anything else have documentation and e.g. maven profile Use CI / automatic builds Missing artifacts Need to build each module separately Always needs to connect to VPN Side effects (e.g. deleting files on servers, accessing DB) ● Environment variables needed ● OS dependency
  • 17. Snapshot version in production ● Supplier isn't tagging releases ● All changes go to the trunk which is only source ● Customer has no idea – what is deployed on production – what to test / accept – whether reported bugs are fixed – what's the state of the project ● Very good excuse for supplier ● FIX: release new versions with change log
  • 18. Code and file system anarchy ● ● ● ● ● Mess everywhere Every single thing in code is done in different way ● Unification ● Automatization – No rules for VCS Ad-hoc file/class/... naming and structures (depends on creator's fantasy) Backups into different places – no one knows if they are still valid/needed ● Scripts / tools for most tasks In the code - do things in a same way even though it's not the best way!
  • 19. Code style ● “How to write unmaintainable code” – http://mindprod.com/jgloss/unmain.html – if you follow all these rules religiously, you will even guarantee yourself a lifetime of employment, since no one but you has a hope in hell of maintaining the code
  • 20. Code style 2 ● ● High complexity – thousands of SLOC per method Unreadable code (sometimes it's better to remove all comments and reformat all sources automatically) ● Wrong decomposition and unclear structure ● Cyclic dependencies ● Massive duplication ● Unreachable code ● Code commented-out ● Bypassing conventions ● and many more (also in next slides)
  • 21. Code and style 3 ● Static controls of the code – CheckStyle – PMD – FindBugs – SonarQube ● Read the book ● Have guidelines ● Do quick code reviews and refactorings
  • 22. Thread danger (the evil brother of Thread safety) public class MyPortlet extends GenericPortlet { private PageData data; // to be displayed in JSP public void processAction(actionReq, actionResp) { data = prepareData(req); } public void doView(renderReq, renderResp) { dispatchToJSP(renderReq, renderResp, data); } ... }
  • 23. Resources wasting ● Not closing streams ● Not closing connections ● Missing cleanup actions (e. g. temp files) ● ● Use tested mature frameworks where possible Use static analysis
  • 24. Logging ● ● ● ● ● Logging too many messages and unimportant info ● ● Crucial info is missing Missing context info (e.g. user ID, request ID, etc.) Logging private data Not using LOG.ifDebugEnabled() ● ● Define rules for logging Logs are most used (and sometimes the only) way to find out what went wrong on production If using Log4J use LogMF Read and analyze your logs – optimize the logging levels
  • 25. Exceptions ● catching Throwable ● disposing caught Exceptions – not wrapping exceptions ● exception-driven development ● overusing of controlled Exceptions ● FIX: just don't ;-)
  • 26. Unit tests FIXES: ● define, what to test and how and stick to it ● make tests standard part of your delivery
  • 27. Unit tests FIXES: ● define, what to test and how and stick to it ● make tests standard part of your delivery
  • 28. Portlets mistakes ● Big data in session ● Stateful portlets ● ● unnecessary weird Friendly URLs ● start with standard pure Java portlets (read JSR-286 standard) – IPC – Learn how to develop portlets – processAction instead render – ● ● look if framework you are using has support for portlets or portlet bridge Stick with best practices
  • 29. Frameworks non-usage ● ● Reinventing the wheel in code ● Developing my own framework – – formatting dates – controllers – file handling Apache Commons – ● Spring – UI Standards & RI – JMS – – cache – Look for suitable framework first Other sources Select the mature supported one
  • 30. JPA / Hibernate ● Doing in Java what DB should do (e. g. list size) ● Combination with pure JDBC – problem with 2nd level cache ● Cascades ● Explicit entity refresh ● Many requests – very often can be optimized
  • 31. Security OWASP Top 10 is the minimum
  • 32. Liferay users, roles, groups, permissions... ● One of the most used Liferay's APIs ● “Patterns” – one role per user ● – one global role per organization ● – only for small number of users define and use organization roles one role per document ● never ever do this
  • 33. Liferay clustering ● Sessions ● Indexes ● Caches ● File storage ● Timers ● Underlying apps. & other frameworks ● web.xml – ● distributable Session objects – serializable
  • 34. Business knowledge of Liferay ● ● Unable to provide consultancy in required or any quality Customer is able to maneuver supplier into unnecessary drastic customizations – “bender and narrower”
  • 35. Technical knowledge of Liferay ● Many customizations are done programmatically – – ● changes in Java code, JSPs, sometimes across whole solution including interfaces some of these changes can be done via configuration Examples – Registration – no-cache headers – Changes of tag libs
  • 36. Undefined competences ● Hidden responsibilities and costs for customer – portal platform – application servers – connected systems – monitoring and maintenance ● ● Define what is and what isn't part of the project Identify risks and owners
  • 38. ● ● Copy-paste code from StackOverflow – it's in acceptable quality Don't make tags or release any versions (this one is final)! ● Read “how to write unmaintainable code” and follow it ● Never test your code! ● Write your own frameworks! The more, the better. – Never test your frameworks! ● Be agile! = Never write any documentation! ● Act like fools and just don't care!
  • 39. ● ● Copy-paste code from StackOverflow – it's in acceptable quality Don't make tags or release any versions (this one is final)! ● Read “how to write unmaintainable code” and follow it ● Never test your code! ● Write your own frameworks! The more, the better. – Never test your frameworks! ● Be agile! = Never write any documentation! ● Act like fools and just don't care! ● Don't blame Liferay for another application's problems!