# Erweiterung eines Programms



## Generic1 (7. Aug 2008)

Hallo,

ich plane gerade ein größeres Projekt und frage mich gerade wie ich die zukünftigen Erweiterungen berücksichtigen soll,
Ich plane natürlich in die Richtung das einige Patterns verwende (wos Sinn macht) aber mir geht der Gedanke mit den Plugins nicht mehr aus dem Kopf, macht es Sinn dass ich mein Projekt in die Richtung treibe, dass ich mit plugins das Programm erweitern könnte und wieviel Aufwand steckt dahinter, das so zu Realisieren,

Es geht um eine Datenbankanbindung auf der einen Seite (Model) und dem Darstellen der Daten auf der anderen Seite (View)
Das Projekt soll dann stetig erweitert werden,

Was denkt ihr darüber? Gibts vielleicht einen Link oder ein gutes Buch zu diesem Thema?


----------



## maki (7. Aug 2008)

Man hält das  Programm am flexibelsten in dem man nur Dinge einbaut, die gebraucht werden und genügend Unittests hat um Refactoring zu ermöglichen.


----------



## Generic1 (7. Aug 2008)

UnitTest sind sowieso Standard, und ich werd auch nur programmieren, was wirklich von nöten ist, aber ich möchte mir das Erweitern so einfach wie möglich machen, wenn ein Kunde etwas will, dann soll er sich das Plugin, dass ich ihm programmiere, einfach installieren,
es geht ja auch um die Vermeidung einer Neuinstallation, 
am Besten wäre es, wenn man die Erweiterung sogar zur Laufzeit tätigen kann,

Gibts in diese Richtung einen vernünftigen Lösungsweg?


----------



## maki (7. Aug 2008)

Was, wenn sich die Basis ändert, also keines der Plugins?

Beschreib doch mal ein bisschen mehr, muss dein Tool 24/7 laufen?

Desktop oder Serveranwendung?


----------



## Wildcard (7. Aug 2008)

OSGi dürfte dann Mittel der Wahl sein.


----------



## Generic1 (7. Aug 2008)

maki hat gesagt.:
			
		

> Was, wenn sich die Basis ändert, also keines der Plugins?
> 
> Beschreib doch mal ein bisschen mehr, muss dein Tool 24/7 laufen?
> 
> Desktop oder Serveranwendung?




Wenn sich die Basis ändert wird nichts anderes übrigbleiben, als eine Umprogrammierung aber aus erfahrung kann ich sagen dass die Basis meistens im Großen und Ganzen bestehen bleibt und nur zusätze erwünscht werden,

Es geht um eine Server-Client Anwendung, der Server stellt Daten von einem externen Gerät zur Verfügung, Clients können sich zum Verbinden und zyklich Daten vom Server Abfragen und stellen diese mit einer Swing GUI- dar, der Server stellt übrigens auch zyklische Anfragen an das externe Gerät,


----------



## Generic1 (7. Aug 2008)

Wildcard hat gesagt.:
			
		

> OSGi dürfte dann Mittel der Wahl sein.




hab mir gerade die Erklärung in wiki durchgelesen, hört sich interessant an obwohl ich noch keinen blassen Schimmer habe, wie ich das machen soll,
das OSGi- Framework wird wohl mit sehr viel Reflection arbeiten, kann das sein?


----------



## Wildcard (7. Aug 2008)

Nur mit Reflection kannst du anhand eines zur Laufzeit gegebenen Strings eines Klassennames ein Objekt erstellen, aber das läuft alles im Hintergrund und sollte dich nicht interessieren.
Der Punkt ist, das du mit einem OSGi Framework in der Lage bist Module zur Laufzeit hinzuzufügen, zu entfernen und zu aktualisieren und ich denke, das ist was du haben wolltest.
Auch Application Server wie zB JBoss werden in Zukunft auf OSGi basieren.


----------



## Generic1 (7. Aug 2008)

steht das OSGi irgendwie im Widerspruch zum MVC Pattern oder unterstützen sich beide? 
[Diese Frage könnte allerdings jetzt völliger nonsense sein aber meine Anwendung baut jetzt auf dieses Pattern auf und ich versuch mir gerade einen Überblick zu verschaffen, wie ich das OSGi implementieren könnte]


----------



## Wildcard (7. Aug 2008)

Generic1 hat gesagt.:
			
		

> steht das OSGi irgendwie im Widerspruch zum MVC Pattern oder unterstützen sich beide?


Das eine hat mit dem anderen überhaupt gar nichts zu tun. Was innerhalb der Bundles geschiet, interessiert OSGi nicht.
OSGi implementiert man übrigens nicht selbst, sondern verwendet eine der bestehenden Implementierungen.
Equinox, Felix,...


----------



## Generic1 (7. Aug 2008)

