簡體   English   中英

Pentaho Mondrian OLAP架構角色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM