Changeset 12932


Ignore:
Timestamp:
03/02/09 16:02:44 (3 years ago)
Author:
sys
Message:

Amélioration gestion events d'update d'items multi-flux + réduction des appels aux refresh pour checker les modifs externes.

Location:
trunk/Jav_BDP_FS/com/scenari/m/bdp/item/fs
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Jav_BDP_FS/com/scenari/m/bdp/item/fs/HContentAccessFs.java

    r12843 r12932  
    5050import java.util.List; 
    5151 
     52import com.scenari.m.bdp.context.ContextBdp; 
    5253import com.scenari.m.bdp.item.IHItemDef; 
    5354import com.scenari.m.bdp.item.fs.TransfCacheMgr.CacheDef; 
     
    7071import com.scenari.src.feature.paths.SrcFeaturePaths; 
    7172import com.scenari.src.feature.random.SrcFeatureRandom; 
    72 import com.scenari.src.feature.refresh.SrcFeatureRefresh; 
    7373import com.scenari.src.feature.rights.SrcFeatureRights; 
    7474import com.scenari.src.fs.mini.FsMiniFactory; 
     
    158158                if (vItem == null) { return null; } 
    159159                ISrcNode vItemSrc = vItem.getSource(); 
    160                 // vItem.hRefresh(); 
    161160                if (pTransforms == null) { 
    162161                        ISrcNode vSource; 
     
    431430 
    432431                if (vSource != vItemSource) { 
    433                         //Si on a modifié une ressource dans l'item, on force un refresh de l'item.  
    434                         SrcFeatureRefresh.refresh(vItemSource); 
     432                        //Si on a modifié une ressource dans l'item, on force un recalcul de l'item.  
     433                        vItem.reloadAfterUpdate(ContextBdp.getThreadClient()); 
    435434                } 
    436435        } 
     
    472471        public final int hDeleteRes(IHItemDef pItemDef, String pFormat, String pUriRes, IHTransaction pTransaction) throws Exception { 
    473472                XItemCache vItem = xGetItemCache(pItemDef); 
    474                 // vItem.hRefresh(); 
    475473                if (vItem == null) { return 0; } 
    476474                ISrcNode vItemSrc = vItem.getSource(); 
     
    483481                int vResult = vContent.removeSrc() ? 1 : 0; 
    484482                if (vItemSrc != vContent) { 
    485                         //Si on a modifié une ressource dans l'item, on force un refresh de l'item.  
    486                         SrcFeatureRefresh.refresh(vItemSrc); 
     483                        //Si on a modifié une ressource dans l'item, on force un recalcul de l'item.  
     484                        vItem.reloadAfterUpdate(ContextBdp.getThreadClient()); 
    487485                } 
    488486                return vResult; 
  • trunk/Jav_BDP_FS/com/scenari/m/bdp/item/fs/XItemCache.java

    r12844 r12932  
    7979public class XItemCache { 
    8080 
     81        public static long sElapseBetweenRefresh = 1500; 
     82 
    8183        /** 
    8284         * AttrLink. 
     
    648650        public void hRefresh() throws Exception { 
    649651                XItemCacheData vDatas = getDatas(); 
     652                if (vDatas.fLastRefresh > 0 && vDatas.fLastRefresh >= System.currentTimeMillis() - sElapseBetweenRefresh) { 
     653                        //Dernier refresh très récent, pas d'écriture entre temps, on passe. 
     654                        //System.out.print('.'); 
     655                        return; 
     656                } 
    650657                ISrcNode vSrc = vDatas.getWspSrcNodeItem().getSubSrcNode(); 
    651658                if (fStatusItem == IHItem.STATUS_UNKNOWN) { 
    652                         xLoadItemFromSource(fStatusItem != IHItem.STATUS_UNKNOWN, vSrc, vSrc.getLastModifWithChildren()); 
     659                        xLoadItemFromSource(false, vSrc, vSrc.getLastModifWithChildren(), IContextBdp.CLIENTID_NONE); 
    653660                } else { 
    654661                        SrcFeatureRefresh.refresh(vSrc); 
    655662                        long vLastUpdt = vSrc.getLastModifWithChildren(); 
    656663                        if (vLastUpdt != fMemLastModif) { 
    657                                 xLoadItemFromSource(fStatusItem != IHItem.STATUS_UNKNOWN, vSrc, vLastUpdt); 
    658                         } 
    659                 } 
     664                                xLoadItemFromSource(true, vSrc, vLastUpdt, IContextBdp.CLIENTID_NONE); 
     665                        } 
     666                } 
     667                vDatas.fLastRefresh = System.currentTimeMillis(); 
     668        } 
     669 
     670        /** 
     671         * Rafraichit cet item si la source a été modifiée (cas des itesm multi-flux). 
     672         */ 
     673        public void reloadAfterUpdate(int pClientId) throws Exception { 
     674                XItemCacheData vDatas = getDatas(); 
     675                ISrcNode vSrc = vDatas.getWspSrcNodeItem().getSubSrcNode(); 
     676                SrcFeatureRefresh.refresh(vSrc); 
     677                long vLastUpdt = vSrc.getLastModifWithChildren(); 
     678                xLoadItemFromSource(true, vSrc, vLastUpdt, pClientId); 
     679                vDatas.fLastRefresh = System.currentTimeMillis(); 
    660680        } 
    661681 
     
    823843        public void hCommit() throws Exception { 
    824844                XItemCacheData vItemData = getDatas(); 
     845                vItemData.fLastRefresh = System.currentTimeMillis(); 
    825846                fMemLastModif = vItemData.getWspSrcNodeItem().getSubSrcNode().getLastModifWithChildren(); 
    826847        } 
     
    916937                if (vSrc == null) return; 
    917938                long vLastModif = vSrc.getLastModifWithChildren(); 
    918                 xLoadItemFromSource(pFireEventUpdated, vSrc, vLastModif); 
     939                xLoadItemFromSource(pFireEventUpdated, vSrc, vLastModif, IContextBdp.CLIENTID_NONE); 
     940                vDatas.fLastRefresh = System.currentTimeMillis(); 
    919941        } 
    920942 
     
    926948         *            (et pas une découverte ou un chargement initial). 
    927949         */ 
    928         protected void xLoadItemFromSource(boolean pFireEventUpdated, ISrcNode pSrc, long pLastModif) throws Exception { 
     950        protected void xLoadItemFromSource(boolean pFireEventUpdated, ISrcNode pSrc, long pLastModif, int pClientId) throws Exception { 
    929951                boolean vFireEventUpdated = pFireEventUpdated || fWsp.fFireDiscoveredItems; 
    930952                int vStatus = pSrc.getContentStatus(); 
     
    932954                if (vStatus <= ISrcNode.STATUS_NONE) { 
    933955                        //L'item est supprimé 
    934                         hRemove(vFireEventUpdated, IContextBdp.CLIENTID_NONE); 
     956                        hRemove(vFireEventUpdated, pClientId); 
    935957                        if (vStatus == ISrcNode.STATUS_CONFLICT) { 
    936958                                fStatusItem = IHItemDef.STATUS_CONFLICT; 
     
    948970                                        IHModuleSave vModuleSave = vItemType.hGetModuleSave(); 
    949971                                        IHItem vNewItem = vModuleSave.hFillItem(vCurrent, null, vStream, null); 
    950                                         hSaveInCache(vNewItem, vFireEventUpdated, IContextBdp.CLIENTID_NONE); 
     972                                        hSaveInCache(vNewItem, vFireEventUpdated, pClientId); 
    951973                                } else { 
    952974                                        fStatusItem = IHItem.STATUS_ERRORS; 
    953                                         if (vFireEventUpdated) fWsp.xFireEventItemRemoved(this, null, IContextBdp.CLIENTID_NONE); 
     975                                        if (vFireEventUpdated) fWsp.xFireEventItemRemoved(this, null, pClientId); 
    954976                                        xValidPointers(vFireEventUpdated); 
    955977                                } 
     
    957979                                HLogMgr.hPublishException(e, "Echec au traitement d'un item : " + hGetSpace() + "/" + hGetCode(), IHLogMessage.TYPE_WARNING); 
    958980                                fStatusItem = IHItem.STATUS_ERRORS; 
    959                                 if (vFireEventUpdated) fWsp.xFireEventItemRemoved(this, null, IContextBdp.CLIENTID_NONE); 
     981                                if (vFireEventUpdated) fWsp.xFireEventItemRemoved(this, null, pClientId); 
    960982                                xValidPointers(vFireEventUpdated); 
    961983                        } finally { 
  • trunk/Jav_BDP_FS/com/scenari/m/bdp/item/fs/XItemCacheData.java

    r12705 r12932  
    6969        /** Dom en cache. */ 
    7070        protected Document fDom = null; 
     71 
     72        protected long fLastRefresh = -1L; 
    7173 
    7274        public XItemCacheData(XItemCache pItemCache, ISrcNode pSource) { 
Note: See TracChangeset for help on using the changeset viewer.