ventajas tutorial que espaƱol ejemplos desventajas descargar coldfusion coldfusion-9 cfc

tutorial - coldfusion ventajas y desventajas



Problemas de concurrencia y alcance cuando se incluye CFM dentro de un CFC (3)

En su primer ejemplo, ¿hay alguna diferencia si declara tmp como una matriz en lugar de un booleano?

<cfset var tmp = ArrayNew(1) />

en lugar de...

<cfset var tmp = false />

Estoy colocando un componente en el ámbito de mi aplicación para que se comparta con todas las solicitudes e incluye una plantilla cfm:

<cfcomponent output="false"> <cffunction name="run" output="false" returntype="void"> <cfset var tmp = false/> <cftry> <cfinclude template="inc.cfm"/> <cfcatch> <cffile action="append" file="#ExpandPath("error.log")#" output="ERROR: #cfcatch.message#"/> </cfcatch> </cftry> </cffunction> </cfcomponent>

La plantilla que se está incluyendo simplemente crea una matriz y comprueba que la longitud de la matriz es la que debería ser, si no la escribe en el archivo error.log :

<cfset tmp = [ "one", "two", "three" ]/> <cfif ArrayLen(tmp) neq 3> <cffile action="append" file="#ExpandPath("error.log")#" output="Length = #ArrayLen(tmp)#"/> </cfif>

Si luego ejecuto una carga a través de él (100 hilos concurrentes) obtengo los siguientes elementos que aparecen en mi archivo error.log ...

ERROR: element at position 3 of array variable &quot;___IMPLICITARRYSTRUCTVAR0&quot; cannot be found. Length = 0 Length = 2

Tenga en cuenta que estoy usando ColdFusion 9.0.1.274733 ontop de Java 1.7.0_09. He probado Railo en el mismo JRE y funciona bien.

Adicional Lo siguiente también causa un problema, cambiando la variable tmp por una estructura y agregando un elemento aleatorio en el ámbito de las variables que no se menciona en ninguna parte ...

<cfcomponent output="false"> <!--- Some random variable that does nothing with the exception of being the facilitator of my eternal pain ---> <cfset variables.t = {}/> <cffunction name="run" output="false" returntype="void"> <cfset var tmp = {}/> <cftry> <cfinclude template="inc2.cfm"/> <cfcatch> <cffile action="append" file="#ExpandPath("error.log")#" output="ERROR: #cfcatch.message#"/> </cfcatch> </cftry> </cffunction> </cfcomponent>

Que incluye una plantilla, muy similar a la primera, que se parece a esto ...

<cfset tmp.arr = [ "one", "two", "three" ]/> <cfif ArrayLen(tmp.arr) neq 3> <cffile action="append" file="#ExpandPath("error.log")#" output="Length = #ArrayLen(tmp.arr)#"/> </cfif>

Si elimina el elemento en el ámbito de variables , funciona bien. Si coloca #variables# y #local# en la plantilla, todo está donde usted esperaría que fuera.

(Actualización de comentarios)

Desde entonces he planteado este problema como un error # 3352462


Esto se basa en los propios comentarios de Peter / your.

Ha habido / hay varios errores con la noción de taquigrafía de matriz y estructura, y lo han sido desde que CF8 introdujo la sintaxis. El enfoque de Adobe para arreglarlos ha sido un poco como golpear una mole en lugar de un esfuerzo para resolver el problema una vez, y correctamente. Parece que has encontrado otro ejemplo de esto. Sin embargo, sería interesante ver si esto aún existe en CF10, ya que sé que arreglaron un poco más durante su ciclo de desarrollo.

La única forma de evitarlo es no usar esa notación en situaciones en las que vea estos problemas.

¿Podrías enviar un error para que Adobe lo sepa?

También es ligeramente notable, pero no relacionado con su problema específico aquí: CF aún no es compatible con Java 1.7. Es posible que desee tener eso en cuenta.


Puede considerar agregar un bloqueo alrededor de su etiqueta para asegurarse de que solo una solicitud pueda modificar el archivo.