Skip to content

Commit

Permalink
MONDRIAN Implements the data source lock box functionality on the mon…
Browse files Browse the repository at this point in the history
…drian side.

[git-p4: depot-paths = "//open/mondrian-release/3.2/": change = 13963]
  • Loading branch information
lucboudreau committed Dec 8, 2010
1 parent aab5192 commit 169c654
Showing 1 changed file with 43 additions and 2 deletions.
45 changes: 43 additions & 2 deletions src/main/mondrian/olap4j/MondrianOlap4jConnection.java
Expand Up @@ -13,6 +13,8 @@
import mondrian.olap.*;
import mondrian.olap.Member;
import mondrian.rolap.*;
import mondrian.spi.CatalogLocator;
import mondrian.util.LockBox;

import mondrian.xmla.XmlaHandler;
import org.olap4j.Axis;
Expand All @@ -32,6 +34,8 @@
import java.sql.*;
import java.util.*;

import javax.sql.DataSource;

/**
* Implementation of {@link org.olap4j.OlapConnection}
* for the Mondrian OLAP engine.
Expand Down Expand Up @@ -128,9 +132,46 @@ abstract class MondrianOlap4jConnection implements OlapConnection {
for (Map.Entry<String, String> entry : map.entrySet()) {
list.put(entry.getKey(), entry.getValue());
}
final LockBox driverLockBox =
MondrianOlap4jDriver.getLockBox();
CatalogLocator catalogLocator = null;
DataSource dataSource = null;
if (list.get(MondrianOlap4jDriver.Moniker.SharedDataSource.name())
!= null)
{
final mondrian.util.LockBox.Entry datasourceEntry =
driverLockBox.get(
list.get(
MondrianOlap4jDriver.Moniker.SharedDataSource
.name()));
if (datasourceEntry != null
&& datasourceEntry.getValue() != null
&& datasourceEntry.getValue() instanceof DataSource)
{
dataSource = (DataSource) datasourceEntry.getValue();
}
}
if (list.get(MondrianOlap4jDriver.Moniker.SharedCatalogLocator.name())
!= null)
{
final mondrian.util.LockBox.Entry catalogEntry =
driverLockBox.get(
list.get(
MondrianOlap4jDriver.Moniker.SharedCatalogLocator
.name()));
if (catalogEntry != null
&& catalogEntry.getValue() != null
&& catalogEntry.getValue() instanceof CatalogLocator)
{
catalogLocator = (CatalogLocator) catalogEntry.getValue();
}
}
this.mondrianConnection =
(RolapConnection) mondrian.olap.DriverManager.getConnection(
list, null);
(RolapConnection) mondrian.olap.DriverManager
.getConnection(
list,
catalogLocator,
dataSource);
this.olap4jDatabaseMetaData =
factory.newDatabaseMetaData(this, mondrianConnection);
this.olap4jSchema = toOlap4j(mondrianConnection.getSchema());
Expand Down

0 comments on commit 169c654

Please sign in to comment.