adding Connector extension point and limited use of it in the launcher
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/META-INF/MANIFEST.MF
index 6ac4000..9b4c96c 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Rhino JSDI (Incubation)
-Bundle-SymbolicName: org.eclipse.e4.languages.javascript.debug.jsdi.rhino
+Bundle-SymbolicName: org.eclipse.e4.languages.javascript.debug.jsdi.rhino;singleton:=true
 Bundle-Version: 0.9.0.qualifier
 Bundle-RequiredExecutionEnvironment: OSGi/Minimum-1.2
 Export-Package: org.eclipse.e4.languages.javascript.jsdi.rhino.connect
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/build.properties b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/build.properties
index 34d2e4d..e9863e2 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/build.properties
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/build.properties
@@ -1,4 +1,5 @@
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
-               .
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/plugin.xml b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/plugin.xml
new file mode 100644
index 0000000..ca438a8
--- /dev/null
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.jsdi.rhino/plugin.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         id="rhinoConnector"
+         name="Rhino Connector"
+         point="org.eclipse.e4.languages.javascript.debug.jsdi.connectors">
+      <connector
+            class="org.eclipse.e4.languages.javascript.jsdi.rhino.connect.RhinoAttachingConnector">
+      </connector>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.model/plugin.xml b/bundles/org.eclipse.e4.languages.javascript.debug.model/plugin.xml
index ca733ef..e0a59ed 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.model/plugin.xml
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.model/plugin.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.4"?>
 <plugin>
+   <extension-point id="org.eclipse.e4.languages.javascript.debug.jsdi.connectors" name="connectors" schema="schema/org.eclipse.e4.languages.javascript.debug.jsdi.connectors.exsd"/>
    <extension
          point="org.eclipse.debug.core.launchConfigurationTypes">
       <launchConfigurationType
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.model/schema/org.eclipse.e4.languages.javascript.debug.jsdi.connectors.exsd b/bundles/org.eclipse.e4.languages.javascript.debug.model/schema/org.eclipse.e4.languages.javascript.debug.jsdi.connectors.exsd
new file mode 100644
index 0000000..534dbd7
--- /dev/null
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.model/schema/org.eclipse.e4.languages.javascript.debug.jsdi.connectors.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.e4.languages.javascript.debug.model" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.e4.languages.javascript.debug.model" id="org.eclipse.e4.languages.javascript.debug.jsdi.connectors" name="Connectors"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="connector"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="connector">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.e4.languages.javascript.jsdi.connect.Connector"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.model/src/org/eclipse/e4/languages/internal/javascript/debug/launching/ConnectorsManager.java b/bundles/org.eclipse.e4.languages.javascript.debug.model/src/org/eclipse/e4/languages/internal/javascript/debug/launching/ConnectorsManager.java
new file mode 100644
index 0000000..07c2d4e
--- /dev/null
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.model/src/org/eclipse/e4/languages/internal/javascript/debug/launching/ConnectorsManager.java
@@ -0,0 +1,68 @@
+package org.eclipse.e4.languages.internal.javascript.debug.launching;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IRegistryEventListener;
+import org.eclipse.core.runtime.InvalidRegistryObjectException;
+import org.eclipse.core.runtime.RegistryFactory;
+
+public class ConnectorsManager implements IRegistryEventListener {
+
+	private static final String JSDI_CONNECTORS = "org.eclipse.e4.languages.javascript.debug.jsdi.connectors"; //$NON-NLS-1$
+	private static final String CONNECTOR = "connector"; //$NON-NLS-1$
+	private static final String CLASS = "class"; //$NON-NLS-1$
+	private List connectors;
+
+	public ConnectorsManager() {
+		RegistryFactory.getRegistry().addListener(this, JSDI_CONNECTORS);
+	}
+
+	public synchronized List getConnectors() {
+		if (connectors != null)
+			return connectors;
+
+		connectors = new ArrayList();
+		IExtension[] extensions = RegistryFactory.getRegistry().getExtensionPoint(JSDI_CONNECTORS).getExtensions();
+		for (int i = 0; i < extensions.length; i++) {
+			IExtension extension = extensions[i];
+			try {
+				IConfigurationElement[] elements = extension.getConfigurationElements();
+				for (int j = 0; j < elements.length; j++) {
+					IConfigurationElement element = elements[j];
+					if (!CONNECTOR.equalsIgnoreCase(element.getName())) {
+						// log it
+						continue;
+					}
+					connectors.add(element.createExecutableExtension(CLASS));
+				}
+			} catch (InvalidRegistryObjectException e) {
+				// skip this extension
+			} catch (CoreException e) {
+				// log it
+				// skip this extension
+			}
+		}
+		return connectors;
+	}
+
+	public void added(IExtension[] extensions) {
+		connectors = null;
+	}
+
+	public void added(IExtensionPoint[] extensionPoints) {
+		connectors = null;
+	}
+
+	public void removed(IExtension[] extensions) {
+		connectors = null;
+	}
+
+	public void removed(IExtensionPoint[] extensionPoints) {
+		connectors = null;
+	}
+}
diff --git a/bundles/org.eclipse.e4.languages.javascript.debug.model/src/org/eclipse/e4/languages/internal/javascript/debug/launching/RemoteJavaScriptLaunchDelegate.java b/bundles/org.eclipse.e4.languages.javascript.debug.model/src/org/eclipse/e4/languages/internal/javascript/debug/launching/RemoteJavaScriptLaunchDelegate.java
index 599b1c9..6b04198 100644
--- a/bundles/org.eclipse.e4.languages.javascript.debug.model/src/org/eclipse/e4/languages/internal/javascript/debug/launching/RemoteJavaScriptLaunchDelegate.java
+++ b/bundles/org.eclipse.e4.languages.javascript.debug.model/src/org/eclipse/e4/languages/internal/javascript/debug/launching/RemoteJavaScriptLaunchDelegate.java
@@ -1,6 +1,7 @@
 package org.eclipse.e4.languages.internal.javascript.debug.launching;
 
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
 
 import org.eclipse.core.runtime.CoreException;
