commit-gnue
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]