2015-09-25 4 views
2

Я хотел бы объединить источники данных с сервера ColdFusion 8 на существующий сервер ColdFusion 9. Насколько я знаю, xml-форматы neo-datasources.xml обеих версий одинаковы.Расширение файла источника данных ColdFusion 9 с источниками данных ColdFusion 8

Я попытался скопировать и вставить блок xml в ... блоке из файла neo-datasources.xml CF8 в XML-файл ColdFusion 9. До этого я остановил службу CF. Но после перезапуска службы загружаются либо источники данных CF8, либо CF9. В основном остаются только источники данных CF9, а узлы CF8 xml теряются.

Кто-нибудь может сказать мне лучший способ расширить neo-datasources.xml с источниками данных на сервере CF8?

Есть более сотни, и я не хочу устанавливать их один за другим. Сервер - это CF8 Pro/Standard.

Заранее спасибо.

+1

Вы столкнулись с входом в блог Чарли во время поиска решения? [Импорт настроек CF Admin в ЛЮБОЙ выпуск через «мастер импорта», даже ПОСЛЕ установки] (http://www.carehart.org/blog/client/index.cfm/2014/11/11/import_cfadmin_settings_anytime_using_import_wizard) ** Прочитать на end ** Я уверен, что вы не хотите мигрировать _ALL_ из настроек. –

+0

Спасибо, Мигель. Я, наконец, нашел пост Чарли после того, как решил его, написав небольшой инструмент, который читает в XML-файле CF8, получает данные о соединении и базе данных и использует API администрирования CF9 для создания всего нового источника данных на сервере CF9. –

ответ

6

Я отвечаю на свой вопрос с помощью решения. Наконец, я отказался от своих планов по объединению CF8 в файл neo-datasource.xml CF9. Чтобы настроить источники данных на сервере CF9, я нашел способ использования API администрирования CF9.

Шаги:

  1. Читайте в CF8 нео-datasource.xml
  2. преобразовать его в массив CFML с Структуры проведения данных
  3. инициируют администрирования CF9 API, вход в систему и использовать datasources.cfc создать каждый источник данных в качестве нового на сервере CF9

Распознать и преобразования данных XML:

<cfset wddx = fileRead(path_to_file) /> 
<cfwddx action="wddx2cfml" input="#wddx#" output="_array" validate="yes" /> 

Это строит массив, содержащий структуры с информацией о источниках данных. Нам нужен только первый элемент массива, который хранит структуры источников данных.

<cfset _str = _array[1] /> 

Сначала войдите в систему с cfadministrator:

<cfset admin = new cfide.adminapi.Administrator() /> 
<cfset login = admin.login("cf_admin_password_here", "admin") /> 

Я использовал для сортировки структуру с «textnocase», чтобы иметь источники данных, отсортированные по имени. Поэтому я перебираю StructKeyList(), сортируя его textnocase. Это потому, что я выполняю некоторый вывод во время выполнения цикла. Чтобы сделать вывод, просто вставьте выходной блок с данными «dsn» -структуры после создания структуры. Я оставил его в этом сообщении, чтобы сэкономить место.

<cfloop index="key" list="#ListSort(StructKeyList(str), 'textnocase')#"> 
    <cfset _str = str[key] /> 
    <cfset db = _str.name /> 
    <cfset dsn = { 
      driver = 'mysql5', 
      name = _str.name, 
      host = 'localhost', 
      port = '3306', 
      database = TRIM(ReReplaceNoCase(_str.url, ".*\/(.+?)(\/?\?{0}|\/?\?{1}.*)$", "\1", "ALL")), 
      username = 'db_user', 
      password = 'db_password', 
      args = 'useUnicode=true&characterEncoding=utf8' 
     } 
    /> 
    <cfset dsnAPI = new cfide.adminapi.datasource() /> 
    <cfset dsnAPI.setMySQL5(argumentCollection = dsn) /> 
</cfloop> 

Имя базы данных берется из соединения URL, созданный с помощью опции драйвера MySQL 4/5 в DataSources настройках администратора CF9.

TRIM(ReReplaceNoCase(_str.url, ".*\/(.+?)(\/?\?{0}|\/?\?{1}.*)$", "\1", "ALL")) 

Я думаю, что структура «str» само собой разумеется, если вы посмотрите на нее с помощью cfdump.

Надеюсь, что это поможет другим ppl в их потребностях.

Основная идея получена из блога Шон Уолш на:

http://swalsh.org/blog/2013/03/20/programmatically-creating-new-datasource-in-coldfusion/

Большое спасибо, Шон.

+0

Upvote для программного подхода к решению вашей проблемы. Отлично сработано! –