eZ Publish nextgen

Jérôme Vieilledent
Jérôme VieilledentSoftware engineer at eZ Systems
eZ Publish Nextgen
                       Knock knock. Who’s there ? The Future !




samedi 15 octobre 11
Current  architecture
                       What’s  wrong  with  it  ?  Why  ?




samedi 15 octobre 11
Current  architecture




samedi 15 octobre 11
Current  architecture


          • RDBMS  dependent,  and  strongly  bound  to  the  database  structure
          • PHP  4  ages  legacy  :
                       o Weak  OOP  concepts  (no  interfaces,  no  abstract,  no  excepGons,  no  magic,  no  dependency  
                           injecGon,  everything  is  public)
                       o Global  variables  usage  (for  singletons  on  in-­‐memory  cache)
                       o (And  also  some  dirty  workarounds)

          • Low  level  API
                       o Hard  to  catch
                       o SomeGmes  dangerous  to  manipulate  directly  (for  data  integrity)
                       o No  real  API  doc,  hence  no  developer  doc

          • Hardly  testable




samedi 15 octobre 11
Consequences


          • Evolu'ons  are  very  'me-­‐consuming
          • Maintaining  backward  compa'bility  is  very  complex
          • No  possible  support  for  NoSQL
          • Impossible  to  perform  RDBMS  specific  op'miza'ons  
             (na've  func'ons  and  procedures,  like  in  Oracle,  or  even  
             latest  MySQL)
          • Bad  API  usage  (and  "Black  Magic")




samedi 15 octobre 11
New  architecture
                       «This  is  a  revoluGon»  ©  S.J.




samedi 15 octobre 11
Layers...




samedi 15 octobre 11
New  architecture  overview



      •    Kicked  off  with  Domain  Driven  Design  methodologies
      •    Storage  system  agnos'c
      •    Extensible
      •    Secure
      •    Easy  to  use
      •    Modern  (PHP  5.3,  namespaces,  design  paUerns...)




samedi 15 octobre 11
samedi 15 octobre 11
Do  you  speak  eZ  Publish  ?

  The  refined  domain  defini'on  comes  up  with  new  terms:
    Content  Object                      Content
    Node                                 Loca/on
    Content  Object  A1ribute            Field

    Content  Class                       Content  Type

    Content  Class  A1ribute             Field  Defini/on

    Datatype                             Field  Type

   Easier  to  understand  for  newcomers  and  non-­‐technical  people  (Domain  design  approach)




samedi 15 octobre 11
Public  API


          • Public  API  is  the  ONLY  API  any  developer  should  use  directly

          • Any  developer  =  eZ  Engineers  included  (kernel  modules)

          • Should  be  sexy  and  very  easy  to  use

          • High  level,  so  that  the  developer  doesn't  care  about  the  
            backend

          • It  interacts  seamlessly  with  the  business  layer  in  the  backend




samedi 15 octobre 11
Business  layer


          • This  is  the  layer  where  most  of  the  logic  is  implemented

          • It  is  completely  storage  agnos/c,  as  it  uses  the  content  
             persistence  API.

          • It  uses  the  Content  Repository  to  manipulate  the  CMS  data.

          • It  doesn't  delegate  logic  to  the  content  persistence  API.




samedi 15 octobre 11
Persistence  layer


          • Starts  as  a  set  of  interfaces.

          • These  interfaces  are  implemented  by  every  content  
            repositories  (aka  Storage  Engines).

          • Ensures  full  abstrac/on  between  the  business  layer  and  the  
            storage  mechanisms.

          • Contains  as  liUle  logic  as  possible.  It  cares  about  data,  only  
            data.  Logic  is  in  the  business  layer.




