「msmdpump.dll」に接続し、キューブ上で MDX を実行して結果を取得する main() メソッドを含む Java クラスを作成しました。このような :
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();
}
}
}
すべて問題ありません。ローカルコンピューターで実行し、コンソールで結果を確認しました:)
次に、バックビーンのメソッドに同じコードをコピーして、jsf ページから呼び出しました。これらのページを含む EAR ファイルを展開し、ブラウザでその jsf を参照すると、このエラーが発生しました。これは、アプリケーションが .dll ファイルに接続する権限を持っていないことを意味します!!
URL の「401: Unauthorized」: http:// 172.20.0.29:80/OLAP/msmdpump.dll
すべてのコードは同じで、Java によって (main() メソッドを使用して) 最初のクラスを実行し、次に Weblogic にデプロイされた jsf によってメソッドを呼び出すことだけが異なります。
なぜこれが起こるのかを理解するのを手伝ってくれる人はいますか?前もって感謝します 。