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

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
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
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
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
 

Recently uploaded (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
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...
 

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