The right tools for the right jobs

Jahia's architecture at a glance

Jahia is based on 3 main components:
  • A polyglot CMS (Content Management System), where developers can deploy modules written in JavaScript or Java
  • A CDP or Customer Data Platform, based on Apache Unomi, with a UI for analytics, personalization & segmentation
  • A fantastic integration with Elasticsearch for full-text search

Hybrid Headless (Head-optional) 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 CMS with Java 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

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.2.0.3

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

# Install a template set
- installBundle:
    - 'npm:mvn:org.jahia.modules.npm/luxe-jahia-demo/0.2.0/tgz'
    - 'mvn:org.jahia.modules/luxe-prepackaged-website'
  autoStart: true
  uninstallPreviousVersion: true
# Import a site
- importSite: "jar:mvn:org.jahia.modules/luxe-prepackaged-website/0.2.0/zip/import!/luxe.zip"

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/>
    });

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

Want to know more? 

Talk to our experts