在 java 中查询 Analysis Services 多维数据集而不使用 msmdpump.dll

Tho*_*ich 4 java olap ssas mdx xmla

我目前的任务是构建某种健康检查应用程序,稍后将其包含在 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。Analysis Services 作为一项服务提供给我们,我们无权访问系统本身。

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

谢谢你的帮助!

Fra*_*kPl 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 之间的转换二进制压缩的 XML 以及您在 .net 组件和 Java 组件之间定义的一些其他协议,可能只是交换 XMLA 请求和 XML 答案。或者,您可以在 ADOMD.NET 和 Java 应用程序之间实现更高级的 API。但在这种情况下,没有办法绕过一些 .net 开发,我认为这不值得付出努力和复杂性。