2014-05-06 69 views
0

我用main()方法編寫了一個java類,用於連接到「msmdpump.dll」並在多維數據集上執行MDX並檢索結果。像這樣:使用Weblogic上的XmlaOlap4jDriver在SASS立方體上執行查詢

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:未經授權' 的網址:HTTP:// 172.20.0.29:80/OLAP/msmdpump.dll

所有的代碼都是相同的,只是不同的是我通過執行第一類java(使用main()方法),然後我通過在Weblogic上部署的jsf調用方法。

任何機構都可以幫助我弄清楚爲什麼會發生這種情況? 在此先感謝。

回答

0

當您調用驅動程序管理器時,您正在傳遞一個空的用戶名和密碼。這會導致HTTP 401錯誤。驗證誰可以連接到此URL,他們的憑據是什麼,並將它們傳遞給調用以獲取連接。

+0

感謝@Lus,但事情是當我執行它的核心Java類(相同的連接),並沒有這種未經授權的錯誤。另一方面,我測試了IIS中的所有授權選項,如Windows,基本,匿名等,但他們都沒有工作:( – soheilz92