Pentaho Mondrian OLAP Schema Роли
У меня есть веб-приложение Mondrian для сервера, которое работает и обрабатывает запросы MDX, извлекает данные из кубов OLAP, определенных в нашей схеме Mondrian, и возвращает XMLA, требуемый интерфейсным приложением GUI для отображения запрашиваемых данных.
Это все работает, но теперь я пытаюсь добавить разрешения ролей, и я наткнулся на очень запутанную проблему.
Теперь я подумал, что это будет так же просто, как добавить еще один параметр "роль" и отправить его. Однако это вызывает у меня странную ошибку.
Я использую SmartGWT для подключения к сервису Mondrian XMLA.
public static OlapConnection getConnection() throws Exception {
Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");
java.util.Properties p = new Properties();
String role = "role1";
p.put("server", "http://domain.be:8080/mondrian/xmla");
p.put("user", "user");
p.put("password", "password");
p.put("role","\""+role+"\"");
String dbUrl = "jdbc:xmla:";
Connection connectionXMLA = DriverManager.getConnection(dbUrl, p);
OlapWrapper wrapper = (OlapWrapper) connectionXMLA;
OlapConnection olapConnection = wrapper.unwrap(OlapConnection.class);
return olapConnection;
Роли определены в схеме, которая также содержит куб, как это:
<Role name="role1">
<SchemaGrant access="none">
<CubeGrant cube="VehicleSales" access="all"/>
<CubeGrant cube="Contract" access="none"/>
</SchemaGrant>
<Role name="role2">
<SchemaGrant access="none">
<CubeGrant cube="VehicleSales" access="none"/>
<CubeGrant cube="Contract" access="all"/>
</SchemaGrant>
При использовании параметра "роль" я получаю эту ошибку:
12: 30: 50.930 [ОШИБКА] [smartgwtolap] 12:30:50.928:TMR9: ПРЕДУПРЕЖДЕНИЕ:RPCManager:org.olap4j.OlapException: XMLA
провайдер дал исключение:
<faultcode> SOAP-ENV:Server.00HSBB01 </faultcode> <faultstring> XMLA SOAP Body processing error </faultstring> <faultactor> Mondrian </faultactor> <detail> <XA:error xmlns:XA="mondrian sourceforge net"> <code> 00HSBB01 </code> <desc> The Mondrian XML: Mondrian Error:Internal error: Rowset 'DISCOVER_PROPERTIES' does not support property 'Roles' </desc> </XA:error> </detail> </SOAP-ENV:Fault>
Запрос был: DISCOVER_PROPERTIES & quot; role1 & quot; Данные не определены - ответ: {operationId: "listCubes_fetch", clientContext: Obj, контекст: Obj,actionNum: 0, httpResponseCode: 200, httpResponseText: "//isc_RPCResponseStart ->[{"data":"org.o..."[1497], xmlHttpRequest: Obj, транспорт: "xmlHttpRequest", статус: -1, clientOnly: undef, httpHeaders: Obj, isStructured: true, callbackArgs: null, результаты: Obj, data: "org.olap4j.OlapException: XMLA provider ..."[1243], invalidateCache: false, isDSResponse: true, queueStatus: -1, startRow: 0, endRow: 0, totalRows: 0} com.smartgwt.client.core.JsObject$SGWT_WARN: 12:30:50.928:TMR9:WARN:RPCManager:org.olap4j.OlapException: поставщик XMLA выдал исключение: SOAP-ENV:Server.00HSBB01 Ошибка обработки тела XMLA SOAP Mondrian
00HSBB01
XML Mondrian: ошибка Mondrian: внутренняя ошибка: набор строк "DISCOVER_PROPERTIES" не поддерживает свойство "роли"
Запрос был: DISCOVER_PROPERTIES & quot; role1 & quot; Данные не определены - ответ: {operationId: "listCubes_fetch", clientContext: Obj, контекст: Obj,actionNum: 0, httpResponseCode: 200, httpResponseText: "//isc_RPCResponseStart ->[{"data":"org.o..."[1497], xmlHttpRequest: Obj, транспорт: "xmlHttpRequest", статус: -1, clientOnly: undef, httpHeaders: Obj, isStructured: true, callbackArgs: null, результаты: Obj, data:" org.olap4j.OlapException: XMLA provider... "[1243], invalidateCache: false, isDSResponse: true, queueStatus: -1, startRow: 0, endRow: 0, totalRows: 0} в sun.reflect.NativeConstructorAccessorImpl.newInstance0(собственный метод) в sun.reflect.NativeConstructorAccessorImpl.newInstance(Неизвестный источник) в sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Неизвестный источник) в java.lang.reflect.Constructor.newInstance(Неизвестный источник) в com.google.gwt.dev.shell.Methodketor.java:105) на com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) на com.google.gwt.dev.shell.OophmSessionHandler.inv Oke(OophmSessionHandler.java:172) на com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293) на com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelS7)7 на com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) на java.lang.Thread.run(неизвестный источник)
Другие случайные параметры, такие как "foo" или "bar", не возвращают никаких ошибок и просто игнорируются. Так что "роль" определенно вызывает что-то, но, к сожалению, не то, с чем я могу работать.
Кто-нибудь, кто может предложить некоторое понимание? Это очень высоко ценится. Я нашел кое-что о Pentaho XmlaHandler, которое принимает роль в качестве аргумента, но это, кажется, что-то, что используется внутри Мондриана, и не обязательно то, что я могу немедленно использовать в SmartGWT - я думаю.
Спасибо за прочтение!
РЕДАКТИРОВАТЬ
Фрагмент ниже возвращает ошибку:
java.lang.RuntimeException: org.olap4j.OlapException: не удалось получить имя продукта базы данных.
Connection connectionXMLA = DriverManager.getConnection(dbUrl, p);
OlapWrapper wrapper = (OlapWrapper) connectionXMLA;
OlapConnection olapConnection = wrapper.unwrap(OlapConnection.class);
String role = "role2";
olapConnection.setRoleName(role);
return olapConnection;
Функция getAvailableRoleNames() возвращает роли, указанные в файле схемы. Если я закомментирую часть setRoleName(role), она будет работать нормально.
1 ответ
Это не способ установить роль в olap4j. Попробуйте использовать OlapConnection.setRoleName.