samedi 15 octobre 11
Storage  engines

          • Storage  engines  implement  the  Content  Persistence  
            Interfaces

          • Each  storage  engine  corresponds  to  a  type  of  data  storage
                o Classic  RDBMS  (MySQL,  PostgreSQL...)
                o Document  oriented  storage  (NoSQL)
                o ...

          • Internals  are  completely  hidden,  and  can  use  anything:  ORM,  
             ezcDatabase,  REST,  SOAP...




samedi 15 octobre 11
Do  you  speak  eZ  Publish  ?


  New,  fancy  terms

          • Repository:  Centralized,  virtual  storage  system.  Implemented  
            by  storage.  Also  used  for  binary  files.

          • Domain  Object  (aka  DO):  High  level  PHP  object  exposed  in  
            public  API:  Content,  Loca'on,  Field,  etc.

          • Service:  Interac'on  components  from  the  Business  Layer:  
            Content,  Loca'on,  etc.




samedi 15 octobre 11
Legacy  Storage  Engine


          • eZ  Publish  4  database  Persistence  Layer  implementa'on  

          • Implemented  from  scratch.  Shiny  !

          • Uses  the  Zeta  Components  (ezcDatabase  +  ezcQuery)

          • Tested  to  be  two-­‐ways  compa/ble  with  eZ  Publish  4:
                ➡ content  created  from  ezp4  is  available  in  the  API
                ➡ content  created  from  the  API  is  available  in  ezp4

          • No  migra/on  required  !



samedi 15 octobre 11
Code  !
                       That’s  why  we’re  here,  right  ?




samedi 15 octobre 11
samedi 15 octobre 11
Create  content
      <?php
  use ezpBaseServiceContainer,
      ezpBaseConfiguration,
      ezpContentFieldTypeUrl;

  // Get the repository, and configure the user to use
  $sc = new ServiceContainer( Configuration::getInstance( 'service' )->getAll() );
  $repository = $sc->getRepository();
  $contentService = $repository->getContentService();
  $repository->setUser( $repository->getUserService()->load( 14 ) );

  // Build a new folder
  // $folder will be a DO, ezpContent
  $folder = $contentService->init( 'folder', 'eng-GB' );
  $folder->fields['name'] = 'News';
  $folder->fields['description'] = '<p>My <strong>ubber cool</strong> description !</p>';
  $folder->fields['link'] = new UrlValue( 'http://ez.no', 'eZ Systems' );
  $folder->addParent( $repository->getLocationService()->load( 2 ) );
  $folder = $contentService->create( $folder );
  $contentService->publish( $folder->versions[1] );




samedi 15 octobre 11
Load  content
     <?php
 use ezpBaseServiceContainer,
     ezpBaseConfiguration;

 $sc = new ServiceContainer( Configuration::getInstance( 'service' )->getAll() );
 $repository = $sc->getRepository();
 $contentService = $repository->getContentService();
 try
 {
     $content = $contentService->load( 60 );
 }
 catch ( ezpBaseExceptionNotFound $e )
 {
     echo "Content could not be found in the repository !n";
     exit;
 }

 // Loop against fields.
 // $identifier is the attribute identifier
 // $value is the corresponding value object
 echo "Content '{$content}' has following fields:n";
 foreach ( $content->fields as $identifier => $value )
 {
     echo "Field '{$identifier}': {$value}n"; // Using $value __toString()
 }



samedi 15 octobre 11
Fetch  content
    <?php
use ezpBaseServiceContainer,
    ezpBaseConfiguration,
    ezpContent,
    ezpContentQuery;

$sc = new ServiceContainer( Configuration::getInstance( 'service' )->getAll() );
$qb = new ezpContentQueryBuilder;
$contentService = $sc->getRepository()->getContentService();

// a full criteria
$qb->addCriteria(
    $qb->fullText->like( 'eZ Publish' ),
    $qb->urlAlias->like( '/cms/amazing/*' ),
    $qb->contentType->eq( 'blog_post' ),
    $qb->field->eq( 'author', 'community@ez.no' )
)->addSortClause(
    $qb->sort->field( 'blog_post', 'title', Query::SORT_ASC ),
    $qb->sort->dateCreated( Query::SORT_DESC )
)->setOffset( 0 )->setLimit( 10 );
$contentList = $contentService->find( $qb->getQuery() );




