# Eclipse RCP Extension Point fragen



## virus (28. Aug 2007)

Folgendes: Ich hab ein Eclipse Standalone Plug-in geschriben. Zu diesem plugin hab ich nun ein Extension point definiert.

```
<extension-point id="extensionname" name="Extension Name" schema="schema/extensionname.exsd"/>
```


 Daran hab ich nun wiederum ein Plugin geschrieben das dann 

```
<extension
         id="extensionname"
         point="com.project.extensionname">
   </extension>
```

hat.

Nun das funktioniert auch wunderbar (Eclipse reklamiert auf jedenfall nirgends).  Nur wie teste ich nun dieses Plugin? Wie starte ich mein plugin(das Standalone) so dass es das plugin dazu lädt? Wie kann ich von meinem Plugin das den Extension Point anbietet herausfinden was für plugins installiert sind? wie kann ich die dann darin verwenden? Ich hab mich mit IPluginRegistry und IExtensionPoint versucht, bin aber nicht weit gekommen. Ich weiss noch nicht mal ob das plugin auchwirklich geladen wird. Gibts da eventuell irgendwelche hilfen im debugger?


----------



## Wildcard (28. Aug 2007)

```
IExtensionRegistry registry = Platform.getExtensionRegistry();
        IExtensionPoint extensionPoint = registry.getExtensionPoint( "your.id");
        IExtension[] extensions = extensionPoint.getExtensions();
        for (int i = 0; i < extensions.length; i++)
        {
            IExtension extension = extensions[i];
            IConfigurationElement[] elements = extension.getConfigurationElements();
            for (int j = 0; j < elements.length; j++)
            {
                try
                {
                    IConfigurationElement element = elements[j];
                    IYourInterface blubb = (IYourInterface)element.createExecutableExtension("yourClassAttribute");
                    Object foobar = new Integer(element.getAttribute("someAdditonalAttribute"));
                }
                catch (CoreException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
```


----------



## virus (28. Aug 2007)

Ok danke das Hilft mir schon mal weiter. Nur liefer mir extensionPoint.getExtzensions nichts. Wird wohl daran liegen das mein Plugin nicht geladen wird. Normalerweise würde ich ja mein plugin.jar in den ordner plugins schmeissen. Nun ists ja aber so das meine applikation und mein plugin dazu jeweils in einem eigenen Eclipse Projekt sind.

Gibts zu der ganzen plugin geschichte eigentlich ausch schlaue literatur? Ich hab mir vor einiger zeit mal das buch "Rich-Client-Entwicklung mit Eclipse 3.2" gekauft. Gefällt mir aber nicht so gut und zum thema plugin/extension points steht da auch nicht all zu viel brauchbares drinn.
Es gäbe ja noch das buch "Eclipse Rich Client Platform" ist das eventuell besser?


----------



## Wildcard (28. Aug 2007)

Wenn du keine Extension bekommst liegt es daran, das sich das PlugIn nicht korrekt am Extension Point angemeldet hat, oder gar nicht erst geladen wurde.
Literatur kann ich dir keine nennen, ich hab dazu noch nichts gelesen.


----------



## virus (28. Aug 2007)

Das Vermute ich ja genau. Nur wie kann ich nun meinem Standalone-Plugin Projekt sagen es soll das Pugin (in einem Anderen Eclipse Projekt) laden als ob es im verzeichnis myApplication/plugins liegen würde.


----------



## Wildcard (28. Aug 2007)

Dein PlugIn soll gar nichts laden, darum muss sich Eclipse kümmern.
In der Launch-Configuration gibst du an, welche PlugIns in die Runtime Workbench geladen werden sollen.


----------



## virus (28. Aug 2007)

Danke das hat mich rest mal weiter gebracht. Jetzt wird das Plugin sauber geladen. d.h. der Activator wird aufgerufen. 

meine exsd datei enthält aber folgenden code:

```
<element name="initializer">
        <complexType>
         <attribute name="class" type="string" use="required">
            <annotation>
               <appInfo>
                  <meta.attribute kind="java" basedOn="com.project.AbstrakteKlasse/>
               </appInfo>
            </annotation>
         </attribute>
      </complexType>
   </element>
```

desshalb hat dann die Plugin.xlm (des plugins) den code:


```
<extension
         id="myplugin"
         point="com.project.extensionname">
        <initializer class="myplugin.ImplementationDerAbstraktenKlasse"/>
	</extension>
```

Somit möchte ich ein Objekt der klasse ImplementationDerAbstraktenKlasse mit 

```
AbstrakteKlasse blubb = (AbstrakteKlasse)element.createExecutableExtension("class");
```
erzeugen. 

Das gibt mir aber folgende Exception:

```
org.eclipse.core.runtime.CoreException: Plug-in "myPlugin" was unable to instantiate class "myplugin.ImplementationDerAbstraktenKlasse".
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.throwException(RegistryStrategyOSGI.java:165)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:159)
	at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:759)
	at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
	at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51).....
```

Ich kapiers wirklich nicht ganz warum das nicht gehen sollte. For allem weil der Activater instanziert wird. Muss ich eventuell im Activator was vorbereiten das sich dann ImplementationDerAbstraktenKlasse instanzieren lässt?


----------



## Wildcard (28. Aug 2007)

Hast du auch einen Default Konstruktor?
Liegt die Klasse im Classpath? 
Stimmt der Name?


----------



## virus (28. Aug 2007)

Hei danke! Es lag am Default Konstruktor. Jetzt funktioniert allles wie ichs gerne hätte.


----------

