CMS or DXP, headless or head-on, your choice

Jahia's architecture at a glance

Here is a very high level overview of Jahia DXP architecture. It is made of the following  components:
  • A CMS (Content Management System or Platform), where Java code (Jahia modules) can be deployed, with a GraphQL API on top
  • A CDP or Customer Data Platform, based on Apache Unomi, with a UI for analytics, personalization, segmentation & much more
  • A great and deep integration with Elasticsearch for full text search

Headless Java CMS

Manage content types, create content and access it via GraphQL API
  • Powerful content modeling capabilities, with support for composition and inheritance across content types, based on Apache Jackrabbit (JCR implementation)
  • Built-in and extendable GraphQL API. Available to read content but also for write or admin operations.
query highlightTitle {
  jcr {
    nodeByPath(
      path: "/sites/digitall/home/area-main/highlights/our-companies"
    ) {
      title: property(language: "en", 
                      name: "jcr:title") {
        value
      }
    }
  }
}

Modulith: A proven alternative to micro services

Extend our platform in any way you’d like, to cover the most demanding requirements
  • Extend Jahia content management system with modules, which are OSGi bundles 
  • OSGi and its Apache Karaf implementation available in Jahia offers hot deployment, dependency management, isolation, and ready-made tools for extensions or new functionality
  • Declare any custom logic, including:
    • Java services
    • Rules using Drools extensible rules engine
    • JSP, tags and filters if you’re using the presentation layer
    • UI extensions
    • Permissions 

Declare new Java services easily using OSGi 

@Component(service = SimpleService.class)
public class SimpleServiceImpl implements SimpleService {

    @Override
    public String sayHello() {
        return "Hello Jahia!";
    }
}

Consume any service using OSGi:

@Reference
public void setSimpleService(SimpleService simpleService) {
   this.simpleService = simpleService;
}

Service consumer and implementation may be in different modules, for maximum flexibility.

Full text search API 

Deep integration with Elasticsearch, for world-class search experiences
  • Search fully integrated with content modeling, preview, publication, permissions, page based search
  • Available via GraphQL API endpoint
  • Great relevance out of the box, instant search, facets, document indexing
  • Java services available if backend integration needed
  • Federated search and ability to index external content

Use our GraphQL API for full text search as well:

query {
  search(
    q: "searched terms"
    language: "en"
    siteKeys: ["mySite1", "mySite2"]
    searchIn: [CONTENT]
    workspace: LIVE
  ) {
    results {
      hits {
        displayableName
      }
    }
  }
}

Content Integrations

Several integration patterns to integrate with DAM, PIM or any other system hosting content or assets
  • The External Data Provider provides a Java framework allowing the integration of external systems as content providers. Any external content can be managed and authored as if it were hosted in Jahia.
  • Custom Java services can be built to make calls to external systems. 
  • Jahia UI can be heavily extended to make integrations directly from the front-end
  • Out of the box connectors available for Widen, Akeneo, Siteimprove and more

A simple presentation layer, if you need one

Jahia provides a presentation layer, a “head” that you can use to build complete web pages or access HTML fragments
  • Build JSP "views” using provided tag libraries  to transform any content type to HTML 
  • Access HTML through complete web pages or fragments using the GraphQL API
  • Deploy-free coding means changes in your views (JSP, CSS, Javascript files) are recognized as soon as you make them, directly from the source code without needing to deploy anything
  • Fragment-based HTML cache ensures content is regenerated only when needed using smart dependency analysis and scoped invalidation, including integration with fragment access control
  • Maintain top performance on high-traffic websites with our multi-layered caching subsystem
  • Content Delivery Network (CDN) compliant websites that can be delivered with Cloudflare or Cloudfront

JSP to display the title of a content item:

<jcr:nodeProperty node="${currentNode}" 
                  name="jcr:title" 
                  var="newsTitle"/>

<h2>${newsTitle.string}</h2>

Devops ready

Automate any deployment
  • Open and extensible images (OCI/Docker) for development, QA or production purposes
  • The provisioning API can be used to handle all operations allowing a fresh Jahia instance to reach production. It can install and configure modules, import and  install sites, execute scripts and more.
  • When images and the provisioning API are used jointly, Jahia becomes fully usable in an infrastructure-as-code environment (using Terraform, CI/CD toolings or other)

Run Jahia using docker

docker run -p 8080:8080 jahia/jahia-ee:8.1.2.3

Installing a module  and activating it on a site using our provisioning API

# Install Kibana Dashboards
- installBundle:
  - 'mvn:org.jahia.modules/kibana-dashboards-provider/0.3.0'
  - 'mvn:org.jahia.modules/jexperience-dashboards'
  autoStart: true
  uninstallPreviousVersion: true