samedi 15 octobre 11
Field  types


         • Now  spliUed  in  (at  least)  2  objects:
              • Type
              • Value

         • Dedicated  PHP  namespace

         • Interfaces  to  determine  which  features  the  field  type  
            implement  (Searchable,  Collectable...)

         • Converters  for  Legacy  storage  engine




samedi 15 octobre 11
Roadmap



          • Full  language/transla'on  support

          • Finish  migra'ng  datatypes

          • HTTP  layer  +  modules

          • REST  API  implementa'on  based  on  the  new  API

          • Op'mized  storage  engines



samedi 15 octobre 11
Now  it’s  your  turn  !


  •Get it : http://github.com/ezsystems/ezp-next
  •Blame it : http://issues.ez.no/ezpublish (ezpnext component)
  •Discuss it : http://share.ez.no/forums/new-php-api
  •Own it : Make a GitHub pull request !


  Soon to come: wiki based cookbook, blog posts.




samedi 15 octobre 11
1 of 24

Recommended

Neodev by
NeodevNeodev
NeodevShimi Bandiel
244 views18 slides
Kubernetes Internals by
Kubernetes InternalsKubernetes Internals
Kubernetes InternalsShimi Bandiel
1.3K views72 slides
Should i Go there by
Should i Go thereShould i Go there
Should i Go thereShimi Bandiel
114 views53 slides
Openstack platform -Red Hat Pizza and technology event - Israel by
Openstack platform -Red Hat Pizza and technology event - IsraelOpenstack platform -Red Hat Pizza and technology event - Israel
Openstack platform -Red Hat Pizza and technology event - IsraelArthur Berezin
1.2K views26 slides
Java and the JVM by
Java and the JVMJava and the JVM
Java and the JVMManish Pandit
592 views24 slides
EhTrace -- RoP Hooks by
EhTrace -- RoP HooksEhTrace -- RoP Hooks
EhTrace -- RoP HooksShane Macaulay
253 views25 slides

More Related Content

What's hot

Perl On The JVM (London.pm Talk 2009-04) by
Perl On The JVM (London.pm Talk 2009-04)Perl On The JVM (London.pm Talk 2009-04)
Perl On The JVM (London.pm Talk 2009-04)Ben Evans
585 views18 slides
Lock-free algorithms for Kotlin Coroutines by
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesRoman Elizarov
2.7K views127 slides
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe... by
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...mfrancis
437 views23 slides
Neutrondev ppt by
Neutrondev pptNeutrondev ppt
Neutrondev pptmarunewby
972 views15 slides
mogpres by
mogpresmogpres
mogpresHiroshi Ono
337 views13 slides
Network concepts by
Network conceptsNetwork concepts
Network conceptsPrajwal Panchmahalkar
388 views20 slides

What's hot(20)

