The 5.7 branch of Magnolia reached End-of-Life on December 31, 2023, as specified in our End-of-life policy. This means the 5.7 branch is no longer maintained or supported. Please upgrade to the latest Magnolia release. By upgrading, you will get the latest release of Magnolia featuring significant improvements to the author and developer experience. For a successful upgrade, please consult our Magnolia 6.2 documentation. If you need help, please contact info@magnolia-cms.com.

The module handles publishing of content from an author instance to a public instance. In the Enterprise Edition of Magnolia, the functionality of this module is extended by the Publishing Transactional module (in Magnolia EE), which ensures synchronization of content between multiple public instances.

By bringing a neater and more logical structure for the publishing (activation) functions, the Publishing module is a convenient replacement for the former Activation module.

The bundles and webapps in this Magnolia branch are by default provided with the Publishing module. However, using Activation is still possible, but only after replacing the Publishing module and the Publishing Transactional module with the Activation module and the Transactional Activation module.

Module structure

The module (parent) consists of four submodules. All of the submodules are required for correct functioning of the publishing feature.

artifactID

magnolia-publishing-parent

Parent reactor.

magnolia-publishing-core

Provides the main functionality.

magnolia-publishing-sender

Handles send operations to the public instance.

magnolia-publishing-receiver

Handles receive requests on the public instance.

magnolia-publishing-app

Generates new publishing keys and provides a publishing monitor.

Installing

Maven is the easiest way to install the module. Add the following to your bundle. The parent POM of your webapp project should set the latest version of the module automatically. Should you need to use a specific module version, you can define it using the <version/> in the dependency.

<dependency>
  <groupId>info.magnolia.publishing</groupId>
  <artifactId>magnolia-publishing-core</artifactId>
</dependency>
<dependency>
  <groupId>info.magnolia.publishing</groupId>
  <artifactId>magnolia-publishing-sender</artifactId>
</dependency>
<dependency>
  <groupId>info.magnolia.publishing</groupId>
  <artifactId>magnolia-publishing-receiver</artifactId>
</dependency>
<dependency>
  <groupId>info.magnolia.publishing</groupId>
  <artifactId>magnolia-publishing-app</artifactId>
</dependency>

Configuration

Publishing is configured in Configuration > /modules/publishing-core .

Please be very careful when modifying the configuration of publishing and always test the changes thoroughly before applying them to a live environment. Sometimes there may exist a better way of solving a publishing-related problem than by tweaking a publishing configuration.

Main part

The main part of the configuration is under  /modules/publishing-core/config .

Node name

 
modules

 
publishing-core

 
config

    

 
publicationByPathVoters

    

 
publishingLogStorage

    

 
receivers

    

 
operations

publicationByPathVoters 

Sets publication by path (default is by uuid) to configured workspaces.

Node nameValue

 
publicationByPathVoters


    

 
op

OR

    

 
config


        

 
op

AND

        

 
mgnlExchangeWorkspaceName


            

 
pattern

config

            

 
keyName

mgnlExchangeWorkspaceName

            

 
class

info.magnolia.publishing.voter.MapKeyPatternVoter

        

 
1stAnd2ndLevelNodes


            

 
op

OR

            

 
class

info.magnolia.voting.voters.VoterSet

            

 
mgnlExchangeParentPath


                

 
pattern

^\/[^\/]*$

                

 
keyName

mgnlExchangeParentPath

                

 
class

info.magnolia.publishing.voter.MapKeyPatternVoter

            

 
mgnlExchangePath


                

 
pattern

^\/[^\/]*(\/[^\/]*)?$

                

 
keyName

mgnlExchangePath

                

 
class

info.magnolia.publishing.voter.MapKeyPatternVoter

    

 
resources


        

 
workspace


            

 
pattern

resources

            

 
keyName

mgnlExchangeWorkspaceName

            

 
class

info.magnolia.publishing.voter.MapKeyPatternVoter

publishingLogStorage

Defines where the information about publishing is logged. The default implementation MemoryActivationStorage keeps the information in memory.

Node nameValue

 
publishingLogStorage


 
class

