在tridion存储扩展中,创建和更新方法将分别被调用两次

在tridion存储扩展中,创建和更新方法将分别被调用两次,tridion,tridion-2011,tridion-content-delivery,tridion-storage-extension,Tridion,Tridion 2011,Tridion Content Delivery,Tridion Storage Extension,我无法理解为什么我的自定义文件系统DOA for create and update方法被调用了两次,所以我在自定义存储扩展中得到了两次相同的记录 创建/更新方法会被调用两次—当我发布任何页面时,每个页面都会有两条记录保存在数据库中 删除(取消发布页面是可以的,数据库中只插入一条记录,但是在取消发布任何页面后,下次发布该特定页面时失败) 我有以下用于处理页面的类代码,以及为组件和二进制文件编写的代码: package com.tridion.storage.dao; import java

我无法理解为什么我的自定义文件系统DOA for create and update方法被调用了两次,所以我在自定义存储扩展中得到了两次相同的记录

  • 创建/更新方法会被调用两次—当我发布任何页面时,每个页面都会有两条记录保存在数据库中
  • 删除(取消发布页面是可以的,数据库中只插入一条记录,但是在取消发布任何页面后,下次发布该特定页面时失败)
我有以下用于处理页面的类代码,以及为组件和二进制文件编写的代码:

package com.tridion.storage.dao;

import java.io.File;

import com.tridion.broker.StorageException;
import com.tridion.data.CharacterData;

