close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 15 years ago

Closed 15 years ago

Last modified 14 years ago

#935 closed doubt (fixed)

error sobre "non declarative actions" en la carga de tolbase — at Version 4

Reported by: Jorge Conde Owned by: Víctor de Buen Remiro
Priority: high Milestone: Mantainance
Component: Kernel Version:
Severity: major Keywords: error, declarative, DBTable
Cc:

Description (last modified by Víctor de Buen Remiro)

En la carga de tolbase, usando la última versión -- 2.0.1 (b.0.40 alpha 2010-06-25 14:19:05 i686win) -- aparece el siguiente error

ERROR: [1] OIS: Sorry, non declarative actions are forbidden 
while Ois.UseModule is running. Cannot use DBTable

Por favor, se puede explicar la naturaleza (que son "non declarative actions") de tal error? Tiene alguna consecuencia en el uso posterior de tolbase, es decir, que no pueda usar Ois.UseModule conlleva que las variables afectadas no son definidas?

Change History (4)

comment:1 Changed 15 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: newclosed

En primer lugar eso no ocurre durante la carga de TOLBase sino de alguna cosa que carguéis con el iniProject.

El OIS es un sistema que hace una foto de un conjunto TOL y la almacena en disco. Los módulos OIS son los que se crean con Ois.UseModule, y son un caso particular de fotos OIS que se hacen a partir del conjunto generado por el Include de un archivo TOL que es sensible a los cambios en dicho fichero y todos los que se incluyan dentro de él de forma recursiva. Es decir si cambias un archivo de los necesarios para crear el OIS entonces el OIS se regenera y si no se carga directamente lo cual acelera los procesos de carga de código TOL.

El problema es que si en un módulo OIS haces una llamada a una función de la cual no es el resultado lo que necesitas si no los efectos secundarios que conlleva, como por ejemplo un DBTable en tu caso, entonces cuando recargues el OIS no se va a ejecutar esa acción no declarativa, si no que simplemente te devolverá el valor que diera en su día cuando se creó la foto.

Es decir, Ois.UseModule no es un sinónimo más rápido de Include sino que tiene restricciones, las cuales están en la documentación y me he cansado de repetirlas por activa y por pasiva sin que parezca que nadie me escuche. Gracias a una serie de cambios que he podido por fin acometer, el propio sistema OIS se encarga ahora de avisar de que lo que quieres fotografiar no "se está quieto" y va a salir "movido" en la foto por lo que esta es inválida y no te la dejará hacer hasta que quites esa orden.

Es decir, que no es que ahora tengas un nuevo error, es que siempre ha estado ahí pasando desapercibido con grave riesgo de que cosas que estuvieran mal pasaran por buenas, y ahora nos enteramos de que está mal.

Lo que hay que hacer es eliminar todas las llamadas no declarativas y sacarlas de los ficheros que se quieren compilar con Ois.UseModule y luego llamarlas todas juntas en otro fichero que se llame con Include.

comment:2 Changed 14 years ago by Víctor de Buen Remiro

De manera excepcional y sólo si se está muy seguro de lo que se hace se puede obligar a ejecutar una orden no declarativa dentro de un módulo mediante la función

Anything AvoidErr.NonDecAct(Anything expression)}  
/*
Avoid error message about not declarative actions while you are 
creating an OIS module. Use with great care and only if you really 
want to load during OIS not run these activities.
*/

comment:3 Changed 14 years ago by Víctor de Buen Remiro

Component: ASCII data filesKernel
Description: modified (diff)
Milestone: Mantainance

comment:4 Changed 14 years ago by Víctor de Buen Remiro

Description: modified (diff)
Note: See TracTickets for help on using tickets.