Extendable UI in React

Many extensions points are available to enrich our UI!
  • Jahia’s UI is fully extensible
  • Global component registry is used to add new navigation entries, Content Editor selectors, menu items, ..
  • Javascript packaging uses Webpack module federation
  • Leverage Jahia’s existing UI components (Moonstone)  to build your own without having to start from scratch

Example of registering a new UI component with React.js:


registry.add('adminRoute', 'contentReleaseManager', {
        targets: ['jcontent:50'],
        icon: <Rocket/>,
        label: 'content-releases:label.appsAccordion.title',
        isSelectable: true,
        requireModuleInstalledOnSite: 'content-releases',
        requiredPermission: 'contentReleaseManager',
        render: () => <ContentReleaseManagerCmp/>
    });

A comprehensive SDK for Next.js

A complete SDK  for Next.js, covering content and customer data. Including a Jahia ⇔ Next.js proxy to ease authoring experience.
  • WYSIWYG and on-page authoring experience for editors

  • Visual page tree & site structure management

  • Live, preview (before publication) and edit modes integrated by default

  • Tracking available for page views, clicks, forms, searches and custom events 

Authentication & permissions

Everything you can expect from an enterprise platform
  • Comprehensive solutions for authentication with built-in support to connect to LDAP, SSO, SAML & OAuth 
  • Granular roles and permissions to define exactly what users and groups can access across the platform, for a site or even for a page or a content item
  • Same logic is also leveraged to manage authenticated experiences and give specific access to pages, APIs and content to your customers or suppliers
  • Fully and transparently integrated with front-end and backend caches

High level overview of the Jahia authentication modules:

image1.png

Customer Data infrastructure & APIs

Built-in real time Customer Data Platform based on Apache Unomi 
 
  • Public customer data API for current visitor tracking (1st party cookie based)
  • GraphQL API for personalized content & AB Tests
  • Profile stitching using login events
  • Built in and customizable analytics, using Elasticsearch Kibana
  • Private / admin customer data REST API for data aggregation, custom event type declaration, rules and actions deployment
  • Simple yet powerful data model: access profiles, sessions and events. Store and access data for any form, survey, quiz, funnel in real time.

Track events in javascript and record it in our built-in CDP:

// Creation of the event
const source = wem.buildSourcePage()
const target = wem.buildTarget('startQuizzLink', 'a')
const newEvent = wem.buildEvent('click', target, source)

// Submission of the event
wem.collectEvent(newEvent)

Access visitor profile data using the REST API:

curl --location --request GET 'http://localhost:8181/cxs/profiles/PROFILE_UUID' \
--header 'Authorization: Basic xxxxxx' 

Customer data integrations

Jahia DXP comes with “StackConnect”, a comprehensive connector to Workato. Workato is a leading Integration Platform As A Service (iPaas), and connectors are included in the Jahia DXP Cloud subscription. 
  • No-code integrations using Workato
  • 400+ connectors with CRM, Marketing Automation and email marketing platforms
  • Bi-directional integrations to enrich visitor profile or push any data collected from behaviors or forms
  • Fully custom integrations using Apache Unomi rules and Groovy actions are also possible
     
workato-stackconnect.png

A real commitment to open source 

Jahia has a long and friendly relationship with Open Source.
  • Jahia CMS is open core, most of the code that we produce is using Apache or MIT license
  • Jahia has initiated and is still heavily contributing to the Apache Unomi project
  • It is possible to try Jahia using our community edition and our public Docker images

Cloud & security

Jahia Cloud, the fully managed global  Digital Experience Platform 
  • Self-service Cloud management UI, create, duplicate, backup, restore or scale any environment in a few clicks
  • Platform as a Service (PaaS) with strict data segregation between tenants: leverage the flexibility of a dedicated environment without paying for a custom managed service and without compromising security
  • Always up-to-date infrastructure - security patches deployed quickly and silently for you. Your DXP always runs the latest version
  • 0-downtime operations: blue/green deployments in a few clicks
  • Benefit from 24/7/365 Support and highly available infrastructures that are replicated across several data centers
    ISO 27001 and HIPAA compliance at all layers

Want to know more? 

Talk to our experts

Contact Stéphane

IMG_5982.png
 

Stéphane has been working in the CMS industry for 15 years. He knows Jahia inside out is happy to share his knowledge with anyone wanting to learn. 

 

Contact Hervé

duchesne.jpeg
 

Hervé is a solution architect and does regular contributions toi Jahia codebase. He knows a lot about headless, APIs, Next.js and many technologies relevant to websites and Digital Experiences.