Arndt Schönbergs Weblog

Freitag Apr 01, 2016

Pentaho Zugriff aus Java Client mit Olap4J

Wenn eine Systemlandschaft mit Pentaho erstellt wurde, ergibt sich häufig die Anforderung, dass andere Systeme auf MDX Abfragen zugreifen sollen. Eine einfache Anbindung ist mit Hilfe der Bibliothek Olap4j (http://www.olap4j.org/) möglich. Es gibt auch weitere Möglichkeiten, wie den Einsatz von SOAP, auf die ich hier nicht eingehe. Um auf die Daten zugreifen zu können, muss eine Verbindung zu Pentaho aufgebaut werden. Hierfür muss in Pentaho unter „Datasources“ die Xmla Option eingeschaltet werden.

MondrianDataSourceXmla.png

Mit folgendem Code wird eine Olap Verbindung erzeugt
/**
  * @param xmlaServerUrl xmla Server für die Verbindung z.B.http://192.168.1.22:8080/pentaho/Xmla
  * @param userName für die Servervbebindung
  * @param password für die Servervbebindung
  * @return Verbindung
  * @throws OlapSchoesoException bei Fehlern z.B. treiber nicht gefunden
  */
public static OlapConnection getOlapConnection(String xmlaServerUrl, String userName, 
       String password) throws OlapSchoesoException {
  try {
    // Prüfen, ob der Treiber existiert
    Class.forName(AbstractOlapConnectionManager.DRIVER_CLASS_NAME);
    Connection connection = DriverManager.getConnection("jdbc:xmla:Server=" + xmlaServerUrl, 
                userName, password);
    return connection.unwrap(OlapConnection.class);
  } catch (ClassNotFoundException ex) {
    throw new OlapSchoesoException(ex);
  } catch (SQLException ex) {
    throw new OlapSchoesoException(ex);
  }
}
Bei der URL ist darauf zu achten, dass das „X“ in „Xmla“ großgeschrieben wird. Der nächste Wichtige Schritt ist das Wrappen der Verbindung in den Typ OlapConnection, damit die relevanten Methoden korrekt angesprochen werden können. Selbstverständlich muss die Verbindung nach Benutzung in einem finally wieder freigegeben werden.
/**
 * @param xmlaServerUrl xmla Server für die Verbindung z.B.http://192.168.29.88:8080/pentaho/Xmla
 *          (für Mandiran muss die Datasource für xmla freigegeben werden)
 * @param userName für die Servervbebindung
 * @param password für die Servervbebindung
 * @return OlapResult
 * @throws OlapSchoesoException bei Fehlern z.B. treiber nicht gefunden
 */
public void sendMdxQuery(String mdxQuery, String xmlaServerUrl, String userName, String password) 
     throws OlapSchoesoException {
    Connection connection = null;
    try {
        connection = AbstractOlapConnectionManager.getOlapConnection(xmlaServerUrl, userName, 
                             password);
        OlapConnection olapConnection = connection.unwrap(OlapConnection.class);
        LOG.debug("Starte Abfrage");
        CellSet cellSet = olapConnection.createStatement().executeOlapQuery(mdxQuery);
        LOG.debug("Ende");
    } catch (SQLException ex) {
            throw new OlapSchoesoException(ex);
    } finally {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException ex) {
                LOG.error(ex.getMessage(), ex);
            }
        }
    }
}

Calendar

Feeds

Search

Links

Navigation