我对atg小滴,dsp标签和编写自定义小滴有一些想法。我想了解有关ATG主题的管道。当我尝试为此参考oracle文档时,我对理解它的含义和工作流程有些困惑。我可以创建一个自定义管道管理器来按顺序执行我的自定义处理器吗?如果可能,我该怎么做?如何从我的jsp页面触发我的管道管理器。请指导我一些教程或在线文档,以更好地了解管道。
最好使用代码段。
提前致谢
管道是允许模块化代码执行的执行机制。Oracle ATG Web Commerce使用管道执行诸如加载,保存和签出订单之类的任务。PipelineManager实现管道执行机制。
Dynamo使用了两个请求处理管道。
•DAF Servlet管道-用于处理JSP请求。
•DAS Servlet管道-用于处理JHTML请求。因为JHTML是一种专有语言,所以它依赖于DAS Servlet管道中提供的页面编译器将JHTML生成到由应用程序服务器呈现为HTML的Servlet中。
还有一个叫做CommercePipeline的东西,它负责订单处理。
请求处理管道和商务管道以不同的方式工作。
DAS / DAF(即请求管道)
它是一种配置,其中定义了一系列servlet,这些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将加载到应用服务器中。此类初始化核和其他组件,然后将所有组件添加到核名称空间。当访问Web应用程序(DynAdmin,CRS,MotopriseJSP)时,核心将流路由到daf / das管道。如果应用程序MIME类型为Jhtml,则das管道将进一步处理请求。它被路由到DynamoProxyServlet类,在其中通过调用Servlet列表进行进一步处理。如果是.jsp,则Daf管道会通过调用PageFilter类来处理其他请求。使用过滤器而不是servlet调用DAF管道的原因是:
JSP页面和片段由应用服务器处理,这意味着JBoss,WebLogic和WebSphere是负责编译和执行结果页面代码的对象。进入此过程的最佳方法是使用筛选器。对于JHTML页面,情况就不同了,因为应用服务器(并非所有应用服务器)无法解析和编译页面。Servlet用于将请求重定向到DAS管道,该页面可以由ATG页面编译机制解析和执行。
如果是商务管道:
管道管理器通过读取管道定义文件commercepipeline.xml来实现商业管道功能。部署应用程序后,Nucleus初始化定价引擎,其中OrderManager初始化管道管道。OrderManager.processOrder方法调用commercepipeline.xm中的管道链。管道链中的处理器是简单的java类,可以执行少量操作。可以通过添加自定义处理器来扩展此xml。但是在需要调用单个处理器的情况下,可以通过传递processorchaninId来调用pipelineManger的runProcess方法。
扩展DAF / DAS管道和商业管道不一样
我们可以创建自己的自定义servlet,以将其放入DAF / DAS管道中。
扩展你自己的servlet类枯萎与PipelineableServletImpl或InsertableServletImpl并重新写这取决于你想do.Further细节是什么在互联网上广泛使用的服务方法:)
并进入商业渠道
Commerce管道在/B2CCommerce/config/atg/commerce/commercepipeline.xml中的xml文件中定义。PipeLine管理器负责加载管道定义xml并初始化管道链。编写您的处理器类。自定义处理器类应该是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是一项服务,其中注册了所有管道管理器
该服务具有称为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>
在这里您可以提及您的自定义处理器。
当您在管道注册表中注册了新的管道管理器后,它将自动初始化。因此,如果您在JSP中执行了与管道相关的任何操作,则所有处理都将在后台完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句