Can we customize Deployer using .NET? [closed]
Asked Answered
A

2

2

I need to customize my deployer for some reasons, I can only see some articles which are using java for customizing deployer.

Can we customize deployer using .NET project, please share your thought and if possible some solution.

Apostolate answered 20/5, 2012 at 10:17 Comment(0)
H
5

The Deployer is only extendable using Java as you have found. Your best bet if you want to do something completely custom using .NET is to publish files with FTP (or HTTP without an in process Deployer) and create a .NET application with a file system watch to process the files.

Perhaps you can share more about what you are trying to achieve and your version of SDL Tridion for someone to offer more suggestions.

Hyperthyroidism answered 20/5, 2012 at 10:29 Comment(1)
Hi Chris thanks for your input, I was quite sure we can't customize using .NET thanks for confirmation, actually I am trying to implement Google Markup HTML, Please see this question (#10674931 have a look and suggest!!Apostolate
N
5

The obvious answer is NO. The Deployer is a rather low-level part of Content Delivery, and its extensibility points are only available to Java.

However, there's many ways to skin this cat, it all depends on what you're trying to achieve.

You could, for instance, create a webservice with .NET that does all the meat of your extension, and write a simple Deployer Module (with Java) that calls this webservice, passing all the required parameters to it.

You could pre-process the Transport package by publishing to a location where your .NET method would be called before passing the package to the real location where the deployer is listening.

In case you prefer post-processing, you could configure your deployer to keep successful transactions and monitor the location where the deployer stores these ("incoming folder" + "\Success").

It really all depends on what you want to achieve. The recommended way is to use Java, but if you're not comfortable with that language, you can be creative and achieve the same end results with minimal Java coding. Here's an example of an "empty" module that loops through the items being published and logs information about the objects:

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());
        }
    }
}
Nitriding answered 20/5, 2012 at 14:14 Comment(1)
Hi Nuno, thanks for your reply is above implementation is going to help me for this implementation (#10674931)Apostolate

© 2022 - 2024 — McMap. All rights reserved.