Perl On The JVM (London.pm Talk 2009-04) by Ben Evans
Perl On The JVM (London.pm Talk 2009-04)Perl On The JVM (London.pm Talk 2009-04)
Perl On The JVM (London.pm Talk 2009-04)
Ben Evans585 views
Lock-free algorithms for Kotlin Coroutines by Roman Elizarov
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
Roman Elizarov2.7K views
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe... by mfrancis
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
mfrancis437 views
Neutrondev ppt by marunewby
Neutrondev pptNeutrondev ppt
Neutrondev ppt
marunewby972 views
Scylla Summit 2018: Rebuilding the Ceph Distributed Storage Solution with Sea... by ScyllaDB
Scylla Summit 2018: Rebuilding the Ceph Distributed Storage Solution with Sea...Scylla Summit 2018: Rebuilding the Ceph Distributed Storage Solution with Sea...
Scylla Summit 2018: Rebuilding the Ceph Distributed Storage Solution with Sea...
ScyllaDB453 views
Developing apps and_integrating_with_gluster_fs_-_libgfapi by Gluster.org
Developing apps and_integrating_with_gluster_fs_-_libgfapiDeveloping apps and_integrating_with_gluster_fs_-_libgfapi
Developing apps and_integrating_with_gluster_fs_-_libgfapi
Gluster.org623 views
Kkeithley ufonfs-gluster summit by Gluster.org
Kkeithley ufonfs-gluster summitKkeithley ufonfs-gluster summit
Kkeithley ufonfs-gluster summit
Gluster.org365 views
Modern Java Concurrency by Ben Evans
Modern Java ConcurrencyModern Java Concurrency
Modern Java Concurrency
Ben Evans2.5K views
Lcna example-2012 by Gluster.org
Lcna example-2012Lcna example-2012
Lcna example-2012
Gluster.org505 views
F19 slidedeck (OpenStack^H^H^H^Hhift, what the) by Gerard Braad
F19 slidedeck (OpenStack^H^H^H^Hhift, what the)F19 slidedeck (OpenStack^H^H^H^Hhift, what the)
F19 slidedeck (OpenStack^H^H^H^Hhift, what the)
Gerard Braad728 views
Nsq & python worker by Felinx Lee
Nsq & python workerNsq & python worker
Nsq & python worker
Felinx Lee3.7K views
QueryPath, Mash-ups, and Web Services by Matt Butcher
QueryPath, Mash-ups, and Web ServicesQueryPath, Mash-ups, and Web Services
QueryPath, Mash-ups, and Web Services
Matt Butcher697 views
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So... by mfrancis
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
mfrancis873 views
Gluster d thread_synchronization_using_urcu_lca2016 by Gluster.org
Gluster d thread_synchronization_using_urcu_lca2016Gluster d thread_synchronization_using_urcu_lca2016
Gluster d thread_synchronization_using_urcu_lca2016
Gluster.org527 views
Apache HTTPd Server 2.2 Presentation by ultimatetux
Apache HTTPd Server 2.2 PresentationApache HTTPd Server 2.2 Presentation
Apache HTTPd Server 2.2 Presentation
ultimatetux1.5K views

Viewers also liked

颐信科技有限公司 by
颐信科技有限公司颐信科技有限公司
颐信科技有限公司ecguard
1.3K views23 slides
Tbja flyer by
Tbja flyerTbja flyer
Tbja flyerTampa Bay Jewish Academy
445 views9 slides
Puerto Colombia en fotos. by
Puerto Colombia en fotos.Puerto Colombia en fotos.
Puerto Colombia en fotos.nayibe1
642 views14 slides
Haskell retrospective by
Haskell retrospectiveHaskell retrospective
Haskell retrospectivechenge2k
1.2K views68 slides
Symfony and eZ Publish by
Symfony and eZ PublishSymfony and eZ Publish
Symfony and eZ PublishJérôme Vieilledent
3.1K views23 slides
eZ Publish 5 in depth inspection by
eZ Publish 5 in depth inspectioneZ Publish 5 in depth inspection
eZ Publish 5 in depth inspectionJérôme Vieilledent
1.7K views23 slides

Viewers also liked(7)

颐信科技有限公司 by ecguard
颐信科技有限公司颐信科技有限公司
颐信科技有限公司
ecguard1.3K views
Puerto Colombia en fotos. by nayibe1
Puerto Colombia en fotos.Puerto Colombia en fotos.
Puerto Colombia en fotos.
nayibe1642 views
Haskell retrospective by chenge2k
Haskell retrospectiveHaskell retrospective
Haskell retrospective
chenge2k1.2K views
The Next Evolution - Accelerating Toward Abundance by David Kish
The Next Evolution - Accelerating Toward AbundanceThe Next Evolution - Accelerating Toward Abundance
The Next Evolution - Accelerating Toward Abundance
David Kish1.9K views

