Planung

Es scheint es wenig sinnvoll, fjorum jetzt schon “hübsch” zu machen, oder fortgeschrittene Features zu implementieren. Programmtechnisch ist wohl erst mal ein ordentliches Rollen/Permission-System am wichtigsten, bevor es ans Forum selbst geht.

Für die Gestaltung der Infrastruktur wäre gut zu wissen, ob noch Leute mitarbeiten wollen oder nicht. So würde ich als Einzelkämpfer bei PostgreSQL bleiben, bei Team-Entwicklung aber über eine eingebettete Development-Datenbank nachdenken. Genauso die Frage der DB-Updates: Allein reicht mir mein SQL-Skript, im Team müsste es wohl FlyWay oder Liquibase sein. Auch Tests wären im Team wichtiger. Als Einzelkämpfer wäre wiederum eine gehostete Version wichtiger, um trotzdem Feedback zu bekommen.

Beim Code-Style würde ich nicht so weit gehen, von jedem zu verlangen, von vornherein “funktional” zu programmieren, aber insgesamt soll sich die Codebasis schon mittelfristig in diese Richtung bewegen. Deshalb werde ich mir auch das Recht herausnehmen, Code entsprechend zu refactoren.

Hier ist meine Team-Wunschliste (man wird ja mal träumen dürfen): https://github.com/fjorum/fjorum/wiki/Wanted

Ansonsten bin auch für jede externe Anregung dankbar, und wenn jemand forken will, freut mich das auch (Pull-Requests aber noch mehr).

Bevor du dir irgendein ORM ans Bein bindest, könntest du auch einen Blick auf jOOQ: The easiest way to write SQL in Java werfen. Für OSS-Projekte frei.

Hibernate ist bei Ninja schon “eingebaut”. Natürlich **muss **man es nicht nutzen, ich sehe aber keinen gewichtigen Grund, der dagegen spricht. Dass die TypedQuery-API ziemlich … gewöhnungsbedürftig ist, kann man verkraften (notfalls gibt es QueryDSL, wo bei ich kein Freund von Code-Generierung bin). Hibernate nimmt einem dafür eine Menge handgeklöppelte Abfragen ab.

Und was man mit jOOQ bei den Abfragen und so vielleicht einspart, zahlt man bei der nötigen Verkabelung zur Objekterstellung wieder drauf.

Wo jetzt das Projekt an Schwung gewinnt, und ich das allgemeine Interesse spüre, habe ich mir die aktuellen Problemchen nochmal durch den Kopf gehen lassen:

  • ich bin gerade dabei, ein selbstgestricktes Rechtesystem zu implementieren
  • es ist doch mehr Infrastruktur erforderlich, als ich mir bei meiner Idee von einem “schlanken” System vorgestellt habe
  • es ist nicht so leicht, die Anwendung bei sich zum Laufen zu bekommen, der Maven-Ansatz ist gewöhnungsbedüftig
  • für die meisten Entwickler ist das Ninja-Framework “Neuland”, was eventuell abschreckend wirkt
  • die Ninja-Dokumentation ist recht knapp, und es ist schwer, tiefergehende Informationen zu finden

Für mich gab es bis jetzt kein Problem, das ich nicht mit Ninja lösen konnte, und habe enorm viel dabei gelernt. Ich weiß auch, dass man nicht leichtfertig während des Rennens das Pferd wechseln sollte. Auf der anderen Seite sollte man seine eigenen Entscheidungen auch immer kritisch hinterfragen, und rechtzeitig die Richtung wechseln, bevor es zu spät ist. Deshalb meine Frage, wie ihr zu einem Wechsel zu Spring denken würdet.

Dazu meine Gedanken:

  • Ich habe noch nicht mit Spring Boot gearbeitet, aber ich denke, dass man damit die Applikation sehr einfach zum Laufen bringen könnte
  • Für viele Probleme ist bereits bewährte Infrastruktur vorhanden (z.B. Authentifizierung und Autorisierung)
  • Spring ist sehr verbreitet, einige Entwickler hier kennen es in- und auswendig
  • Viel Code könnte ohne große Änderungen übernommen werden
  • Es ist möglich, Freemarker weiter zu verwenden
  • Dokumentation ist umfangreich, jede Menge Informationen vorhanden

Ich will nicht den Eindruck erwecken, eine Umstellung wäre beschlossene Sache. Mir ist klar, dass das die Entwicklung zurückwerfen würde (obwohl man das oft überschätzt), und nicht leichtfertig beschlossen werden sollte. Trotzdem denke ich, das jetzt der richtige Zeitpunkt ist, bevor wir uns (z.B. mit dem Rechtesystem) verrennen, und dann feststellen, dass die Lösung nicht solide genug ist.