import com.tridion.storage.PageMeta;
import com.tridion.storage.StorageManagerFactory;
import com.tridion.storage.StorageTypeMapping;
import com.tridion.storage.filesystem.FSEntityManager;
import com.tridion.storage.filesystem.FSPageDAO;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class FSPageContentDAOExtension extends FSPageDAO implements PageDAO 
{
    private static Logger log = LoggerFactory.getLogger(FSPageContentDAOExtension.class);

    public FSPageContentDAOExtension(String storageId, String storageName, File storageLocation) 
    {
        super(storageId, storageName, storageLocation);     
        log.debug("Entering Constructor 1: FSPageContentDAOExtension(" + storageId + ","  + storageLocation.getPath() + ","  + storageName + ")");
    }

    public FSPageContentDAOExtension(String storageId, String storageName, File storageLocation, FSEntityManager entityManager) {
        super(storageId, storageName, storageLocation, entityManager);
        log.debug("Entering Constructor 2: FSPageContentDAOExtension(" + storageId + "," + entityManager.toString() +  ","  + storageLocation.getPath() + ","  + storageName + ")");
    }


    public void create(CharacterData page, String relativepath) throws StorageException 
    {
        super.create(page,relativepath);    

        log.info("Inside the Create");
        log.info("storageId.toLowerCase()-"+storageId.toLowerCase());

        try
        {
                log.info("Inside the Create - page.getPublicationId():"+page.getPublicationId()+"--"+relativepath);
                ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(page.getPublicationId(),StorageTypeMapping.PAGE_META);
                log.info("Inside the Create - item:"+item.getBindingName());
                if( item !=null)
                {     
                    log.info("Inside the Create - PageMeta:");
                    PageMeta pageMeta = (PageMeta) item.findByPrimaryKey(page.getPublicationId(),page.getId());
                    log.info("Inside the Create - PageMeta2:"+pageMeta.getFileName());
                    if(pageMeta!=null)
                    {
                        log.info("Create - PageMeta-"+pageMeta.getTitle());
                        int publicationId = pageMeta.getPublicationId();
                        String strIgnorePubIds = "232,481";
                        String pubId = Integer.toString(publicationId);
                        if(!strIgnorePubIds.contains(pubId))
                        {
                            String url = pageMeta.getUrl();
                            String tcmURI = Integer.toString(pageMeta.getItemId());
                            PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
                            if(publishActionDAO !=null)
                            {
                                PublishAction publishAction = new PublishAction();          
                                publishAction.setAction("ADD");
                                publishAction.setPublicationID(publicationId);
                                publishAction.setUrl(url);
                                publishAction.setLastPublishedDate(pageMeta.getLastPublishDate());
                                publishAction.setItemType(64);
                                publishAction.setTcmUri(tcmURI);
                                log.debug("Going to Store bean -"+ publishAction.toString());
                                publishActionDAO.store(publishAction);
                                createFlag = false;
                            }

                        } 
                    }
                }           
        }
        catch (StorageException se) 
        {           
            log.error("FSPageContentDAOExtension - Exception occurred " + se);
        }
    }

    public void update(CharacterData page,String originalRelativePath, String newRelativepath)throws StorageException {
        super.update(page,originalRelativePath,newRelativepath);;   
        log.info("Inside the Update");
        log.info("storageId.toLowerCase()-"+storageId);

        try
        {

                log.info("Inside the Update - page.getPublicationId():"+page.getPublicationId()+"--"+originalRelativePath+"--"+newRelativepath);
                ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(page.getPublicationId(),StorageTypeMapping.PAGE_META);
                log.info("Inside the Update - item:"+item.getBindingName());
                if( item !=null)
                {     
                    log.info("Inside the Update - PageMeta:");
                    PageMeta pageMeta = (PageMeta) item.findByPrimaryKey(page.getPublicationId(),page.getId());
                    log.info("Inside the Update - PageMeta2:"+pageMeta.getFileName());
                    if(pageMeta!=null)
                    {
                        log.info("Update - PageMeta-"+pageMeta.getTitle());
                        int publicationId = pageMeta.getPublicationId();
                        String strIgnorePubIds = "232,481";
                        String pubId = Integer.toString(publicationId);
                        if(!strIgnorePubIds.contains(pubId))
                        {
                            String url = pageMeta.getUrl();
                            String tcmURI = Integer.toString(pageMeta.getItemId());
                            PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
                            if(publishActionDAO !=null)
                            {
                                PublishAction publishAction = new PublishAction();          
                                publishAction.setAction("UPD");
                                publishAction.setUrl(url);
                                publishAction.setPublicationID(publicationId);
                                publishAction.setLastPublishedDate(pageMeta.getLastPublishDate());
                                publishAction.setItemType(64);
                                publishAction.setTcmUri(tcmURI);
                                log.debug("Going to Store bean -"+ publishAction.toString());
                                publishActionDAO.store(publishAction);
                                createFlag = false;
                            }                       
                        } 
                    }
                }
        }
        catch (StorageException se) 
        {           
            log.error("FSPageContentDAOExtension - Exception occurred " + se);
        }

    }

    public void remove(final int publicationId, final int pageID, final String relativePath) throws StorageException {

        log.info("Inside the Delete");      
        try
        {

                ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(publicationId,StorageTypeMapping.PAGE_META);
                if( item !=null)
                {       
                    PageMeta pageMeta = (PageMeta) item.findByPrimaryKey(publicationId,pageID);

                    if(pageMeta!=null)
                    {
                        log.info("Delete - PageMeta-"+pageMeta.getTitle());                 
                        String strIgnorePubIds = "232,481";
                        String pubId = Integer.toString(publicationId);
                        if(!strIgnorePubIds.contains(pubId))
                        {
                            String url = pageMeta.getUrl();
                            String tcmURI = Integer.toString(pageMeta.getItemId());
                            PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
                            if(publishActionDAO !=null)
                            {
                                PublishAction publishAction = new PublishAction();          
                                publishAction.setAction("DEL");
                                publishAction.setUrl(url);
                                publishAction.setLastPublishedDate(pageMeta.getLastPublishDate());
                                publishAction.setItemType(64);
                                publishAction.setTcmUri(tcmURI);
                                publishAction.setPublicationID(publicationId);
                                log.debug("Going to Store bean -"+ publishAction.toString());
                                publishActionDAO.store(publishAction);
                            }

                        } 
                    }
                }           
        }
        catch (StorageException se) 
        {           
            log.error("FSPageContentDAOExtension - Exception occurred " + se);
        }
        super.remove(publicationId, pageID, relativePath);  
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<StorageDAOBundles>
    <StorageDAOBundle type="persistence">
        <StorageDAO typeMapping="PublishAction" class="com.tridion.storage.dao.JPAPublishActionDAO" />
    </StorageDAOBundle>

    <StorageDAOBundle type="filesystem">
    <StorageDAO typeMapping="Binary" class="com.tridion.storage.dao.FSBinaryContentDAOExtension" />
    </StorageDAOBundle>

    <StorageDAOBundle type="filesystem">
        <StorageDAO typeMapping="Page" class="com.tridion.storage.dao.FSPageContentDAOExtension" />
    </StorageDAOBundle>

    <StorageDAOBundle type="filesystem">
        <StorageDAO typeMapping="ComponentPresentation" class="com.tridion.storage.dao.FSComponentContentDAOExtension" />
    </StorageDAOBundle>
</StorageDAOBundles>
我的存储包如下:

package com.tridion.storage.dao;

import java.io.File;

import com.tridion.broker.StorageException;
import com.tridion.data.CharacterData;

import com.tridion.storage.PageMeta;
import com.tridion.storage.StorageManagerFactory;
import com.tridion.storage.StorageTypeMapping;
import com.tridion.storage.filesystem.FSEntityManager;
import com.tridion.storage.filesystem.FSPageDAO;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class FSPageContentDAOExtension extends FSPageDAO implements PageDAO 
{
    private static Logger log = LoggerFactory.getLogger(FSPageContentDAOExtension.class);

    public FSPageContentDAOExtension(String storageId, String storageName, File storageLocation) 
    {
        super(storageId, storageName, storageLocation);     
        log.debug("Entering Constructor 1: FSPageContentDAOExtension(" + storageId + ","  + storageLocation.getPath() + ","  + storageName + ")");
    }

    public FSPageContentDAOExtension(String storageId, String storageName, File storageLocation, FSEntityManager entityManager) {
        super(storageId, storageName, storageLocation, entityManager);
        log.debug("Entering Constructor 2: FSPageContentDAOExtension(" + storageId + "," + entityManager.toString() +  ","  + storageLocation.getPath() + ","  + storageName + ")");
    }


    public void create(CharacterData page, String relativepath) throws StorageException 
    {
        super.create(page,relativepath);    

        log.info("Inside the Create");
        log.info("storageId.toLowerCase()-"+storageId.toLowerCase());

        try
        {
                log.info("Inside the Create - page.getPublicationId():"+page.getPublicationId()+"--"+relativepath);
                ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(page.getPublicationId(),StorageTypeMapping.PAGE_META);
                log.info("Inside the Create - item:"+item.getBindingName());
                if( item !=null)
                {     
                    log.info("Inside the Create - PageMeta:");
                    PageMeta pageMeta = (PageMeta) item.findByPrimaryKey(page.getPublicationId(),page.getId());
                    log.info("Inside the Create - PageMeta2:"+pageMeta.getFileName());
                    if(pageMeta!=null)
                    {
                        log.info("Create - PageMeta-"+pageMeta.getTitle());
                        int publicationId = pageMeta.getPublicationId();
                        String strIgnorePubIds = "232,481";
                        String pubId = Integer.toString(publicationId);
                        if(!strIgnorePubIds.contains(pubId))
                        {
                            String url = pageMeta.getUrl();
                            String tcmURI = Integer.toString(pageMeta.getItemId());
                            PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
                            if(publishActionDAO !=null)
                            {
                                PublishAction publishAction = new PublishAction();          
                                publishAction.setAction("ADD");
                                publishAction.setPublicationID(publicationId);
                                publishAction.setUrl(url);
                                publishAction.setLastPublishedDate(pageMeta.getLastPublishDate());
                                publishAction.setItemType(64);
                                publishAction.setTcmUri(tcmURI);
                                log.debug("Going to Store bean -"+ publishAction.toString());
                                publishActionDAO.store(publishAction);
                                createFlag = false;
                            }

                        } 
                    }
                }           
        }
        catch (StorageException se) 
        {           
            log.error("FSPageContentDAOExtension - Exception occurred " + se);
        }
    }

    public void update(CharacterData page,String originalRelativePath, String newRelativepath)throws StorageException {
        super.update(page,originalRelativePath,newRelativepath);;   
        log.info("Inside the Update");
        log.info("storageId.toLowerCase()-"+storageId);

        try
        {

                log.info("Inside the Update - page.getPublicationId():"+page.getPublicationId()+"--"+originalRelativePath+"--"+newRelativepath);
                ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(page.getPublicationId(),StorageTypeMapping.PAGE_META);
                log.info("Inside the Update - item:"+item.getBindingName());
                if( item !=null)
                {     
                    log.info("Inside the Update - PageMeta:");
                    PageMeta pageMeta = (PageMeta) item.findByPrimaryKey(page.getPublicationId(),page.getId());
                    log.info("Inside the Update - PageMeta2:"+pageMeta.getFileName());
                    if(pageMeta!=null)
                    {
                        log.info("Update - PageMeta-"+pageMeta.getTitle());
                        int publicationId = pageMeta.getPublicationId();
                        String strIgnorePubIds = "232,481";
                        String pubId = Integer.toString(publicationId);
                        if(!strIgnorePubIds.contains(pubId))
                        {
                            String url = pageMeta.getUrl();
                            String tcmURI = Integer.toString(pageMeta.getItemId());
                            PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
                            if(publishActionDAO !=null)
                            {
                                PublishAction publishAction = new PublishAction();          
                                publishAction.setAction("UPD");
                                publishAction.setUrl(url);
                                publishAction.setPublicationID(publicationId);
                                publishAction.setLastPublishedDate(pageMeta.getLastPublishDate());
                                publishAction.setItemType(64);
                                publishAction.setTcmUri(tcmURI);
                                log.debug("Going to Store bean -"+ publishAction.toString());
                                publishActionDAO.store(publishAction);
                                createFlag = false;
                            }                       
                        } 
                    }
                }
        }
        catch (StorageException se) 
        {           
            log.error("FSPageContentDAOExtension - Exception occurred " + se);
        }

    }

    public void remove(final int publicationId, final int pageID, final String relativePath) throws StorageException {

        log.info("Inside the Delete");      
        try
        {

                ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(publicationId,StorageTypeMapping.PAGE_META);
                if( item !=null)
                {       
                    PageMeta pageMeta = (PageMeta) item.findByPrimaryKey(publicationId,pageID);

                    if(pageMeta!=null)
                    {
                        log.info("Delete - PageMeta-"+pageMeta.getTitle());                 
                        String strIgnorePubIds = "232,481";
                        String pubId = Integer.toString(publicationId);
                        if(!strIgnorePubIds.contains(pubId))
                        {
                            String url = pageMeta.getUrl();
                            String tcmURI = Integer.toString(pageMeta.getItemId());
                            PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
                            if(publishActionDAO !=null)
                            {
                                PublishAction publishAction = new PublishAction();          
                                publishAction.setAction("DEL");
                                publishAction.setUrl(url);
                                publishAction.setLastPublishedDate(pageMeta.getLastPublishDate());
                                publishAction.setItemType(64);
                                publishAction.setTcmUri(tcmURI);
                                publishAction.setPublicationID(publicationId);
                                log.debug("Going to Store bean -"+ publishAction.toString());
                                publishActionDAO.store(publishAction);
                            }

                        } 
                    }
                }           
        }
        catch (StorageException se) 
        {           
            log.error("FSPageContentDAOExtension - Exception occurred " + se);
        }
        super.remove(publicationId, pageID, relativePath);  
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<StorageDAOBundles>
    <StorageDAOBundle type="persistence">
        <StorageDAO typeMapping="PublishAction" class="com.tridion.storage.dao.JPAPublishActionDAO" />
    </StorageDAOBundle>

    <StorageDAOBundle type="filesystem">
    <StorageDAO typeMapping="Binary" class="com.tridion.storage.dao.FSBinaryContentDAOExtension" />
    </StorageDAOBundle>

    <StorageDAOBundle type="filesystem">
        <StorageDAO typeMapping="Page" class="com.tridion.storage.dao.FSPageContentDAOExtension" />
    </StorageDAOBundle>

    <StorageDAOBundle type="filesystem">
        <StorageDAO typeMapping="ComponentPresentation" class="com.tridion.storage.dao.FSComponentContentDAOExtension" />
    </StorageDAOBundle>
</StorageDAOBundles>

我的示例cd_存储XML

<Storages>
    <StorageBindings>
        <Bundle src="search_dao_bundle.xml"/>
    </StorageBindings>  
    <Storage Type="persistence" Id="searchdb" dialect="MSSQL" Class="com.tridion.storage.persistence.JPADAOFactory">
        <Pool Type="jdbc" Size="5" MonitorInterval="60" IdleTimeout="120" CheckoutTimeout="120" />
        <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
            <Property Name="serverName" Value="*****" />
            <!--Property Name="portNumber" Value="1433" /-->
            <Property Name="databaseName" Value="**********" />
            <Property Name="user" Value="*****" />
            <Property Name="password" Value="********" />
        </DataSource>
    </Storage>

    <Storage Type="filesystem" Class="com.tridion.storage.filesystem.FSDAOFactory" Id="defaultFile" defaultFilesystem="false">
        <Root Path="F:\test.com New" />
    </Storage>
    <Storage Type="filesystem" Class="com.tridion.storage.filesystem.FSDAOFactory" Id="defaultDataFile" defaultFilesystem="true" defaultStorage="true">
        <Root Path="F:\test.com New\data" />
    </Storage>  
</Storages>
<ItemTypes defaultStorageId="defaultdb" cached="false"> 
        <Item typeMapping="PublishAction" cached="false" storageId="searchdb" />    
        <Item typeMapping="Query" storageId="defaultdb"/>
        <Item typeMapping="SearchFilter" storageId="defaultDataFile"/>
        <Item typeMapping="XSLT" cached="false" storageId="defaultDataFile"/>
        <Item typeMapping="ComponentPresentation" itemExtension=".Jsp" cached="false" storageId="defaultDataFile"/>
        <Item typeMapping="ComponentPresentation" itemExtension=".Asp" cached="false" storageId="defaultDataFile"/>
        <Item typeMapping="ComponentPresentation" itemExtension=".Xml" cached="false" storageId="defaultDataFile"/>
        <Item typeMapping="ComponentPresentation" itemExtension=".txt" cached="false" storageId="defaultDataFile"/>
        <Item typeMapping="Schema" cached="false" storageId="defaultDataFile"/>
        <Item typeMapping="Page" cached="false" storageId="defaultFile"/>
        <Item typeMapping="Binary" cached="false" storageId="defaultFile"/>
</ItemTypes>    

在我的自定义表中插入两条记录的原因是我们在演示服务器上实现了两个自定义页面部署器扩展

因此,部署人员都在调用基类FSPageDAO和PageDAO的接口方法

只有当我们有一些代码来处理在DAO中调用基类的限制时,上述问题才能得到解决

否则,如果在服务器上实现了deployer扩展,则无法控制这一点

请建议,如果我们可以检查和控制我们的DAO(如果可能的话)


谢谢。

是不是超级类中的update方法是作为remove和create的组合实现的?@Quirijn,谢谢你说的是哪个超级类,因为我在FSPageDAO类和PageDAO接口中看不到任何实现,如果你看到我只是在扩展它,然而,我的PublishActionDAO也在那里调用super.createHi。您提到您的代码被调用了两次。你知道这些电话是在附近还是在中间有很多其他事情?在您的情况下,Tridion部署人员可能会编写两次页面,以确保存储库的完整性。您所说的部署人员扩展是什么类型的?定制部署器模块?还是处理器?或者别的什么?嗨,Quirijin,这是一个自定义部署器模块。你能不能重写自定义模块,使页面dao只被调用一次?另外,如果这不起作用,你不能让页面dao足够智能,以识别更新并正确处理它们吗?