[Zope-dev] The Application object

Martijn Pieters mj@digicool.com
Mon, 17 Jul 2000 22:27:07 +0200


On Mon, Jul 17, 2000 at 12:21:42PM -0400, Jeff K. Hoffman wrote:
> On Mon, 17 Jul 2000, Chris McDonough wrote:
> 
> > I'm not sure I understand.  What is AppSingleton?  What does the
> > Instance() method do?
> 
> Sorry I wasn't clear enough. The Singleton is a design pattern from the
> Gang of Four book that fits this situation well. It is a class that is 
> meant to control access to the one and only instance of a global
> variable. I was just using that as a frame of reference, though; Zope has
> no such class for the Application object, or I wouldn't be writing this
> message.
> 
> I just need some way of getting at the one and only Application object at
> run-time. Something like:
> 
>   from Globals import app
>   myOb = app.Control_Panel.Products.MyProduct.MyZClass('foo')
>   ...
> 
> Given a reference to an object in the ZODB, I can do this via:
> 
>   app = self.getPhysicalRoot()
>   myOb = app.Control_Panel.Products.MyProduct.MyZClass('foo')
> 
> But, this does not work from methods like __init__, or __setstate__, where
> we do not have a physical location in the ZODB, yet.
> 
> I just need a reference to the app object. I know the answer has to be
> simple, but I can't find it.

See the __init__.py method of ZScheduler, which can be found on Zope.org.
ZScheduler uses a Singleton as well.

-- 
Martijn Pieters
| Software Engineer            mailto:mj@digicool.com
| Digital Creations          http://www.digicool.com/
| Creators of Zope               http://www.zope.org/
| ZopeStudio: http://www.zope.org/Products/ZopeStudio
-----------------------------------------------------