2015-09-25 105 views
2

我想将ColdFusion 8服务器的数据源合并到现有的ColdFusion 9服务器。据我所知,两个版本的neo-datasources.xml的xml格式都是一样的。使用ColdFusion 8数据源扩展ColdFusion 9数据源文件

我试着将...块中的xml块从CF8 neo-datasources.xml复制并粘贴到ColdFusion 9 xml文件中。在此之前,我已经停止了CF服务。 但重新启动服务后,CF8数据源被加载或CF9的。大多数情况下,只剩下CF9数据源,并且CF8 xml节点被剥离。

任何人都可以告诉我一个更好的方法来扩展neo-datasources.xml与CF8服务器的数据源?

有超过一百个,我不想逐个设置它们。服务器是CF8 Pro/Standard。

在此先感谢。

+1

您是否在搜索解决方案时遇到查理的博客条目? [通过“导入向导”在任何版本中导入CF管理员设置,甚至在安装后安装](http://www.carehart.org/blog/client/index.cfm/2014/11/11/import_cfadmin_settings_anytime_using_import_wizard)**阅读结束**我确定你不想迁移设置的_ALL_。 –

+0

谢谢米格尔。在我通过编写一个读取CF8 XML文件的小工具,获取连接和数据库数据并使用CF9管理API在CF9服务器中创建全新数据源之后,我终于找到了查理的文章。 –

回答

6

我正在用解决方案回答我自己的问题。最后我放弃了将CF8合并到CF9 neo-datasource.xml文件中的计划。要在CF9服务器中设置数据源,我找到了一种使用CF9管理API的方法。

的步骤是:

  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”的结构具有按名称排序的数据源。所以我正在循环StructKeyListList()对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> 

数据库名称取自CF9管理员的数据源设置中由MySQL 4/5驱动程序选项创建的连接URL。

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

我认为如果你使用cfdump来查看它,“str”结构是不言自明的。

希望这可以帮助其他需求的人。

从肖恩·沃尔​​什的博客在获得的核心思想是:

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

非常感谢你,肖恩。

+0

Upvote为解决您的问题的程序化方法。做得好! –