【问题标题】:How do you tell the reference path when loading a class?加载类时如何告诉引用路径?
【发布时间】:2011-10-13 20:16:46
【问题描述】:

我正在尝试使用 JavaLoader 将 java (HttpAsyncClient) 类加载到 ColdFusion 中。

client = loader.create("org.apache.commons.HttpAsyncClient")

我们如何知道org.apache.commons.HttpAsyncClient 的引用?我想如果你打开 jar 文件并按照目录结构,它会给你参考路径。但我不认为这是真的。

我正在尝试使用 HttpAsyncClient 但我无法加载它:

client = loader.create("org.apache.commons.HttpAsyncClient") 返回类未找到错误。

Loader 是对 JavaLoader 的引用,它将 Java 类加载到您的 CF 服务器中。

【问题讨论】:

  • Java 包 遵循目录结构。 org.apache.commons.httpclient 将在 org/apache/commons/httpclient 目录中找到。

标签: java coldfusion javaloader


【解决方案1】:

与其重新发明轮子,不如试试Mark Mandel's AsyncHTTP library这样的现有工具?

更新:来自 cmets,该工具仅是 ACF。因此,您可以尝试使用具体类 DefaultHttpAsyncClient,如 Asynchronous HTTP Exchange 示例所示。

【讨论】:

  • 我刚刚发现。我现在实际上正在阅读有关它的文档。我想在两个网站之间传递数据。 :D
  • 更多信息。它仅在 ACF 上运行,并且使用与 CF 相同的 http 引擎。我和马克谈过这件事,他说你也可以使用cfthread来实现同样的目标。我做到了。不过,它非常慢。
  • 哦,对不起。你没有提到使用不同的引擎。我不确定是什么这么慢。但是您是否像我建议的那样查看了图书馆的 API?异步 HTTP 交换示例看起来很有希望。它使用称为DefaultHttpAsyncClienthc.apache.org/httpcomponents-asyncclient-dev/examples.html 的具体实现
  • 我现在要读一读。在我的测试中,Railo 实现使用 cfthread 每秒执行大约 5 个请求;我需要接近每秒 25 个请求。如果我正确地理解了您指向 API,我是否必须将该代码转换为 CF,或者编写一个与之交互的 CF 包装器?这对我来说是新的领域。也许是时候学习 Java 了。
  • 是的。我会把它翻译成CF。有了所有 cfscript 增强功能,它与 CF 并没有什么不同。幸运的是,它只有大约六 (6) 行;)这篇文章有一些关于翻译 coldfusionmuse.com/index.cfm/2009/2/23/… 的好技巧
【解决方案2】:

我不知道 ColdFusion。您可能必须指定类的完整路径,而不仅仅是包含该类的包。

根据一个例子我发现完整的包和类名是这样的:org.apache.http.nio.client.HttpAsyncClient

您也可以使用 javadoc 查找包名和类名:http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/index.html

通过这样的接口获得异步可能会很残酷。我建议先尝试同步版本。

编辑

我会尝试将此同步示例改编为 CF:http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientWithResponseHandler.java

当您实例化 HttpGet 时,您必须向 init() 传递额外的参数,就像在此示例中所做的那样:http://www.coldfusionjedi.com/index.cfm/2009/5/29/Generating-Speech-with-ColdFusion-and-Java

【讨论】:

  • 就是这样。做到了。谢谢。为什么说会很残忍?我一直在使用 AntiSamy 和 string.utils 之类的东西……不过这个似乎有点不同……路径更长。
  • 通常使用异步接口,您必须创建自己的实现其接口的类,然后在启动调用时传递类的实例,并在事件发生时调用您的类。我不知道使用 ColdFusion 完成这一切是容易还是难。
  • @Mohamad - 就路径而言,该类与其他类没有什么不同。完整的路径可以很长也可以很短。一切都取决于作者如何选择组织课程。但是你总是必须提供完整的路径..不管它是什么。 (从技术上讲,.class 文件必须打包在 jar 中,尽管这种情况不太常见)。
  • @Leigh 和@Sarel,谢谢。事实证明,我可能无法使用它。不过,每当我在它正在实例化的客户端对象上调用 init() 或 start() 时,我都会得到一个 No matching Constructor for org.apache.http.nio.client.HttpAsyncClient() found !感谢您的帮助。
  • 那是因为它是一个interface。你不能实例化它。它本质上只是一个大纲。与 CF interface 相同。正如萨雷尔所说,您必须编写自己的实现来实现该接口..或者找到一个已经这样做的库/类。检查 API。但是,您尝试使用纯 CF 代码或现有 CF 工具无法实现的目标是什么?因为 Mark Mandel 很久以前就发布了一个异步 http 客户端 compoundtheory.com/?action=displayPost&ID=137
猜你喜欢
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
相关资源
最近更新 更多