[Seaside] How to add GLORP to a Seaside application?

Martin J.Laubach mjl at laubach.at
Sun Jan 30 17:48:36 CET 2005


   While trying to build a simple database based application with 
Seaside, I tripped
over the question how to do it so it would work as intended. I'm trying 
to do it
with GLORP, and the following problems arose:

   In my main task do something like:

   Problem #1:

	MyComponent>>go
		openDatabaseConnection.
		self call: mySubComponent.
		closeDatabaseConnection

   If the user goes out for a coffee or closes his browser never to 
return, the
database connection stays open until, well, basically hell freezes 
over. Not good,
there are only that many connections possible. I probably need 
something that gets
executed as soon as the session times out. Wrapping the whole thing 
with #ensure:
does not seem to do the right thing, the ensure block is executed all 
the time, not
just when the #call: returns.


   Problem #2:

	MySubComponent>>renderContentOn: html
		| t |
		db transact: [
			t := readObjectFromDatabase.
			html anchorWithAction: [ t setSomeField: 'somevalue' ].
			self commitTransaction ]

   This quite obviously can't work, since the callback is invoked when 
the
transaction is already committed. When no transaction is in progress, 
GLORP
seems no to care for instanciated objects any more, so any change is 
lost.


   I arrived at a workaround that looks like

	MySubComponent>>renderContentOn: html
		| t |
		t := readObjectFromDatabase.
		html anchorWithAction: [ db transact:
			[ db refresh: t. t setSomeField: 'somevalue' ]].

   but that looks as if it will totally destroy performance and also 
makes the
whole exercise of using GLORP in the first place rather pointless -- 
when I
have to re-register all objects with the database layer manually, I 
might as
well scribble manually to the database, avoiding GLORP alltogether.

   Are there any examples out there how to use glorp and Seaside 
together?
Or perhaps GLORP is the wrong thing to look at and it's completely 
inappropriate?

   Thanks,

	mjl



More information about the Seaside mailing list