公司内部系统的后端变得越来越复杂,我想探索做SOA风格架构而不是沉重的单片系统的想法.我应该从哪里开始?
我是SOA的新手.这是指个人CF实例,它们通过远程Web服务调用相互通信?如何处理诸如错误处理和服务器中断之类的事情?如果ESB的每个部分都在ColdFusion中,ESB是否会对架构有益?
DB层怎么样?他们应该共享一个巨大的数据库,还是应该自己以自己的方式存储?
谢谢
我找不到任何关于Haversine公式的CF的例子(用于计算球体上两个点之间距离的经度和纬度的公式).
维基百科有其他语言的例子(http://en.wikipedia.org/wiki/Haversine_formula),但没有CF的例子.
CF中的解释由另一位内部开发人员在下面进行,未经过全面测试.我很想知道其他人如何在CF中计算出这一点.我也有兴趣就下面的例子获得如何简化的意见.
var variables.intEarthRadius = 6371; // in km
var local.decRadius = arguments.radius / 1000; // convert radius given in metres to kilometres
var local.latMax = arguments.latitude + degree(local.decRadius / variables.intEarthRadius);
var local.latMin = arguments.latitude - degree(local.decRadius / variables.intEarthRadius);
var local.lngMax = arguments.longitude + degree(local.decRadius / variables.intEarthRadius / cos(radian(arguments.latitude)));
var local.lngMin = arguments.longitude - degree(local.decRadius / variables.intEarthRadius / cos(radian(arguments.latitude)));
private numeric function degree(required numeric radian) hint="I convert radians to degrees." {
return arguments.radian * 180 / pi();
}
private …Run Code Online (Sandbox Code Playgroud) 我正在使用ColdFusion 9.0.1
我正在接管一个网站,我之前的人创建了大约100个变量并将它们放入APPLICATION范围.我相信他的100个变量不断被每个页面加载覆盖.
基本上,他在Application.cfc中有这个:
APPLICTION.VariableOne = "SomeStringOne";
APPLICTION.VariableTwo = "SomeStringTwo";
APPLICTION.VariableThree = "SomeStringThree";
Run Code Online (Sandbox Code Playgroud)
我的计划是保持简单,而且非常易读,可以测试应用程序范围内的特定结构.如果不存在,请创建结构和变量:
if (not isDefined("APPLICTION.AppInfo") or not isStruct(APPLICTION.AppInfo)) {
APPLICTION.AppInfo = structNew();
APPLICTION.AppInfo.VariableOne = "SomeStringOne";
APPLICTION.AppInfo.VariableTwo = "SomeStringTwo";
APPLICTION.AppInfo.VariableThree = "SomeStringThree";
}
Run Code Online (Sandbox Code Playgroud)
当然,一旦站点生效并且我们完成了创建所有应用程序变量,我将把它移到onApplicationStart()方法中.
我想要的解决方案必须更多地关注"可读性"而不是"效率".一些非CFers,但非常有经验的编码人员将使用它,并需要快速"获取".
我的计划是否有任何漏洞或效率太低?
是否有更易读的方法来创建和管理应用程序变量?
邮件主题行中的特殊字符转换为问号或框.
我试图在URLEncodedFormat中包装主题行的动态字符串,但最终却徒劳无功.
<cfset strSubject= URLEncodedFormat(s)>
<cfmail
from="xxxxx@xx.com"
to="yyyyyyy@yyy.com"
subject="#strSubject#"
type="html"
>
#testText#
</cfmail>
Run Code Online (Sandbox Code Playgroud) 我在Ubuntu 12.04盒子上安装了apache2和ColdFusion 9.我已经在Apache中使用CheckSpelling mod来禁用区分大小写的URL和Apache负责的其他路径.
现在,请记住,我正在使用大约4GB的遗留代码(大约6年的价值),并且很少符合惯例.在我之前的编码器并不关心区分大小写,看看应用程序是如何托管在Windows Box上的.在大多数情况下,ColdFusion表现为<cfinclude>和CreateObject,但似乎<cfinvoke>(在代码库中经常使用)仍然区分大小写.
现在,我已经尝试了将代码移动到vfat分区的方法,但我遇到的是文件名的一大堆编码问题(我们处理外国公司并获得许多特殊字符).删除和/或重命名文件将是麻烦的,因为大多数也在MySQL数据库中被引用,并且也必须在那里进行修改.所以重新编码有点像噩梦.
所以,我很好奇ColdFusion在Linux上运行时是否有任何特殊标志不区分大小写,或者是否有另一种方法可以将这些全部组合在一起?
编辑
我很抱歉,我错了.cfinvoke似乎工作正常.我窒息了cfobject
我正在尝试动态创建一个内联PDF,当用户选择保存它时,会提示我的自定义文件名.根据文档,saveasname属性应该做我想要的.
(format ="PDF"only)当用户保存写入浏览器的PDF文件时,SaveAs对话框中显示的文件名.
但是,IE 9和Firefox 13.0.1中发生的情况是,SaveAs对话框中显示的文件名与我的CF模板相同,但带有PDF扩展名.(换句话说,我的代码在makepdf.cfm,并且SaveAs提示我保存makepdf.pdf.)但是,在Chrome中,它完美地运行.(全部在Windows 7上.)
这是我创建PDF的代码:
<cfdocument format="pdf" bookmark="true" saveasname="MyReport.pdf">
Run Code Online (Sandbox Code Playgroud)
如果我明确声明内容配置和内容类型,就像这样
<cfheader name="Content-Disposition" value="inline; filename=MyReport.pdf">
<cfcontent type="application/x-pdf">
<cfdocument format="pdf" bookmark="true" saveasname="MyReport.pdf">
Run Code Online (Sandbox Code Playgroud)
如果我只是依靠标题
<cfheader name="Content-Disposition" value="inline; filename=MyReport.pdf">
<cfcontent type="application/x-pdf">
<cfdocument format="pdf" bookmark="true">
Run Code Online (Sandbox Code Playgroud)
我得到的行为与第一段代码相同.
我知道如何让浏览器提示下载而不是显示内联,然后一切按预期工作,但这不是理想的行为.
我需要在文件名中使用时间和日期,并且最终用户不够精明,不能覆盖他们的文件(如果他们选择保存它们).
有什么我想念的东西会让IE和Firefox做他们应该做的事情吗?其他什么浏览器会这样做?移动Safari?
我有一个检索大量数据的查询.
<cfsetting requesttimeout="9999999" >
<cfquery name="randomething" datasource="ds" timeout="9999999" >
SELECT
col1,
col2
FROM
table
</cfquery>
<cfdump var="#randomething.recordCount#" /> <!---should be about 5 million rows --->
Run Code Online (Sandbox Code Playgroud)
我可以使用python的cx_Oracle成功检索数据,并sys.getsizeof在python列表上使用返回22621060,所以大约21兆字节.
ColdFusion不会在页面上返回错误,我在任何日志中都找不到任何内容.为什么cfdump不显示行数?
附加信息
这样做的原因是因为我有大约8000个较小的查询来运行randomthing查询.换句话说,当我对数据库运行这8000个查询时,该过程需要数小时才能完成.我怀疑这是因为我与其他几个数据库用户竞争,数据库陷入困境.
8000个较小的查询在col2期间获得col1的计数.
SELECT
count(col1) as count
WHERE
col2 < 20121109
AND
col2 > 20121108
Run Code Online (Sandbox Code Playgroud)
我也开始玩这个maxrows属性,看看我是否可以通过这种方式识别任何信息.

更新
所以这不是cfquery的限制.通过使用QueryNew然后循环它来添加数据,我可以很好地超过200万标记没有任何问题.
我还使用此问题中的信息创建了一个ThinClient数据源,我没有观察到行为的任何变化.
数据库端的消息是
来自客户端的SQL*Net消息
和
SQL*Net向客户端提供更多数据
我刚刚发现通过使用瘦客户端,blockfactor1="100" …
我有CF9 ORM映射的问题.
我不时会收到以下错误(是的,大部分时间都可以正常工作),
Mapping for component model.Pubs not found. Either the mapping for this component is missing or the application must be restarted to generate the mapping.
Run Code Online (Sandbox Code Playgroud)
Application.cfc中的ORM定义
<cfscript>
this.datasource = "Pubs";
this.ormenabled = true;
this.ormsettings= {
dialect="MicrosoftSQLServer",
dbcreate="update",
eventhandling="true"
};
</cfscript>
<cfset this.mappings["/model"] = getDirectoryFromPath(getCurrentTemplatePath()) & "model" />
Run Code Online (Sandbox Code Playgroud)
修复它的唯一方法是刷新ORM几次,这是通过在Application.cfc上命中?init = true.它仍然是一个临时解决方案,但我需要知道它的根本原因并修复它.
<cfscript>
if(structKeyExists(url, "init")) { ormReload(); applicationStop(); location('index.cfm?reloaded=true'); }
Run Code Online (Sandbox Code Playgroud)
请指教.
谢谢!
在尝试将服务器从CF8更改为CF10时,发生了这种情况
在CF8中,这是搜索代码
<cfsearch
collection="test_#arguments.cabinetid#"
status="docsearchstatus"
name="docsearch"
criteria='#arguments.filter#'
suggestions="Always"
contextpassages="1"
contextbytes="300"
>
Run Code Online (Sandbox Code Playgroud)
在CF10中,我正在使用它.
<cfsearch collection="test_#arguments.cabinetid#"
status="docsearchstatus"
name="docsearch"
criteria='#lcase(arguments.filter)#*'
suggestions="Always"
contextPassages="1"
contextBytes="300"
>
Run Code Online (Sandbox Code Playgroud)
以真实性提交的上下文更长,更具描述性.但是大多数情况下使用solr时,上下文是空的.
我尝试对solr.xml和其他solr配置文件进行一些更改.这里我们动态添加集合.因此无法通过更改配置文件来解决此问题.
有没有人碰到过这个?
结果形式真实性搜索

SOLR搜索的结果

拜托,我被困住,需要一双清新的眼睛.
我正在和别人的意大利面条代码一起工作,这些代码已经不在了,并且正在弄清楚他们正在评估什么.
<cfset surveyCount = 0>
<cfloop query="surveys">
<cfif evaluate("defaultReport" & ID)>
<cfset surveyCount = surveyCount + 1>
</cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
在查询转储中,我看到9条记录,这是我所期待的但是因为评估失败,所以surveyCount没有递增.我没有看到任何列defaultReport.在我与CF合作的15年中,我总是避免评估(),现在当我需要分析它时,我完全失去了.有人可以提供任何指导吗?
添加了CFDump图像(为了隐私和安全性,已删除了一些列名称):

更新I:这个文件有很多cfinclude语句和很少的代码格式.结果,我忽略了一些cfinclude语句.我找到了以下内容.我仍然在寻找,但想在我挖掘时记录这一点.
<cfloop query="surveys">
<cfscript>
variables["defaultReport" & ID] = evaluate(thisAssociation & "Price");
</cfscript>
</cfloop>