Модель-клей и Railo Application.cfc

Я пытаюсь запустить тестовое приложение MG на Railo и попал в ловушку. Когда я захожу в приложение MG, я получаю:

Railo 3.1.0.012 Error (Java.lang.classformaterror)
Message         Invalid index 16 in LocalVariableTable in class file
application_cfc$cf
Java Stacktrace

Invalid index 16 in LocalVariableTable in class file application_cfc
$cf
        at java.lang.ClassLoader.defineClass1(Native Method):-2
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621):621
        at java.lang.ClassLoader.defineClass(ClassLoader.java:401):401
        at railo.commons.lang.PhysicalClassLoader.loadClass
(PhysicalClassLoader.java:116):116
        at railo.runtime.PageSourceImpl.compile(PageSourceImpl.java:225):225
        at railo.runtime.PageSourceImpl.loadPhysical(PageSourceImpl.java:167):
167
        at railo.runtime.PageSourceImpl.loadPage(PageSourceImpl.java:102):102

Я провел небольшое тестирование и обнаружил, что когда в Application.cfc происходит следующее:

<cfloop from="1" to="#arrayLen(mgInstances)#" index="i">
    <cfset mgInstances[i].executeEvent(arguments.eventName, values) />
</cfloop>

Я получаю ошибку. Если я удаляю эту часть, я начинаю получать:

Message         Application context not loaded!
Error Code
org.coldspringframework.webApplicationContextProxy.cantLoadApplicationContext

Итак, я предполагаю, что в Application.cfc строка:

<cfset var mgInstances = createObject
    ("component","ModelGlue.Util.ModelGlueFrameworkLocator").findInScope
    (appScope) />

Терпит неудачу.

У кого-нибудь еще есть проблемы с этим? Какие-либо решения? Спасибо!!!

3 ответа

В финале Railo 3.1 (или одном из следующих патчей) у нас будет вкладка совместимости в администраторе Railo, которая позволяет вам установить значение passby в качестве поведения по умолчанию в Railo. Затем вы можете включить эту настройку и, следовательно, заставить Transfer и ModelGlue III работать нормально. Здесь просто замечание, что атрибут passby не нарушает существующий код CF. Это просто обрабатывается как метаданные CFARGUMENT.

Мы искренне считаем это ошибкой в ​​Coldfusion, но из-за требований совместимости мы адаптируем это поведение и сделаем его необязательным в Railo Administrator.

Герт Франц Райло с открытым исходным кодом

Следует учитывать одну важную вещь: в истории языка CFML всегда было стандартное поведение для передачи массивов по значению, а не по ссылке. Это было чем-то, что существовало с самых первых дней существования языка, вопреки поведению многих других языков программирования, но с каких пор у CF возникли проблемы с нарушением соглашения? (например, массивы начинают свою нумерацию с 1 вместо 0).

Railo, с другой стороны, передает массивы по ссылке, а не по значению, как его поведение по умолчанию. Вы можете увидеть, как это может вызвать проблемы с другими платформами. Чтобы устранить эту проблему совместимости, Railo позволяет вам использовать атрибут passby тега cfargument для обозначения любого параметра как значения или ссылки. Вот так:

<cfargument name="myArray" type="array" required="true" passby="value" />

Конечно, это означает, что некоторые фреймворки придется переписать для Railo, так как это нарушает полную совместимость с Adobe ColdFusion.

Передача ORM на Railo сейчас полностью нарушена, как и результат этой конкретной проблемы, а также других сбоев в поведении между Railo и CF8. Не исключено, что Model Glue и другие существующие CF-фреймворки будут страдать от подобных глюков.

Я записал бы это как ошибку в трекере ошибок Railo. Как правило, они довольно хорошо решают эти ошибки, так что популярные платформы Coldfusion работают на их платформе.

Другие вопросы по тегам