Invoking the Assembler from within a page, using a servlet bean, allows the call to the Assembler to occur on a just-in-time basis for the portion of the page that requires Assembler-served content. This approach is desirable when only a small portion of the page requires Assembler content. This guide refers to these pages as “Nucleus-driven pages.”
The request-handling architecture for an Nucleus-driven JSP page looks like this:

In this diagram, the following happens:
The JSP page code calls the
InvokeAssembler
servlet bean and passes it either theincludePath
parameter, for a page request, or thecontentCollection
parameter, for a content folder request.The
InvokeAssembler
servlet bean parses theincludePath
orcontentCollection
parameter into a request object, in the form of aRedirectAwareContentInclude
object (for a page) or aContentSlotConfig
object (for a content folder). Then, theInvokeAssembler
servlet bean calls theinvokeAssembler()
method on the/atg/endeca/assembler
/AssemblerTools
component and passes it the request object it created.The
AssemblerTools
component invokes thecreateAssembler()
method on the/atg/endeca/assembler
/NucleusAssemblerFactory
component.The
NucleusAssemblerFactory
component returns anatg.endeca.assembler.NucleusAssembler
instance.The
AssemblerTools
component invokes theassemble()
method on theNucleusAssembler
instance and passes it the request object. The handler for the request object (which may be theRedirectAwareContentIncludeHandler
orContentSlotConfigHandler
, depending on the type of request object passed in) resolves a connection to the Workbench and/or the MDEX. For page requests, the handler also invokes a series of other components that transform the request URL into a URI that contains the path to the page in Experience Manager.The
NucleusAssembler
instance assembles the correct content for the request URI. Content, in this case, corresponds to a hierarchical set of cartridges and their associated data. For each cartridge, the content starts with any default data that was specified in the Experience Manager cartridge configuration files when the cartridge was added to the page. That data is further modified and augmented with any data stored in the Oracle Commerce Configuration Repository (that is, changes made and saved via the Experience Manager UI).Next, the
NucleusAssembler
instance calls theNucleusAssembler.getCartridgehandler()
method, passing in the cartridge’sContentItem
type, to retrieve the correct handler for the cartridge. The handler gets resolved and executed and the results are stored in the cartridge’s associatedContentItem
. This process happens recursively so that the assembled content takes the form of a responseContentItem
that consists of a rootContentItem
which may have sub-ContentItem
objects as attributes.Note: If a cartridge handler does not exist for a
ContentItem
, the initial version of the item, created in step 6, is returned.The
NucleusAssembler
instance returns the rootContentItem
to theAssemblerTools
component.The
AssemblerTools
component returns the rootContentItem
to theInvokeAssembler
servlet bean.When the
ContentItem
is not empty, theInvokeAssembler
servlet bean’soutput
oparam is rendered. In this example, we assume that theoutput
oparam uses adsp:renderContentItem
tag to call the/atg/endeca/assembler/cartridge/renderer/ContentItemToRendererPath
component to get the path to the JSP renderer for the rootContentItem
. However, choosing when and how many times to invokedsp:renderContentItem
depends on what the application needs to do. It may make sense to invokedsp:renderContentItem
for the rootContentItem
, and then recursively invokedsp:renderContentItem
for all the sub-ContentItems
via additionaldsp:renderContentItem
tags. Alternatively, you could take a more targeted approach where you invokedsp:renderContentItem
for individual sub-ContentItems
as needed.Note that the
dsp:renderContentItem
tag also sets thecontentItem
attribute on theHttpServletRequest
, thereby making theContentItem
available to the renderers. This value lasts for the duration of theinclude
only.The
ContentItemToRendererPath
component returns the correct renderer for theContentItem
.The JSP returned by
ContentItemToRendererPath
is included in the response.The response is returned to the browser.