2017-02-23 3 views
0

Je suis nouveau à coldfusion et je tente le ORM (Hibernate, je crois, que je ne sais pas du tout)demandes simultanées de base de données ORM coldfusion ne

je suis tombé sur un problème en essayant d'appeler deux Pages CF en succession rapide. Le code sur les deux pages est super simple:

getAppointments.cfm:

<cfscript> 
    ORMReload(); 
    appointments = serializeJSON(EntityLoad("Appointment")); 
</cfscript> 

<cfoutput>#appointments#</cfoutput> 

getRooms.cfm:

<cfscript> 
    ORMReload(); 
    rooms = serializeJSON(EntityLoad("Room")); 
</cfscript> 

<cfoutput>#rooms#</cfoutput> 

Le code que j'utilise pour les appeler est jQuery/AJAX:

var appointments; 
var rooms; 

$(document).ready(function() { 
    loadAppointments(); 
    loadRooms(); 
}); 

function loadAppointments() { 
    $.ajax({ 
     type: 'get', 
     url: 'getAppointments.cfm' 
    }).done(function (response) { 
     appointments = JSON.parse(response); 
    }).fail(function (response) { 
     var message = response.status + " - " + response.statusText; 
     alert("Failed to load appointments: " + message); 
    }); 
} 

function loadRooms() { 
    $.ajax({ 
     type: 'get', 
     url: 'getRooms.cfm' 
    }).done(function (jsonString) { 
     rooms = JSON.parse(jsonString); 
    }).fail(function (response) { 
     var message = response.status + " - " + response.statusText; 
     alert("Failed to load rooms: " + message); 
    }) 
} 

Si je définis un point d'arrêt pour mettre en pause l'exécution avant l'appel de loadRooms(), tout va bien. Si je laisse le code s'exécuter directement, j'obtiens une erreur 500, il est donc évident que je rencontre un problème de concurrence avec l'ORM en raison de la nature asynchrone des appels AJAX. Je cours CF sur IIS (localhost), avec une base de données SQL Server. Aucun des tutoriels sur CF que j'ai vu ne couvre ce genre de scénario. Je sais que je pourrais reporter l'exécution dans les fonctions JS, mais cela ne ferait que masquer le problème sous-jacent.

Quelqu'un peut-il me diriger vers une solution? Y at-il quelque chose de similaire à un verrou C# disponible dans CF?

Répondre

1

Vous postulez ORMReload() à chaque appel qui est à l'origine de recharger toutes les entités, claires ORM cache etc.

S'il vous plaît lire sur ORMReload(), il ne doit être utilisé qu'une seule fois à chaque fois que vous effectuez des modifications dans votre entité CFC.

+0

La fonction EntityLoad nécessite un nom + un critère/un identifiant, veuillez en lire plus à ce sujet https://cfdocs.org/entityload – Sana

+0

Merci, en supprimant ORMReload, vous avez résolu le problème! Je pensais que c'était nécessaire parce que tous les tutoriels que j'ai regardés l'incluent en haut de chaque page qui utilise l'ORM. Donc j'ai juste besoin de l'inclure quand une page crée, met à jour ou supprime le CFC, mais pas pour une lecture? –