- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对atg小滴,dsp标签和编写自定义小滴有一些想法。我想了解有关ATG主题的管道。当我尝试为此参考oracle文档时,我对理解它的含义和工作流程感到有些困惑。我可以创建一个自定义管道管理器来按顺序执行我的自定义处理器吗?如果可能的话,我该怎么做?如何从我的jsp页面触发我的管道管理器。请指导我一些教程或在线文档,以更好地了解管道。
最好使用代码段。
提前谢谢
最佳答案
管道是允许模块化代码执行的执行机制。 Oracle ATG Web Commerce使用管道执行诸如加载,保存和 checkout 订单之类的任务。PipelineManager实现管道执行机制。
Dynamo使用了两个请求处理管道。
•DAF Servlet管道-用于处理JSP请求。
•DAS Servlet管道-用于处理JHTML请求。由于JHTML是一种专有语言,因此它依赖于DAS Servlet管道中提供的页面编译器将JHTML生成到由应用服务器呈现为HTML的Servlet中。
还有一个叫做CommercePipeline的东西,它负责订单处理。
请求处理管道和商务管道以不同的方式工作。
DAS / DAF(即请求管道)
它是一种配置,其中定义了一系列servlet,这些servlet根据每个servlet的输出按顺序执行。 Dynamo最重要的任务之一是处理HTTP请求。在处理这些请求时,Dynamo使用 session 跟踪,页面编译,Java Server Pages和其他对基本Web服务器模型的强大扩展。请求处理通常可以分为一系列独立的步骤。每个步骤可能取决于有关请求的其他可用信息,因此顺序很重要。但是,各个步骤是可分离的。例如,一个典型的请求可能会经过以下步骤:
1)将请求URI与受限目录列表进行比较,以确保用户有权访问指定目录。
2)将请求URI转换为真实文件名,并在文件名引用目录时考虑“索引”文件。
3)给定文件名的扩展名,确定文件的MIME类型。
4)从MIME类型,将请求分派(dispatch)到适当的处理程序。
因此,当有请求时,DAF / DAS管道就会出现。在atg_bootstrap.war中,web.xml中包含有关服务器启动的信息。
服务器启动时,NucleusServlet.java将被加载到应用服务器中。此类初始化核和其他组件,然后将它们全部添加到核 namespace 。当访问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管道中。
使用 PipelineableServletImpl 或 InsertableServletImpl 扩展您自己的servlet类
然后根据您的需要重新编写服务方法。有关详细信息,请参见Internet :)
并进入商业 channel
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>
<?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>
关于atg - 什么是ATG管道,它如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27438614/
ATG 存储库中的存储库项目和项目描述符之间有什么区别? 最佳答案 存储库项目包含存储库中一条记录的数据,这意味着您可以使用存储库项目访问存储在您的存储库和(通常)数据库中的数据。 一个项目描述符定义
我想知道如何在 ATG 中创建新的存储库。比如需要包括哪些所有步骤?我需要创建属性文件吗? 最佳答案 为了创建一个新的存储库,如果您想创建一个使用 sql 数据库作为数据存储的存储库,则需要按照以下步
如果您为 ATG Dynamo 进行开发,您如何构建您的模块和依赖项? 您如何构建项目?源目录、JAR 配置等。 如何构建和部署?你使用什么工具? 最佳答案 我们有一个带有单个 ATG 模块的整体架构
如何重置 ATG Dynamo 管理员密码? 我需要按照默认的 admin/admin 重置/更改密码。 最佳答案 根据 Oracle 的文档,您可以将 Admin.Reset 添加到您的ear文件中
最初,我安装了 ATG 和 CommerceReferenceStore 并使用 ATG CIM 配置它。后来我开始开发自己的 ATG 模块,将其部署在“ATGProduction.ear”上。现在我
有人可以解释一下设置 ATG 开发环境以使用 JBoss AS 所涉及的所有步骤吗?我的要求很简单,我需要开发和部署一个简单的 J2EE 应用程序,其中包含一些表单和后端逻辑以保存表单中输入的数据。
我正在字符串中搜索以 ATG 开头、以 TAG、TAA 或 TGA 结尾且长度 = 3 的倍数的模式。ATG 和 TAG、TAA 或 TGA 只能分别出现在开头或结尾。这意味着: 从ATGTTGTGA
我想使用 CartModifierFormHandler 修改当前订单中的 commerceItem 数量。 我已通过 catalogRefId & new quantity然后调用 CartModi
我对atg小滴,dsp标签和编写自定义小滴有一些想法。我想了解有关ATG主题的管道。当我尝试为此参考oracle文档时,我对理解它的含义和工作流程感到有些困惑。我可以创建一个自定义管道管理器来按顺序执
使用返回管理器返回时,是否可以将退款分配给新的付款组并将其与订单关联? 例如,如果订单付款是使用信用卡完成的,那么我在返回时需要使用现金退款 最佳答案 对您的问题的简短回答是,不能使用 ATG oot
我目前正在研究如何最终创建一个能够监视网站上运行的计划作业的 Web 应用程序。它基于ATG,我一直在研究很多 OOTB 组件,我认为我已经取得了一些成果,但我真的缺乏 ATG 知识,因为我是一名实习
我正在使用 ATG 9.4 并尝试修改我们的促销引擎,以便我们可以设置每个促销的过滤器属性,而不是直接在全局 QualifierService 上设置。 基本上,我所做的就是为 QualifierSe
如何通过BCC设置每周三的ATG促销,无需手动修改即可添加10%的折扣? 最佳答案 我相信这需要超出我技能范围的定制来支持这一点。 BCC 的促销模板 OOTB 仅支持以下基于日期/时间的规则...
我遇到一个问题,出现以下错误: CONTAINER:atg.repositoryException; SOURCE:java.sql.SQLException: Unexpected exceptio
我是 ATG 的新手。我正在尝试使用我自己的 RepositoryFormHandler。但是我无法对表单进行验证。 这是我的 .java 文件: public class MyLoginBean e
我正在尝试覆盖某些方法以让它返回更具体的结果。所以我做到了。 @Override public StoreProfile getProfile() { return (StoreProfile
众所周知,您必须使用以下模式才能更新 ATG Form-Handlers 中不继承自 PurchaseProcessFormHanlder 的订单: boolean acquireLock = fal
我读过很多文档,到处都提到在 atg for compoent 中有一些先决条件。 例如。您的组件类应该有一个不带参数的公共(public)构造函数。 当我在我的应用程序中检查其中一个组件时,我没有看
我试图显示基于 Map(String, Pojo) 结构的嵌套 map 数据。我尝试了各种不同的方法来显示它,但它无法识别 pojo 上的 Map 对象。
我试图通过扩展 GenericService 的 ATG 类更新多条记录。但是我遇到了障碍。我如何执行多个插入查询,我可以继续将所有项目/行添加到缓存对象中,然后使用 item.add() 与表执行单
我是一名优秀的程序员,十分优秀!