Possível condição de corrida criando Structs no ColdFusion

Tenho visto erros intermitentes em alguns sistemas em que tenho trabalhado, ao usar a mesma metodologia (não o mesmo código), levando-me a acreditar que o problema pode estar vinculado à criação e ao uso de estruturas na mesma solicitação. Eu estou querendo saber se é possível haver uma condição de corrida?

O cenário é o seguinte: estamos em um sistema de comércio eletrônico, olhando para um produto ou, em alguns casos, uma lista de produtos. O código em questão é projetado para retornar as imagens associadas a cada produto, em uma estrutura que podemos usar para exibição das imagens.

No início da solicitação, o código procura registros do banco de dados associados ao item em questão. Esses registros representam imagens para o (s) produto (s). Esses registros são retornados em um únicoCFQuery chamada (ou, mais precisamente, uma chamada para uma função que retorna os resultados de umaCFQuery chamada, moldada em uma estrutura contendo várias informações).

O código, em seguida, percorre a estrutura de imagem fornecida e adiciona várias informações a uma estrutura Local. Mais tarde, no pedido, usamos os dados na estrutura para exibir as imagens em nossa<img> Tag. Nós também povoamos o<img> tag comdata- atributos para uso com JavaScript.

No caso de uma determinada imagem não ter sido retornada corretamente pela consulta, geralmente porque falta o arquivo físico, usamos uma imagem de espaço reservado genérica. Isso é feito colocando a criação da estrutura dentro de umtry/catch quadra.

Importante:isso funciona.

O que está acontecendo, no entanto, é quemuito intermitentemente, quando nos referimos a um nó na estrutura que criamos, descobrimos que ele não existe e o CF lança um erro - isso acontece talvez 1% do tempo e recarregando a mesma página, tudo funcionará perfeitamente.

Eu tive esse mesmo problema em vários sistemas, em vários servidores, em diferentes versões do ColdFusion (8 e 10 para ser específico) e usando código completamente diferente para obter resultados semelhantes. O primeiro sistema em que vi esse problema foi realmente usadoFileExists para verificar se o arquivo de imagem estava disponível e, portanto, achei que o problema provavelmente foi causado pelo gargalo do sistema de arquivos - tentei muitas maneiras de contornar isso e, eventualmente, o elimine completamente no novo sistema -, mas o problema persiste.

A única coisa em que consigo pensar é que, ao criar uma estrutura e depois usar essa estrutura mais tarde na mesma solicitação, existe a possibilidade de ocorrer uma condição de corrida; por meio do qual eu me refiro a um nó na estrutura antes de terminar de ser criado. Eu não estou usando threading aqui, então eu não posso realmente ver como isso é possível ... Eu estou fora de outras idéias.

Algum código está abaixo para mostrar o que estou fazendo, mas dado que o mesmo problema surge em sistemas completamente diferentes, eu acho que é a metodologia e não o código que tem um problema.

<!--- Get product images --->
<cfset Local.stProductImages = Application.cfcParts.getPartImages(
        l_iItemID = Arguments.pid
) />


<!--- Loop through images --->
<cfloop list="#ListSort(structKeyList(Local.stProductImages['item_' & Arguments.pid]), 'text')#" index="i">
    <cftry>
        <cfset Local['ImageURL_' & i & '_Large']    = Local.stProductImages['item_' & Local.arguments.pid][i].large_watermarked.URL />
        <cfcatch>
            <cfset Local['ImageURL_' & i & '_Large']    = Application.com.Images.getMissingImages().large />
        </cfcatch>
    </cftry>                        
    <cftry>
        <cfset Local['ImageURL_' & i & '_Med']      = Local.stProductImages['item_' & Local.arguments.pid][i].med.URL />
        <cfcatch>
            <cfset Local['ImageURL_' & i & '_Med']      = Application.com.Images.getMissingImages().med />
        </cfcatch>
    </cftry>                        
    <cftry>
        <cfset Local['ImageURL_' & i & '_Small']        = Local.stProductImages['item_' & Local.arguments.pid][i].small.URL />
        <cfcatch>
            <cfset Local['ImageURL_' & i & '_Small']        = Application.com.Images.getMissingImages().small />
        </cfcatch>
    </cftry>                        

    <img class          = "altProdImg<cfif i EQ 'image_03'> endImage</cfif>" 
        src             = "#Local['ImageURL_' & i & '_Small']#" 
        image           = "#i#" 
        alt             = ""
        data-imgsmall   = "#Local['ImageURL_' & i & '_Small']#"
        data-imgmed     = "#Local['ImageURL_' & i & '_Med']#"
        data-imglarge   = "#Local['ImageURL_' & i & '_Large']#"
        data-imgnum     = "#i#"
        data-pid        = "#Arguments.pid#"
    />
</cfloop>

O erro ocorre no<img> tag, quando se refere a um nó criado no código anterior - Algo como:

O elemento ImageURL_image_02_Large é indefinido em um objeto Java da classe de tipo coldfusion.runtime.LocalScope.

Mas só muito ocasionalmente ... Vou recarregar e vai funcionar perfeitamente todas as vezes.

Então ... desculpe pela extensão épica da pergunta, mas alguém pode ver como isso poderia ocorrer?

questionAnswers(1)

yourAnswerToTheQuestion