Ok ich verstehe,
hab mir gerade ein Step by Step Tutorial angesehen, welches Knopflerfish verwendet, 

 [url]http://www.knopflerfish.org/tutorials/osgi_tutorial.pdf [/url]

Was mir jetzt nicht ganz klar ist ist, das bei diesem Tutorial ein desktop heruntergeladen wird und in diesem dann die Bundels zum Laufen gebracht werden, 

Mir ist der zusammenhang zwischen meiner Java- Applikation und dem OSPi desktop nicht klar, soll der Knopferfish meine Java- Applikation simulieren?


----------



## Wildcard (7. Aug 2008)

Ich habe Knopflerfish noch nciht verwendet, aber der Desktop ist wohl als Management Konsole zu verstehen die dir erlaubt Bundles zu laden, starten, stoppen,...
Also eine Testumgebung um deine Bundles in Aktion zu sehen.


----------



## Generic1 (7. Aug 2008)

wie würde ich dann meine Bundels in meine Java- Applikation einbinden,
das müsste ich ja dann wie Testumgebung machen?


----------



## Wildcard (7. Aug 2008)

Du bindest keine Bundles in deine Java Applikation ein, du erstellst deine Java Applikation als Sammlung von Bundles.
Die Bundles kommen dann in das OSGi Framework und stellen sich gegenseitig Services bereit.


----------



## Generic1 (7. Aug 2008)

ok ich hab [hoffentlich] verstanden, ich teile mein projekt in teilprojekte auf, programmier die Bundels und erstelle mein programm mit dem OSGi Framework,

eine Frage drängt sich bei mir noch auf, wie bekomme ich die teilprojekte, mach ich da mal ein uml vom ganzen damit ich weiß welchen service die objektverbände anbieten,
wie gehst du da vor,
danke


----------



## Wildcard (7. Aug 2008)

Du erstellst die Teile nicht mit einem OSGi Framework, du klinkst die Teile in ein OSGi Framework ein.
Zur Aufteilung, naja, versuch dein Produkt in sinnvoll getrennte (möglichst unabhängige) Module aufzuteilen, das werden dann die Bundles.


----------



## Generic1 (7. Aug 2008)

ok verstanden, und das einzige, was ich bei der Programmierung der Teile berücksichtigen muss, ist dass ich eine build.xml und eine manifest- Datei habe und bei meinen Teilprojekten das Interface BundleActivator implementiere


ich muss ja auch zukünftige implementierungen berücksichtigen um dann einen Service bereitstellen zu können, oder?


----------



## Wildcard (7. Aug 2008)

Eine IDE wie Eclipse hilft dir dabei gewaltig.
Eclipse läuft mit Equinox, die Bundles funktionieren aber auch für beliebige andere OSGi Frameworks.
Eclipse kümmert sich um das Manifest, bindet die nötigen jars ein usw. Von da ab ist es im Prinzip ganz normale Java Entwicklung mit einigen zusätzlichen (mächtigen) Bibliotheken die man mitverwenden kann,


----------



## Generic1 (8. Aug 2008)

Wildcard hat gesagt.:
			
		

> Das eine hat mit dem anderen überhaupt gar nichts zu tun. Was innerhalb der Bundles geschiet, interessiert OSGi nicht.
> OSGi implementiert man übrigens nicht selbst, sondern verwendet eine der bestehenden Implementierungen.
> Equinox, Felix,...



Da happerts bei mir noch mit dem verständnis, ich verstehe deine Antwort so, dass ich innerhalb eines Bundles eine MVC- Architektur haben kann, dem OSGi ist diese MVC- Struktur in einem Bundle egal!??

und in meinem "MVC- Bundle" muss ich eben Services zur verfügung stellen, damit ich neue Bundles hinzufügen kann,

Hab ich das so richtig verstanden?


----------



## Wildcard (8. Aug 2008)

Ich geb dir jetzt mal ein Beispiel, damit du siehst, dass MVC nichts damit zu tun hat.
Wie oben schonmal erwähnt, läuft Eclipse auf dem OSGi Framework Equinox. 
Die Java IDE, die jeder sofort mit Eclipse assoziert ist ein solches Bundle (bzw. ein paar). Die Eclipse Hilfe  ist ein Bundle. Die Suche ist ein Bundle.


----------



## Generic1 (8. Aug 2008)

Dann bedank ich mich mal und stürz mich ins designen und codieren,
schönes WE,


----------



## Generic1 (11. Aug 2008)

Hab mich jetzt das ganze Wochenende mit der RCP- Programmierung beschäftigt (mit NetBeans) und bin zu der Erkenntnis gekommen, dass das genau das Richtige ist, genau das brauche ich, 
jetzt ist nur mehr die Frage ob ich das Ganze mit NetBeans oder mit  Eclipse mache und was eigentlich der Unterschied zwischen dem OSGi und dem RCP ist,

