2009-12-20 3 views
2

Я должен использовать переменную (набор результатов запроса) в ColdFusion, которая будет получать результаты из другой прикладной БД и хранится в приложении Coldfusion.Является ли onApplicationStart хорошей идеей в ColdFusion?

Основная идея заключается в том, что мне нужно вызвать другую БД приложения только во время запуска сервера и кэшировать результаты локально. И мне нужно прочитать переменную на других страницах в моем приложении. Я не буду перезаписывать эту переменную на любой странице.

При поиске в Google я нашел, что 'onApplicationStart' полезно назначить переменные в момент запуска приложения.

Использует ли штраф onApplicationStart или есть ли другой способ? Мы можем назначить переменную во время запуска (один раз).

Если onApplicationStart в порядке: как использовать? Может быть, любая ссылка, где это объясняется ясно, полезна.

+0

Какая версия ColdFusion? Если вы находитесь на CF9, посмотрите на тег CFCACHE. – kevink

+0

Я использую Coldfusion 8 – CFUser

ответ

8

Ну, это зависит. Как часто обновляются данные запроса? Если это действительно не меняется, то onApplicationStart() - прекрасное место для его размещения. Однако, если он будет меняться каждый раз так часто, вы можете просто указать Coldfusion на cache the query для a certain period of time, тогда вам не нужно возиться с onApplicationStart(), но когда вы вызываете запрос, он автоматически возвращает результат кэширования (в пределах вашего указанный период времени).

Независимо от этого, я бы написал пользовательскую функцию для извлечения данных. Тогда будет тривиально вызывать его из onApplicationStart() или в другом месте.

Startup.cfc: (Названный все, что вам нравится)

<!--- Replace the datasource name with your db name ---> 
<cffunction name="getStartupQuery" hint="Returns a query recordset for startup"> 
    <cfargument name="datasource" required="no" type="string" default="OtherAppDB"> 
    <!--- Init the query variable ---> 
    <cfset var result = queryNew("id")> 

    <!-- Get the query dataset ---> 
    <cfquery name="result" datasource="#arguments.datasource#"> 
     YOUR QUERY HERE 
    </cfquery> 

    <cfreturn result> 
</cffunction> 

Application.cfc: (всего важные части)

<cffunction name="onApplicationStart"> 
    <!--- init the startup.cfc, then retrieve the data 
    and save it to the application scope. Remember the component name must match 
    your component above ---> 
    <cfset var startup = createObject("component", "startup")> 
    <cfset application.varFromOtherDB = startup.getStartupQuery()> 
    <cfreturn true> 
</cffunction> 

Теперь, вы должны быть в состоянии получить доступ к этой переменной из любого CFM или CFC в приложении с помощью:

<cfset myNewVar = application.varFromOtherDB> 
or 
#application.varFromOtherDB# 

Если вы используете метод onApplicationStart(), я очень прн ommend, реализующий метод для повторного использования приложения. Например, see this other discussion.

+0

Эй, Дэн, это очень приятно. Я уверен, что мне не нужно повторно инициализировать этот запрос отдельно от запуска приложения, так как значения Query из другого DB меняются редко. Поэтому я не хочу называть это каждый раз. Но одна Удивительная вещь в моем приложении у нас нет «Application.cfc» (я думаю, что они недавно обновились до CF8 от CF7, поэтому не реализовали его). Но мы используем файлы Application.cfm для установки переменных, общих для всех страниц. Как вы думаете, приведенный выше код в Appliaction.cfc мы можем использовать в Application.cfm (который включен во все страницы) или вам нужно создать новый Application.cfc? – CFUser

+0

Используете ли вы application.cfm и тег ? У меня нет опыта с методом application.cfm, поэтому я буду откладывать другие ответы на этот вопрос. Большая часть кода останется прежней. Возможно, вам понадобится исследовать подходящий способ задания области приложения vars с помощью application.cfm: http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=appFramework_16.html –

+0

С http://livedocs.adobe.com/coldfusion/8/htmldocs/AppEvents_01.html: «Если ваше приложение имеет Application.cfc и Application.cfm или onRequestend.cfm, ColdFusion игнорирует страницы CFM ». Я считаю, что лучше использовать тот или иной метод. Метод onRequest даст вам ту же возможность запускать скрипты до того, как фактически будет выполнена страница cfm. – Eddie

 Смежные вопросы

  • Нет связанных вопросов^_^