Запрос кубов служб Analysis Services в Java без использования msmdpump.dll

В настоящее время мне поручено создать какое-то приложение для проверки работоспособности, которое позже будет включено в среду jboss. Но обо всем по порядку. Мне нужно получить доступ к трем разным типам баз данных: реляционным MS SQL, TM1 и MS SQL Analysis Servies. Хотя первые два кажутся управляемыми, я столкнулся с проблемой при попытке доступа к службам Analysis Services через java. Чаще всего используется библиотека olap4j, но она основана на msmdpump.dll, туннелирующей ответ через IIS. Мы не можем использовать этот подход, так как IIS не используется и у нас нет системного доступа к серверу служб Analysis Services.

Вкратце: как получить доступ к службам Analysis Services в Java без использования msmdpump.dll? Нам нужно отправлять простые запросы либо в MDX, либо в XMLA. И клиент, и сервер используют Windows Server 2008 R2. Версия служб Analysis Services также 2008 R2. Службы Analysis Services предоставляются нам как услуга, у нас нет доступа к самой системе.

Кажется, есть вариант использовать скрипт powershell для доступа к службам Analysis Services и вызывать этот скрипт через java. Но я бы предпочел избегать этого подхода, если есть лучший вариант.

Спасибо за любую помощь!


person Thomas Tschernich    schedule 20.01.2014    source источник


Ответы (1)


Я не думаю, что вы можете избежать msmdpump.dll в IIS, если хотите вызывать службы Analysis Services из Java.

Сам сервер служб Analysis Services структурно использует SOAP, но специальный двоичный формат SOAP от Microsoft (см. xmla-over-tcp-ip.aspx" rel="nofollow">http://sqlblog.com/blogs/mosha/archive/2005/12/02/analysis-services-2005-protocol-xmla-over-tcp- ip.aspx для получения дополнительной информации). Этот протокол связи понимается драйвером клиента ADOMD.NET и msmdpump.dll и ничем другим. Таким образом, вы можете использовать для написания своего приложения .net или любой язык, способный взаимодействовать с .net, или вы можете использовать любую среду на клиенте, которая может отправлять и получать HTTP-запросы через msmdpump.dll, размещенный в IIS. На самом деле, msmdpump.dll не делает ничего, кроме перевода между TCP с использованием двоичного сжатого XML и http с использованием несжатого стандартного XML (и перевод между механизмами проверки подлинности http и интегрированной безопасностью, что также может быть сложно реализовать на Java).

Насколько мне известно, Microsoft претендует на некоторые права на свой бинарный протокол, так что вы даже можете нарушить их права, если попытаетесь самостоятельно разработать инструмент, напрямую взаимодействующий с AS из Java.

Таким образом, единственный способ не использовать msmdpump.dll в IIS в качестве прокси-сервера между вашим Java-приложением и сервером AS — это разработать собственный прокси-сервер в .net, который более или менее реализовывал бы то, что уже делает msmdpump.dll: перевод между TCP с использованием двоичный сжатый XML и какой-либо другой протокол, который вы определяете между вашим компонентом .net и вашим компонентом Java, возможно, просто обмениваясь запросом XMLA и ответом XML. Или вы можете реализовать более высокоуровневый API между ADOMD.NET и вашим Java-приложением. Но в этом случае не было бы никакого способа обойти разработку .net, что, я думаю, не стоит усилий и сложности.

person FrankPl    schedule 20.01.2014
comment
Что ж, тогда это неутешительный факт. Любое другое серверное программное обеспечение допускает прямое соединение клиент-сервер, но здесь Microsoft заставляет нас использовать их программное обеспечение веб-сервера. На это могут быть и другие причины, но мне это не должно нравиться. Тем не менее, большое спасибо за это разъяснение. Думаю, я буду использовать подход powershell. - person Thomas Tschernich; 21.01.2014