SlideShare a Scribd company logo
1 of 24
Download to read offline
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

More Related Content

What's hot

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)
Perl On The JVM (London.pm Talk 2009-04)Ben Evans
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesRoman Elizarov
 
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...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...mfrancis
 
Neutrondev ppt
Neutrondev pptNeutrondev ppt
Neutrondev pptmarunewby
 
LNUG - A year with AWS
LNUG - A year with AWSLNUG - A year with AWS
LNUG - A year with AWSAndrew Clarke
 
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...
Scylla Summit 2018: Rebuilding the Ceph Distributed Storage Solution with Sea...ScyllaDB
 
Developing apps and_integrating_with_gluster_fs_-_libgfapi
Developing apps and_integrating_with_gluster_fs_-_libgfapiDeveloping apps and_integrating_with_gluster_fs_-_libgfapi
Developing apps and_integrating_with_gluster_fs_-_libgfapiGluster.org
 
Kkeithley ufonfs-gluster summit
Kkeithley ufonfs-gluster summitKkeithley ufonfs-gluster summit
Kkeithley ufonfs-gluster summitGluster.org
 
Modern Java Concurrency
Modern Java ConcurrencyModern Java Concurrency
Modern Java ConcurrencyBen Evans
 
Lcna example-2012
Lcna example-2012Lcna example-2012
Lcna example-2012Gluster.org
 
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)
F19 slidedeck (OpenStack^H^H^H^Hhift, what the)Gerard Braad
 
Nsq & python worker
Nsq & python workerNsq & python worker
Nsq & python workerFelinx Lee
 
QueryPath, Mash-ups, and Web Services
QueryPath, Mash-ups, and Web ServicesQueryPath, Mash-ups, and Web Services
QueryPath, Mash-ups, and Web ServicesMatt Butcher
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platformRuslan Shevchenko
 
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...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...mfrancis
 
Gluster d thread_synchronization_using_urcu_lca2016
Gluster d thread_synchronization_using_urcu_lca2016Gluster d thread_synchronization_using_urcu_lca2016
Gluster d thread_synchronization_using_urcu_lca2016Gluster.org
 
Apache HTTPd Server 2.2 Presentation
Apache HTTPd Server 2.2 PresentationApache HTTPd Server 2.2 Presentation
Apache HTTPd Server 2.2 Presentationultimatetux
 

What's hot (20)

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)
Perl On The JVM (London.pm Talk 2009-04)
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
 
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...
Remote Management and Monitoring of Distributed OSGi Applications - Tim Verbe...
 
Neutrondev ppt
Neutrondev pptNeutrondev ppt
Neutrondev ppt
 
mogpres
mogpresmogpres
mogpres
 
Network concepts
Network conceptsNetwork concepts
Network concepts
 
LNUG - A year with AWS
LNUG - A year with AWSLNUG - A year with AWS
LNUG - A year with AWS
 
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...
Scylla Summit 2018: Rebuilding the Ceph Distributed Storage Solution with Sea...
 
Developing apps and_integrating_with_gluster_fs_-_libgfapi
Developing apps and_integrating_with_gluster_fs_-_libgfapiDeveloping apps and_integrating_with_gluster_fs_-_libgfapi
Developing apps and_integrating_with_gluster_fs_-_libgfapi
 
Kkeithley ufonfs-gluster summit
Kkeithley ufonfs-gluster summitKkeithley ufonfs-gluster summit
Kkeithley ufonfs-gluster summit
 
Modern Java Concurrency
Modern Java ConcurrencyModern Java Concurrency
Modern Java Concurrency
 
Lcna example-2012
Lcna example-2012Lcna example-2012
Lcna example-2012
 
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)
F19 slidedeck (OpenStack^H^H^H^Hhift, what the)
 
Nsq & python worker
Nsq & python workerNsq & python worker
Nsq & python worker
 
YDAL Barcelona
YDAL BarcelonaYDAL Barcelona
YDAL Barcelona
 
