Конвейер — это исполнительный механизм, позволяющий выполнять модульный код. Oracle ATG Web Commerce использует конвейеры для выполнения таких задач, как загрузка, сохранение и проверка заказов. PipelineManager реализует механизм выполнения конвейера.
Dynamo использует два конвейера обработки запросов.
• Конвейер сервлетов DAF — используется для обработки запроса JSP.
• Конвейер сервлетов DAS — используется для обработки запросов JHTML. Поскольку JHTML является проприетарным языком, он использует компилятор страниц, предоставленный в конвейере сервлетов DAS, для генерации JHTML в сервлет, который обрабатывается сервером приложений как HTML.
А также есть что-то под названием commercePipeline, которое занимается обработкой заказов.
Конвейеры обработки запросов и коммерческие конвейеры работают по-разному.
DAS/DAF (т. е. конвейеры запросов)
Это конфигурация, определяемая серией сервлетов, выполняемых последовательно на основе вывода каждого сервлета. Одной из наиболее важных задач Dynamo является обработка HTTP-запросов. При обработке этих запросов Dynamo использует отслеживание сеансов, компиляцию страниц, Java Server Pages и другие мощные расширения базовой модели веб-сервера. Обычно обработку запросов можно разбить на ряд независимых шагов. Каждый шаг может зависеть от наличия дополнительной информации о запросе, поэтому порядок имеет значение. Однако отдельные этапы можно разделить. Например, типичный запрос может пройти следующие этапы:
1) Сравните URI запроса со списком каталогов с ограниченным доступом, чтобы убедиться, что у пользователя есть разрешение на доступ к указанному каталогу.
2) Преобразуйте URI запроса в реальное имя файла, принимая во внимание «индексные» файлы, когда имя файла относится к каталогу.
3) Учитывая расширение имени файла, определите MIME-тип файла.
4) Из типа MIME отправьте запрос соответствующему обработчику.
Таким образом, конвейеры DAF/DAS вступают в игру, когда есть запрос. В atg_bootstrap.war web.xml есть информация о запуске сервера.
Когда сервер запускается, NucleusServlet.java загружается на сервер приложений. Этот класс инициализирует ядро и другие компоненты, а затем добавляет их все в пространство имен ядра. А при доступе к веб-приложению (DynAdmin,CRS,MotopriseJSP) ядро направляет поток на конвейер daf/das. Если тип MIME приложения — Jhtml, конвейер обрабатывает запрос дальше. Он направляется в класс DynamoProxyServlet, где выполняет дальнейшую обработку, вызывая список сервлетов. И если это .jsp, то конвейер Daf обрабатывает дальнейшие запросы, вызывая класс PageFilter. Причина использования фильтра, а не сервлета для вызова конвейера DAF:
Страницы и фрагменты JSP обрабатываются сервером приложений, что означает, что JBoss, WebLogic, WebSphere отвечают за компиляцию и выполнение результирующего кода страницы. Лучший способ подключиться к этому процессу — использовать фильтр. Для страниц JHTML это другая история, поскольку сервер приложений (не все серверы приложений) не может анализировать и компилировать страницы. Сервлет используется для перенаправления запроса вниз по конвейеру DAS, где страница может быть проанализирована и выполнена механизмом компиляции страницы ATG.
В случае Commerce Pipeline:
Pipeline Manager реализует функции коммерческого конвейера, читая файл определения конвейера, т. е. commercepipeline.xml. Когда приложение развернуто, Nucleus инициализирует механизм ценообразования, где OrderManager инициализирует конвейерный менеджер. Метод OrderManager.processOrder вызывает цепочки конвейеров в commercepipeline.xm. Цепочка конвейеров будет иметь процессоры, которые представляют собой простые классы Java, выполняющие небольшие операции. Этот xml можно расширить, добавив собственный процессор. Но в тех случаях, когда необходимо вызвать один процессор, вызовите метод runProcess для pipeManger, передав процессорchaninId .
Расширение конвейера DAF/DAS и коммерческого конвейера — это не одно и то же.
мы можем создать наши собственные сервлеты, чтобы поместить их в конвейер DAF/DAS.
расширить свой собственный класс сервлета с помощью PipelineableServletImpl или InsertableServletImpl и переписать метод службы в зависимости от того, что вы хотите сделать. Дополнительные сведения широко доступны в Интернете :)
и выход на коммерческий конвейер
Конвейер коммерции определяется в файле xml, расположенном в /B2CCommerce/config/atg/commerce/commercepipeline.xml. Менеджер PipeLine отвечает за загрузку определения XML-конвейера и инициализацию цепочек конвейеров. Напишите свой класс процессора. Класс Custom Processor должен быть реализацией PipelineProcessor.
расширьте свой собственный класс с помощью PipelineProcessor и перепишите метод runProcess. Вам также необходимо создать соответствующий файл .properties для вашего процессора. А затем в
B2CCommerce/config/atg/commerce/commercepipeline.xml
<pipelinechain name=" lastExistingchain" transaction="TX_REQUIRED" headlink=" lastExistinglink">
……..
<transition returnvalue="1" link=" sampleDemoLink"/>
</pipelinelink>
<pipelinelink name="sampleDemoLink" transaction="TX_REQUIRED">
<processor jndi="demo/atg/order/processor/MyProcessor"/>
</pipelinelink>
</pipelinechain>
перезапустите сервер ATG.
Приходя к вам другой вопрос, что если мы можем создать наш собственный диспетчер конвейера Ответ - да. Просто создайте файл /atg/registry/PipelineRegistry/ .properties в вашей локальной папке конфигурации. PipelineRegistry — это служба, в которой зарегистрированы все диспетчеры конвейеров.
эта служба имеет свойство, называемое pipeManagers, просто добавьте свой компонент диспетчера конвейера к этому свойству. если вы хотите использовать существующий класс commercePipelineManager, но с другой группой процессоров, выполняющих один за другим. создайте XML-файл определения, который выглядит примерно так
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE pipelinemanager
PUBLIC "-//Art Technology Group, Inc.//DTD Dynamo Pipeline Manager//EN"
'http://www.atg.com/dtds/pipelinemanager/pipelinemanager_1.0.dtd'>
<pipelinemanager>
<!-- This chain updates (saves) an Order to the repository -->
<pipelinechain name="updateOrder" transaction="TX_REQUIRED" headlink="updateOrderObject">
<pipelinelink name="updateOrderObject" transaction="TX_MANDATORY">
<processor jndi="/atg/commerce/order/processor/SaveOrderObject"/>
<transition returnvalue="1" link="updateCommerceItemObjects"/>
</pipelinelink>
<pipelinelink name="updateCommerceItemObjects" transaction="TX_MANDATORY">
<processor jndi="/atg/commerce/order/processor/SaveCommerceItemObjects"/>
<transition returnvalue="1" link="updateShippingGroupObjects"/>
</pipelinelink>
<pipelinelink name="updateShippingGroupObjects" transaction="TX_MANDATORY">
<processor jndi="/atg/commerce/order/processor/SaveShippingGroupObjects"/>
<transition returnvalue="1" link="updateHandlingInstructionObjects"/>
</pipelinelink>
<pipelinelink name="updateHandlingInstructionObjects" transaction="TX_MANDATORY">
.......
.......
<pipelinechain name="rejectQuote" transaction="TX_REQUIRED" headlink="quoteRejection">
<pipelinelink name="quoteRejection" transaction="TX_MANDATORY">
<processor jndi="/atg/commerce/order/processor/RejectQuote"/>
</pipelinelink>
</pipelinechain>
<!-- This pipeline chain should be called when a requested quote is to be completed -->
<pipelinechain name="completeQuote" transaction="TX_REQUIRED" headlink="completeQuoteRequest">
<pipelinelink name="completeQuoteRequest" transaction="TX_MANDATORY">
<!-- this is a dummy processor that should be extended to save quote details -->
<processor jndi="/atg/commerce/order/processor/CompleteQuoteRequest"/>
</pipelinelink>
</pipelinechain>
</pipelinemanager>
здесь вы можете упомянуть ваши пользовательские процессоры.
Поскольку вы зарегистрировали свой новый диспетчер конвейеров в реестре конвейеров, он автоматически инициализируется. Поэтому, если вы выполняете какую-либо операцию в JSP, связанную с вашим конвейером, вся обработка выполняется в фоновом режиме.
person
Mani manasa mylavarapu
schedule
16.12.2014