Similar to eZ Publish nextgen

Ruby on Rails (RoR) as a back-end processor for Apex by
Ruby on Rails (RoR) as a back-end processor for Apex Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex Espen Brækken
1.5K views12 slides
What's brewing in the eZ Systems extensions kitchen by
What's brewing in the eZ Systems extensions kitchenWhat's brewing in the eZ Systems extensions kitchen
What's brewing in the eZ Systems extensions kitchenPaul Borgermans
855 views35 slides
Open Source Storage at Scale: Ceph @ GRNET by
Open Source Storage at Scale: Ceph @ GRNETOpen Source Storage at Scale: Ceph @ GRNET
Open Source Storage at Scale: Ceph @ GRNETNikos Kormpakis
79 views21 slides
44CON 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci... by
44CON 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci...44CON 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci...
44CON 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci...44CON
12.3K views79 slides
Openstack – An introduction by
Openstack – An introductionOpenstack – An introduction
Openstack – An introductionMuddassir Nazir
563 views21 slides
Building a high-performance, scalable ML & NLP platform with Python, Sheer El... by
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...Building a high-performance, scalable ML & NLP platform with Python, Sheer El...
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...Pôle Systematic Paris-Region
3.1K views27 slides

Similar to eZ Publish nextgen(20)

Ruby on Rails (RoR) as a back-end processor for Apex by Espen Brækken
Ruby on Rails (RoR) as a back-end processor for Apex Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex
Espen Brækken1.5K views
What's brewing in the eZ Systems extensions kitchen by Paul Borgermans
What's brewing in the eZ Systems extensions kitchenWhat's brewing in the eZ Systems extensions kitchen
What's brewing in the eZ Systems extensions kitchen
Paul Borgermans855 views
Open Source Storage at Scale: Ceph @ GRNET by Nikos Kormpakis
Open Source Storage at Scale: Ceph @ GRNETOpen Source Storage at Scale: Ceph @ GRNET
Open Source Storage at Scale: Ceph @ GRNET
Nikos Kormpakis79 views
44CON 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci... by 44CON
44CON 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci...44CON 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci...
44CON 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci...
44CON12.3K views
Eclipse Enterprise Content Repository (ECR) by Florent Guillaume
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)
Florent Guillaume2.1K views
SQL Queries on Smalltalk Objects by ESUG
SQL Queries on Smalltalk ObjectsSQL Queries on Smalltalk Objects
SQL Queries on Smalltalk Objects
ESUG449 views
Leonid Vasilyev "Building, deploying and running production code at Dropbox" by IT Event
Leonid Vasilyev  "Building, deploying and running production code at Dropbox"Leonid Vasilyev  "Building, deploying and running production code at Dropbox"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
IT Event526 views
Openstack In Real Life by Paul Guth
Openstack In Real LifeOpenstack In Real Life
Openstack In Real Life
Paul Guth11.7K views
Eclipse Apricot by Nuxeo
Eclipse ApricotEclipse Apricot
Eclipse Apricot
Nuxeo677 views
Workflow Engines for Hadoop by Joe Crobak
Workflow Engines for HadoopWorkflow Engines for Hadoop
Workflow Engines for Hadoop
Joe Crobak38.4K views
Ext osad initial-eval-march2015 by Daneyon Hansen
Ext osad initial-eval-march2015Ext osad initial-eval-march2015
Ext osad initial-eval-march2015
Daneyon Hansen361 views
VASCAN - Docker and Security by Michael Irwin
VASCAN - Docker and SecurityVASCAN - Docker and Security
VASCAN - Docker and Security
Michael Irwin182 views
Demistifying open stack storage by openstackindia
Demistifying open stack storageDemistifying open stack storage
Demistifying open stack storage
openstackindia596 views
eZ publish 5[-alpha1] Introduction & Architecture by André Rømcke
eZ publish 5[-alpha1] Introduction & ArchitectureeZ publish 5[-alpha1] Introduction & Architecture
eZ publish 5[-alpha1] Introduction & Architecture
André Rømcke2.7K views
Cncf storage-final-filip by Juraj Hantak
Cncf storage-final-filipCncf storage-final-filip
Cncf storage-final-filip
Juraj Hantak121 views
Ceph Day Santa Clara: Ceph and Apache CloudStack by Ceph Community
Ceph Day Santa Clara: Ceph and Apache CloudStack Ceph Day Santa Clara: Ceph and Apache CloudStack
Ceph Day Santa Clara: Ceph and Apache CloudStack
Ceph Community 430 views
A Practitioner's Guide to Successfully Migrate from Oracle to Sybase ASE Part 1 by Dobler Consulting
A Practitioner's Guide to Successfully Migrate from Oracle to Sybase ASE Part 1A Practitioner's Guide to Successfully Migrate from Oracle to Sybase ASE Part 1
A Practitioner's Guide to Successfully Migrate from Oracle to Sybase ASE Part 1
Dobler Consulting2.7K views

