TroubleshootingIn order to identify what was broken I turned to the 'error_log' utility of the Zope Management Interface.
My little "trick" for enabling exceptions which are normally ignored by Plone is by adding a 'z' to the end of the exception name so that it gets logged and not skipped.
The 'error_log' was able to report that the view (even though it was working up to Plone 4.2) was now raising a "Not Found" exception on my Plone 4.3 based site. The view in this case called '@@sermons' was somehow no longer properly registered.
Diagnosing the source
My view was registered using a package called 'five.grok' which uses convention over configuration to associate views with a package. Here's a snippet of code that registers a simple view (5 to 7 lines of code):
from five import grok
from Products.ATContentTypes.interface import IATFolder
"""A BrowserView to display a Sermon listing on a Folder."""
grok.context(IATFolder) # type of object on which this View is available
grok.require('zope2.View') # what permission is needed for access
By convention because the class is called 'Sermons' it would be accessible via the name '@@sermons' or simply 'sermons' and would depend on a template called 'sermons.pt' in the same directory (not shown here). The bottom line is that this all used to work.
Reintroduce the dependency in my buildout configuration and rerun buildout. This meant explicitly declaring the grok dependency. I also declared an additional dependency on a package called 'relations' just in case I had other code that needed that, then I reran buildout. The actual line that changed in order to do this explicit declaration involved adding a line like the one below in the appropriate eggs section of my buildout configuration:
plone.app.dexterity [grok, relations]
Phew! my view worked after that.