今天在修复现有代码中的错误时,我发现了一个奇怪的错误。
分支目标偏移量太大而不能
搜索后我发现它与Java字节码转换有关。以下是我找到的链接:
在我的情况下,cftransaction包含大约870个语句,并且它工作正常。但我需要在此事务中再添加2个查询。现在,当我在cftransaction中添加一行代码时,我收到此错误。目前我无法将任何现有的cfquery移出cftransaction。
以下是代码的整体结构:
<cftransaction action="begin">
<cfif URL.action eq 'add'>
Around 200 lines of queries/statements
<cfelseif URL.action eq 'edit'>
Around 200 lines of queries/statements
</cfif>
<cfif URL.action eq 'add' or URL.action 'edit'>
Around 450 lines of queries/statements
</cfif>
</cftransaction>
是否有解决此问题的解决方法?
答案 0 :(得分:2)
分支偏移量与模块/功能的大小有关。它也可能是由cfif/cfelse
或cfswitch
的大条件代码块引起的。
从技术上讲,我不确定是否有任何上限。可以放在cftransaciton
块中的查询。它与从CF8到CF9的代码迁移无关,而与条件块内代码的长度无关。
我想分割函数并尝试将每个大尺寸条件块作为单独的函数放在cfc中:
<cffunction name="myFunc1">
<cftransaction action="begin">
<cfif URL.action eq 'add'>
<!--- function call with your xxx lines of queries/statements --->
<cfinvoke component="MyCfc" method="firstQueryBlock" result="result1">
<cfelseif URL.action eq 'edit'>
<!--- second function call with your yyy lines of queries/statements --->
<cfinvoke component="MyCfc" method="secondQueryBlock" result="result2">
</cfif>
<cfif URL.action eq 'add' or URL.action 'edit'>
<!--- third function call with your zzz lines of queries/statements --->
<cfinvoke component="MyCfc" method="thirdQueryBlock" result="result3">
</cfif>
</cftransaction>
</cffunction>