Plugin-Classloader erweitern

Ideen, wie TV-Browser verbessert werden kann
Antworten
rblickle
Newbie
Beiträge: 2
Registriert: 12 Apr 2016, 22:43

Plugin-Classloader erweitern

Beitrag von rblickle »

Hallo zusammen,

beim Entwickeln eines Plugin habe ich das Problem, dass der Classloader nur das Jar des Plugin nutzt (und natürlich über den Parent-Classloader die Klassen des TV-Browsers).

Alle benötigten Klassen in ein Jar zu verpacken finde ich nur ein Workaround.

Um diese Limitierung zu Umgehen habe ich im Plugin jars aus dem Plug-Jar herauskopiert und diese über einen neuen Classloader geladen.

Mein Vorschlag wäre, dass beim Laden eines Plugins darin enthaltene Jars extrahiert werden und diese Jars zusammen mit dem Jar des Plugin von dem Classloader benutzt werden.

Ich hoffe auf viel Feedback.
uzi
Site Admin
Beiträge: 2294
Registriert: 02 Jul 2009, 14:32

Re: Plugin-Classloader erweitern

Beitrag von uzi »

rblickle hat geschrieben:Hallo zusammen,

Alle benötigten Klassen in ein Jar zu verpacken finde ich nur ein Workaround.
...ist heutzutage dank maven allerdings ziemlich üblich.
rblickle
Newbie
Beiträge: 2
Registriert: 12 Apr 2016, 22:43

Re: Plugin-Classloader erweitern

Beitrag von rblickle »

Alles in ein Jar hineinzupacken geht so lange gut, solange
  • * Die Reihenfolge der Jars auf dem ursprünglichen Classpath unerheblich war
    * Es keine doppelten Dateien auf dem Classpath gibt. Beim Einsatz vom ServiceLoader ist dies leider Standard (Dateien unter META-INF/services)
Gibt es Interesse an einem erweitertem Classloader für die Plugins ? Falls ja, würde ich den Patch auch gerne erstellen.
uzi
Site Admin
Beiträge: 2294
Registriert: 02 Jul 2009, 14:32

Re: Plugin-Classloader erweitern

Beitrag von uzi »

rblickle hat geschrieben:Alles in ein Jar hineinzupacken geht so lange gut, solange
  • * Die Reihenfolge der Jars auf dem ursprünglichen Classpath unerheblich war
    * Es keine doppelten Dateien auf dem Classpath gibt.
das ist ja genau die classloading-hell, die maven mit seinem dependency management ein stück weit entschärfen will. entsprechende dopplungen und versionskonflikte (apache commons libs sind zb immer so ein kandidat) innerhalb deines plugins kannst und solltest du damit von anfang an vermeiden.

wie auch immer, ist eh nicht meine baustelle, insofern will ich mich da gar nicht so sehr einmischen. man könnte ja auch fragen, warum man nicht gleich osgi benutzt, wenn man an der plugin-architektur schraubt ;). mit java 9 / jigsaw ändert sich ja anscheinend auch nochmal ne ganze menge an der ecke...
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Plugin-Classloader erweitern

Beitrag von ds10 »

rblickle hat geschrieben:Gibt es Interesse an einem erweitertem Classloader für die Plugins ?
Zur Zeit nicht (und wahrscheinlich auch später nicht). Ich halte das für völlig unnötig, ein Plugin ist eine kleine Funktionserweiterung, da ist es wenig wahrscheinlich, dass man x unterschiedliche Bibliotheken einbinden möchte, die dann auch noch Konflikte haben. So wie es jetzt ist funktioniert es seit Ewigkeiten und bisher hatte niemand jemals Schwierigkeiten gemeldet. Es wäre daher eine Lösung für ein nicht vorhandenes Problem oder gab es bei deinem Plugin ein Problem, wenn du die Klassen der Bibliotheken in das Jar übernommen hast?

