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

Ber*_*aus 2 migration datasource coldfusion-8 coldfusion-9

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

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

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

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

提前致谢.

Ber*_*aus 6

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

步骤是:

  1. 读入CF8 neo-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" />
Run Code Online (Sandbox Code Playgroud)

这将构建一个包含数据源信息的结构的数组.我们只需要数组的第一个元素来保存数据源结构.

<cfset _str = _array[1] />
Run Code Online (Sandbox Code Playgroud)

首先登录cfadministrator:

<cfset admin = new cfide.adminapi.Administrator() />
<cfset login = admin.login("cf_admin_password_here", "admin") />
Run Code Online (Sandbox Code Playgroud)

我曾经用"textnocase"对结构进行排序,以便按名称对数据源进行排序.所以我循环使用StructKeyList()对textnocase进行排序.这是因为我在运行循环时正在做一些输出.要创建输出,只需在创建结构后插入带有"dsn"-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>
Run Code Online (Sandbox Code Playgroud)

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

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

我认为如果你使用cfdump来看看它的"str"结构是自我解释的.

希望这有助于其他人的需求.

Sean Walsh博客的核心理念来源于:

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

非常感谢,肖恩.