info.magnolia.publishing.monitor.MemoryPublishingStorage

receivers

Contains the list of receivers ( subscribers in the Activation module) where content will be published.

Node nameValue

 
receivers


    

 
magnoliaPublic8080


        

 
url

http://localhost:8080/magnoliaPublic

        

 
enabled

true

operations

Contains the list of operations provided by Magnolia and the respective operation classes:

  • publish ( activate )
  • unpublish ( deactivate )
  • commit (EE only)
  • rollback (EE only)

    You can define your own operations and add them to the list, but in this case you will also have to implement your own send and receive operations. The SendOperation is a base interface that all send operations must implement.

    With a custom-defined operation you can publish content to something that is not a Magnolia public instance, for example to a custom API or a Content Delivery Network.

Node nameValue

 
operations


    

 
publish


        

 
receiveOperationClass

info.magnolia.publishing.transactional.receiver.operation.jcr.JcrTransactionPublicationOperation

        

 
sendOperationClass

info.magnolia.publishing.sender.operation.HttpPublicationOperation

    

 
unpublish


        

 
receiveOperationClass

info.magnolia.publishing.transactional.receiver.operation.jcr.JcrTransactionUnpublicationOperation

        

 
sendOperationClass

info.magnolia.publishing.sender.operation.HttpUnpublicationOperation

    

 
activate


        

 
receiveOperationClass

info.magnolia.publishing.transactional.receiver.operation.jcr.JcrTransactionPublicationOperation

    

 
deactivate


        

 
receiveOperationClass

info.magnolia.publishing.transactional.receiver.operation.jcr.JcrTransactionUnpublicationOperation

    

 
commit


        

 
receiveOperationClass

info.magnolia.publishing.transactional.receiver.operation.jcr.JcrCommitOperation

        

 
sendOperationClass

info.magnolia.publishing.transactional.sender.operation.HttpCommitOperation

    

 
rollback


        

 
receiveOperationClass

info.magnolia.publishing.transactional.receiver.operation.jcr.JcrRollbackOperation

        

 
sendOperationClass

info.magnolia.publishing.transactional.sender.operation.HttpRollbackOperation

lockManagerMode property

The property has been introduced with module version 1.1.9. By default, path-based locking is configured using lockManagerMode=path. Node-based locking can be set with lockManagerMode=compatibility.

The setting is applicable only on public instances. Changing the property on the author instance has no effect.

Publish and unpublish commands

Users typically publish content by clicking Publish in the Action bar. The click executes a publish  command which pushes the content from the author instance to the public instance(s). Conversely, when users click  Unpublish  the system executes an unpublish command which deletes the content from the public instance(s).

The publish and unpublish commands are configured in /modules/publishing-core/commands . The default catalog contains the commands which just publish the content without versioning. Magnolia also provides a versioned command catalog. It contains identically named publish and unpublish commands which first version the content and then delegate to the default commands.

Both in the default catalog and in the versioned catalog, the command tree contains also the activate and deactivate commands (not shown below), which extend the publish and unpublish commands, respectively. The two commands are included in the configuration for compatibility reasons.  

Node nameValue

 
modules


 
publishing-core


 
commands


 
default


 
publish


 
class

info.magnolia.publishing.command.PublicationCommand

 
unpublish


 
class

info.magnolia.publishing.command.UnpublicationCommand

 
versioned


 
publish


 
version


 
class

info.magnolia.commands.impl.VersionCommand

 
enabled

true

 
publish


 
class

info.magnolia.commands.DelegateCommand

 
commandName

default-publish

 
unpublish


 
version


 
class

info.magnolia.commands.impl.VersionCommand

 
enabled

true

 
unpublish


 
class

info.magnolia.commands.DelegateCommand

 
commandName

default-unpublish

To use one of these commands, define the catalog and the command name in the action definition. See an example in Executing commands with actions.

Disabling publishing

If necessary, you can disable publishing on the public instance(s) by adding the enabled node in Configuration > /server/filters/publishing and set its value to false .

How publishing works

For an overview of how publishing works see the Publishing overview page.

Troubleshooting