Wenn überhaupt wäre es eine Überlegung wert, dass man in TV-Browser zusätzliche Bibliotheken einbinden kann, die dann auch den Plugins zur Verfügung stehen.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Gast

Re: Plugin-Classloader erweitern

Beitrag von Gast »

@uzi: Die jar-hell möchte ich genau damit vermeiden: Über ein maven-Plugin wird der maven-Classpath gescannt. Die Reihenfolge wird dann in eine datei geschrieben. Mein aktuell selbst programmierter Classloader nimmt dann die jars in der Reihenfolge, die in der Datei definiert ist.

@ds10: Ich schreibe gerade ein Plugin, damit ich die Fernsehdaten auch auf meinem Tablet anschauen kann. Für das Webinterface benutze ich Spring Boot. Das ist vielleicht ein etwas fetter Ansatz für das Ausliefern von statischen Dateien + Restschnittstelle, aber funktioniert prima.

Wenn ich die jars einfach zusammenmerge, startet spring boot nicht mehr.

Fazit: Dann bleibe ich bei meinem selbstgebauten Classloader.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Plugin-Classloader erweitern

Beitrag von ds10 »

Gast hat geschrieben:Ich schreibe gerade ein Plugin, damit ich die Fernsehdaten auch auf meinem Tablet anschauen kann.
Das geben die Nutzungsbedingungen aber nicht her. Die Daten dürfen TV-Browser nicht verlassen, abgesehen von Hinweisen auf einzelne Sendungen an die z.B. mit Google-Kalender erinnert wird. Wenn du das trotzdem machst, verstößt du ausdrücklich gegen die Nutzungsbedingungen, denen du zustimmen musstest um überhaupt Daten laden zu dürfen. Es sei denn du nutzt als Datenquelle CleverEPG, da weiß ich nicht wie deren Nutzungsbedingungen sind. Die Plugin-Schnittstelle mag das Exportieren des gesamten Programms zulassen, aber dafür darf man sie trotzdem nicht verwenden, wenn man auf EPGfree-Daten setzt.

Im Übrigen gibt es eine Android-Version von TV-Browser mit der man auch auf Android-Tablets die Daten nutzen darf. Wenn man ein Apple-Tablet verwendet, dann geht es halt einfach nicht.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Gast

Re: Plugin-Classloader erweitern

Beitrag von Gast »

Hallo,

Dieser Beitrag ist von mir ernst gemeint. Er könnte aber auch anders verstanden werden. Darum möchte ich das zu Beginn klarstellen.

Ich werde mich ja an die Nutzungsbedingungen halten.

Trotzdem frage ich mich, ab wann die Daten den TV-Browser verlassen haben. Ich wollte den Webserver "in Process" im TV-Browser betreiben.

Das Plugin lädt sich die Daten in den Hauptspeicher.

- aus meiner Sicht haben die Daten den TV-Browser noch nicht verlassen.

Das Plugin rendert eine HTML-Seite

- aus meiner Sicht haben die Daten den TV-Browser noch nicht verlassen, die Seite befindet sich ja noch im Speicher des TV-Browser-Prozess.

Das Plugin liefert die Seite an den Browser aus

- ab hier wirds für mich jetzt schwer zu argumentieren, dass die Daten den TV-Browser noch nicht verlassen haben.

Alternativ: Das Plugin liefert die Daten an ein Applet aus, dass zum Plugin des TV-Browsers gehört
- hier gibt es aus meiner laienhaften juristischen Einschätzung, dass es ein Graubereich ist.

Alternativ könnte man auch argumentieren, dass der Browser nur ein Anzeigemedium des TV-Browser-Plugin ist, also in dieser Konstellation zum TV-Browser dazugehört (Könnte man argumentieren, kann man vielleicht aber auch nicht).

Wie würde es aussehen, wenn man einen Screendump im Browser darstellen würde ? Hier denke ich, das wäre in Ordnung

