【问题标题】:How to make a Custom Deployer to write data to MS SQL database?如何让 Custom Deployer 将数据写入 MS SQL 数据库?
【发布时间】:2012-07-06 11:47:14
【问题描述】:

我在 config/cd_deployer_conf.xml 的默认处理器中添加了一个自定义模块:

<Processor Action="Deploy" Class="com.tridion.deployer.Processor">
            ...
            <Module Type="MyCustomModuleDeploy" Class="com.tridion.new.extensions.MyCustomModule">
            </Module>
</Processor>

模块的代码如下所示:

public class MyCustomModule extends com.tridion.deployer.modules.PageDeploy {

     static Logger logger = Logger.getLogger("customDeployerFirst");

    public MyCustomModule(Configuration config, Processor processor)
            throws ConfigurationException {
        super(config, processor);
        // TODO Auto-generated constructor stub
    }

    public void processPage(Page page, File pageFile) throws ProcessingException {
        // TODO Auto-generated method stub
            Date d = new Date();
        log.info("WORKING");
        log.info("Page ID: " + page.getId().toString());
        log.info("Publication date: "+ d.toString());
    }

}

在我的日志文件中,每次发布页面时,我都会获得所需的信息。

接下来我要做的是将页面 ID 和发布日期写入我的 Microsoft SQL 数据库,在我之前创建的表中。我怎样才能做到这一点?如何从 MyCustomModule 访问数据库表?

谢谢

【问题讨论】:

  • 看起来您已经拥有解决方案的 Tridion 特定部分。现在您只是在问一个关于 Java 和 SQL Server 的问题。这在这里相当题外话。你试过用谷歌搜索“Java SQL Server”之类的吗?
  • 是的,假设代码不是 Tridion Deployer 扩展 - 这就是您需要的代码。
  • 谢谢大家!我被 Tridion 所吸引,我认为这将是更具挑战性的事情。
  • 这总是比看起来容易...
  • 嘿马尔科。您能否接受以下答案之一,以便其他人可以从您的发现中受益。如果那是解决您问题的答案,请不要犹豫,接受您自己的答案。

标签: tridion tridion2009 tridion-content-delivery


【解决方案1】:

不确定您的要求,但您已经选择了部署扩展模型与存储扩展。通过存储扩展,Tridion 将提供一个关于如何扩展存储的模型(例如可以扩展的 JPAFramework 和 Base DAOEntities)。如果您要走部署者扩展路线,正如 Quirin 和 Nuno 所提到的,这就像编写任何其他应用程序一样的标准 JDBC 代码。

但是,我建议您也查看存储扩展模型,看看它是否符合您的要求。一个很好的起点是看下面的文章:http://www.sdltridionworld.com/articles/sdltridion2011/tutorials/extending-content-delivery-storage-sdltridion-2011-1.aspx

【讨论】:

  • 这种类型的解决方案是否仅在 Tridion 2011 中可用,因为我的实现是在 2009 年?
  • 是的。这仅在 2011 年可用,在 2009 年不可用。您有计划升级到 2011 年吗?升级时会重写。
  • 理论上,可以使用自定义“home”类在旧版本中自定义存储,但有关此技术的信息可能更难获得。 2011 年它基于标准库构建,这很棒。但在那之前,自定义部署器是一个不错的选择。
  • 还要注意 home 类,它们在 2011 年被弃用/删除。升级时,您有更多的工作(重写)来迁移它们。
  • Marko 已经拥有的代码将在 2011 年正常运行。home 类已被弃用/消失,但部署模块不是。
【解决方案2】:

好的,所以我在这里解决问题的方法正是 Quirijn 的建议。使用 JDBC 驱动程序连接到我的数据库,然后执行 sql 更新查询:

int sqlStatement = st.executeUpdate("insert into Pages values ('" + page.getId().toString()+ "', '" + ... + "')");

这样每次发布页面时都会将一些数据写入我的数据库。

【讨论】:

  • 我还要强调一下,我在 Tridion 2009 中使用了这个解决方案。如果您使用 2011,我建议您阅读 Ram 的关于存储扩展的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
相关资源
最近更新 更多