我目前的任务是构建某种健康检查应用程序,后来将其包含在jboss环境中。但首先要做的事情。我需要访问3种不同类型的数据库:MS SQL关系,TM1和MS SQL分析服务。虽然前两个似乎是可管理的,但我在尝试通过java访问Analysis Services时遇到了问题。最常见的是,似乎使用了olap4j
库,但这基于msmdpump.dll
,通过IIS隧道传输响应。我们无法使用此方法,因为IIS未使用,我们无法访问Analysis Services服务器。
简而言之:如何在不使用msmdpump.dll
的情况下使用Java访问Analysis Services?我们需要在MDX或XMLA中发送简单的查询。客户端和服务器都使用Windows Server 2008 R2。 Analysis Services版本也是2008 R2。 Analysis Services作为服务提供给我们,我们无权访问系统本身。
似乎可以选择使用powershell脚本访问Analysis Services并通过java调用此脚本。但如果有更好的选择,我宁愿避免使用这种方法。
感谢您的帮助!
答案 0 :(得分:2)
如果您想从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对话的工具。
因此,不在IIS中使用msmdpump.dll作为Java应用程序和AS服务器之间的代理的唯一方法是在.net中开发自己的代理,这或多或少会实现msmdpump.dll已经执行的操作:translate TCP之间使用二进制压缩XML和您在.net组件和Java组件之间定义的其他协议,可能只是交换XMLA请求和XML答案。或者,您可以在ADOMD.NET和Java应用程序之间实现更高级的API。但在这种情况下,没有办法绕过某些.net开发,我认为这不值得付出努力和复杂。