内から含まれている場合、それはすべての要求間で共有されるように、私は自分のアプリケーションのスコープ内のコンポーネントを配置していますし、それはAAのCFMテンプレートが含まれています同時実行性とスコープの問題CFMは、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>
あるテンプレートを含まれているだけで配列を作成し、配列の長さではない、それはerror.log
ファイルへの書き込みを行う場合には、どうあるべきかでチェックします。私はそれに負荷(100並行スレッド)を実行した場合
<cfset tmp = [
"one",
"two",
"three"
]/>
<cfif ArrayLen(tmp) neq 3>
<cffile action="append"
file="#ExpandPath("error.log")#"
output="Length = #ArrayLen(tmp)#"/>
</cfif>
私が手に次のことを私のに表示されるアイテム210ファイル...
ERROR: element at position 3 of array variable "___IMPLICITARRYSTRUCTVAR0" cannot be found.
Length = 0
Length = 2
注私は、Java 1.7.0_09の岩下ColdFusionの9.0.1.274733を使用しています。私はRailoを同じJREでテストしましたが、うまくいきます。
追加以下はまた、構造体にtmp
変数を変更し、問題が発生し、どこにも参照されないvariables
範囲でランダムにアイテムを追加...
<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>
含みます最初のテンプレートと非常に似ているテンプレートは、次のようになります。
<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>
y範囲variables
の項目を削除しても問題ありません。 #variables#
と#local#
をテンプレートにダンプすると、すべてが予想どおりになります。
(コメントからの更新)
私は以来、あなたが唯一の要求は、変更することが許可されていることを確認するためにあなたのタグの周りにいくつかのロックを追加することを検討可能性があるbug #3352462
ここのリンクは関連性がありますか:https://duckduckgo.com/?q="___IMPLICITARRYSTRUCTVAR0 "? –
はい、同様の問題を指摘する可能性があります。good find –
'ArrayNew(1)'を使用して短い手書き表記を使用し、各項目を個別に設定すると、期待通りに動作するように見えます。 –