Recently uploaded

Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ... by
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...ShapeBlue
85 views10 slides
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueShapeBlue
222 views23 slides
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITShapeBlue
166 views8 slides
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueShapeBlue
163 views54 slides
NTGapps NTG LowCode Platform by
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform Mustafa Kuğu
365 views30 slides
Cencora Executive Symposium by
Cencora Executive SymposiumCencora Executive Symposium
Cencora Executive Symposiummarketingcommunicati21
139 views14 slides

Recently uploaded(20)

Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ... by ShapeBlue
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
ShapeBlue85 views
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
ShapeBlue222 views
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT by ShapeBlue
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBITUpdates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
Updates on the LINSTOR Driver for CloudStack - Rene Peinthor - LINBIT
ShapeBlue166 views
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue163 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu365 views
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates by ShapeBlue
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesKeynote Talk: Open Source is Not Dead - Charles Schulz - Vates
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates
ShapeBlue210 views
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool by ShapeBlue
Extending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPoolExtending KVM Host HA for Non-NFS Storage -  Alex Ivanov - StorPool
Extending KVM Host HA for Non-NFS Storage - Alex Ivanov - StorPool
ShapeBlue84 views
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or... by ShapeBlue
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
Zero to Cloud Hero: Crafting a Private Cloud from Scratch with XCP-ng, Xen Or...
ShapeBlue158 views
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by ShapeBlue
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
ShapeBlue123 views
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T by ShapeBlue
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
ShapeBlue112 views
Future of AR - Facebook Presentation by Rob McCarty
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
Rob McCarty62 views
DRBD Deep Dive - Philipp Reisner - LINBIT by ShapeBlue
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBIT
ShapeBlue140 views
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R... by ShapeBlue
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
ShapeBlue132 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker50 views
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ... by ShapeBlue
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
Backroll, News and Demo - Pierre Charton, Matthias Dhellin, Ousmane Diarra - ...
ShapeBlue146 views
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And... by ShapeBlue
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...
ShapeBlue63 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue181 views
The Role of Patterns in the Era of Large Language Models by Yunyao Li
The Role of Patterns in the Era of Large Language ModelsThe Role of Patterns in the Era of Large Language Models
The Role of Patterns in the Era of Large Language Models
Yunyao Li80 views

