Mondrian XML/A 服务器错误(应用程序与 Olap4J API 一起工作正常)

Mondrian XML/A server errors (app works fine with Olap4J API)

我已经在 JBoss 上设置了 Mondrian,当 运行 通过 Olap4J API 的 MDX 语句时它工作正常。但是,当我将 Mondrian 设置为 XML/A 服务器时,在尝试使用 URL http://localhost:8080/olap/xmla 连接 Warehouse Explorer(又名 Rex)时,出现以下异常(在服务器控制台中)。

Rex 中的错误是:

这是我的datasources.xml

<DataSource>
    <DataSourceName>Mondrian</DataSourceName>
    <DataSourceDescription>Mondrian XMLA</DataSourceDescription>
    <URL>http://localhost:8080/olap/xmla</URL>
    <DataSourceInfo>Provider=mondrian;Jdbc=jdbc:mysql://localhost:3306/foodmart;JdbcUser=uuuuu;JdbcPassword=pppp;JdbcDrivers=com.mysql.jdbc.Driver;</DataSourceInfo>
    <ProviderName>Mondrian</ProviderName>
    <ProviderType>MDP</ProviderType>
    <AuthenticationMode>Unauthenticated</AuthenticationMode>
    <Catalogs>
        <Catalog name="FoodMart">
            <Definition>/WEB-INF/FoodMart.xml</Definition>
        </Catalog>
    </Catalogs>
</DataSource>

这是个例外:

mondrian.olap.MondrianException: Mondrian Error:Connect 字符串必须包含 属性 'Catalog' 或 属性 'CatalogContent' 在 mondrian.resource.MondrianResource$_Def1.ex(MondrianResource.java:994) [mondrian-3.9.0.0-213.jar:] 在 mondrian.rolap.RolapSchemaPool.getSchemaContent(RolapSchemaPool.java:268) [mondrian-3.9.0.0-213.jar:] 在 mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:135) [mondrian-3.9.0.0-213.jar:] 在 mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:67) [mondrian-3.9.0.0-213.jar:] 在 mondrian.rolap.RolapConnection.(RolapConnection.java:161) [mondrian-3.9.0.0-213.jar:] 在 mondrian.rolap.RolapConnection.(RolapConnection.java:91) [mondrian-3.9.0.0-213.jar:] 在 mondrian.olap.DriverManager.getConnection(DriverManager.java:113) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.olap.DriverManager.getConnection(DriverManager.java:69) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.olap4j.MondrianOlap4jConnection.(MondrianOlap4jConnection.java:162) [mondrian-3.9.0.0-213.jar:] 在 mondrian.olap4j.FactoryJdbc4Plus$AbstractConnection.(FactoryJdbc4Plus.java:323) [mondrian-3.9.0.0-213.jar:] 在 mondrian.olap4j.FactoryJdbc41Impl$MondrianOlap4jConnectionJdbc41.(FactoryJdbc41Impl.java:118) [mondrian-3.9.0.0-213.jar:] 在 mondrian.olap4j.FactoryJdbc41Impl.newConnection(FactoryJdbc41Impl.java:32) [mondrian-3.9.0.0-213.jar:] 在 mondrian.olap4j.MondrianOlap4jDriver.connect(MondrianOlap4jDriver.java:134) [mondrian-3.9.0.0-213.jar:] 在 java.sql.DriverManager.getConnection(DriverManager.java:571) [rt.jar:1.7.0_71] 在 java.sql.DriverManager.getConnection(DriverManager.java:187) [rt.jar:1.7.0_71] 在 mondrian.server.FileRepository.getConnection(FileRepository.java:178) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.server.FileRepository.getConnection(FileRepository.java:129) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.server.MondrianServerImpl.getConnection(MondrianServerImpl.java:264) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.xmla.XmlaHandler.getConnection(XmlaHandler.java:2945) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.XmlaHandler.getConnection(XmlaHandler.java:177) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.Rowset.populate(Rowset.java:219) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.Rowset.unparse(Rowset.java:194) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.XmlaHandler.discover(XmlaHandler.java:2867) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.XmlaHandler.process(XmlaHandler.java:671) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.impl.DefaultXmlaServlet.handleSoapBody(DefaultXmlaServlet.java:507) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.XmlaServlet.doPost(XmlaServlet.java:318) [mondrian-3.9.0.0-213.jar:] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 在 org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] 在 org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 在 java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_71]

11:34:33,441 错误 [mondrian.xmla.XmlaServlet] (http-localhost-127.0.0.1-8080-1) 处理 XML/A 消息时出错:mondrian.xmla.XmlaException: Mondrian Error:XMLA 发现解析结果错误 在 mondrian.xmla.XmlaHandler.discover(XmlaHandler.java:2873) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.XmlaHandler.process(XmlaHandler.java:671) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.impl.DefaultXmlaServlet.handleSoapBody(DefaultXmlaServlet.java:507) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.XmlaServlet.doPost(XmlaServlet.java:318) [mondrian-3.9.0.0-213.jar:] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 在 org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] 在 org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 在 java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_71] 原因:mondrian.olap.MondrianException:蒙德里安 Error:Internal 错误:找不到合适的连接 在 mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:974) [mondrian-3.9.0.0-213.jar:] 在 mondrian.olap.Util.newInternal(Util.java:2397) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.olap.Util.newError(Util.java:2412) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.server.FileRepository.getConnection(FileRepository.java:143) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.server.MondrianServerImpl.getConnection(MondrianServerImpl.java:264) [mondrian-3.9.0.0-213.jar:3.9.0.0-213] 在 mondrian.xmla.XmlaHandler.getConnection(XmlaHandler.java:2945) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.XmlaHandler.getConnection(XmlaHandler.java:177) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.Rowset.populate(Rowset.java:219) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.Rowset.unparse(Rowset.java:194) [mondrian-3.9.0.0-213.jar:] 在 mondrian.xmla.XmlaHandler.discover(XmlaHandler.java:2867) [mondrian-3.9.0.0-213.jar:] ... 还有 19 个

这就是我解决此问题的方法:您必须将 Catalog 添加到 DataSourceInfo(除了 Catalog 元素之外):

提供商=mondrian;Jdbc=jdbc:mysql://localhost:3306/foodmart;Jdbc用户=uuuuu;Jdbc密码=ppppp;Jdbc驱动程序=com.mysql.jdbc.Driver;目录=/WEB-INF/FoodMart.xml