Man*_*ngh 2 .net tridion tridion2009 tridion-content-delivery
我出于某些原因需要自定义我的部署程序,我只能看到一些使用java进行自定义部署的文章.
我们可以使用.NET项目自定义部署者,请分享您的想法,如果可能的话,一些解决方案.
如您所发现,Deployer只能使用Java进行扩展.如果你想使用.NET做一些完全自定义的事情,你最好的选择是使用FTP(或没有进程内Deployer的HTTP)发布文件,并创建一个带有文件系统监视的.NET应用程序来处理文件.
也许您可以分享更多关于您要实现的目标以及您的SDL Tridion版本,以便有人提供更多建议.
显而易见的答案是NO.Deployer是Content Delivery的一个相当低级的部分,其可扩展性点仅适用于Java.
然而,有很多方法可以给这只猫上皮,这一切都取决于你想要达到的目的.
例如,您可以使用.NET创建一个Web服务,它可以完成扩展的所有功能,并编写一个简单的Deployer模块(使用Java)来调用此Web服务,并将所有必需的参数传递给它.
您可以通过发布到将调用.NET方法的位置来预处理传输包,然后再将包传递到部署者正在侦听的实际位置.
如果您更喜欢后期处理,您可以配置部署者以保持成功的交易并监控部署者存储这些事务的位置("传入文件夹"+"\成功").
这完全取决于你想要达到的目标.推荐的方法是使用Java,但如果您对该语言不满意,您可以创造性地使用最少的Java编码实现相同的最终结果.这是一个"空"模块的示例,它循环发布的项目并记录有关对象的信息:
import java.util.Iterator;
import com.tridion.configuration.Configuration;
import com.tridion.configuration.ConfigurationException;
import com.tridion.deployer.Module;
import com.tridion.deployer.ProcessingException;
import com.tridion.deployer.Processor;
import com.tridion.transport.transportpackage.Binary;
import com.tridion.transport.transportpackage.BinaryKey;
import com.tridion.transport.transportpackage.Component;
import com.tridion.transport.transportpackage.ComponentKey;
import com.tridion.transport.transportpackage.MetaData;
import com.tridion.transport.transportpackage.MetaDataFile;
import com.tridion.transport.transportpackage.Page;
import com.tridion.transport.transportpackage.PageKey;
import com.tridion.transport.transportpackage.ProcessorInstructions;
import com.tridion.transport.transportpackage.Section;
import com.tridion.transport.transportpackage.TransportPackage;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
public class CustomCacheNotificationDeploy extends Module {
String action = null;
Logger log = null;
MetaDataFile pageMeta = null;
MetaDataFile componentMeta = null;
MetaDataFile binaryMeta = null;
public CustomCacheNotificationDeploy(Configuration config, Processor processor)
throws ConfigurationException {
super(config, processor);
log = LoggerFactory.getLogger(getClass());
// TODO Auto-generated constructor stub
}
@SuppressWarnings("deprecation")
public void process(TransportPackage data) throws ProcessingException{
ProcessorInstructions instructions = data.getProcessorInstructions();
action = instructions.getAction();
MetaData pageMetaInfo = instructions.getMetaData("Pages");
MetaData componentMetaInfo = instructions.getMetaData("Components");
MetaData binaryMetaInfo = instructions.getMetaData("Binaries");
pageMeta = data.getMetaData("Pages", pageMetaInfo.getName());
componentMeta = data.getMetaData("Components", componentMetaInfo.getName());
binaryMeta = data.getMetaData("Binaries", binaryMetaInfo.getName());
log.debug("Action " + action + " started for publication " + instructions.getPublicationId());
Section section = null;
Iterator<Section> Sections = instructions.getSections();
for(; Sections.hasNext(); processSection(section))
{
section = Sections.next();
}
}
protected void processSection(Section section)
{
log.debug("Processing Section " + section.getName());
Iterator iterator = section.getFileItems();
Object item;
for(; iterator.hasNext(); processItem(item, section))
{
item = iterator.next();
}
Section subSection;
for(Iterator i$ = section.getSubSections().iterator(); i$.hasNext(); processSection(subSection))
subSection = (Section)i$.next();
}
protected void processItem(Object obj, Section section)
{
if(obj instanceof PageKey)
{
log.debug("Object is Page");
PageKey key = (PageKey) obj;
Page page = (Page)pageMeta.getMetaData(key);
log.debug("Page being deployed is " + page.getId() + " with URL " + page.getURLPath());
}
if(obj instanceof ComponentKey)
{
log.debug("Object is Component");
ComponentKey key = (ComponentKey) obj;
Component component = (Component)componentMeta.getMetaData(key);
log.debug("Component being deployed is " + component.getId());
}
if(obj instanceof BinaryKey)
{
log.debug("Object is Binary");
BinaryKey key = (BinaryKey) obj;
Binary binary = (Binary)binaryMeta.getMetaData(key);
log.debug("Binary being deployed is " + binary.getId() + " with URL " + binary.getURLPath());
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |