Pentaho Mondrian OLAP架构角色

时间:2013-04-15 11:01:11

标签: mdx pentaho mondrian xmla

我有一个Mondrian服务器webapp并运行来处理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                                                           &安培; QUOT;基于role1&安培; QUOT;           数据                     undefined - 响应:{operationId:   “listCubes_fetch”,clientContext:Obj,context:Obj,   transactionNum:0,httpResponseCode:200,httpResponseText:   “//isc_RPCResponseStart-->[{"data":"org.o..."[1497]   xmlHttpRequest:obj,transport:“xmlHttpRequest”,状态:   -1,clientOnly:undef,httpHeaders:Obj,isStructured:true,callbackArgs:null,结果:Obj,data:   “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 Body处理错误                         蒙德里安                                         00HSBB01                                  Mondrian XML:Mondrian错误:内部错误:行集“DISCOVER_PROPERTIES”不支持属性“角色”                          
                 要求是:                 DISCOVER_PROPERTIES                                                           &安培; QUOT;基于role1&安培; QUOT;           数据                     undefined - 响应:{operationId:   “listCubes_fetch”,clientContext:Obj,context:Obj,   transactionNum:0,httpResponseCode:200,httpResponseText:   “//isc_RPCResponseStart-->[{"data":"org.o..."[1497]   xmlHttpRequest:obj,transport:“xmlHttpRequest”,状态:   -1,clientOnly:undef,httpHeaders:Obj,isStructured:true,callbackArgs:null,结果:Obj,data:   “org.olap4j.OlapException:XMLA提供程序......”[1243],   invalidateCache:false,isDSResponse:true,queueStatus:-1,startRow:   0,endRow:0,totalRows:0}       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)       at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)       at java.lang.reflect.Constructor.newInstance(Unknown Source)       在com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105)       在com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)       在com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)       在com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)       在com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)       在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(角色)部分它就可以了。

1 个答案:

答案 0 :(得分:0)

这不是在olap4j中设置角色的方法。尝试使用OlapConnection.setRoleName