什么是ATG管道,它是如何工作的?

Var*_*mar 2 atg

我对atg水滴,dsp标签和编写自定义水滴有一些了解.我想知道关于ATG主题的管道.当我试图引用oracle文档时,我对理解它是什么以及它的工作流程感到有点困惑.我可以创建一个自定义管道管理器,按顺序执行我的自定义处理器.如果可能,我该怎么做?如何从我的jsp页面触发我的管道管理器.请指导我一些教程或在线文档,以便最好地学习管道.

代码片段是非常优选的.

提前致谢

小智 5

管道是一种允许模块化代码执行的执行机制.Oracle ATG Web Commerce使用管道执行加载,保存和签出订单等任务.PipelineManager实现了管道执行机制.

Dynamo使用两个请求处理管道.

•DAF Servlet管道 - 用于处理JSP请求.

•DAS Servlet管道 - 用于处理JHTML请求.因为JHTML是一种专有语言,所以它依赖于DAS servlet管道中提供的页面编译器来生成JHTML到由应用程序服务器呈现为HTML的servlet中.

而且还有一个叫做commercePipeline的东西负责订单处理.

请求处理管道和商业管道以不同方式工作.

DAS/DAF(即请求管道)

它是根据每个servlet的输出按顺序执行的一系列servlet定义的配置.Dynamo最重要的任务之一是处理HTTP请求.在处理这些请求时,Dynamo使用会话跟踪,页面编译,Java Server Pages以及基本Web服务器模型的其他强大扩展.请求处理通常可以分解为一系列独立的步骤.每个步骤可能取决于有关请求的其他可用信息,因此订单确实很重要.但是,各个步骤是可分离的.例如,典型的请求可能会执行以下步骤:

1)将请求URI与受限目录列表进行比较,以确保用户有权访问指定的目录.

2)将请求URI转换为真实文件名,当文件名引用目录时,将"索引"文件考虑在内.

3)给定文件名的扩展名,确定文件的MIME类型.

4)从MIME类型,将请求分派给适当的处理程序.

因此,当有请求时,DAF/DAS流水线就会出现.在atg_bootstrap.war中,web.xml包含有关服务器启动的信息.

当服务器启动时,NucleusServlet.java会在应用服务器中加载.这个类初始化nucleus和其他组件,然后将它们全部添加到nucleus名称空间.当访问Web应用程序(DynAdmin,CRS,MotopriseJSP)时,nucleus将流路由到daf/das管道.如果应用程序MIME类型是Jhtml,则das管道会进一步处理该请求.它被路由到DynamoProxyServlet类,通过调用servlet列表进行进一步处理.如果它是.jsp,那么Daf管道通过调用PageFilter类来处理进一步的请求.使用过滤器而不是servlet来调用DAF管道的原因是:

JSP页面和片段由应用程序服务器处理,这意味着JBoss,WebLogic,WebSphere是负责编译和执行结果页面代码的人员.挂钩此过程的最佳方法是使用过滤器.对于JHTML页面,这是一个不同的故事,因为应用服务器(并非所有应用服务器)都无法解析和编译页面.servlet用于将请求重定向到DAS管道,其中页面可以由ATG页面编译机制解析和执行.

如果是Commerce Pipeline:

Pipeline Manager通过读取管道定义文件即commercepipeline.xml来实现商业管道功能.部署应用程序时,Nucleus初始化定价引擎,OrderManager初始化pipelineManager.OrderManager.processOrder方法调用commercepipeline.xm中的管道链.管道链将具有处理器,这些处理器是执行小操作的简单Java类.可以通过添加自定义处理器来扩展此xml.但是在需要调用单个处理器的情况下,通过传递processorchaninId来调用pipelineManger的runProcess方法.

扩展DAF/DAS管道和商业管道并不相同

我们可以创建自己的自定义servlet以将其放入DAF/DAS管道中.

扩展你自己的servlet类枯萎PipelineableServletImplInsertableServletImpl 这取决于你想do.Further细节是什么,并重新编写服务方法被广泛使用在互联网上:)

并进入商业管道

Commerce管道在位于/B2CCommerce/config/atg/commerce/commercepipeline.xml中的xml文件中定义.PipeLine管理器负责加载管道定义xml并初始化管道链.编写处理器类.自定义处理器类应该是PipelineProcessor的实现.

通过PipelineProcessor扩展您自己的类并重新编写runProcess方法.您还必须为您的处理器创建相应的.properties文件.然后在

B2CCommerce /配置/ ATG /电子商务/ 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>
Run Code Online (Sandbox Code Playgroud)

重启ATG服务器.

如果我们可以创建自己的管道管理器,那么请向您提出其他问题答案是肯定的.只需在本地配置文件夹中创建/ atg/registry/PipelineRegistry/.properties文件.PipelineRegistry是一个所有管道管理器都已注册的服务

这个服务有一个名为pipelineManagers的属性,只需将你的管道管理器组件附加到这个属性.如果你想使用现有的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>
Run Code Online (Sandbox Code Playgroud)

在这里你可以提到自定义处理器.

由于您已在管道注册表中注册了新的管道管理器.它会自动初始化.因此,如果您在JSP中执行与管道相关的任何操作,则在后台完成所有处理.