SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

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
 

Tendances (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
 

Similaire à 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
 

Similaire à 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
 

Dernier

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 

Dernier (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

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!