Was meint ihr?

Spring klingt besser,

und wie immer die Standardgedanken:

  • das wesentliche Forum-System, DB, Model, auch Logik wie Filter-Bedingungen, sollten davon gar nichts mitbekommen

  • Ninja könnte theoretisch nebenher bleiben, eigenes package, eigene evtl. Konfigurationsbefehle, eine Darstellungsschicht von vielen
    (edit: ok, ist wohl tiefgreifender als nur Darstellung geplant, ja wenn denn keine Anwendung ohne Framework möglich ist…)

  • darauf achten dass alles WIRKLICH einfach und stufenweise funktioniert, auch simple main-Methoden für weite Programmteile,
    musst ja nicht extra Konsolensteuerungsprogramm oder Swing-GUI zur Bedienung bauen, aber evtl. berücksichten ob es möglich bleibt und nicht unnötig verbaut

da ich persönlich aber bei funktionaler Programmierung nicht dabei bin (und wahrscheinlich auch sonst praktisch niemand mitprogrammieren kann…)
musst du darauf nicht zu sehr Rücksicht nehmen :wink: nur wenn selbst überzeugt, und nur die Erinnerng fehlte, nicht extra für mich

Ich würde einen Wechsel zu Spring begrüßen.
Ich beschäftige mich jetzt seit mindestens 2 Jahren mit Spring und bin begeistert.
Bei der Diskussion über das Rechtesystem, vor allem bei den noch nicht angesprochenen technischen Umsetzungen, hat man mit Spring Security ein sehr stabiles Framework, welches durchdacht ist und Features bietet, die man als Sicherheits"laie" nicht umgesetzt hätte (saubere CSRF-Protection, einige sinnvolle Header, solides Firewallkonzept, …).

Einen Wechsel zu Spring Security hatte ich nur deshalb nicht vorgeschlagen, weil dies deine bisherige Arbeit zu Teil über den Haufen geworfen hätte.

*** Edit ***

Wenn man zu Spring wechselt, dann kann man auch gleich noch Spring Data mitverwenden. Das macht das ORM meiner Meinung nach noch einmal eine Ebene einfacher.

Wenn Spring schon im Gespräch ist, kann man dann nicht gleich auf Java EE umsteigen? :wink:

Okay, das ist ja ein recht deutliches Meinungsbild :slight_smile:

Autsch! Das was gemein…

Wie gesagt setzte ich meine Hoffnung auf Spring Boot, auch um wie in Ninja möglichst einfach einen eingebetteten Webserver verwenden zu können. Man kann auch in Spring sehr “schlank” bleiben, wobei der große Vorteil ist, dass die ausgewählten Module ohne großes Trara zusammenarbeiten.

Ich denke, dass Landei die Vorteile von Spring Boot gegenüber von Java EE oder anderem sicherlich kennt und ich würde da die Auswahl der Technologie ganz Landei überlassen.

(einfach auch deshalb weil ich unbelastet bin und nicht verpflichtet bin bei der gewählten Technologie mitzuarbeiten zwinker )

habe etwas zerschnippelt zu Syntax Highlight, hier weiter:
http://forum.byte-welt.net/byte-welt-projekte-projects/fjorum-java-based-forum/16167-syntax-highlight.html
das hier bitte als ein Posting von Landei vorstellen, zurückkopiert:

################

