2009-06-03 11 views
0

Ich versuche, eine Test-MG-App auf Railo zu starten und stoße auf einen Haken. Wenn ich die MG App besuchen erhalte ich:Model-Glue und Railo Application.cfc

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 

Ich habe ein bisschen von Tests durchgeführt und festgestellt, dass, wenn die folgende in Application.cfc passiert:

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

ich den Fehler. Wenn ich diesen Teil entfernen beginne ich immer:

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

Also, ich nehme an, dass in Application.cfc, die Zeile:

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

versagt.

Hat jemand anderes Probleme damit? Irgendwelche Lösungen? Vielen Dank!!!

Antwort

0

Ich würde dies als ein Fehler in der railo bug tracker protokollieren. Sie sind in der Regel ziemlich gut darin, diese Fehler zu beheben, so dass gängige Coldfusion-Frameworks auf ihrer Plattform funktionieren.

5

Eine große Sache zu beachten: Durch die Geschichte der CFML-Sprache war es immer das Standardverhalten, Arrays nach Wert, nicht per Referenz zu übergeben. Dies war etwas, das seit den frühesten Tagen der Sprache existiert, im Gegensatz zu dem Verhalten vieler anderer Programmiersprachen, aber seit wann hat CF Probleme, sich der Konvention zu widersetzen? (Arrays beginnen ihre Nummerierung beispielsweise mit 1 anstelle von 0).

Railo, auf der anderen Seite, übergeben Arrays als Referenz, nicht nach Wert, als sein Standardverhalten. Sie können sehen, wie dies Probleme mit anderen Frameworks verursachen könnte. Um dieses Kompatibilitätsproblem zu beheben, können Sie in Railo das "passby" -Attribut des cfargument-Tags verwenden, um einen beliebigen Parameter als Wert oder Verweis festzulegen. Wie so:

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

Natürlich bedeutet dies, dass einige Rahmenbedingungen für Railo neu geschrieben werden haben werden, da diese die volle Kompatibilität mit Adobe Coldfusion bricht.

Transfer ORM ist auf Railo genau jetzt gebrochen, sowie ein Ergebnis dieses besonderen Problems, sowie andere Störungen im Verhalten zwischen Railo und CF8. Es ist nicht unwahrscheinlich, dass Model Glue und andere bestehende CF-Frameworks ähnliche Störungen erleiden.

+0

Dank für dieses Juwel! Oh, und eigentlich habe ich Transfer auf Railo laufen. Hibernate auch :) ColdBox hält auch gut mit Railo zusammen :) – user115212

+0

Wie viel Änderung des Transfer-ORM-Codes (oder Ihrer eigenen bestehenden Übertragung.XML-Datei) musste Transfer auf Railo laufen? –

5

In Railo 3.1 final (oder einem der folgenden Patches) haben wir im Railo-Admin einen Kompatibilitätsreiter, mit dem Sie den Passby-Wert als Standardverhalten in Railo einstellen können. Sie können diese Einstellung dann aktivieren und Transfer und ModelGlue III so gut laufen lassen. Nur eine Randbemerkung hier ist, dass das Passby-Attribut vorhandenen CF-Code nicht bricht. Es wird nur als CFARGUMENT-Metadaten behandelt.

Wir sehen dies ehrlich gesagt als Fehler in Coldfusion, aber aufgrund der Kompatibilitätsanforderungen werden wir dieses Verhalten anpassen und im Railo Administrator optional machen.

Gert Franz Railo Open Source

+0

Ich kann diese Funktionalität in meinem Railo nicht finden (Railo 3.1.1.000 final). Ich übersehe das wahrscheinlich nur. Können Sie genauere Angaben darüber machen, wo die Einstellung angepasst werden kann? –