在Weblogic上使用XmlaOlap4jDriver在SASS多维数据集上执行查询

时间:2014-05-06 12:34:11

标签: java weblogic olap-cube olap4j

我用main()方法编写了一个java类来连接“msmdpump.dll”并在多维数据集上执行MDX并检索结果。像这样:

    public static void main(String[] args) throws ClassNotFoundException, OlapException{
    Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");
    Connection connection = null;;
    try {
        connection = DriverManager.getConnection("jdbc:xmla:Server=http://172.20.0.29:80/OLAP/msmdpump.dll"+
                ";Catalog=CreditCard", 
                "", 
                "");


    } catch (SQLException e) {
        e.printStackTrace();
    }
    if (null== connection){
        System.out.println("Connection null");
    }else
        System.out.println("Connect Successfully !");

    OlapWrapper wrapper = (OlapWrapper) connection;
    OlapConnection olapConnection = null;
    try {
    olapConnection = wrapper.unwrap(OlapConnection.class);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    OlapStatement statement = null;
    CellSet cellSet = null;
    try {
    statement = (OlapStatement) olapConnection.createStatement();
    cellSet =   statement.executeOlapQuery(

          "SELECT NON EMPTY { [Measures].[Instalment Future Amount] } ON COLUMNS"+
          ", NON EMPTY { ([Dim MerchantInstalmentCashFlowDate].[J Year].[J Year].ALLMEMBERS * [Dim MerchantInstalmentCashFlowDate].[Persian Month].[Persian Month].ALLMEMBERS) }  ON ROWS "+ 
          "FROM [Credit Card DW] where ([Dim Merchant].[Mrc Unique Id].[Mrc Unique Id].&[100000000000013])"     

    );

    } catch (SQLException e) {
    e.printStackTrace();
    }

    for (Position row : cellSet.getAxes().get(1)) {
        for (Position column : cellSet.getAxes().get(0)) {
                for (Member member : row.getMembers()) {
                        System.out.println(member.getName());
                }
                final Cell cell = cellSet.getCell(column, row);
                System.out.println(cell.getFormattedValue());
                System.out.println();

        }

    }
}

一切都很好,我在我的本地计算机上执行它并在我的控制台上查看结果:)

接下来,我在backbean的方法中复制了相同的代码,从jsf页面调用它。 我部署了包含那些页面的EAR文件,当我在浏览器上显示jsf时,我收到此错误,这意味着应用程序没有授权连接到.dll文件!!

  

'401:unauthorized'for url:http:// 172.20.0.29:80/OLAP/msmdpump.dll

所有代码都是相同的,只有不同的是我通过java执行第一个类(使用main()方法),然后我通过部署在Weblogic上的jsf调用方法。

任何机构都可以帮我弄清楚为什么会这样? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

当您致电驱动程序管理器时,您传递的是空用户名和密码。这会导致HTTP 401错误。验证谁可以连接到此URL,他们的凭据是什么,并将它们传递给getconnection调用。