QueryPath, Mash-ups, and Web Services
QueryPath, Mash-ups, and Web ServicesQueryPath, Mash-ups, and Web Services
QueryPath, Mash-ups, and Web Services
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platform
 
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...
OSGi with Docker - a powerful way to develop Java systems - Udo Hafermann (So...
 
Gluster d thread_synchronization_using_urcu_lca2016
Gluster d thread_synchronization_using_urcu_lca2016Gluster d thread_synchronization_using_urcu_lca2016
Gluster d thread_synchronization_using_urcu_lca2016
 
Apache HTTPd Server 2.2 Presentation
Apache HTTPd Server 2.2 PresentationApache HTTPd Server 2.2 Presentation
Apache HTTPd Server 2.2 Presentation
 

Viewers also liked

颐信科技有限公司
颐信科技有限公司颐信科技有限公司
颐信科技有限公司ecguard
 
Puerto Colombia en fotos.
Puerto Colombia en fotos.Puerto Colombia en fotos.
Puerto Colombia en fotos.nayibe1
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospectivechenge2k
 
The Next Evolution - Accelerating Toward Abundance
The Next Evolution - Accelerating Toward AbundanceThe Next Evolution - Accelerating Toward Abundance
The Next Evolution - Accelerating Toward AbundanceDavid Kish
 

Viewers also liked (7)

颐信科技有限公司
颐信科技有限公司颐信科技有限公司
颐信科技有限公司
 
Tbja flyer
Tbja flyerTbja flyer
Tbja flyer
 
Puerto Colombia en fotos.
Puerto Colombia en fotos.Puerto Colombia en fotos.
Puerto Colombia en fotos.
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospective
 
Symfony and eZ Publish
Symfony and eZ PublishSymfony and eZ Publish
Symfony and eZ Publish
 
eZ Publish 5 in depth inspection
eZ Publish 5 in depth inspectioneZ Publish 5 in depth inspection
eZ Publish 5 in depth inspection
 
The Next Evolution - Accelerating Toward Abundance
The Next Evolution - Accelerating Toward AbundanceThe Next Evolution - Accelerating Toward Abundance
The Next Evolution - Accelerating Toward Abundance
 

Similar to eZ Publish nextgen

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
Ruby on Rails (RoR) as a back-end processor for Apex Espen Brækken
 
What's brewing in the eZ Systems extensions kitchen
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
 
Open Source Storage at Scale: Ceph @ GRNET
Open Source Storage at Scale: Ceph @ GRNETOpen Source Storage at Scale: Ceph @ GRNET
Open Source Storage at Scale: Ceph @ GRNETNikos Kormpakis
 
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 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci...44CON
 
Openstack – An introduction
Openstack – An introductionOpenstack – An introduction
Openstack – An introductionMuddassir Nazir
 
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...
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...Pôle Systematic Paris-Region
 
Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Florent Guillaume
 
SQL Queries on Smalltalk Objects
SQL Queries on Smalltalk ObjectsSQL Queries on Smalltalk Objects
SQL Queries on Smalltalk ObjectsESUG
 
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"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"IT Event
 
Openstack In Real Life
Openstack In Real LifeOpenstack In Real Life
Openstack In Real LifePaul Guth
 
Eclipse Apricot
Eclipse ApricotEclipse Apricot
Eclipse ApricotNuxeo
 
Workflow Engines for Hadoop
Workflow Engines for HadoopWorkflow Engines for Hadoop
Workflow Engines for HadoopJoe Crobak
 
Ext osad initial-eval-march2015
Ext osad initial-eval-march2015Ext osad initial-eval-march2015
Ext osad initial-eval-march2015Daneyon Hansen
 
VASCAN - Docker and Security
VASCAN - Docker and SecurityVASCAN - Docker and Security
VASCAN - Docker and SecurityMichael Irwin
 
Demistifying open stack storage
Demistifying open stack storageDemistifying open stack storage
Demistifying open stack storageopenstackindia
 
Lamp Introduction 20100419
Lamp Introduction 20100419Lamp Introduction 20100419
Lamp Introduction 20100419Vu Hung Nguyen
 
eZ publish 5[-alpha1] Introduction & Architecture
eZ publish 5[-alpha1] Introduction & ArchitectureeZ publish 5[-alpha1] Introduction & Architecture
eZ publish 5[-alpha1] Introduction & ArchitectureAndré Rømcke
 
Cncf storage-final-filip
Cncf storage-final-filipCncf storage-final-filip
Cncf storage-final-filipJuraj Hantak
 
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 Day Santa Clara: Ceph and Apache CloudStack Ceph Community
 
A 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 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 1Dobler Consulting
 

Similar to eZ Publish nextgen (20)

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
Ruby on Rails (RoR) as a back-end processor for Apex
 
What's brewing in the eZ Systems extensions kitchen
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
 
Open Source Storage at Scale: Ceph @ GRNET
Open Source Storage at Scale: Ceph @ GRNETOpen Source Storage at Scale: Ceph @ GRNET
Open Source Storage at Scale: Ceph @ GRNET
 
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 2014 - Pentesting NoSQL DB's Using NoSQL Exploitation Framework, Franci...
 
Openstack – An introduction
Openstack – An introductionOpenstack – An introduction
Openstack – An introduction
 
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...
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...
 
Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)
 
SQL Queries on Smalltalk Objects
SQL Queries on Smalltalk ObjectsSQL Queries on Smalltalk Objects
SQL Queries on Smalltalk Objects
 
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"
Leonid Vasilyev "Building, deploying and running production code at Dropbox"
 
Openstack In Real Life
Openstack In Real LifeOpenstack In Real Life
Openstack In Real Life
 
Eclipse Apricot
Eclipse ApricotEclipse Apricot
Eclipse Apricot
 
Workflow Engines for Hadoop
Workflow Engines for HadoopWorkflow Engines for Hadoop
Workflow Engines for Hadoop
 
Ext osad initial-eval-march2015
Ext osad initial-eval-march2015Ext osad initial-eval-march2015
Ext osad initial-eval-march2015
 
VASCAN - Docker and Security
VASCAN - Docker and SecurityVASCAN - Docker and Security
VASCAN - Docker and Security
 
Demistifying open stack storage
Demistifying open stack storageDemistifying open stack storage
Demistifying open stack storage
 
Lamp Introduction 20100419
Lamp Introduction 20100419Lamp Introduction 20100419
Lamp Introduction 20100419
 
eZ publish 5[-alpha1] Introduction & Architecture
eZ publish 5[-alpha1] Introduction & ArchitectureeZ publish 5[-alpha1] Introduction & Architecture
eZ publish 5[-alpha1] Introduction & Architecture
 
Cncf storage-final-filip
Cncf storage-final-filipCncf storage-final-filip
Cncf storage-final-filip
 
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 Day Santa Clara: Ceph and Apache CloudStack
 
A 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 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
 

Recently uploaded

#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 

Recently uploaded (20)

DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 

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