[teiid-commits] teiid SVN: r2417 - in trunk: build/kits/jboss-container/deployers/teiid.deployer and 14 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Thu Aug 5 11:18:40 EDT 2010


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);
 		}		



More information about the teiid-commits mailing list