Ich habe Erfahrungen mit Spring Core, Spring Data und auch etwas Spring Security, aber nicht mit Spring Boot. Das was sie versprechen ( Spring Boot ), klingt aber ziemlich gut, und ich habe auch noch nichts Negatives darüber gehört. Man kann auch auch sein “Hello World” in allen möglichen Konfigurationen erzeugen lassen ( http://start.spring.io/ )
#################

edit 27.4.: jedes Thema wird hier lang, zu Spring hier weiter:
http://forum.byte-welt.net/byte-welt-projekte-projects/fjorum-java-based-forum/16186-spring-boot.html

So, habe erst mal den Thymeleaf-Branch in den Master gemerged. Die Forum-Seite ist faktisch nicht existent, und bevor ich da weitermache, muss ich erst mal Nutzer und Rollen fertigbekommen.

Aktuell wird bei einer leeren Datenbank automatisch ein Nutzer “admin” / “admin” angelegt, der alle vorhandenen Rechte bekommt, dazu noch ein paar Rollen. Man kann weitere Nutzer anlegen, aber denen noch keine Rollen zuweisen. Rollen kann man auch noch nicht bearbeiten oder anlegen, die vorhandenen sind fest vorgegeben.

Das Forum wird sowieso anders aussehen müssen, weil ich die Kategorien (a.k.a. Unterforen) rekursiv machen will (maximale Schachtelungstiefe soll dann über Applikationsparameter steuerbar sein).

Unglaublich, aber wahr: Das Projekt schreitet voran, unaufhaltsam wie die Kontinentaldrift und auch genauso schnell!

Der aktuelle Stand:

  • Datenbank ist z.Z ausschließlich H2, wird sie gelöscht, werden ein paar Standard-Werte eingetragen (wie das admin/admin-Login)
  • Hibernate, Spring Security, Thymeleaf, Bootstrap und Gedöns funktionieren alle gut
  • Es gibt ein Login, einen Administrationsbereich (in dem Rechte und Nutzer verwaltet werden können) und seit heute eine ganz, ganz, ganz grobe Forum-Seite (eher ein Proof-of-Concept)

Was fehlt:

  • Paginierung
  • viele Moderations- und Administrationsmöglichkeiten (z.B. ist auf der Forumseite noch nichts löschbar)
  • eine ausgefeilte Antwort-Komponente (Textstyles, Smileys, Code…)
  • ordentliches Verhalten (granulare Rechte für das Forum, sticky und closed Topics, Schachtelungstiefe Unterforen u.s.w.)
  • Nutzerprofil mit Private Messages
  • Anmeldung über Registrierungs-Mail
  • Anmeldung über Fremd-Accounts (Facebook, Google, Twitter…)
  • Bootstrap-Feinschliff

Bevor ich damit weitermache, werde ich das Rechtesystem noch mal anfassen (eigener Branch) und die URL-Struktur überdenken (in Richtung REST).

Auch wenn alles noch sehr primitiv ist, habe ich das Gefühl, dass sich die Codebase langsam stabilisiert.

Wirklich cool. Kann man sich auch schon mal was im Browser ansehen?

Da müsste ich mich cmrudolf reden. Natürlich kannst du das Ding auch lokal installieren, ist ein normales Maven-Projekt und sollte out-of-the-box laufen.

Sorry, dass bisher noch nicht passiert - als ich mit der Konfiguration des CI-Servers fertig war, kam die Umstellung von Ninja auf Spring. Dann gab es eine ganze Zeit lang keinen richtig vorzeigbaren Code, aber jetzt kann ich das Deployment aktivieren. Eigentlich fehlt nur noch ein Shellscript, das die aktuelle Version dann startet.

Die aktuellen (ausführbaren) Artefakte kann man übrigens im TeamCity herunterladen: klick (Man kann sich als Gast einloggen.)

Danke, das wäre toll. Auch wenn “vorzeigbar” immer noch mächtig übertrieben ist :smiley:

Bis Dienstag werd ich aller Wahrscheinlichkeit nach aber nicht dazu kommen. Also bitte nicht enttäuscht sein, wenn es noch ein Weilchen dauert :wink:

OK, es wird langsam Zeit, mal wieder was zu machen.

Lokal hatte ich einige Versuche mit Vaadin unternommen, habe aber ums Verrecken die Sicherheit nicht zum Laufen gebracht, so dass ich das auf Eis lege.

Ich habe den “recursive roles”-Branch jetzt in den Master gemerged. Login ist z.B. admin/admin (danach kann man eigene Nutzer anlegen), ganz grundlegende Foren-Funktionen stehen (ohne ordentliches Berechtigungssystem) zur Verfügung.

Hier meine Nah-Ziele:

  • Produktions-Settings für PostgreSQL basteln (da standardmäßig development mit H2 gewählt ist, muss man das nicht installieren)
  • Nutzer- und Rechte-Administration hinbekommen. Meine Strategie mit Popups werde ich dabei überarbeiten, und doch lieber Unterseiten verwenden
  • Mail-basierte Nutzeranmeldung
  • Anwendung Berechtigungen im Forenbereich

So richtig zufrieden bin ich mit Bootstrap nicht, habe aber noch nicht wieder nach Alternativen gesucht. Schön wäre etwas, wo sich leicht “Skins” schreiben lassen.

Falls du an Thymeleaf festhalten möchtest, derzeit rollt die Version 3 (mit etwas Verspätung) an. SpringBoot unterstützt es noch nicht, auch die Dialekte sind noch nicht in das neue Dialektsystem überführt (insbesondere der Layout- und Java8Time-Dialekt). Nichtsdestotrotz lässt es wohl nicht mehr sonderlich lange auf sich warten und bietet einige Vorteile gegenüber der 2er-Version.

Edit: in meinem Hinterkopf schlummert auch noch, dass ich unbedingt das live-Deployment machen muss…

Habe mir heute “Spring Boot in Action” von Manning gekauft, vielleicht inspiriert mich ja die Lektüre…