4

我目前的任务是构建某种健康检查应用程序,稍后将包含在 jboss 环境中。但首先要做的事情。我需要访问 3 种不同类型的数据库:MS SQL 关系数据库、TM1 和 MS SQL 分析服务。虽然前两个似乎是可以管理的,但我在尝试通过 java 访问 Analysis Services 时遇到了问题。最常见的是,olap4j似乎使用了该库,但这是基于msmdpump.dllIIS 的隧道响应。我们不能使用这种方法,因为 IIS 未在使用中,而且我们没有对 Analysis Services 服务器的系统访问权限。

简而言之:如何在不使用 Java 的情况下访问 Analysis Services msmdpump.dll?我们需要在 MDX 或 XMLA 中发送简单查询。客户端和服务器都使用 Windows Server 2008 R2。Analysis Services 版本也是 2008 R2。分析服务作为一项服务提供给我们,我们无权访问系统本身。

使用 powershell 脚本访问 Analysis Services 并通过 java 调用此脚本似乎是一种选择。但如果有更好的选择,我宁愿避免这种方法。

谢谢你的帮助!

4

1 回答 1

5

如果您想从 Java 调用 Analysis Services,我认为您无法避免 IIS 中的 msmdpump.dll。

Analysis Services 服务器本身在结构上使用 SOAP,但使用 Microsoft 特定的二进制 SOAP 格式(请参阅http://sqlblog.com/blogs/mosha/archive/2005/12/02/analysis-services-2005-protocol-xmla-over-tcp -ip.aspx了解一些细节)。此通信协议由 ADOMD.NET 客户端驱动程序和 msmdpump.dll 理解,仅此而已。因此,您可以使用 .net 或任何能够与 .net 交互的语言编写应用程序 - 或者您可以使用客户端上的任何环境,该环境可以通过 IIS 中托管的 msmdpump.dll 发送和接收 http 请求。实际上,msmdpump.dll 只是在使用二进制压缩 XML 的 TCP 和使用未压缩标准 XML 的 http 之间进行转换(以及在 http 身份验证机制和在 Java 中也难以实现的集成安全性之间的转换)。

据我所知,微软在他们的二进制协议上声明了一些权利,所以你甚至可能侵犯他们的权利,以防你尝试自己开发一个直接从 Java 与 AS 对话的工具。

因此,不使用 IIS 中的 msmdpump.dll 作为 Java 应用程序和 AS 服务器之间的代理的唯一方法是在 .net 中开发自己的代理,该代理或多或少会实现 msmdpump.dll 已经完成的功能:使用 TCP 在 TCP 之间进行转换二进制压缩 XML 和您在 .net 组件和 Java 组件之间定义的其他协议,可能只是交换 XMLA 请求和 XML 应答。或者,您可以在 ADOMD.NET 和您的 Java 应用程序之间实现更高级的 API。但在这种情况下,将无法绕过一些 .net 开发,我认为这不值得付出努力和复杂性。

于 2014-01-20T16:40:32.457 回答