# Aufteilung Plugins



## Gast2 (18. Dez 2009)

Hallo,

ich habe eine Frage ob dass was ich vor hab überhaupt möglich ist...
Ich wollte meine eigenen Util Methoden in ein Plugin machen und meine eigenen UI Sachen in ein anderes.
Jetzt hab ich eine Methode die aus einem byte[] ein Object machen soll.
Also in meinem UI verwende ich diese methode. Und in meinem RCP möchte ich dann die UI Klasse verwenden. Doch ich bekomme immer eine ClassNotFound Exception da die Klasse die gelesen werden soll in meinem RCP ist.

1.Plugin Util-Klassen
2.Plugin UI verwendet 1.Plugin und hier wird mit  ObjectInputStream das Object gelesen
3. RCP verwendet UI und dort ist die Klasse die gelesen werden soll beinhaltet...

Weiß jemand on sowas möglich ist?Oder wie man es anders aufteilen muss?


----------



## Wildcard (18. Dez 2009)

Wenn Klasse A ein Objekt der Klasse B erzeugen soll, dann muss die Klasse B für den Classloader der Klasse A sichtbar sein.


----------



## Gast2 (21. Dez 2009)

Wildcard hat gesagt.:


> Wenn Klasse A ein Objekt der Klasse B erzeugen soll, dann muss die Klasse B für den Classloader der Klasse A sichtbar sein.



Und bekommt man sowas Plugin übergreifend hin?


----------



## Wildcard (21. Dez 2009)

Der Classpath eines Bundles definiert sich aus den exported Packages aller required Bundles und aller importierter Packages.


----------



## Gast2 (21. Dez 2009)

Wildcard hat gesagt.:


> Der Classpath eines Bundles definiert sich aus den exported Packages aller required Bundles und aller importierter Packages.



Mhm... 
Ich hab mein RCP und binde ein Plugin ein welches das Objekt erzeugt und zurück gibt. Das heißt ich müsste dem Plugin meine Klasse importieren???? Oder reicht es wenn ich das package bei meinem RCP exportiere?


----------



## Wildcard (21. Dez 2009)

Die Informationen die du lieferst sind einfach nicht ausreichend. Werde konkreter, sonst kann ich nicht helfen.


----------



## Gast2 (22. Dez 2009)

Wildcard hat gesagt.:


> Die Informationen die du lieferst sind einfach nicht ausreichend. Werde konkreter, sonst kann ich nicht helfen.



Mhm ok weiß nicht wie konkreter werden soll, darum versuch ichs mal mit bissl code zu erklären 

Also zum Beispiel ich hab ein Plugin mit folgender Methode

```
public class ObjectUtil {

	public static byte[] getBytes(Object obj) throws IOException  {
		ByteArrayOutputStream bos = null;
		ObjectOutputStream oos = null;
		try {
			bos = new ByteArrayOutputStream();
			oos = new ObjectOutputStream(bos);
			oos.writeObject(obj);
		} finally {
			bos.close();
			if(oos != null)	oos.close();
		}

		return bos.toByteArray();
	}
	
	public static Object getObject(byte[] bs) throws IOException, ClassNotFoundException  {
		Object obj = null;
		ByteArrayInputStream bis = null;
		ObjectInputStream ois = null;
		try {
			 bis = new ByteArrayInputStream(bs);
			 ois = new ObjectInputStream(bis);
			 obj = ois.readObject();
		} finally {
			bis.close();
			if(ois != null)ois.close();
		}
		return obj;
	}
}
```

Und die will ich jetzt in einem 2ten Plugin verwenden


```
public class Test{

         byte[] bs;

	public void test1(Object object) {
		try {
			bs = ObjectUtil.getBytes(object);
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
		
	
	}
	
	@Override
	public Object test2() {
		try {
			o = ObjectUtil.getObject(bs);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}
		return o;
	}

}
```

Also test1 klappt ohne Probleme beim 2ten findet er die Klasse nicht, da diese sich in Plugin 2 befindet und nicht in 1.


----------



## Wildcard (22. Dez 2009)

Das sieht nach einer Art Utilitiy Funktion aus. Das heißt dein Bundle hat wahtscheinlich eine Dependency zu diesem Utility Bundle. Damit das funktionieren kann muss dein Utility Bundle aber ebenfalls eine Abhängigkeit auf das andere Bundle haben um die Klassen zu kennen (für den ObjectInputStream) und damit wäre die Abhänigkeit zirkulär.


----------



## Gast2 (22. Dez 2009)

Wildcard hat gesagt.:


> Das sieht nach einer Art Utilitiy Funktion aus. Das heißt dein Bundle hat wahtscheinlich eine Dependency zu diesem Utility Bundle. Damit das funktionieren kann muss dein Utility Bundle aber ebenfalls eine Abhängigkeit auf das andere Bundle haben um die Klassen zu kennen (für den ObjectInputStream) und damit wäre die Abhänigkeit zirkulär.



Jap ist eine Utilitiy Funktion ... Genau wegen Abhängigkeit frag also ist das einfach nicht möglich... Außer ich gebe den ObjectInputStream zurück und jedes Plugin liest die Objekte(welche es kennt) selber ein...


----------

