use of org.pentaho.platform.plugin.services.connections.mondrian.MDXConnection in project pentaho-platform by pentaho.
the class MDXBaseComponent method getConnection.
protected IPentahoConnection getConnection() {
// first attempt to get the connection metadata from the catalog service. if that is not successful,
// get the connection using the original approach.
MdxConnectionAction connAction = (MdxConnectionAction) getActionDefinition();
String catalogName = connAction.getCatalog().getStringValue();
IMondrianCatalogService mondrianCatalogService = // $NON-NLS-1$
PentahoSystem.get(IMondrianCatalogService.class, "IMondrianCatalogService", PentahoSessionHolder.getSession());
MondrianCatalog catalog = mondrianCatalogService.getCatalog(catalogName, PentahoSessionHolder.getSession());
if (catalog == null) {
return getConnectionOrig();
}
Util.PropertyList connectProperties = Util.parseConnectString(catalog.getDataSourceInfo());
Properties properties = new Properties();
Iterator<Pair<String, String>> iter = connectProperties.iterator();
while (iter.hasNext()) {
Pair<String, String> pair = iter.next();
properties.put(pair.getKey(), pair.getValue());
}
properties.put("Catalog", catalog.getDefinition());
properties.put("Provider", "mondrian");
properties.put("PoolNeeded", "false");
properties.put(RolapConnectionProperties.Locale.name(), LocaleHelper.getLocale().toString());
debug("Mondrian Connection Properties: " + properties.toString());
MDXConnection mdxConnection = (MDXConnection) PentahoConnectionFactory.getConnection(IPentahoConnection.MDX_DATASOURCE, properties, PentahoSessionHolder.getSession(), this);
if (connAction != null) {
if ((connAction.getExtendedColumnNames() != ActionInputConstant.NULL_INPUT)) {
mdxConnection.setUseExtendedColumnNames(connAction.getExtendedColumnNames().getBooleanValue());
}
}
return mdxConnection;
}
use of org.pentaho.platform.plugin.services.connections.mondrian.MDXConnection in project pentaho-platform by pentaho.
the class MDXBaseComponent method getConnectionOrig.
protected IPentahoConnection getConnectionOrig() {
IPentahoConnection localConnection = null;
MdxConnectionAction connAction = (MdxConnectionAction) getActionDefinition();
try {
String mdxConnectionStr = connAction.getMdxConnectionString().getStringValue();
Properties mdxConnectionProps = (Properties) connAction.getConnectionProps().getValue();
String jdbcStr = connAction.getConnection().getStringValue();
String jndiStr = connAction.getJndi().getStringValue();
String location = connAction.getLocation().getStringValue();
String role = connAction.getRole().getStringValue();
String catalog = connAction.getCatalog().getStringValue();
if ((catalog == null) && (connAction.getCatalogResource() != null)) {
IActionSequenceResource resource = getResource(connAction.getCatalogResource().getName());
catalog = resource.getAddress();
if (resource.getSourceType() == IActionSequenceResource.URL_RESOURCE) {
if (!catalog.startsWith("solution:") && !catalog.startsWith("http:")) {
// $NON-NLS-1$
if (fileExistsInRepository(catalog)) {
// About allowed "solution:"
// Extra step to make sure that remote mondrian models
// fully qualified aren't munged
// MB
// $NON-NLS-1$
catalog = "solution:" + catalog;
}
}
} else if ((resource.getSourceType() == IActionSequenceResource.SOLUTION_FILE_RESOURCE) || (resource.getSourceType() == IActionSequenceResource.FILE_RESOURCE)) {
if (!catalog.startsWith("solution:")) {
// $NON-NLS-1$
catalog = "solution:" + catalog;
}
}
}
if (catalog == null) {
// $NON-NLS-1$
warn(Messages.getInstance().getString("MDXBaseComponent.ERROR_0007_CATALOG_NOT_DEFINED", getActionName()));
} else {
if (mdxConnectionProps != null) {
mdxConnectionProps.put(MdxConnectionAction.CATALOG_ELEMENT, catalog);
}
}
String userId = connAction.getUserId().getStringValue();
String password = connAction.getPassword().getStringValue();
if (mdxConnectionProps != null) {
localConnection = PentahoConnectionFactory.getConnection(IPentahoConnection.MDX_DATASOURCE, mdxConnectionProps, getSession(), this);
} else {
if (mdxConnectionStr != null) {
localConnection = PentahoConnectionFactory.getConnection(IPentahoConnection.MDX_DATASOURCE, mdxConnectionStr, getSession(), this);
} else {
String connectStr = null;
if (jdbcStr != null) {
// $NON-NLS-1$
connectStr = jdbcStr + "; Catalog=" + catalog;
} else if (jndiStr != null) {
IDBDatasourceService datasourceService = PentahoSystem.getObjectFactory().get(IDBDatasourceService.class, null);
if (datasourceService.getDataSource(jndiStr) == null) {
// $NON-NLS-1$
error(Messages.getInstance().getErrorString("MDXBaseComponent.ERROR_0005_INVALID_CONNECTION"));
return null;
}
// $NON-NLS-1$ //$NON-NLS-2$
connectStr = "dataSource=" + jndiStr + "; Catalog=" + catalog;
// Add extra definitions from platform mondrian metadata
MondrianCatalog mc = getMondrianCatalog(catalog);
try {
connectStr += ";" + mc.getDataSourceInfo();
} catch (Exception e) {
// Just swallow the exception
}
}
if (role != null) {
// $NON-NLS-1$
connectStr += "; Role=" + role;
}
Properties props = new Properties();
props.setProperty(IPentahoConnection.CONNECTION, connectStr);
props.setProperty(IPentahoConnection.PROVIDER, location);
if (userId != null) {
props.setProperty(IPentahoConnection.USERNAME_KEY, userId);
}
if (password != null) {
props.setProperty(IPentahoConnection.PASSWORD_KEY, password);
}
localConnection = PentahoConnectionFactory.getConnection(IPentahoConnection.MDX_DATASOURCE, props, getSession(), this);
}
if (localConnection == null) {
// $NON-NLS-1$
error(Messages.getInstance().getErrorString("MDXBaseComponent.ERROR_0005_INVALID_CONNECTION"));
return null;
}
}
if (localConnection instanceof MDXConnection) {
MDXConnection mdxConn = (MDXConnection) localConnection;
if (connAction != null) {
if ((connAction.getExtendedColumnNames() != ActionInputConstant.NULL_INPUT)) {
mdxConn.setUseExtendedColumnNames(connAction.getExtendedColumnNames().getBooleanValue());
}
}
}
return localConnection;
} catch (Exception e) {
// $NON-NLS-1$
error(Messages.getInstance().getErrorString("MDXBaseComponent.ERROR_0006_EXECUTE_FAILED", getActionName()), e);
}
return null;
}
use of org.pentaho.platform.plugin.services.connections.mondrian.MDXConnection in project pentaho-platform by pentaho.
the class MondrianFlushCacheComponent method executeAction.
public boolean executeAction() {
MDXLookupRule mdxLookupRule = getLookupRule();
Connection conn = ((MDXConnection) mdxLookupRule.shareConnection()).getConnection();
CacheControl cacheControl = conn.getCacheControl(null);
Cube[] cubes = conn.getSchema().getCubes();
for (Cube cube : cubes) {
cacheControl.flush(cacheControl.createMeasuresRegion(cube));
}
cacheControl.flushSchema(conn.getSchema());
return true;
}
use of org.pentaho.platform.plugin.services.connections.mondrian.MDXConnection in project pentaho-platform by pentaho.
the class MondrianModelComponent method getInitialQuery.
public static String getInitialQuery(final Properties properties, final String cubeName, IPentahoSession session) throws Throwable {
// Apply any properties for this catalog specified in datasource.xml
IMondrianCatalogService mondrianCatalogService = PentahoSystem.get(IMondrianCatalogService.class, "IMondrianCatalogService", PentahoSessionHolder.getSession());
List<MondrianCatalog> catalogs = mondrianCatalogService.listCatalogs(PentahoSessionHolder.getSession(), true);
String propCat = properties.getProperty(RolapConnectionProperties.Catalog.name());
for (MondrianCatalog cat : catalogs) {
if (cat.getDefinition().equalsIgnoreCase(propCat)) {
Util.PropertyList connectProperties = Util.parseConnectString(cat.getDataSourceInfo());
Iterator<Pair<String, String>> iter = connectProperties.iterator();
while (iter.hasNext()) {
Pair<String, String> pair = iter.next();
if (// Only set if not set already
!properties.containsKey(pair.getKey())) {
properties.put(pair.getKey(), pair.getValue());
}
}
break;
}
}
MDXConnection mdxConnection = (MDXConnection) PentahoConnectionFactory.getConnection(IPentahoConnection.MDX_DATASOURCE, properties, session, null);
// mdxConnection.setProperties( properties );
Connection connection = mdxConnection.getConnection();
if (connection == null) {
Logger.error("MondrianModelComponent", Messages.getInstance().getErrorString("MondrianModel.ERROR_0001_INVALID_CONNECTION", // $NON-NLS-1$ //$NON-NLS-2$
properties.toString()));
return null;
}
try {
return MondrianModelComponent.getInitialQuery(connection, cubeName);
} catch (Throwable t) {
if (t instanceof MondrianException) {
// pull the cause out, otherwise it never gets logged
Throwable cause = ((MondrianException) t).getCause();
if (cause != null) {
throw cause;
} else {
throw t;
}
} else {
throw t;
}
}
}
Aggregations