2010-06-25 13 views

Odpowiedz

21

Jeśli korzystasz z aplikacji Application.cfc, możesz ją zaktualizować, aby móc wymusić wywołanie onApplicationStart(), jeśli w adresie URL podano coś konkretnego lub coś podobnego. Po prostu zaznacz to magiczne token w onRequestStart() i wywołaj onApplicationStart(), jeśli tak jest.

Jeśli nie, możesz spróbować sugestii @ Marcosa. Nie jestem pewien, jakie konsekwencje mogą mieć w twojej aplikacji. Sugerowałbym zmianę nazwy Twojej aplikacji, więc zaczyna się ona jako nowa aplikacja.

0

Zwykle umieszczam odsyłacz do sesji każdego użytkownika w strukturze w moim zakresie aplikacji, aby monitorować, co dzieje się w aplikacji. Może może pomóc tutaj robienie czegoś podobnego w zakresie serwera. Spróbuj:

< CFSET server.runningApplications [ "MojaApl"] = Aplikacja/>

Wtedy masz odniesienie do rzeczywistego obiektu Application poza zakres tego wniosku. Możesz spróbować wszystkich destrukcyjnych rzeczy, aby się go pozbyć. Wypróbuj to na własne ryzyko !!! Zrób to na serwerze dev zanim zrobisz to na swoim polu produkcyjnym. ;)

19

Jeśli jesteś na CF9 uruchom ApplicationStop()https://cfdocs.org/applicationstop

+6

To jedyne "poprawne" rozwiązanie (i musisz być na CF9). Cała reszta to wątpliwe obejście z potencjalnymi problemami bezpieczeństwa wątków. –

3
<cfset structClear(application) /> 
+0

gdzie jest odpowiedź? – Henry

+0

Wyświetlana sugestia. : - \ Użyj podglądu. Również ta sugestia została już wydana.Jeśli się zgodzisz, zagłosuj na tę sugestię. Nie przesyłaj go ponownie. –

0

Korzystając cfinvoke.

+2

Nie sądzę, aby funkcja onApplicationEnd() zrobiła coś użytecznego, jeśli chodzi o ponowne uruchomienie aplikacji. Na CF8/CFMX7 wywołanie metody onApplicationStart() jest najbliższe oczekiwanemu zachowaniu - ale pamiętaj, że nie będzie to bezpieczne dla wątków: CF automatycznie pojedyncza wywołuje wątki do onApplicationStart() KIEDY IT CALLS IT, ale możesz " Zrób to, kiedy to nazwiesz. W CF9, applicationStop() jest prawidłowym sposobem na zrobienie tego. –

4

Oto moja wersja CF7/CF aplikacji ApplicationStop CF9. Wierzę, że jest to bezpieczne dla wątków, zauważając komentarz Seana.

<cffunction name="ApplicationStop" returntype="boolean" output="false"> 
<cfif IsDefined('application')> 
    <cftry> 
    <!--- This is just in case there's no app scope but variables.application ---> 
    <cfset CreateObject('java', 'coldfusion.runtime.ApplicationScopeTracker').cleanUp(application) /> 
    <cfreturn true /> 
    <cfcatch type="any"></cfcatch> 
    </cftry> 
</cfif> 
<cfreturn false /> 
</cffunction> 

Jak wspomniano przez Henry'ego, on jest moim blogu na ten temat: http://misterdai.wordpress.com/2010/06/14/cf-flag-application-to-run-onapplicationstart-part-2/

3

Mniej inwazyjny sposób kończąc swoją aplikację jest tymczasowo ustawić ApplicationTimeout do czegoś bardzo krótki.

Oto przykład z pliku application.cfc gdzie aplikacja jest ustawiony limit czasu na 10 sekund, co jest bardzo krótki do dokonywania zmian, a następnie zaglądać:

<cfcomponent displayname="Application"> 
    <cfscript> 
     this.name = "myAppName"; 
     this.setclientcookies="yes"; 
     this.sessionmanagement="yes"; 
     this.sessiontimeout= CreateTimeSpan(0,0,60,0); 
     this.applicationTimeout= CreateTimeSpan(0,0,0,10); 
    </cfscript> 
    ... 
</cfcomponent> 

może być konieczne, aby ograniczyć sesja też. Zobacz this article by Ben Nadel, aby uzyskać szczegółowe omówienie limitów czasu dla aplikacji i sesji.

2

Jeśli używasz application.cfc, trzymać to na szczycie swojej funkcji onRequestStart:

<!--- RESET APP? ---> 
<cfif isdefined("url.reinit")> 
    <cfset OnApplicationStart()> 
    <cfset OnSessionStart()> 
</cfif> 

Następnie można przejść do dowolnego var url CFM a aplikacja zostanie zresetowany.

Powiązane problemy