From ab1bb242c54e713538e134406ee6191677496152 Mon Sep 17 00:00:00 2001 From: shawkins Date: Tue, 31 May 2016 09:18:35 -0400 Subject: [PATCH] TEIID-4231 better handling for a non-active vdb # Conflicts: # test-integration/common/src/test/java/org/teiid/arquillian/IntegrationTestOData4.java --- .../main/java/org/teiid/odata/api/Client.java | 3 +- .../org/teiid/olingo/service/LocalClient.java | 41 ++++++++++++------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/olingo/src/main/java/org/teiid/odata/api/Client.java b/olingo/src/main/java/org/teiid/odata/api/Client.java index 5d59b9ec9f..e3c6f32136 100644 --- a/olingo/src/main/java/org/teiid/odata/api/Client.java +++ b/olingo/src/main/java/org/teiid/odata/api/Client.java @@ -26,6 +26,7 @@ import java.util.List; import org.teiid.adminapi.impl.VDBMetaData; +import org.teiid.core.TeiidProcessingException; import org.teiid.metadata.MetadataStore; import org.teiid.query.sql.lang.Command; import org.teiid.query.sql.lang.Query; @@ -59,7 +60,7 @@ void executeSQL(Query query, List parameters, String getProperty(String name); - Connection open() throws SQLException; + Connection open() throws SQLException, TeiidProcessingException; void close() throws SQLException; } \ No newline at end of file diff --git a/olingo/src/main/java/org/teiid/olingo/service/LocalClient.java b/olingo/src/main/java/org/teiid/olingo/service/LocalClient.java index cc156a0efe..83f66c484c 100644 --- a/olingo/src/main/java/org/teiid/olingo/service/LocalClient.java +++ b/olingo/src/main/java/org/teiid/olingo/service/LocalClient.java @@ -34,7 +34,9 @@ import java.util.Properties; import java.util.StringTokenizer; +import org.teiid.adminapi.VDB.Status; import org.teiid.adminapi.impl.VDBMetaData; +import org.teiid.core.TeiidProcessingException; import org.teiid.core.TeiidRuntimeException; import org.teiid.core.util.PropertiesUtils; import org.teiid.jdbc.ConnectionImpl; @@ -54,6 +56,7 @@ import org.teiid.odata.api.UpdateResponse; import org.teiid.odbc.ODBCServerRemoteImpl; import org.teiid.olingo.ODataPlugin; +import org.teiid.query.QueryPlugin; import org.teiid.query.metadata.TransformationMetadata; import org.teiid.query.sql.lang.CacheHint; import org.teiid.query.sql.lang.Command; @@ -85,10 +88,11 @@ private long getCacheTime() { } @Override - public Connection open() throws SQLException { + public Connection open() throws SQLException, TeiidProcessingException { this.connection = buildConnection(TeiidDriver.getInstance(), this.vdbName, this.vdbVersion, this.properties); ODBCServerRemoteImpl.setConnectionProperties(connection); ODBCServerRemoteImpl.setConnectionProperties(connection, this.properties); + getVDBInternal(); return this.connection; } @@ -122,22 +126,31 @@ public static ConnectionImpl buildConnection(TeiidDriver driver, String vdbName, @Override public VDBMetaData getVDB() { - if (this.vdb == null) { - try { - LocalServerConnection lsc = (LocalServerConnection) getConnection().getServerConnection(); - VDBMetaData vdb = lsc.getWorkContext().getVDB(); - if (vdb == null) { - throw new TeiidRuntimeException(ODataPlugin.Util.gs( - ODataPlugin.Event.TEIID16001, this.vdbName, - this.vdbVersion)); - } - this.vdb = vdb; - } catch (SQLException e) { - throw new TeiidRuntimeException(e); + try { + return getVDBInternal(); + } catch (TeiidProcessingException e) { + throw new TeiidRuntimeException(e); + } catch (SQLException e) { + throw new TeiidRuntimeException(e); + } + } + + private VDBMetaData getVDBInternal() throws SQLException, TeiidProcessingException { + if (this.vdb == null) { + LocalServerConnection lsc = (LocalServerConnection) getConnection().getServerConnection(); + vdb = lsc.getWorkContext().getVDB(); + if (vdb == null) { + throw new TeiidRuntimeException(ODataPlugin.Util.gs( + ODataPlugin.Event.TEIID16001, this.vdbName, + this.vdbVersion)); } + this.vdb = vdb; } + if (vdb.getStatus() != Status.ACTIVE) { + throw new TeiidProcessingException(QueryPlugin.Event.TEIID31099, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31099, vdb, vdb.getStatus())); + } return this.vdb; - } + } @Override public void executeCall(String sql, List parameters, ProcedureReturnType returnType,