Auf jedenfall würden die Daten nicht dauerhaft ausserhalb des TV-Browsers gespeichert werden. Das würde auf jedenfall gegen die Nutzungsbedingungen verstoßen.

Eine Frage zu der Android-Version : Kann man die auch über eine Plugin-Schnittstelle erweitern. Ich habe da einen speziellen Anwenungsfall in Zusammenarbeit mit OSMC.
ds10
Site Admin
Beiträge: 19101
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Plugin-Classloader erweitern

Beitrag von ds10 »

Also ich möchte auch gleich voraus schicken, dass dir niemand den Kopf abreißen wird, wenn du dir ein Plugin schreibst, was die Nutzungsbedingungen unter Umständen verletzt, was du aber ausschließlich selbst benutzt. Du solltest dir halt dann bewusst sein, dass ein solches Plugin nicht veröffentlicht werden darf.

Wir legen die Nutzungsbedingungen auch nicht ganz so eng aus, wie sie formuliert sind. Daher würde ich sagen, eine Nutzung der Daten innerhalb von TV-Browser liegt dann vor, wenn die Daten auf dem gleichen Rechner verbleiben, auf der TV-Browser läuft und sie nicht zusätzlich irgendwo persistent abgespeichert werden. Eine Anzeige der Daten in einem externen Programm auf dem gleichen Rechner, die aber von einem aktiv laufenden TV-Browser ausgeliefert werden müssen, wäre somit noch in Ordnung. Wenn die Daten aber den Arbeitsspeicher des gleichen Rechners verlassen, dann kann man einfach nicht mehr argumentieren, dass die Daten eigentlich immer noch zu TV-Browser gehören. Wie gesagt darf man einzelne Informationen durchaus auch zur Ankündigung einer Sendung auf andere Rechner übertragen, aber einzeln meint dann auch einzeln. Alle zur Zeit laufenden Sendungen zu übertragen, wäre nicht mehr einzeln.

Du könntest also durchaus über einen Kalender-Export Erinnerungen auch auf einem Apple-Tablet oder -Smartphone anzeigen lassen, aber eben nicht das gerade laufende Programm.

Wenn du die Daten auf einem Apple-Tablet oder -Smartphone nutzen wollen würdest, wäre die einzige Möglichkeit für diese Geräte eine TV-Browser-Version zu programmieren und uns diese vorzustellen. Wir würden dann sagen, ob sie als TV-Browser veröffentlicht werden darf und dann damit das Recht hat, auch die Daten komplett anzuzeigen, denn dann wäre es ja ein TV-Browser, der die Daten anzeigt.

Die Android-App verfügt über eine Plugin-Schnittstelle:
http://wiki.tvbrowser.org/index.php/And ... ntwicklung
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Jo
Site Admin
Beiträge: 11805
Registriert: 07 Apr 2006, 23:39

Re: Plugin-Classloader erweitern

Beitrag von Jo »

Der Punkt ist, dass uns die Daten nicht gehören, sondern den Sendern bzw. anderen. Deshalb können wir nicht abschließend sagen "Ist ok." wenn die Sender das anders sehen. Was man aber privat für sich an seinem Rechner macht und nicht weiterverbreitet, das ist schwierig zu kontrollieren.
v6ph1
Site Admin
Beiträge: 1276
Registriert: 13 Jan 2008, 05:07
Wohnort: Radebeul

Re: Plugin-Classloader erweitern

Beitrag von v6ph1 »

Eine Nutzung im Internet (und das kann man als Entwickler bei einem Webserver nicht verhindern) ist definitiv ausgeschlossen.
Im Heimnetz gibt es aber eine einfachere und rechtssichere Variante:
Desktop-Freigabe oder VNC.
Damit kann man sich den PC-Bildschirm auf ein beliebiges anderes Gerät holen.
Bei Linux kann man mit VNC sogar einen zusätzlichen Bildschirm nutzen ohne dass es auf dem Hauptbildschirm stört.

-- v6ph1
Antworten