3

olap4j ドライバーを使用して SSAS キューブに接続しようとすると、この例外が発生し、インターネットを検索しても情報が得られません。以下のような例外出力:

Exception in thread "main" java.lang.NoClassDefFoundError: com/rc/retroweaver/runtime/Collections
    at org.olap4j.driver.xmla.XmlaOlap4jDriver.<clinit>(XmlaOlap4jDriver.java:338)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at cn.lds.olap.T.getConnection(T.java:19)
    at cn.lds.olap.T.main(T.java:30)
Caused by: java.lang.ClassNotFoundException: com.rc.retroweaver.runtime.Collections
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 5 more

これが私の Java コードです: package cn.lds.olap;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.olap4j.Cell;
import org.olap4j.CellSet;
import org.olap4j.OlapConnection;
import org.olap4j.OlapStatement;
import org.olap4j.OlapWrapper;
import org.olap4j.Position;
import org.olap4j.metadata.Member;

public class T {
    public static Connection getConnection() {
        Connection connection = null;
        try {
            Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");
            connection = DriverManager
                    .getConnection("jdbc:xmla:Server=http://localhost/olap/msmdpump.dll;Catalog=CubeOne");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    public static void main(String[] args) {
        try {
            Connection connection = getConnection();
            OlapWrapper wrapper = (OlapWrapper) connection;
            OlapConnection olapConnection = wrapper
                    .unwrap(OlapConnection.class);
            OlapStatement statement = (OlapStatement) connection
                    .createStatement();
            CellSet cellSet = statement
                    .executeOlapQuery("SELECT {[Measures].[Unit Sales]} ON COLUMNS,\n"
                            + "  {[Product].Members} ON ROWS\n"
                            + "FROM [Adventure Works DW2012]");
            for (Position row : cellSet.getAxes().get(1)) {
                for (Position column : cellSet.getAxes().get(0)) {
                    for (Member member : row.getMembers()) {
                        System.out.println(member.getUniqueName());
                    }
                    for (Member member : column.getMembers()) {
                        System.out.println(member.getUniqueName());
                    }
                    final Cell cell = cellSet.getCell(column, row);
                    System.out.println(cell.getFormattedValue());
                    System.out.println();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

jdk1.6.0_45 を使用しており、olap4j のバージョンは 1.1.0 です。

4

1 に答える 1

2

クラスパスにolap4jとolap4j-jdk14の両方があると思います。olap4j-jdk14 を削除します。これは、1.4 以下の JVM でのみ必要なためです。両方を同時に使用することはできません。

于 2014-01-16T14:04:19.910 に答える