Модель-клей и Railo Application.cfc - PullRequest
0 голосов
/ 03 июня 2009

Я пытаюсь запустить тестовое приложение 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 ]

5 голосов
/ 05 июня 2009

Следует учитывать одну важную вещь: в истории языка 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-фреймворки будут страдать от подобных глюков.

5 голосов
/ 25 июня 2009

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

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

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

0 голосов
/ 03 июня 2009

Я бы регистрировал это как ошибку в railo bug tracker . Они, как правило, хорошо справляются с устранением этих ошибок, так что популярные платформы Coldfusion работают на их платформе.

...