I'm very interested in any work on adding mixin classes to Application or subclassing Application. In addition to database pooling, there are many examples of runtime caches that can be maintained by the application. We subclass Application to add in additional caching services for pieces of servlet output and a content scheduling system.
I've extended AppServer to allow specification of Application classes based on the configuration file. The methodology is borrowed from WebKit's ServletFactory, we read in the class name from the config file and look for it in the main WebKit path. It's a bit of a hack. I'd like to switch this so it searches the python path or something. Here's the change to AppServer.createApplication() and the new method, AppServer.applicationClassName(): def createApplication(self): ''' Creates and returns an application object. Invoked by __init__. Reads the configurable ApplicationClassName setting ''' appClass = self.applicationClassName() return appClass(server=self) def applicationClassName(self): name = self.setting('ApplicationClassName') print 'Appserver creating Application class: ' + name path = self.serverSidePath(name + '.py') g = globals() execfile(path, g) assert g.has_key(name), 'AppServer: Cannot find %s in file %s.' % (name,path) appClass = g[name] assert type(appClass) is ClassType, 'AppServer: %s is not a ClassType.' % appClass assert issubclass(appClass, Application), 'AppServer: %s is not a subclass of Application.' % appClass return appClass Note that OneShotAppServer.createApplication() must be changed, as well. This is based on 0.5.1rc3 source. Cheers, Ben -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On Behalf Of Geoff Talvola Sent: Wednesday, October 24, 2001 4:23 PM To: Ben Parker; [EMAIL PROTECTED] Subject: RE: [Webware-discuss] A few patches That brings up the larger question of "where do I put resources that are global to the application?" I usually just put stuff like that into regular Python modules. Then whenever I need it, I just import the module (at which time it gets initialized) and use it. Sometimes I put in some helper methods into SitePage to make it more convenient to use within servlets. But the compelling reason to put this directly into Application is so that it can shutdown cleanly. I haven't needed that up till now. So perhaps there needs to be a more general way to register stuff into Application so that it initializes when the app starts up, is available throughout the whole application, AND shuts down cleanly when the appserver is stopped. But I still agree with Clark that specific stuff like this doesn't really belong directly in Application; rather, there needs to be a plug-in mechanism so that it's easy to add stuff like this into Application via a configuration setting. Like perhaps in Application.config, there could be a list of Python files with mixins that automatically get applied to Application. Or a way to substitute your own derived version of Application instead of the original Application. At 02:43 PM 10/24/01 -0400, Ben Parker wrote: >Second that. We've implemented centralized database access via the >Application object as well, and were planning on adding pooling support, but >now I'll most likely be switching our system over to Ken's patch. We >require central database access for a content scheduling system, which >manages content for the servlets. > >-----Original Message----- >From: [EMAIL PROTECTED] >[mailto:[EMAIL PROTECTED]]On Behalf Of Ken >Lalonde >Sent: Wednesday, October 24, 2001 10:47 AM >To: [EMAIL PROTECTED] >Cc: [EMAIL PROTECTED] >Subject: Re: [Webware-discuss] A few patches > > >Thanks for your comments, Clark. > >I'd argue for putting Application.getDbConnection() in the core >as follows: >- putting it in SitePage makes it inaccessible > to code that doesn't subclass SitePage. > For example, I keep WebKit session data in a postgresql database, > and the code to implement that is unrelated to SitePage. > The pool is logically part of the application, not the Page servlet. >- cleaning up DB connections at exit time is more awkward > when subclassing SitePage. I guess you can do it with atexit, > but it's messy, and some people won't bother. >- it took me a little fiddling around to figure out the best way > to do pooling connections, and I imagine others will > waste time reinventing the same thing. > Providing an application-wide connection pool with proper > cleanup at exit fills a very common developer need, > and is appropriate for the core. > > > From: "Clark C . Evans" <[EMAIL PROTECTED]> > > To: Ken Lalonde <[EMAIL PROTECTED]> > > Subject: Re: [Webware-discuss] A few patches > > > > Ken Lalonde wrote: > > | * WebKit/Application.py: > > | New method: getDbConnection() > > > > This is interesting, but I'm not sure that it should > > be added to the core of WebKit since it is certainly > > easy enough to add in one's SitePage.py > > > > Your other changes sound good. -- - Geoff Talvola [EMAIL PROTECTED] _______________________________________________ Webware-discuss mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/webware-discuss _______________________________________________ Webware-discuss mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/webware-discuss