eZ Publish nextgen

  • 1. eZ Publish Nextgen Knock knock. Who’s there ? The Future ! samedi 15 octobre 11
  • 2. Current  architecture What’s  wrong  with  it  ?  Why  ? samedi 15 octobre 11
  • 4. Current  architecture • RDBMS  dependent,  and  strongly  bound  to  the  database  structure • PHP  4  ages  legacy  : o Weak  OOP  concepts  (no  interfaces,  no  abstract,  no  excepGons,  no  magic,  no  dependency   injecGon,  everything  is  public) o Global  variables  usage  (for  singletons  on  in-­‐memory  cache) o (And  also  some  dirty  workarounds) • Low  level  API o Hard  to  catch o SomeGmes  dangerous  to  manipulate  directly  (for  data  integrity) o No  real  API  doc,  hence  no  developer  doc • Hardly  testable samedi 15 octobre 11
  • 5. Consequences • Evolu'ons  are  very  'me-­‐consuming • Maintaining  backward  compa'bility  is  very  complex • No  possible  support  for  NoSQL • Impossible  to  perform  RDBMS  specific  op'miza'ons   (na've  func'ons  and  procedures,  like  in  Oracle,  or  even   latest  MySQL) • Bad  API  usage  (and  "Black  Magic") samedi 15 octobre 11
  • 6. New  architecture «This  is  a  revoluGon»  ©  S.J. samedi 15 octobre 11
  • 8. New  architecture  overview • Kicked  off  with  Domain  Driven  Design  methodologies • Storage  system  agnos'c • Extensible • Secure • Easy  to  use • Modern  (PHP  5.3,  namespaces,  design  paUerns...) samedi 15 octobre 11
  • 10. Do  you  speak  eZ  Publish  ? The  refined  domain  defini'on  comes  up  with  new  terms: Content  Object Content Node Loca/on Content  Object  A1ribute Field Content  Class Content  Type Content  Class  A1ribute Field  Defini/on Datatype Field  Type Easier  to  understand  for  newcomers  and  non-­‐technical  people  (Domain  design  approach) samedi 15 octobre 11
  • 11. Public  API • Public  API  is  the  ONLY  API  any  developer  should  use  directly • Any  developer  =  eZ  Engineers  included  (kernel  modules) • Should  be  sexy  and  very  easy  to  use • High  level,  so  that  the  developer  doesn't  care  about  the   backend • It  interacts  seamlessly  with  the  business  layer  in  the  backend samedi 15 octobre 11
  • 12. Business  layer • This  is  the  layer  where  most  of  the  logic  is  implemented • It  is  completely  storage  agnos/c,  as  it  uses  the  content   persistence  API. • It  uses  the  Content  Repository  to  manipulate  the  CMS  data. • It  doesn't  delegate  logic  to  the  content  persistence  API. samedi 15 octobre 11
  • 13. Persistence  layer • Starts  as  a  set  of  interfaces. • These  interfaces  are  implemented  by  every  content   repositories  (aka  Storage  Engines). • Ensures  full  abstrac/on  between  the  business  layer  and  the   storage  mechanisms. • Contains  as  liUle  logic  as  possible.  It  cares  about  data,  only   data.  Logic  is  in  the  business  layer. samedi 15 octobre 11
  • 14. Storage  engines • Storage  engines  implement  the  Content  Persistence   Interfaces • Each  storage  engine  corresponds  to  a  type  of  data  storage o Classic  RDBMS  (MySQL,  PostgreSQL...) o Document  oriented  storage  (NoSQL) o ... • Internals  are  completely  hidden,  and  can  use  anything:  ORM,   ezcDatabase,  REST,  SOAP... samedi 15 octobre 11
  • 15. Do  you  speak  eZ  Publish  ? New,  fancy  terms • Repository:  Centralized,  virtual  storage  system.  Implemented   by  storage.  Also  used  for  binary  files. • Domain  Object  (aka  DO):  High  level  PHP  object  exposed  in   public  API:  Content,  Loca'on,  Field,  etc. • Service:  Interac'on  components  from  the  Business  Layer:   Content,  Loca'on,  etc. samedi 15 octobre 11
  • 16. Legacy  Storage  Engine • eZ  Publish  4  database  Persistence  Layer  implementa'on   • Implemented  from  scratch.  Shiny  ! • Uses  the  Zeta  Components  (ezcDatabase  +  ezcQuery) • Tested  to  be  two-­‐ways  compa/ble  with  eZ  Publish  4: ➡ content  created  from  ezp4  is  available  in  the  API ➡ content  created  from  the  API  is  available  in  ezp4 • No  migra/on  required  ! samedi 15 octobre 11
  • 17. Code  ! That’s  why  we’re  here,  right  ? samedi 15 octobre 11
  • 19. Create  content <?php use ezpBaseServiceContainer,     ezpBaseConfiguration,     ezpContentFieldTypeUrl; // Get the repository, and configure the user to use $sc = new ServiceContainer( Configuration::getInstance( 'service' )->getAll() ); $repository = $sc->getRepository(); $contentService = $repository->getContentService(); $repository->setUser( $repository->getUserService()->load( 14 ) ); // Build a new folder // $folder will be a DO, ezpContent $folder = $contentService->init( 'folder', 'eng-GB' ); $folder->fields['name'] = 'News'; $folder->fields['description'] = '<p>My <strong>ubber cool</strong> description !</p>'; $folder->fields['link'] = new UrlValue( 'http://ez.no', 'eZ Systems' ); $folder->addParent( $repository->getLocationService()->load( 2 ) ); $folder = $contentService->create( $folder ); $contentService->publish( $folder->versions[1] ); samedi 15 octobre 11
  • 20. Load  content <?php use ezpBaseServiceContainer,     ezpBaseConfiguration; $sc = new ServiceContainer( Configuration::getInstance( 'service' )->getAll() ); $repository = $sc->getRepository(); $contentService = $repository->getContentService(); try {     $content = $contentService->load( 60 ); } catch ( ezpBaseExceptionNotFound $e ) {     echo "Content could not be found in the repository !n";     exit; } // Loop against fields. // $identifier is the attribute identifier // $value is the corresponding value object echo "Content '{$content}' has following fields:n"; foreach ( $content->fields as $identifier => $value ) {     echo "Field '{$identifier}': {$value}n"; // Using $value __toString() } samedi 15 octobre 11
  • 21. Fetch  content <?php use ezpBaseServiceContainer,     ezpBaseConfiguration,     ezpContent,     ezpContentQuery; $sc = new ServiceContainer( Configuration::getInstance( 'service' )->getAll() ); $qb = new ezpContentQueryBuilder; $contentService = $sc->getRepository()->getContentService(); // a full criteria $qb->addCriteria(     $qb->fullText->like( 'eZ Publish' ),     $qb->urlAlias->like( '/cms/amazing/*' ),     $qb->contentType->eq( 'blog_post' ),     $qb->field->eq( 'author', 'community@ez.no' ) )->addSortClause(     $qb->sort->field( 'blog_post', 'title', Query::SORT_ASC ),     $qb->sort->dateCreated( Query::SORT_DESC ) )->setOffset( 0 )->setLimit( 10 ); $contentList = $contentService->find( $qb->getQuery() ); samedi 15 octobre 11
  • 22. Field  types • Now  spliUed  in  (at  least)  2  objects: • Type • Value • Dedicated  PHP  namespace • Interfaces  to  determine  which  features  the  field  type   implement  (Searchable,  Collectable...) • Converters  for  Legacy  storage  engine samedi 15 octobre 11
  • 23. Roadmap • Full  language/transla'on  support • Finish  migra'ng  datatypes • HTTP  layer  +  modules • REST  API  implementa'on  based  on  the  new  API • Op'mized  storage  engines samedi 15 octobre 11
  • 24. Now  it’s  your  turn  ! •Get it : http://github.com/ezsystems/ezp-next •Blame it : http://issues.ez.no/ezpublish (ezpnext component) •Discuss it : http://share.ez.no/forums/new-php-api •Own it : Make a GitHub pull request ! Soon to come: wiki based cookbook, blog posts. samedi 15 octobre 11