[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r5062 - trunk/gnue-appserver/src
From: |
jan |
Subject: |
r5062 - trunk/gnue-appserver/src |
Date: |
Mon, 2 Feb 2004 13:20:24 -0600 (CST) |
Author: jan
Date: 2004-02-02 13:20:22 -0600 (Mon, 02 Feb 2004)
New Revision: 5062
Modified:
trunk/gnue-appserver/src/geasInstance.py
trunk/gnue-appserver/src/geasSessionManager.py
Log:
switch to gnue-common logic API to implement procedures
(python language is tested and works)
Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py 2004-01-31 19:36:05 UTC (rev
5061)
+++ trunk/gnue-appserver/src/geasInstance.py 2004-02-02 19:20:22 UTC (rev
5062)
@@ -24,6 +24,8 @@
import types
import mx.DateTime
import mx.DateTime.ISO
+from gnue.common.logic.language.Base import loadLanguageEngine,
LangIfRuntimeError
+from gnue.appserver.language import Object
# =============================================================================
# Instance class
@@ -263,27 +265,48 @@
# TODO: This should run in a separate process so that a segfaulting
# procedure doesn't kill appserver.
- # TODO: We should use gnue-common's logic interface here.
+ # (needs to be implemented as an option in gnue-common)
- from gnue.appserver.language import Object
-
# Create an object representing the current business object
obj = Object.Object (self._session.sm, self._session.id,
self._classdef.fullName,
{"gnue_id": self._getValue ("gnue_id")})
- # Compile the procedure code
+ # fetch the procedure definition
proceduredef = self._classdef.procedures [procedurename]
- procedure = compile (proceduredef.gnue_code,
- '<' + self._classdef.fullName + '.'
- + procedurename + '>',
- 'exec')
+ language = proceduredef.gnue_language
+
+ rtlist = self._session.sm._langRuntimes
+
+ if not rtlist.has_key(language):
+ self._session.sm._langRuntimes[language] = loadLanguageEngine(language)
+ rtlist = self._session.sm._langRuntimes
+
+ cx=rtlist[language].createNewContext()
+ cx.bindObject('self', obj, Object.Object)
+ cx.bindFunction('request', self._list._session.request)
+ cx.bindFunction('fetch', self._list._session.fetch)
+ cx.bindFunction('load', self._list._session.load)
+ cx.bindFunction('store', self._list._session.store)
+ cx.bindFunction('call', self._list._session.call)
+ try:
+ method = cx.buildMethod(proceduredef.gnue_name, proceduredef.gnue_code)
+ retcode = method(params)
+ except Exception, msg:
+ print "Error occured during method invokation: %s" % msg
+ retcode = -1
+
+ # procedure = compile (proceduredef.gnue_code,
+ # '<' + self._classdef.fullName + '.'
+ # + procedurename + '>',
+ # 'exec')
+
# Execute the procedure, where "self" is the current object
- exec procedure in {}, {'self': obj}
+ #exec procedure in {}, {'self': obj}
# Save changes made by the procedure
obj.store ()
# return value of '1' to make XMLRPC happy
- return 1
+ return retcode or 1
Modified: trunk/gnue-appserver/src/geasSessionManager.py
===================================================================
--- trunk/gnue-appserver/src/geasSessionManager.py 2004-01-31 19:36:05 UTC
(rev 5061)
+++ trunk/gnue-appserver/src/geasSessionManager.py 2004-02-02 19:20:22 UTC
(rev 5062)
@@ -51,6 +51,7 @@
# TODO: load default authagent depending on config setting
self._authAdapter = geasAuthentication.geasDBAuthAgent
(self._internalSession)
+ self._langRuntimes = {}
# ---------------------------------------------------------------------------
# Build an internal session
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5062 - trunk/gnue-appserver/src,
jan <=