Vielleicht kann mir das jemand erklären, ich bin bis jetzt noch nicht auf die schliche gekomnen,


schönen Tag noch,


----------



## Wildcard (11. Aug 2008)

OSGi und RCP haben erstmal nichts miteinander zu tun. Erstellt man eine Eclipse RCP, läuft im Hintergrund ein OSGi Framework, bei einer Netbeans RCP nicht.
Ob du Netbeans RCP, oder Eclipse RCP verwendest, bleibt dir überlassen, wenn du nach Rat fragst, würde ich allerdings Eclipse RCP empfehlen, weil das nunmal de facto Standard ist und Netbeans eher ein Exot.


----------



## Generic1 (11. Aug 2008)

Wie würdest du die Einarbeitungszeit beziffern und könntest Du eine Literatur zum Einarbeiten empfehlen, 
Ich habe bei Amazon nachgesehen, da sind manche Bücher sehr schlecht bewertet, vor allem das Buch  	
Rich-Client-Entwicklung mit Eclipse 3.3.
Ich habe nich nicht sehr viel mit Eclipse programmiert, programmier aber seit ca. 3 Jahren mit NetBeans,


----------



## Wildcard (11. Aug 2008)

Einarbeitungszeit für was genau?
Bücher für Eclipse RCP gibt es einige sehr gute. 
Bekannt sind vor allem diese:
http://www.amazon.de/Contributing-Eclipse-Principles-Patterns-Plug-Ins/dp/0321205758
http://www.amazon.de/Eclipse-Building-Commercial-Quality-Plug-ins/dp/0321228472

Ob man's braucht ist wieder eine andere Frage, da die Eclipse Hilfe sehr ausführlich ist und es tonnenweise Tutorials im Netz gibt.


> Ich habe nich nicht sehr viel mit Eclipse programmiert, programmier aber seit ca. 3 Jahren mit NetBeans,


Was nützt dir das? Die Schwierigkeit ist wohl kaum, den Java Editor zu bedienen (ob nun Eclipse, oder NetBeans), sondern seine Software auf der jeweiligen Plattform aufbauen zu lassen und da fängst du in beiden Fällen von 0 an.


----------



## Generic1 (11. Aug 2008)

Einarbeitungszeit, damit ich eine ansprechende GUI mit funktionalität bekomme, wie z.B.: JTabbedPanes die man docken und undocken kann, ein ordentliches Hilfe- System, Floatable Panel an den seiten,

aber das werd ich dann eh sehen, nach dem nächsten we  herzlichen Dank für den Rat!!


----------



## Wildcard (11. Aug 2008)

Generic1 hat gesagt.:
			
		

> Einarbeitungszeit, damit ich eine ansprechende GUI mit funktionalität bekomme, wie z.B.: JTabbedPanes die man docken und undocken kann, ein ordentliches Hilfe- System, Floatable Panel an den seiten,


Das ist schon fertig und kann genauso weiter verwendet werden. Heißt dann zwar nicht mehr JTabbedPanes, weil Eclipse kein Swing verwendet, tut aber hier nichts zur Sache.


----------



## tuxedo (11. Aug 2008)

Naja, wer sich mit Swing auskennt und sich gegen SWT (was auf der Eclipse Schiene verwendet wird) wehrt, der ist mit NetBeans evtl besser dran, da ja schon alles bekannt ist (also die Swing-Welt).

Aber das ist dann wohl schon eher Glaubens-/Einstellungssache eines jeden einzelnen.

- Alex


----------



## Generic1 (12. Aug 2008)

alex0801 hat gesagt.:
			
		

> Naja, wer sich mit Swing auskennt und sich gegen SWT (was auf der Eclipse Schiene verwendet wird) wehrt, der ist mit NetBeans evtl besser dran, da ja schon alles bekannt ist (also die Swing-Welt).
> 
> Aber das ist dann wohl schon eher Glaubens-/Einstellungssache eines jeden einzelnen.
> 
> - Alex



ich hab mir die Sache mit dem SWT gerade angesehen, das ist genau das was ich brauche da meine GUI auf allen Plattformen laufen soll und man den Unterschied zwischen meiner GUI und den anderen Programmen kaum kenne soll,
also ich werd jetzt mal bei Eclipse bleiben, schließlich verwenden auch 80% der Entwickler Eclipse, 

mal schauen, wieviel aufwand das ist sich in SWT einzuarbeiten,


----------



## Wildcard (12. Aug 2008)

Generic1 hat gesagt.:
			
		

> mal schauen, wieviel aufwand das ist sich in SWT einzuarbeiten,


Dank JFace ist das halb so wild. Sieh dir auch unbedingt mal die Eclipse Forms an, IMO sehr nette Widgets....
http://www.eclipse.org/articles/Article-Forms/article.html


----------

