我对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类枯萎PipelineableServletImpl或InsertableServletImpl 这取决于你想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中执行与管道相关的任何操作,则在后台完成所有处理.
| 归档时间: |
|
| 查看次数: |
10176 次 |
| 最近记录: |