Author: shawkins
Date: 2010-08-05 11:18:36 -0400 (Thu, 05 Aug 2010)
New Revision: 2417
Modified:
trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml
trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
trunk/client/src/main/java/org/teiid/adminapi/VDB.java
trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java
trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java
trunk/console/src/main/resources/META-INF/rhq-plugin.xml
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManager.java
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManagerRepository.java
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/TranslatorRepository.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
trunk/engine/src/main/java/org/teiid/vdb/runtime/VDBKey.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDataTierManager.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetaDataInstanceClassFactory.java
trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java
trunk/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/TranslatorDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBParserDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java
trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestXMLTypeTranslations.java
trunk/test-integration/common/src/test/java/org/teiid/jdbc/FakeServer.java
Log:
TEIID-1187 changing the scoping of connectormanagerrepository and the vdb level
translators. also separating vdb status from an updatable property that determines how to
allow connections.
Modified: trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml
===================================================================
--- trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml 2010-08-05
15:18:36 UTC (rev 2417)
@@ -60,7 +60,6 @@
<property name="transactionManager"><inject
bean="TransactionManager"
property="transactionManager"/></property>
<property name="sessionService"><inject
bean="SessionService"/></property>
<property name="bufferService"><inject
bean="BufferService"/></property>
- <property name="connectorManagerRepository"><inject
bean="ConnectorManagerRepository"/></property>
<property name="securityHelper"><inject
bean="SecurityHelper"/></property>
<property name="VDBRepository"><inject
bean="VDBRepository"/></property>
<property name="cacheFactory"><inject
bean="CacheFactory"/></property>
Modified:
trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
===================================================================
---
trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml 2010-08-05
15:18:36 UTC (rev 2417)
@@ -5,7 +5,6 @@
<!-- Deployer specific Stuff -->
<bean name="VDBStructure"
class="org.teiid.deployers.VDBStructure" />
<bean name="VDBRepository"
class="org.teiid.deployers.VDBRepository"/>
- <bean name="ConnectorManagerRepository"
class="org.teiid.dqp.internal.datamgr.ConnectorManagerRepository"/>
<bean name="SecurityHelper"
class="org.teiid.jboss.JBossSecurityHelper"/>
<bean name="JBossLifeCycleListener"
class="org.teiid.jboss.JBossLifeCycleListener"/>
@@ -46,7 +45,6 @@
</uninstall>
<property name="VDBRepository"><inject
bean="VDBRepository"/></property>
<property name="objectSerializer"><inject
bean="ObjectSerializer"/></property>
- <property name="connectorManagerRepository"><inject
bean="ConnectorManagerRepository"/></property>
<property name="translatorRepository"><inject
bean="translatorRepository"/></property>
<property name="containerLifeCycleListener"><inject
bean="JBossLifeCycleListener"/></property>
<property name="threadPool"><inject
bean="jboss.system:service=ThreadPool"/></property>
@@ -77,7 +75,6 @@
<bean name="VDBStatusChecker"
class="org.teiid.deployers.VDBStatusChecker">
<property name="VDBRepository"><inject
bean="VDBRepository"/></property>
- <property name="connectorManagerRepository"><inject
bean="ConnectorManagerRepository"/></property>
</bean>
<!-- Persistence class for the VDB deployment file -->
Modified: trunk/client/src/main/java/org/teiid/adminapi/VDB.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/VDB.java 2010-08-04 21:52:59 UTC (rev
2416)
+++ trunk/client/src/main/java/org/teiid/adminapi/VDB.java 2010-08-05 15:18:36 UTC (rev
2417)
@@ -40,9 +40,10 @@
*/
public interface VDB extends AdminObject {
- public static enum Status{INCOMPLETE, INACTIVE, ACTIVE, DELETED, ACTIVE_DEFAULT};
+ public static enum Status{INACTIVE, ACTIVE};
-
+ public enum ConnectionType {NONE, BY_VERSION, ANY}
+
/**
* @return Collection of Teiid Models
*/
@@ -51,7 +52,12 @@
/**
* @return the status
*/
- public Status getStatus();
+ public Status getStatus();
+
+ /**
+ * @return the connection status
+ */
+ public ConnectionType getConnectionType();
/**
* @return the VDB version
Modified: trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -21,6 +21,7 @@
*/
package org.teiid.adminapi.impl;
+import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -43,6 +44,8 @@
import org.teiid.adminapi.Translator;
import org.teiid.adminapi.VDB;
import org.teiid.adminapi.impl.ModelMetaData.ValidationError;
+import org.teiid.core.util.FileUtils;
+import org.teiid.core.util.StringUtil;
@ManagementObject(componentType=@ManagementComponent(type="teiid",subtype="vdb"),
properties=ManagementProperties.EXPLICIT)
@@ -102,7 +105,8 @@
private String fileUrl = null;
private boolean dynamic = false;
private VDB.Status status = VDB.Status.INACTIVE;
-
+ private ConnectionType connectionType = VDB.ConnectionType.BY_VERSION;
+ private boolean removed;
@ManagementProperty(description="Name of the VDB")
@ManagementObjectID(type="vdb")
@@ -116,7 +120,25 @@
super.setName(name);
}
+ public boolean isRemoved() {
+ return removed;
+ }
+
+ public void setRemoved(boolean removed) {
+ this.removed = removed;
+ }
+
@Override
+ @ManagementProperty(description="Collections Allowed")
+ public ConnectionType getConnectionType() {
+ return this.connectionType;
+ }
+
+ public void setConnectionType(ConnectionType allowConnections) {
+ this.connectionType = allowConnections;
+ }
+
+ @Override
@ManagementProperty(description="VDB Status")
public Status getStatus() {
return this.status;
@@ -145,6 +167,20 @@
public void setUrl(String url) {
this.fileUrl = url;
}
+
+ public void setUrl(URL url) {
+ this.setUrl(url.toExternalForm());
+ String fileName = FileUtils.getBaseFileNameWithoutExtension(url.getPath());
+ String prefix = getName() + "_"; //$NON-NLS-1$
+ if (StringUtil.startsWithIgnoreCase(fileName, prefix)) {
+ try {
+ int fileVersion = Integer.parseInt(fileName.substring(prefix.length()));
+ this.setVersion(fileVersion);
+ } catch (NumberFormatException e) {
+
+ }
+ }
+ }
@Override
@ManagementProperty(description="Models in a VDB", managed=true)
@@ -294,6 +330,10 @@
return this.dataPolicies.getMap().get(policyName);
}
+ public VDBTranslatorMetaData getTranslator(String name) {
+ return this.translators.getMap().get(name);
+ }
+
public boolean isPreview() {
return Boolean.valueOf(getPropertyValue("preview")); //$NON-NLS-1$
}
Modified:
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java
===================================================================
---
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -44,7 +44,13 @@
@Translator(name="sqlserver")
public class SQLServerExecutionFactory extends SybaseExecutionFactory {
+ public static final String V_2005 = "2005"; //$NON-NLS-1$
+ public static final String V_2008 = "2008"; //$NON-NLS-1$
+
//TEIID-31 remove mod modifier for SQL Server 2008
+ public SQLServerExecutionFactory() {
+ setDatabaseVersion(V_2005);
+ }
@Override
protected List<Object> convertDateToString(Function function) {
Modified: trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java 2010-08-04 21:52:59
UTC (rev 2416)
+++ trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java 2010-08-05 15:18:36
UTC (rev 2417)
@@ -367,6 +367,8 @@
"description", String.class);
String vdbStatus = ProfileServiceUtil.getSimpleValue(mcVdb, "status",
String.class);
+ String connectionType = ProfileServiceUtil.getSimpleValue(mcVdb,
"connectionType",
+ String.class);
String vdbURL = ProfileServiceUtil.getSimpleValue(mcVdb, "url",
String.class);
@@ -378,6 +380,7 @@
configuration.put(new PropertySimple("description", vdbDescription));
configuration.put(new PropertySimple("status", vdbStatus));
configuration.put(new PropertySimple("url", vdbURL));
+ configuration.put(new PropertySimple("connectionType", connectionType));
getTranslators(mcVdb, configuration);
Modified: trunk/console/src/main/resources/META-INF/rhq-plugin.xml
===================================================================
--- trunk/console/src/main/resources/META-INF/rhq-plugin.xml 2010-08-04 21:52:59 UTC (rev
2416)
+++ trunk/console/src/main/resources/META-INF/rhq-plugin.xml 2010-08-05 15:18:36 UTC (rev
2417)
@@ -451,12 +451,20 @@
readOnly="true" />
<c:simple-property name="status" type="string"
description="The Virtual Database Status" required="false"
- summary="true">
+ summary="true" readOnly="true">
<c:property-options>
<c:option value="ACTIVE" name="UP" />
<c:option value="INACTIVE" name="DOWN"
default="true" />
</c:property-options>
</c:simple-property>
+ <c:simple-property name="connectionType" type="string"
+ description="Connections to allow to this Virtual Database"
required="false">
+ <c:property-options>
+ <c:option value="NONE" name="NONE" />
+ <c:option value="BY_VERSION" name="BY VERSION"
default="true" />
+ <c:option value="ANY" name="ANY" />
+ </c:property-options>
+ </c:simple-property>
<c:simple-property name="url" type="string"
description="The Virtual Database URL" required="false"
readOnly="true" />
</c:group>
@@ -467,7 +475,7 @@
<c:map-property name="map"
description="Translator Overrides for this VDB">
<c:simple-property name="name" displayName="Name"
- description="Name of this translator instance"
required="true"
+ description="Name of this translator instance"
required="false"
readOnly="true" />
<c:simple-property name="type" displayName="Translator
type"
description="Translator type" required="false"
readOnly="true" />
@@ -476,7 +484,7 @@
required="false" readOnly="true" />
<c:simple-property name="propertyValue"
displayName="Property Value" description="Property Value"
- required="false" />
+ required="false" readOnly="true"/>
</c:map-property>
</c:list-property>
</c:group>
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManager.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManager.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManager.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -39,7 +39,6 @@
import org.teiid.dqp.DQPPlugin;
import org.teiid.dqp.message.AtomicRequestID;
import org.teiid.dqp.message.AtomicRequestMessage;
-import org.teiid.dqp.service.BufferService;
import org.teiid.logging.CommandLogMessage;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
@@ -68,9 +67,6 @@
private String translatorName;
private String connectionName;
- //services acquired in start
- private BufferService bufferService;
-
// known requests
private ConcurrentHashMap<AtomicRequestID, ConnectorWorkItem> requestStates =
new ConcurrentHashMap<AtomicRequestID, ConnectorWorkItem>();
@@ -155,10 +151,6 @@
return requestStates.size();
}
- public void setBufferService(BufferService service) {
- this.bufferService = service;
- }
-
/**
* initialize this <code>ConnectorManager</code>.
* @throws TranslatorException
Modified:
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManagerRepository.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManagerRepository.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManagerRepository.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -23,8 +23,6 @@
package org.teiid.dqp.internal.datamgr;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -42,11 +40,10 @@
return this.repo.get(connectorName);
}
- public List<ConnectorManager> getConnectorManagers() {
- return new ArrayList<ConnectorManager>(this.repo.values());
+ public Map<String, ConnectorManager> getConnectorManagers() {
+ return repo;
}
-
public ConnectorManager removeConnectorManager(String connectorName) {
return this.repo.remove(connectorName);
}
Modified:
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/TranslatorRepository.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/TranslatorRepository.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/TranslatorRepository.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -27,52 +27,25 @@
import java.util.concurrent.ConcurrentHashMap;
import org.teiid.adminapi.Translator;
-import org.teiid.adminapi.impl.TranslatorMetaData;
import org.teiid.adminapi.impl.VDBTranslatorMetaData;
-import org.teiid.vdb.runtime.VDBKey;
public class TranslatorRepository implements Serializable{
private static final long serialVersionUID = -1212280886010974273L;
- private Map<String, TranslatorMetaData> translatorRepo = new
ConcurrentHashMap<String, TranslatorMetaData>();
- private Map<VDBKey, Map<String, VDBTranslatorMetaData>>
vdbScopedTranslatorRepo = new ConcurrentHashMap<VDBKey, Map<String,
VDBTranslatorMetaData>>();
+ private Map<String, VDBTranslatorMetaData> translatorRepo = new
ConcurrentHashMap<String, VDBTranslatorMetaData>();
- public void addTranslatorMetadata(String name, TranslatorMetaData factory) {
+ public void addTranslatorMetadata(String name, VDBTranslatorMetaData factory) {
this.translatorRepo.put(name, factory);
- }
-
- public void addTranslatorMetadata(VDBKey key, String name, VDBTranslatorMetaData
factory) {
- Map<String, VDBTranslatorMetaData> repo = vdbScopedTranslatorRepo.get(key);
- if (repo == null) {
- repo = new ConcurrentHashMap<String, VDBTranslatorMetaData>();
- this.vdbScopedTranslatorRepo.put(key, repo);
- }
- repo.put(name, factory);
}
- public Translator getTranslatorMetaData(VDBKey key, String name) {
- Translator factory = null;
-
- if (key != null) {
- Map<String, VDBTranslatorMetaData> repo = vdbScopedTranslatorRepo.get(key);
- if (repo != null && !repo.isEmpty()) {
- factory = repo.get(name);
- }
- }
-
- if (factory == null) {
- factory = this.translatorRepo.get(name);
- }
-
+ public Translator getTranslatorMetaData(String name) {
+ Translator factory = this.translatorRepo.get(name);
return factory;
}
- public TranslatorMetaData removeTranslatorMetadata(String name) {
+ public VDBTranslatorMetaData removeTranslatorMetadata(String name) {
return this.translatorRepo.remove(name);
}
- public void removeVDBTranslators(VDBKey name) {
- this.vdbScopedTranslatorRepo.remove(name);
- }
}
\ No newline at end of file
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -59,7 +59,6 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.types.Streamable;
import org.teiid.dqp.DQPPlugin;
-import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.dqp.internal.process.ThreadReuseExecutor.PrioritizedRunnable;
import org.teiid.dqp.message.AtomicRequestMessage;
import org.teiid.dqp.message.RequestID;
@@ -186,7 +185,6 @@
private SessionAwareCache<CachedResults> rsCache;
private TransactionService transactionService;
private BufferService bufferService;
- private ConnectorManagerRepository connectorManagerRepository;
// Query worker pool for processing plans
private int processorTimeslice = DQPConfiguration.DEFAULT_PROCESSOR_TIMESLICE;
@@ -332,8 +330,7 @@
ClientState state = this.getClientState(workContext.getSessionId(), true);
request.initialize(requestMsg, bufferManager,
dataTierMgr, transactionService, state.sessionTables,
- workContext, connectorManagerRepository,
- this.useEntitlements);
+ workContext, this.useEntitlements);
ResultsFuture<ResultsMessage> resultsFuture = new
ResultsFuture<ResultsMessage>();
RequestWorkItem workItem = new RequestWorkItem(this, requestMsg, request,
resultsFuture.getResultsReceiver(), requestID, workContext);
@@ -648,7 +645,6 @@
this.processWorkerPool = new
ThreadReuseExecutor(DQPConfiguration.PROCESS_PLAN_QUEUE_NAME, config.getMaxThreads());
dataTierMgr = new TempTableDataManager(new DataTierManagerImpl(this,
- this.connectorManagerRepository,
this.bufferService), this.bufferManager);
}
@@ -791,14 +787,6 @@
return processor.processMessage(workContext.getRequestID(requestID), workContext,
preparedSql, allowDoubleQuotedVariable);
}
- public void setConnectorManagerRepository(ConnectorManagerRepository repo) {
- this.connectorManagerRepository = repo;
- }
-
- public ConnectorManagerRepository getConnectorManagerRepository() {
- return this.connectorManagerRepository;
- }
-
public boolean isExceptionOnMaxSourceRows() {
return exceptionOnMaxSourceRows;
}
Modified:
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -105,18 +105,12 @@
// Resources
private DQPCore requestMgr;
private BufferService bufferService;
- private ConnectorManagerRepository connectorManagerRepository;
- public DataTierManagerImpl(DQPCore requestMgr, ConnectorManagerRepository
connectorRepo, BufferService bufferService) {
+ public DataTierManagerImpl(DQPCore requestMgr, BufferService bufferService) {
this.requestMgr = requestMgr;
- this.connectorManagerRepository = connectorRepo;
this.bufferService = bufferService;
}
- private ConnectorManager getCM(String connectorName) {
- return this.connectorManagerRepository.getConnectorManager(connectorName);
- }
-
public TupleSource registerRequest(CommandContext context, Command command, String
modelName, String connectorBindingId, int nodeID) throws TeiidComponentException,
TeiidProcessingException {
RequestWorkItem workItem =
requestMgr.getRequestWorkItem((RequestID)context.getProcessorID());
@@ -125,7 +119,8 @@
}
AtomicRequestMessage aqr = createRequest(context.getProcessorID(), command, modelName,
connectorBindingId, nodeID);
- ConnectorWork work = getCM(aqr.getConnectorName()).registerRequest(aqr);
+ ConnectorManagerRepository cmr =
workItem.getDqpWorkContext().getVDB().getAttachment(ConnectorManagerRepository.class);
+ ConnectorWork work =
cmr.getConnectorManager(aqr.getConnectorName()).registerRequest(aqr);
return new DataTierTupleSource(aqr, workItem, work, this);
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -137,7 +137,6 @@
TransactionService transactionService,
TempTableStore tempTableStore,
DQPWorkContext workContext,
- ConnectorManagerRepository repo,
boolean useEntitlements) {
this.requestMsg = requestMsg;
@@ -150,7 +149,7 @@
idGenerator.setDefaultFactory(new IntegerIDFactory());
this.workContext = workContext;
this.requestId = workContext.getRequestID(this.requestMsg.getExecutionId());
- this.connectorManagerRepo = repo;
+ this.connectorManagerRepo =
workContext.getVDB().getAttachment(ConnectorManagerRepository.class);
this.useEntitlements = useEntitlements;
}
Modified: trunk/engine/src/main/java/org/teiid/vdb/runtime/VDBKey.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/vdb/runtime/VDBKey.java 2010-08-04 21:52:59 UTC
(rev 2416)
+++ trunk/engine/src/main/java/org/teiid/vdb/runtime/VDBKey.java 2010-08-05 15:18:36 UTC
(rev 2417)
@@ -27,29 +27,29 @@
import org.teiid.core.util.HashCodeUtil;
-public class VDBKey implements Serializable{
+public class VDBKey implements Serializable, Comparable<VDBKey>{
private static final long serialVersionUID = -7249750823144856081L;
private String name;
- private String version;
+ private int version;
public VDBKey(String name, String version) {
this.name = name.toUpperCase();
if (version != null) {
- this.version = version.toUpperCase();
+ this.version = Integer.parseInt(version);
}
}
public VDBKey(String name, int version) {
this.name = name.toUpperCase();
- this.version = String.valueOf(version);
+ this.version = version;
}
public String getName() {
return name;
}
- public String getVersion() {
+ public int getVersion() {
return version;
}
@@ -74,19 +74,8 @@
VDBKey other = (VDBKey)obj;
- if (!other.name.equals(this.name)) {
- return false;
- }
-
- if (this.version != null) {
- if (!this.version.equals(other.version)) {
- return false;
- }
- } else if (other.version != null){
- return false;
- }
-
- return true;
+ return other.name.equals(this.name)
+ && version == other.version;
}
/**
@@ -95,5 +84,14 @@
public String toString() {
return name + " " + version; //$NON-NLS-1$
}
+
+ @Override
+ public int compareTo(VDBKey o) {
+ int compare = name.compareTo(o.name);
+ if (compare == 0) {
+ return version - o.version;
+ }
+ return compare;
+ }
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -53,12 +53,12 @@
context.getVDB().getModel("BQT3").setVisible(false); //$NON-NLS-1$
ConnectorManagerRepository repo =
Mockito.mock(ConnectorManagerRepository.class);
+ context.getVDB().addAttchment(ConnectorManagerRepository.class, repo);
Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new
AutoGenDataService());
core = new DQPCore();
core.setBufferService(new FakeBufferService());
core.setCacheFactory(new DefaultCacheFactory());
- core.setConnectorManagerRepository(repo);
core.setTransactionService(new FakeTransactionService());
core.start(new DQPConfiguration());
Modified:
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDataTierManager.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDataTierManager.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDataTierManager.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -82,7 +82,6 @@
dtm = new DataTierManagerImpl(rm,
- repo,
bs);
command = helpGetCommand(sql, metadata);
Modified:
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
===================================================================
---
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -245,7 +245,7 @@
ConnectorManagerRepository repo =
Mockito.mock(ConnectorManagerRepository.class);
Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new
AutoGenDataService());
- serverRequest.initialize(request,
BufferManagerFactory.getStandaloneBufferManager(), null, new FakeTransactionService(),
null, workContext, repo, false);
+ serverRequest.initialize(request,
BufferManagerFactory.getStandaloneBufferManager(), null, new FakeTransactionService(),
null, workContext, false);
serverRequest.setMetadata(capFinder, metadata, null);
serverRequest.processRequest();
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -77,14 +77,10 @@
Command command = QueryParser.getQueryParser().parseCommand(QUERY);
QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, metadata,
AnalysisRecord.createNonRecordingRecord());
- ConnectorManagerRepository repo =
Mockito.mock(ConnectorManagerRepository.class);
- Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new
AutoGenDataService());
-
-
RequestMessage message = new RequestMessage();
DQPWorkContext workContext = FakeMetadataFactory.buildWorkContext(metadata,
FakeMetadataFactory.example1VDB());
- request.initialize(message, null, null,new FakeTransactionService(),null,
workContext, repo, false);
+ request.initialize(message, null, null,new FakeTransactionService(),null,
workContext, false);
request.initMetadata();
request.validateAccess(command);
}
@@ -133,13 +129,12 @@
} else {
request = new Request();
}
-
ConnectorManagerRepository repo =
Mockito.mock(ConnectorManagerRepository.class);
+ workContext.getVDB().addAttchment(ConnectorManagerRepository.class, repo);
Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new
AutoGenDataService());
request.initialize(message, Mockito.mock(BufferManager.class),
- new FakeDataManager(), new FakeTransactionService(), null, workContext, repo,
- false);
+ new FakeDataManager(), new FakeTransactionService(), null, workContext, false);
request.processRequest();
return request;
Modified:
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java
===================================================================
---
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -62,7 +62,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidRuntimeException;
import org.teiid.deployers.VDBRepository;
-import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.dqp.internal.process.DQPConfiguration;
import org.teiid.dqp.internal.process.DQPCore;
import org.teiid.dqp.internal.process.DQPWorkContext;
@@ -288,10 +287,6 @@
this.dqpCore.setBufferService(service);
}
- public void setConnectorManagerRepository(ConnectorManagerRepository repo) {
- this.dqpCore.setConnectorManagerRepository(repo);
- }
-
public void setSecurityHelper(SecurityHelper helper) {
this.csr.setSecurityHelper(helper);
}
Modified:
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetaDataInstanceClassFactory.java
===================================================================
---
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetaDataInstanceClassFactory.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetaDataInstanceClassFactory.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -32,7 +32,9 @@
import org.jboss.metatype.api.values.MetaValueFactory;
import org.teiid.adminapi.impl.DataPolicyMetadata;
import org.teiid.adminapi.impl.ModelMetaData;
+import org.teiid.adminapi.impl.PropertyMetadata;
import org.teiid.adminapi.impl.VDBMetaData;
+import org.teiid.adminapi.impl.VDBTranslatorMetaData;
import org.teiid.adminapi.jboss.ManagedUtil;
public class VDBMetaDataInstanceClassFactory extends
AbstractInstanceClassFactory<VDBMetaData> {
@@ -89,6 +91,17 @@
}
}
}
+ else if (property.getName().equals("overrideTranslators")) { //$NON-NLS-1$
+ List<ManagedObject> translators =
(List<ManagedObject>)MetaValueFactory.getInstance().unwrap(property.getValue());
+ for (ManagedObject translator:translators) {
+ VDBTranslatorMetaData translatorInstance = vdb.getTranslator(translator.getName());
+ ManagedProperty mp = translator.getProperty("property"); //$NON-NLS-1$
+ List<PropertyMetadata> properties =
(List<PropertyMetadata>)MetaValueFactory.getInstance().unwrap(mp.getValue());
+ for (PropertyMetadata managedProperty:properties) {
+ translatorInstance.addProperty(managedProperty.getName(),
managedProperty.getValue());
+ }
+ }
+ }
else {
super.setValue(beanInfo, property, vdb, value);
}
Modified: trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java 2010-08-04 21:52:59
UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java 2010-08-05 15:18:36
UTC (rev 2417)
@@ -29,6 +29,7 @@
import org.teiid.adminapi.impl.DataPolicyMetadata;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.VDBMetaData;
+import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.metadata.MetadataStore;
import org.teiid.query.function.metadata.FunctionMethod;
import org.teiid.query.metadata.CompositeMetadataStore;
@@ -47,16 +48,19 @@
private UDFMetaData udf;
private LinkedHashMap<VDBKey, CompositeVDB> children;
private MetadataStore[] additionalStores;
+ private ConnectorManagerRepository cmr;
// used as cached item to avoid rebuilding
private VDBMetaData mergedVDB;
- public CompositeVDB(VDBMetaData vdb, MetadataStoreGroup stores, LinkedHashMap<String,
Resource> visibilityMap, UDFMetaData udf, MetadataStore... additionalStores) {
+ public CompositeVDB(VDBMetaData vdb, MetadataStoreGroup stores, LinkedHashMap<String,
Resource> visibilityMap, UDFMetaData udf, ConnectorManagerRepository cmr,
MetadataStore... additionalStores) {
this.vdb = vdb;
this.stores = stores;
this.visibilityMap = visibilityMap;
this.udf = udf;
+ this.cmr = cmr;
this.additionalStores = additionalStores;
+ this.vdb.addAttchment(ConnectorManagerRepository.class, cmr);
update(this.vdb);
}
@@ -121,7 +125,9 @@
mergedVDB.setDescription(this.vdb.getDescription());
mergedVDB.setStatus(this.vdb.getStatus());
mergedVDB.setJAXBProperties(this.vdb.getJAXBProperties());
-
+ mergedVDB.setConnectionType(this.vdb.getConnectionType());
+ ConnectorManagerRepository mergedRepo = new ConnectorManagerRepository();
+ mergedRepo.getConnectorManagers().putAll(this.cmr.getConnectorManagers());
for (CompositeVDB child:this.children.values()) {
// add models
@@ -132,7 +138,9 @@
for (DataPolicy p:child.getVDB().getDataPolicies()) {
mergedVDB.addDataPolicy((DataPolicyMetadata)p);
}
+ mergedRepo.getConnectorManagers().putAll(child.cmr.getConnectorManagers());
}
+ mergedVDB.addAttchment(ConnectorManagerRepository.class, mergedRepo);
return mergedVDB;
}
Modified: trunk/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -43,7 +43,7 @@
Unmarshaller un = VDBParserDeployer.getUnMarsheller();
VDBMetaData vdb = (VDBMetaData)un.unmarshal(file.openStream());
- vdb.setUrl(unit.getRoot().toURL().toExternalForm());
+ vdb.setUrl(unit.getRoot().toURL());
vdb.setDynamic(true);
LogManager.logDetail(LogConstants.CTX_RUNTIME,"VDB
"+unit.getRoot().getName()+" has been parsed."); //$NON-NLS-1$
//$NON-NLS-2$
Modified: trunk/runtime/src/main/java/org/teiid/deployers/TranslatorDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/TranslatorDeployer.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/TranslatorDeployer.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -56,7 +56,7 @@
}
String type = data.getType();
- Translator parent = this.translatorRepository.getTranslatorMetaData(null, type);
+ Translator parent = this.translatorRepository.getTranslatorMetaData(type);
if ( parent == null) {
throw new
DeploymentException(RuntimePlugin.Util.getString("translator_type_not_found",
unit.getName())); //$NON-NLS-1$
}
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java 2010-08-04 21:52:59
UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java 2010-08-05 15:18:36
UTC (rev 2417)
@@ -55,12 +55,10 @@
import org.teiid.runtime.RuntimePlugin;
import org.teiid.translator.ExecutionFactory;
import org.teiid.translator.TranslatorException;
-import org.teiid.vdb.runtime.VDBKey;
public class VDBDeployer extends AbstractSimpleRealDeployer<VDBMetaData> {
private VDBRepository vdbRepository;
- private ConnectorManagerRepository connectorManagerRepository;
private TranslatorRepository translatorRepository;
private ObjectSerializer serializer;
private ContainerLifeCycleListener shutdownListener;
@@ -75,11 +73,13 @@
@Override
public void deploy(DeploymentUnit unit, VDBMetaData deployment) throws
DeploymentException {
- if (this.vdbRepository.getVDB(deployment.getName(), deployment.getVersion()) != null)
{
- this.vdbRepository.removeVDB(deployment.getName(), deployment.getVersion());
+ if (this.vdbRepository.removeVDB(deployment.getName(), deployment.getVersion())) {
LogManager.logInfo(LogConstants.CTX_RUNTIME,
RuntimePlugin.Util.getString("redeploying_vdb", deployment)); //$NON-NLS-1$
}
+ TranslatorRepository repo = new TranslatorRepository();
+ ConnectorManagerRepository cmr = new ConnectorManagerRepository();
+
boolean preview = deployment.isPreview();
if (!preview) {
@@ -97,7 +97,7 @@
VDBTranslatorMetaData data = (VDBTranslatorMetaData)t;
String type = data.getType();
- Translator parent = this.translatorRepository.getTranslatorMetaData(null, type);
+ Translator parent = this.translatorRepository.getTranslatorMetaData(type);
if ( parent == null) {
throw new
DeploymentException(RuntimePlugin.Util.getString("translator_type_not_found",
unit.getName())); //$NON-NLS-1$
}
@@ -107,15 +107,15 @@
if (data.getPropertyValue(key) == null && parent.getPropertyValue(key) !=
null) {
data.addProperty(key, parent.getPropertyValue(key));
}
- }
- this.translatorRepository.addTranslatorMetadata(new VDBKey(deployment.getName(),
deployment.getVersion()), data.getName(), data);
+ }
+ repo.addTranslatorMetadata(data.getName(), data);
}
- createConnectorManagers(deployment);
+ createConnectorManagers(cmr, repo, deployment);
// if store is null and vdb dynamic vdb then try to get the metadata
if (store == null && deployment.isDynamic()) {
store = new MetadataStoreGroup();
- buildDynamicMetadataStore((VFSDeploymentUnit)unit, deployment, store);
+ buildDynamicMetadataStore((VFSDeploymentUnit)unit, deployment, store, cmr);
}
// allow empty vdbs for enabling the preview functionality
@@ -142,7 +142,7 @@
deployment.removeAttachment(MetadataStoreGroup.class);
// add transformation metadata to the repository.
- this.vdbRepository.addVDB(deployment, store, visibilityMap, udf);
+ this.vdbRepository.addVDB(deployment, store, visibilityMap, udf, cmr);
try {
saveMetadataStore((VFSDeploymentUnit)unit, deployment, store);
@@ -152,7 +152,7 @@
boolean valid = true;
if (!preview) {
- valid = validateSources(deployment);
+ valid = validateSources(cmr, deployment);
// Check if the VDB is fully configured.
if (valid) {
@@ -167,7 +167,7 @@
LogManager.logInfo(LogConstants.CTX_RUNTIME,
RuntimePlugin.Util.getString("vdb_deployed",deployment,
valid?"active":"inactive")); //$NON-NLS-1$ //$NON-NLS-2$
//$NON-NLS-3$
}
- private void createConnectorManagers(final VDBMetaData deployment) throws
DeploymentException {
+ private void createConnectorManagers(ConnectorManagerRepository cmr,
TranslatorRepository repo, final VDBMetaData deployment) throws DeploymentException {
IdentityHashMap<Translator, ExecutionFactory<Object, Object>> map = new
IdentityHashMap<Translator, ExecutionFactory<Object, Object>>();
for (Model model:deployment.getModels()) {
@@ -175,13 +175,16 @@
continue;
}
for (String source:model.getSourceNames()) {
- if (this.connectorManagerRepository.getConnectorManager(source) != null) {
+ if (cmr.getConnectorManager(source) != null) {
continue;
}
String name = model.getSourceTranslatorName(source);
- Translator translator =
VDBDeployer.this.translatorRepository.getTranslatorMetaData(new
VDBKey(deployment.getName(), deployment.getVersion()), name);
+ Translator translator = repo.getTranslatorMetaData(name);
if (translator == null) {
+ translator = this.translatorRepository.getTranslatorMetaData(name);
+ }
+ if (translator == null) {
throw new
DeploymentException(RuntimePlugin.Util.getString("translator_not_found",
deployment.getName(), deployment.getVersion(), name)); //$NON-NLS-1$
}
@@ -193,12 +196,12 @@
ConnectorManager cm = new ConnectorManager(name,
model.getSourceConnectionJndiName(source));
cm.setExecutionFactory(ef);
- this.connectorManagerRepository.addConnectorManager(source, cm);
+ cmr.addConnectorManager(source, cm);
}
}
}
- private boolean validateSources(VDBMetaData deployment) {
+ private boolean validateSources(ConnectorManagerRepository cmr, VDBMetaData deployment)
{
boolean valid = true;
for(Model m:deployment.getModels()) {
ModelMetaData model = (ModelMetaData)m;
@@ -207,7 +210,7 @@
if (mapping.getName().equals(CoreConstants.SYSTEM_MODEL) ||
model.getName().equals(CoreConstants.ODBC_MODEL)) {
continue;
}
- ConnectorManager cm =
this.connectorManagerRepository.getConnectorManager(mapping.getName());
+ ConnectorManager cm = cmr.getConnectorManager(mapping.getName());
String msg = cm.getStausMessage();
if (msg != null && msg.length() > 0) {
valid = false;
@@ -232,25 +235,12 @@
public void undeploy(DeploymentUnit unit, VDBMetaData deployment) {
super.undeploy(unit, deployment);
- // there is chance that two different VDBs using the same source name, and their
- // connector manager is removed. should we prefix vdb name??
- for (Model model:deployment.getModels()) {
- if (model.getName().equals(CoreConstants.SYSTEM_MODEL) ||
model.getName().equals(CoreConstants.ODBC_MODEL)){
- continue;
- }
- for (String source:model.getSourceNames()) {
- if (this.connectorManagerRepository.getConnectorManager(source) != null) {
- this.connectorManagerRepository.removeConnectorManager(source);
- }
- }
- }
-
- this.translatorRepository.removeVDBTranslators(new VDBKey(deployment.getName(),
deployment.getVersion()));
-
if (this.vdbRepository != null) {
this.vdbRepository.removeVDB(deployment.getName(), deployment.getVersion());
}
+ deployment.setRemoved(true);
+
try {
deleteMetadataStore((VFSDeploymentUnit)unit, deployment);
} catch (IOException e) {
@@ -264,10 +254,6 @@
this.serializer = serializer;
}
- public void setConnectorManagerRepository(ConnectorManagerRepository repo) {
- this.connectorManagerRepository = repo;
- }
-
private void saveMetadataStore(VFSDeploymentUnit unit, VDBMetaData vdb,
MetadataStoreGroup store) throws IOException {
File cacheFileName = this.serializer.getAttachmentPath(unit,
vdb.getName()+"_"+vdb.getVersion()); //$NON-NLS-1$
if (!cacheFileName.exists()) {
@@ -284,7 +270,7 @@
}
}
- private void buildDynamicMetadataStore(final VFSDeploymentUnit unit, final
VDBMetaData vdb, final MetadataStoreGroup vdbStore) throws DeploymentException {
+ private void buildDynamicMetadataStore(final VFSDeploymentUnit unit, final
VDBMetaData vdb, final MetadataStoreGroup vdbStore, final ConnectorManagerRepository cmr)
throws DeploymentException {
// make sure we are configured correctly first
for (Model model:vdb.getModels()) {
@@ -322,19 +308,19 @@
threadPool.run(new Runnable() {
@Override
public void run() {
- loadMetadata(vdb, model, cache, cacheFile, vdbStore);
+ loadMetadata(vdb, model, cache, cacheFile, vdbStore, cmr);
}
});
}
}
}
- private void loadMetadata(VDBMetaData vdb, ModelMetaData model, boolean cache, File
cacheFile, MetadataStoreGroup vdbStore) {
+ private void loadMetadata(VDBMetaData vdb, ModelMetaData model, boolean cache, File
cacheFile, MetadataStoreGroup vdbStore, ConnectorManagerRepository cmr) {
Exception exception = null;
boolean loaded = false;;
for (String sourceName: model.getSourceNames()) {
- ConnectorManager cm =
this.connectorManagerRepository.getConnectorManager(sourceName);
+ ConnectorManager cm = cmr.getConnectorManager(sourceName);
if (cm == null) {
continue;
}
@@ -360,7 +346,7 @@
synchronized (this) {
if (!loaded) {
- vdb.setStatus(VDB.Status.INCOMPLETE);
+ vdb.setStatus(VDB.Status.INACTIVE);
String msg = RuntimePlugin.Util.getString("failed_to_retrive_metadata",
vdb.getName()+"-"+vdb.getVersion(), model.getName()); //$NON-NLS-1$
//$NON-NLS-2$
model.addError(ModelMetaData.ValidationError.Severity.ERROR.toString(), msg);
if (exception != null) {
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBParserDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBParserDeployer.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBParserDeployer.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -135,7 +135,7 @@
return null;
}
- vdb.setUrl(unit.getRoot().toURL().toExternalForm());
+ vdb.setUrl(unit.getRoot().toURL());
// build the metadata store
if (imf != null) {
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2010-08-04 21:52:59
UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2010-08-05 15:18:36
UTC (rev 2417)
@@ -28,18 +28,21 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.NavigableMap;
import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListMap;
import org.jboss.deployers.spi.DeploymentException;
import org.teiid.adminapi.AdminException;
import org.teiid.adminapi.AdminProcessingException;
import org.teiid.adminapi.Model;
-import org.teiid.adminapi.VDB;
+import org.teiid.adminapi.VDB.ConnectionType;
+import org.teiid.adminapi.VDB.Status;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.core.CoreConstants;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
import org.teiid.metadata.Datatype;
@@ -57,12 +60,12 @@
public class VDBRepository implements Serializable{
private static final long serialVersionUID = 312177538191772674L;
- private Map<VDBKey, CompositeVDB> vdbRepo = new ConcurrentHashMap<VDBKey,
CompositeVDB>();
+ private NavigableMap<VDBKey, CompositeVDB> vdbRepo = new
ConcurrentSkipListMap<VDBKey, CompositeVDB>();
private MetadataStore systemStore;
private MetadataStore odbcStore;
private boolean odbcEnabled = false;
- public void addVDB(VDBMetaData vdb, MetadataStoreGroup stores, LinkedHashMap<String,
Resource> visibilityMap, UDFMetaData udf) throws DeploymentException {
+ public void addVDB(VDBMetaData vdb, MetadataStoreGroup stores, LinkedHashMap<String,
Resource> visibilityMap, UDFMetaData udf, ConnectorManagerRepository cmr) throws
DeploymentException {
if (getVDB(vdb.getName(), vdb.getVersion()) != null) {
throw new DeploymentException(RuntimePlugin.Util.getString("duplicate_vdb",
vdb.getName(), vdb.getVersion())); //$NON-NLS-1$
}
@@ -78,12 +81,12 @@
if (this.odbcStore == null) {
addSystemModel(vdb);
- this.vdbRepo.put(vdbId(vdb), new CompositeVDB(vdb, stores, visibilityMap, udf,
this.systemStore));
+ this.vdbRepo.put(vdbId(vdb), new CompositeVDB(vdb, stores, visibilityMap, udf, cmr,
this.systemStore));
}
else {
addSystemModel(vdb);
addODBCModel(vdb);
- this.vdbRepo.put(vdbId(vdb), new CompositeVDB(vdb, stores, visibilityMap, udf,
this.systemStore, odbcStore));
+ this.vdbRepo.put(vdbId(vdb), new CompositeVDB(vdb, stores, visibilityMap, udf, cmr,
this.systemStore, odbcStore));
}
}
@@ -129,26 +132,24 @@
public VDBMetaData getActiveVDB(String vdbName) throws VirtualDatabaseException {
int latestVersion = 0;
- for (VDBKey key:this.vdbRepo.keySet()) {
- if(key.getName().equalsIgnoreCase(vdbName)) {
- VDBMetaData vdb = this.vdbRepo.get(key).getVDB();
- if (vdb.getStatus() == VDB.Status.ACTIVE_DEFAULT) {
- latestVersion = vdb.getVersion();
- break;
- }
- // Make sure the VDB Name and version number are the only parts of this
vdb key
- latestVersion = Math.max(latestVersion,
Integer.parseInt(key.getVersion()));
+ for (VDBKey key:this.vdbRepo.tailMap(new VDBKey(vdbName, 0)).keySet()) {
+ if(!key.getName().equalsIgnoreCase(vdbName)) {
+ break;
}
+ VDBMetaData vdb = this.vdbRepo.get(key).getVDB();
+ if (vdb.getStatus() == Status.ACTIVE) {
+ if (vdb.getConnectionType() == ConnectionType.ANY) {
+ latestVersion = Math.max(vdb.getVersion(), latestVersion);
+ } else if (latestVersion == 0 && vdb.getConnectionType() ==
ConnectionType.BY_VERSION) {
+ latestVersion = vdb.getVersion();
+ }
+ }
}
if(latestVersion == 0) {
throw new
VirtualDatabaseException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2",
vdbName, "latest")); //$NON-NLS-1$ //$NON-NLS-2$
}
- VDBMetaData vdb = getVDB(vdbName, latestVersion);
- if (vdb.getStatus() == VDB.Status.ACTIVE || vdb.getStatus() ==
VDB.Status.ACTIVE_DEFAULT) {
- return vdb;
- }
- throw new
VirtualDatabaseException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2",
vdbName, latestVersion)); //$NON-NLS-1$
+ return getVDB(vdbName, latestVersion);
}
public MetadataStore getSystemStore() {
@@ -178,14 +179,17 @@
this.odbcEnabled = true;
}
- public synchronized void removeVDB(String vdbName, int vdbVersion) {
+ public synchronized boolean removeVDB(String vdbName, int vdbVersion) {
VDBKey key = new VDBKey(vdbName, vdbVersion);
- this.vdbRepo.remove(key);
-
- // if this VDB was part of another VDB; then remove them.
- for (CompositeVDB other:this.vdbRepo.values()) {
- other.removeChild(key);
+ CompositeVDB removed = this.vdbRepo.remove(key);
+ if (removed != null) {
+ // if this VDB was part of another VDB; then remove them.
+ for (CompositeVDB other:this.vdbRepo.values()) {
+ other.removeChild(key);
+ }
+ return true;
}
+ return false;
}
public Map<String, Datatype> getBuiltinDatatypes() {
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -35,7 +35,6 @@
public class VDBStatusChecker {
private static final String JAVA_CONTEXT = "java:"; //$NON-NLS-1$
private VDBRepository vdbRepository;
- private ConnectorManagerRepository connectorManagerRepository;
public void translatorAdded(String translatorName) {
resourceAdded(translatorName, true);
@@ -63,15 +62,12 @@
this.vdbRepository = repo;
}
- public void setConnectorManagerRepository(ConnectorManagerRepository repo) {
- this.connectorManagerRepository = repo;
- }
-
public void resourceAdded(String resourceName, boolean translator) {
for (VDBMetaData vdb:this.vdbRepository.getVDBs()) {
if (vdb.getStatus() == VDB.Status.ACTIVE || vdb.isPreview()) {
continue;
}
+ ConnectorManagerRepository cmr = vdb.getAttachment(ConnectorManagerRepository.class);
for (Model m:vdb.getModels()) {
ModelMetaData model = (ModelMetaData)m;
@@ -81,7 +77,7 @@
String sourceName = getSourceName(resourceName, model, translator);
if (sourceName != null) {
- ConnectorManager cm =
this.connectorManagerRepository.getConnectorManager(sourceName);
+ ConnectorManager cm = cmr.getConnectorManager(sourceName);
model.clearErrors();
String status = cm.getStausMessage();
if (status != null && status.length() > 0) {
Modified: trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -40,6 +40,8 @@
import org.jboss.managed.api.annotation.ManagementObject;
import org.jboss.managed.api.annotation.ManagementProperties;
import org.jboss.managed.api.annotation.ManagementProperty;
+import org.teiid.adminapi.VDB;
+import org.teiid.adminapi.VDB.ConnectionType;
import org.teiid.adminapi.impl.SessionMetadata;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.client.security.InvalidSessionException;
@@ -163,16 +165,19 @@
String vdbName = properties.getProperty(TeiidURL.JDBC.VDB_NAME);
if (vdbName != null) {
String vdbVersion = properties.getProperty(TeiidURL.JDBC.VDB_VERSION);
- try {
- if (vdbVersion == null) {
- vdb = this.vdbRepository.getActiveVDB(vdbName);
+ if (vdbVersion == null) {
+ try {
+ vdb = this.vdbRepository.getActiveVDB(vdbName);
+ } catch (VirtualDatabaseException e) {
+ throw new
SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2",
vdbName, "latest")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ else {
+ vdb = this.vdbRepository.getVDB(vdbName, Integer.parseInt(vdbVersion));
+ if (vdb.getStatus() != VDB.Status.ACTIVE || vdb.getConnectionType() ==
ConnectionType.NONE) {
+ throw new
SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2",
vdbName, vdbVersion)); //$NON-NLS-1$
}
- else {
- vdb = this.vdbRepository.getVDB(vdbName, Integer.parseInt(vdbVersion));
- }
- } catch (VirtualDatabaseException e) {
- throw new
SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2",
vdbName, vdbVersion==null?"latest":vdbVersion)); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ }
}
if (sessionMaxLimit > 0 && getActiveSessionsCount() >=
sessionMaxLimit) {
Modified:
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestXMLTypeTranslations.java
===================================================================
---
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestXMLTypeTranslations.java 2010-08-04
21:52:59 UTC (rev 2416)
+++
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestXMLTypeTranslations.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -113,7 +113,7 @@
Mockito.stub(rwi.getDqpWorkContext()).toReturn(workContext);
Mockito.stub(core.getRequestWorkItem((RequestID)Mockito.anyObject())).toReturn(rwi);
- DataTierManagerImpl dataMgr = new DataTierManagerImpl(core, null, null);
+ DataTierManagerImpl dataMgr = new DataTierManagerImpl(core, null);
doProcess(metadata,
sql,
finder, dataMgr , new List[] {Arrays.asList(new
String(ObjectConverterUtil.convertToByteArray(new
FileInputStream(UnitTestUtil.getTestDataFile("test-schema.xsd")))))}, DEBUG);
//$NON-NLS-1$
Modified: trunk/test-integration/common/src/test/java/org/teiid/jdbc/FakeServer.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/jdbc/FakeServer.java 2010-08-04
21:52:59 UTC (rev 2416)
+++ trunk/test-integration/common/src/test/java/org/teiid/jdbc/FakeServer.java 2010-08-05
15:18:36 UTC (rev 2417)
@@ -60,6 +60,7 @@
LogonImpl logon;
DQPCore dqp = new DQPCore();
VDBRepository repo = new VDBRepository();
+ private ConnectorManagerRepository cmr;
public FakeServer() {
this.logon = new LogonImpl(sessionService, null);
@@ -73,7 +74,7 @@
this.dqp.setCacheFactory(new DefaultCacheFactory());
this.dqp.setTransactionService(new FakeTransactionService());
- ConnectorManagerRepository cmr = Mockito.mock(ConnectorManagerRepository.class);
+ cmr = Mockito.mock(ConnectorManagerRepository.class);
Mockito.stub(cmr.getConnectorManager("source")).toReturn(new
ConnectorManager("x", "x") {
@Override
public SourceCapabilities getCapabilities() {
@@ -81,7 +82,6 @@
}
});
- this.dqp.setConnectorManagerRepository(cmr);
this.dqp.setCacheFactory(new DefaultCacheFactory());
this.dqp.start(new DQPConfiguration());
this.sessionService.setDqp(this.dqp);
@@ -114,7 +114,7 @@
try {
MetadataStoreGroup stores = new MetadataStoreGroup();
stores.addStore(metadata);
- this.repo.addVDB(vdbMetaData, stores, imf.getEntriesPlusVisibilities(), null);
+ this.repo.addVDB(vdbMetaData, stores, imf.getEntriesPlusVisibilities(), null, cmr);
} catch (DeploymentException e) {
throw new RuntimeException(e);
}