@@ -12,12 +13,13 @@
 import org.eclipse.debug.core.model.LaunchConfigurationDelegate;
 import org.eclipse.e4.languages.javascript.debug.model.JSDIDebugTarget;
 import org.eclipse.e4.languages.javascript.jsdi.VirtualMachine;
+import org.eclipse.e4.languages.javascript.jsdi.connect.AttachingConnector;
 import org.eclipse.e4.languages.javascript.jsdi.connect.Connector.Argument;
-import org.eclipse.e4.languages.javascript.jsdi.rhino.connect.RhinoAttachingConnector;
 
 public class RemoteJavaScriptLaunchDelegate extends LaunchConfigurationDelegate {
 
 	final static String LAUNCH_URI = "launch_uri"; //$NON-NLS-1$
+	private final ConnectorsManager connectorsManager = new ConnectorsManager();
 
 	/*
 	 * (non-Javadoc)
@@ -26,14 +28,17 @@
 	 */
 	public void launch(ILaunchConfiguration configuration, String mode, final ILaunch launch, IProgressMonitor monitor) throws CoreException {
 
+		List connectors = connectorsManager.getConnectors();
+		if (connectors.isEmpty()) {
+			throw new CoreException(new Status(IStatus.ERROR, "org.eclipse.e4.languages.internal.javascript.debug.model", "No Connectors found"));
+		}
+		// TODO: factor out Connector creation. This is temporary
+		AttachingConnector rhinoConnector = (AttachingConnector) connectors.get(0);
 		String port = (String) configuration.getAttribute(ILaunchConstants.PORT, "9000");
-		RhinoAttachingConnector rhinoConnector = new RhinoAttachingConnector();
 		Map arguments = rhinoConnector.defaultArguments();
 		Argument portArgument = (Argument) arguments.get("port");
 		portArgument.setValue(port);
 
-		// TODO: factor out Connector creation. This is temporary
-		// because we are bound to Rhino for now
 		VirtualMachine vm;
 		try {
 			vm = rhinoConnector.attach(arguments);