Model-Glue和Railo Application.cfc

时间:2009-06-03 01:08:10

标签: coldfusion railo application.cfc model-glue

我正在尝试在Railo上启动测试MG应用程序并且遇到障碍。 当我访问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 个答案:

答案 0 :(得分:5)

要考虑的一件大事:通过CFML语言的历史,它始终是按值传递数组的标准行为,而不是通过引用。从语言的早期开始就存在这种情况,与许多其他编程语言的行为相反,但是从什么时候CF有什么问题违反惯例? (例如,数组以1而不是0开始编号)。

另一方面,Railo通过引用传递数组,按值传递,作为其默认行为。您可以看到这可能会导致其他框架出现问题。为了解决此兼容性问题,Railo允许您使用cfargument标记的“passby”属性来指定任何param作为值或引用。像这样:

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

当然,这意味着必须为Railo重写一些框架,因为这会破坏与Adobe ColdFusion的完全兼容性。

转移ORM现在完全打破了Railo以及此特定问题的结果,以及Railo和CF8之间的其他行为故障。 Model Glue和其他现有的CF框架不会出现类似的故障。

答案 1 :(得分:5)

在Railo 3.1 final(或以下其中一个补丁)中,我们将在Railo管理员中设置兼容性选项卡,允许您将passby值设置为Railo中的默认行为。然后,您可以启用此设置,从而使Transfer和ModelGlue III运行良好。这里的旁注是passby属性不会破坏现有的CF代码。它只被视为CFARGUMENT元数据。

我们老实说将此视为Coldfusion中的错误,但由于兼容性要求,我们将调整此行为并使其在Railo Administrator中可选。

格特弗兰兹 Railo开源

答案 2 :(得分:0)

我会将此记录为railo bug tracker中的错误。他们通常很擅长解决这些错误,以便流行的coldfusion框架在他们的平台上运行。