Методы создания и обновления вызываются дважды для каждого в расширении хранилища tridion.

Я не могу понять, почему мой пользовательский DOA Файловой системы для создания и обновления вызывается дважды, поэтому я получаю одинаковые записи дважды в своем собственном расширении хранилища.

  • Методы создания / обновления вызываются дважды - когда я публикую любую страницу, две записи для каждой сохраняются в базе данных.
  • Удалить (Отмена публикации страницы в порядке, в базу данных вставляется только одна запись, однако после отмены публикации любой страницы в следующий раз публикация не удастся выполнить для этой конкретной страницы)

У меня есть ниже код класса для обработки страницы и то же самое написано для компонента и двоичных файлов:

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>

Мой образец XML cd_storage

<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>    

1 ответ

Решение

Причина, по которой две записи были вставлены в мою пользовательскую таблицу, заключалась в том, что у нас есть два пользовательских расширения PAGE Deployer, реализованных на нашем сервере презентаций.

Таким образом, и средство развертывания вызывает базовый класс FSPageDAO и методы интерфейса PageDAO.

Вышеупомянутая проблема может быть решена, только если у нас есть некоторый код для обработки ограничения вызова базовых классов в нашем DAO.

Иначе нет способа контролировать это, если на сервере реализовано расширение для развертывания.

Пожалуйста, предложите, если мы можем проверить и контролировать в нашем DAO (если это возможно).

Благодарю.

Другие вопросы по тегам