[英]Pentaho Mondrian OLAP Schema Roles
我已經啟動並運行一個Mondrian服務器Web應用程序,以處理MDX查詢,從我們的Mondrian模式中定義的OLAP多維數據集中獲取數據,並返回前端GUI應用程序所需的XMLA以顯示查詢的數據。
一切正常,但是現在我試圖添加權限角色,並且偶然發現了一個非常令人困惑的問題。
現在,我認為這就像添加另一個參數“ role”並將其發送一樣容易。 但是,這使我感到奇怪。
我正在使用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>
使用“ role”參數時,出現以下錯誤:
12:30:50.930 [錯誤] [smartgwtolap] 12:30:50.928:TMR9:WARN: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“角色1” 數據未定義-響應:{operationId:“ listCubes_fetch”,clientContext:Obj,上下文:Obj,transactionNum:0,httpResponseCode:200,httpResponseText:“ // isc_RPCResponseStart-> [{” data“:” org.o ... “ [1497],xmlHttpRequest:對象,傳輸:” xmlHttpRequest“,狀態:-1,clientOnly:undef,httpHeaders:Obj,isStructured:true,callbackArgs:空,結果:對象,數據:” org.olap4j.OlapException:XMLA提供者...“ [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
Mondrian XML:Mondrian錯誤:內部錯誤:行集'DISCOVER_PROPERTIES'不支持屬性“角色”
請求是:DISCOVER_PROPERTIES“角色1” 數據未定義-響應:{operationId:“ listCubes_fetch”,clientContext:Obj,上下文:Obj,transactionNum:0,httpResponseCode:200,httpResponseText:“ // isc_RPCResponseStart-> [{” data“:” org.o ... “ [1497],xmlHttpRequest:對象,傳輸:” xmlHttpRequest“,狀態:-1,clientOnly:undef,httpHeaders:Obj,isStructured:true,callbackArgs:空,結果:對象,數據:” org.olap4j.OlapException:XMLA provider ...” [1243],invalidateCache:false,isDSResponse:true,queueStatus:-1,startRow:0,endRow:0,totalRows:0},位於sun.reflect.NativeConstructorAccessorImpl.newInstance0(本地方法),位於sun.reflect .com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor處的java.lang.reflect.Constructor.newInstance(未知源)處的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知源)處的.NativeConstructorAccessorImpl.newInstance(未知源) .java:105)com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)com.google.gwt.dev.shell.OophmSessionHandler.inv com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)上的oke(OophmSessionHandler.java:172)com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)上的oke(OophmSessionHandler.java:172)在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)處在java.lang.Thread.run(未知源)
其他隨機參數,例如“ foo”或“ bar”,則不返回任何錯誤,並且將被忽略。 因此,“角色”肯定會觸發某些內容,但遺憾的是我無法使用任何內容。
有人可以提供一些見識嗎? 這是非常贊賞。 我已經找到了有關Pentaho XmlaHandler的信息,該信息接受角色作為參數,但這似乎是在Mondrian內部使用的,而不一定是我可以立即在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)部分,它就可以正常工作。
這不是在olap4j中設置角色的方法。 嘗試使用OlapConnection.setRoleName 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.