On Dec 13, 2010, at 8:54 PM, Rakesh Vidyadharan wrote:
> We have a scheduled updateData job that updates nodes in our workspace (CRUD
> operations on nodes) and then activates/deactivates the nodes as appropriate.
Do I understand correctly that you are using your own custom workspace? (I
assume so below)
> I am trying to clear the caches so that the pages affected can show the
> updated content. I have not had any success with my attempts at clearing the
> cache.
> In code what I do is after the update process has run, invoke the clear and
> activePage methods.
Um, you are running that code on the author instance right? In this case
calling clear() would clear only cache of the said author instance, but not
the public.
> I initially thought only clear would do the trick, but neither of them do.
> On the public instance I see deleted nodes on the list pages until I perform
> a manual "Activate changes" on the appropriate page on the website pane.
Yeah, activating the page from website will indeed cause flushing the cache
_on_public_ instance.
> Using the Tools->Cache Tools->Flush all caches too does not seem to have any
> effect on the output html from the page.
Just to double check, you did this on public? If so it should have exactly same
effect as activating the page.
> The manual activation does the trick however. The affected pages are
> freemarker templates that get all the JCR data through a model class. The
> queries in the model class are raw XPATH queries against our workspace.
> There are no paragraphs or any other sub-components that I need to worry
> about, just the node data as returned by the model classes.
>
> So, the question is what exactly I need to do to ensure that the affected
> pages are refreshed?
Well, what you need to do is to flush the cache on the public instance. Most of
the time that should be seamless and taken care of by Magnolia for you. However
since you are using custom workspace, Magnolia will not know it needs to flush
the cache on activation to that workspace too. Go to the
condig:/modules/cache/config/configurations/default/flushPolicy/policies/flushAll/repositories
and add name of your workspace to the list. That way you tell Magnolia to
flush the cache on updates to the workspace.
Now you should have it working. If you want to play smarter and you know
exactly what pages are rendering data from that repo (or maybe it is a set of
pages using same page template?) you can write custom policy that would go and
fish out only those pages from the cache bucket and leave everything else in.
For that you can use methods for retrieving all the cache keys generated from a
page using page UUID and then using the keys you can remove only the specific
entries from the cache instead of flushing all. This is what for example
FlushByComments policy in EE does.
HTH,
Jan
>
> Thanks
> Rakesh
>
> void activatePage( page )
> {
> def node = sessionFactory.websiteSession.getItem( page )
> createSyndicator().activate( node.parent.path,
> new DefaultContent( node, getHierarchyManager( 'website' ) ) )
> }
>
> void clear( context )
> {
> new FlushCachesCommand().execute context
> }
>
> private def createSyndicator()
> {
> def syndicator = getComponentProvider().newInstance( Syndicator.class );
> syndicator.init( getUser(), getModule().repository,
> getDefaultWorkspace( getModule().repository ), new Rule() )
> return syndicator
> }
>
>
> ----------------------------------------------------------------
> For list details see
> http://www.magnolia-cms.com/home/community/mailing-lists.html
> To unsubscribe, E-mail to: <[email protected]>
> ----------------------------------------------------------------
----------------------------------------------------------------
For list details see
http://www.magnolia-cms.com/home/community/mailing-lists.html
To unsubscribe, E-mail to: <[email protected]>
----------------------------------------------------------------