使用ColdFusion 8数据源扩展ColdFusion 9数据源文件

时间:2015-09-25 15:25:35

标签: migration datasource coldfusion-9 coldfusion-8

我想将ColdFusion 8服务器上的数据源合并到现有的ColdFusion 9服务器上。据我所知,两个版本的neo-datasources.xml的xml格式是相同的。

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

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

有一百多个,我不想一个接一个地设置它们。服务器是CF8 Pro / Standard。

提前致谢。

1 个答案:

答案 0 :(得分:6)

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

步骤如下:

  1. 读入CF8 neo-datasource.xml
  2. 将其转换为带有包含数据的结构的cfml数组
  3. 启动CF9管理API,登录并使用datasources.cfc在CF9服务器上创建每个数据源作为新数据源
  4. 读入并转换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") />
    

    我曾经用&#34; textnocase&#34;对结构进行排序。使数据源按名称排序。所以我循环遍历StructKeyList()对textnocase进行排序。这是因为我在运行循环时正在做一些输出。要创建输出,只需在创建结构后插入带有&#34; dsn&#34; -structure数据的输出块。我已经把它留在了这篇文章中以节省空间。

    <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"))
    

    我认为&#34; str&#34;如果你使用cfdump看看它,结构是不言自明的。

    希望这能帮助其他人满足他们的需求。

    源自Sean Walsh博客的核心理念:

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

    非常感谢,肖恩。