0

私は Play 2.1.0 で olap4j を使用しようとしていますが、一部の olap4j コードを Play コントローラーで動作させるのが非常に困難です。この同じコードは別の Eclipse Java プロジェクトで問題なく動作するため、olap4j に関する問題は除外しました。またはそれが接続する私のXMLAサーバー。JAR ファイルを \lib フォルダーに配置することにより、olap4j JAR ファイルを管理されていない依存関係として追加しました。Play DEV モードで実行しています。

次のコードは、以下の例外を返します。

Java コード:

Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");

エラー:

[RuntimeException: java.lang.NoClassDefFoundError: edu/emory/mathcs/backport/java/util/concurrent/Callable] 

さらに掘り下げた後、Play は独自の Classloader を使用していることがわかったので、次のことを試しました。

Java コード:

Play.application().classloader().loadClass("org.olap4j.driver.xmla.XmlaOlap4jDriver");

これにより、NoClassDefFoundError エラーが解消されるように見えますが、次の例外が発生します。

エラー:

java.sql.SQLException: No suitable driver found for jdbc:xmla:Server=http://localhost/OLAP/msmdpump.dll

おそらく、グローバル クラスに JDBC クラス登録を追加する必要がありますか? どんな助けでも大歓迎です。org.olap4j.driver.xmla.XmlaOlap4jDriver の JavaDocs には次のように書かれています。これはまさに私がフォローしているものです。

olap4j は JDBC のスーパーセットであるため、他の JDBC ドライバーと同じようにこのドライバーを登録します。次に、接頭辞「jdbc:xmla:」が付いた URL を使用して接続を作成します。

完全なコード:

package controllers;

import play.Play;
import play.mvc.*;
import org.olap4j.*;
import org.olap4j.metadata.Member;
import java.sql.*;

public class Test extends Controller {

public static Result index() {

    String server = "http://localhost/OLAP/msmdpump.dll";
    String user = "user";
    String password = "password";
    String result = "0";

    try {
        //Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");
        Play.application().classloader().loadClass("org.olap4j.driver.xmla.XmlaOlap4jDriver");
        try {
            Connection connection = DriverManager.getConnection("jdbc:xmla:Server="+server, user, password);
        } catch (SQLException e) {
            result = e.getMessage();
        }
    } catch (ClassNotFoundException e) {
        result = e.getMessage();
    }

    return ok(result);
}
}
4

2 に答える 2