Jestem umieszczenie elementu w moim zakresie aplikacji tak, że jest wspólna dla wszystkich żądań i zawiera aa CFM szablonu:współbieżności i scoping problemy podczas CFM wliczone jest od wewnątrz CFC
<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>
szablonu, który jest wchodzących po prostu tworzy tablicę i sprawdza długość tablicy jest to, co powinno być, jeśli nie zapisuje go do pliku error.log
:
<cfset tmp = [
"one",
"two",
"three"
]/>
<cfif ArrayLen(tmp) neq 3>
<cffile action="append"
file="#ExpandPath("error.log")#"
output="Length = #ArrayLen(tmp)#"/>
</cfif>
Gdybym wtedy uruchomić ładunek po nim (z 100 jednoczesnych wątków) pojawia się następujący elementy pojawiające się w moim error.log
plik ...
ERROR: element at position 3 of array variable "___IMPLICITARRYSTRUCTVAR0" cannot be found.
Length = 0
Length = 2
Uwaga Używam ColdFusion 9.0.1.274733 ontop Java 1.7.0_09. Testowałem Railo na tym samym JRE i działa dobrze.
dodatkowe następujące przyczyny również problem, zmieniając zmienną tmp
do struktury i dodanie elementu losowego w zakresie variables
że nie odwołuje nigdzie ...
<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>
który obejmuje szablon bardzo podobny do pierwszego, który wygląda tak ...
<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>
Jeśli ou usunąć przedmiot z zakresu variables
, który działa poprawnie. Jeśli wyrzucisz w szablonie #variables#
i #local#
, wszystko znajdzie się tam, gdzie można się tego spodziewać.
(Aktualizacja z komentarzami)
Mam ponieważ poruszyła tę kwestię jako bug #3352462
Czy którekolwiek z linków mają znaczenie: https://duckduckgo.com/?q="___IMPLICITARRYSTRUCTVAR0 "? –
Tak, wygląda na to, że może wskazywać na podobny problem, dobrze znaleźć –
Wpływa tylko na to, gdy używa się notacji krótkiej dla tablicy, używając 'ArrayNew (1)' i ustawienie każdego elementu indywidualnie wydaje się działać zgodnie z oczekiwaniami –