Возможное состояние гонки при создании Struts в ColdFusion
я видел периодические ошибки в нескольких системах, которые ямы работали над тем, чтобы использовать ту же методологию (не тот же код), что привело меня к мысли, что проблема может быть связана с созданием и использованием структур в одном запросе. Я'мне интересно, если этотам возможносостояние гонки?
Сценарий таков: мыо системе электронной коммерции, о продукте или, в некоторых случаях, о списке продуктов. Рассматриваемый код предназначен для возврата изображений, связанных с каждым продуктом, в структуре, которую мы можем использовать для отображения указанных изображений.
В начале запроса код ищет записи базы данных, связанные с рассматриваемым элементом. Эти записи представляют изображения для продукта (ов). Эти записи возвращаются в одномCFQuery
вызов (или, точнее, вызов функции, которая возвращает результатыCFQuery
вызов, сформированный в структуру, содержащую различную информацию).
Затем код перебирает предоставленную структуру изображения и добавляет различную информацию в локальную структуру. Позже в запросе мы используем данные в структуре для отображения изображений в нашем<img>
теги. Мы также заполняем<img>
пометить сdata-
атрибуты для использования с JavaScript.
В случае, если какое-либо конкретное изображение не было правильно возвращено запросом - обычно из-за отсутствия физического файла - мы используем универсальное изображение-заполнитель. Это делается путем помещения создания структуры внутриtry/catch
блок.
Важно отметить:это работает.
Какие'однако происходит то, чтоочень периодическипри обращении к узлу в структуре мыПосле создания мы обнаруживаем, что его не существует, и CF выдает ошибку - это происходит, может быть, в 1% случаев, и при повторной загрузке той же страницы все будет отлично работать.
У нас была такая же проблема на нескольких системах, на нескольких серверах, в разных версиях ColdFusion (8 & 10, чтобы быть конкретным) и использование совершенно другого кода для достижения аналогичных результатов. Первая система, на которой я видел эту проблему, фактически использоваласьFileExists
чтобы проверить, доступен ли файл образа, и, таким образом, я подумал, что проблема, вероятно, была вызвана узким местом файловой системы - я пытался обойти это во многих случаях и в конечном итоге полностью исключил его в новой системе - но проблема сохраняется.
Единственное, о чем я могу думать, это то, что при создании структуры и последующем использовании этой структуры в том же запросеs вероятность возникновения состояния гонки; посредством чего я ссылаюсь на узел в структуре перед нимЗакончено быть созданным. Я'Я не использую потоки здесь, поэтому я могуна самом деле не вижу, как этовозможно ... ям из других идей.
Некоторый код ниже, чтобы показать, что яЯ делаю, но, учитывая, что та же проблема возникает в совершенно разных системах, я думаю, чтоs методология, а не код, который имеет проблему.
<img class="altProdImgcfif 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#">
Ошибка возникает в<img>
тег, когда ссылается на узел, созданный в предыдущем коде - что-то вроде:
Элемент ImageURL_image_02_Large не определен в Java-объекте типа класса coldfusion.runtime.LocalScope.
Но только очень редко ... Яперезагрузить и этоЯ буду отлично работать каждый раз.
Итак ... извините за эпическую длину вопроса, но кто-нибудь может увидеть, как это могло произойти?