JSPWiki – μια J2EE Wiki μηχανή

ΕΙΣΑΓΩΓΗ

Από την αρχή της ενασχόλησής μου με τον μαγικό κόσμο της πληροφορικής (σε κάτι ρομαντικά χρόνια που χάνονται στα μέσα της δεκαετίας του ’80) κράτησα ένα καλό συνήθειο: Να καταγράφω οτιδήποτε υλοποιώ γιατί πάντα ήταν σίγουρο ότι θα  χρειαζόμουν αυτήν την πληροφορία αργότερα. Το κακό για μένα όμως ήταν ότι για αρκετά χρόνια, εμπιστεύομουν τα σημειωματάρια μου και έτσι όταν αυτά χάνονταν για ένα ανεξήγητο λόγο (… χμμμ ίσως όχι και τόσο ανεξήγητο εδώ που τα λέμε) μαζί χάνονταν και η πολύτιμη γνώση που είχε αποτυπωθεί πάνω τους.

Μέχρι που ανακάλυψα τη δύναμη του Wiki. Η δυνατότητα να καταγράφω μία πληροφορία που να είναι προσβάσιμη online σήμαινε ότι θα είχα πάντα μαζί μου και παντού (όπου υπήρχε ένας browser τέλως πάντων) τις σημειώσεις μου. Σαν τυπικός javaς (τζαμπάς… κατά άλλους) που είμαι βέβαια κοιταξα να βρω distros σε j2ee. Μέχρι που βρήκα το JSWiki.

ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ

Το JSPWiki είναι  βασισμένο στον αλγόριθμο της μηχανής WikiWiki (το οποίο παρεπιπτώντος σημαίνει “γρήγορα” στα Χαβανέζικα). Η αρχική ιδέα της WikiWiki ήταν και παραμένει η δημιουργία ενός γρήγορου περιβάλλοντος συνεργασίας το οποίο θα έχει persisted δεδομένα. Το WikiWiki τονίζει το περιεχόμενο, την ευκολία και την προσβασιμότητα αντί καλή εμφάνιση. Το JSPWiki κληρονομεί όλα αυτά τα χαρακτηριστικά αλλά δίνει ταυτόχρονα και μεγάλο βάρος στην εμφάνιση. Ας τα πάρουμε από την αρχή.

1) Ευκολία στη συγγραφή

Η συγγραφή μίας καταχώρησης δε θα μπορούσε να είναι ευκολότερη με το JSPWiki. Με ένα comprehensive toolbar, ο χρήστης έχει τη δυνατότητα να μορφοποιεί δυναμικά το κείμενό του και να προσθέτει media κτλ. σχεδόν σαν να δούλευε σε Word. Για εμάς τα geeks έχει ακόμη και μορφοποίηση κώδικα γλωσσών !!!

Να μερικά από τα χαρακτηριστικά:

  • Εφέ κειμένου: Bold, italic, monotyped, css styled
  • Bracketed hyperlinking και το παλιό καλό CamelCase.
  • Bulleted, numbered, και definition λίστες
  • Tables και sortable tables
  • Παραπομπές
  • Τρία επίπεδα heading.
  • Σύνδεση με InterWiki.
  • Tabs και collapsible lists

 

2) Look & Feel

Το παραδέχομαι. Είμαι άνθρωπος που τον τραβάει το περιτύλιγμα. Έτσι όταν ανακάλυψα την απλότητα του customisation στο JSP WIki έπεσα με τα μούτρα στη δουλεία… Η εφαρμογή επιτρέπει στον admin να φιάξει δικά του templates και τα δικά του skins (δηλαδή customιες πάνω σε προϋπάρχοντα templates). Ο δε χρήστης έχει τη δυνατότητα από τα preferences να επιλέξει μεταξύ των αποθηκευμένων templates. Η ιδια πληροφορία σε διαφορετικό περιτύλιγμα… δεν θα βαρεθώ ποτέ. Πάντως θέλει λίγο ψάξιμο για τη δημιουργία νέου template / skin αλλά υπάρχουν κάποιες οδηγίες στο site του παρόχου. Το κερασάκι στην τούρτα… πολλές λειτουργίες έχουν Ajax.

3) Plugins

Και εδώ κάπου ξεκινάει το party. Ένα JSPWiki plugin είναι ένα εργαλείο που μπορεί να αυτοματοποιήσει τα οποιαδήποτε actions στις σελίδες wiki. Υπάρχουν πάνω από 100 plugins και περιλαμβάνουν από rendering google maps μέχρι scripting σε groovy (… η απάντηση της Spring στο Ruby). Η ενσωμμάτωση ενός plugin σε μία σελίδα είναι επίσης απλή (μία γραμμή!).

4) Ασφάλεια

Αν θέλετε να βάλετε το Wiki στο Internet αυτό σας ενδιαφέρει ιδιαίτερα. Σίγουρα δεν θέλουμε να έρθει κάποιος απρόσκλητος και να μας τα κάνει όλα ρημαδιό. H JSPWiki επιτρέπει τη διαφύλαξη της πρόσβασης (authentications) και των δικαιωμάτων (authorisation) σε διάφορα επίπεδα:

  • Με το security realm του container
  • Με βάση δεδομένων
  • Με XML αρχείων
  • Με LDAP\
  • Με κάτι δικό μας.
  • Με το συνδυασμό όλων των παραπάνω

 

Βέβαια αυτές οι δυνατότητες έχουν και ένα κόστος. Κάνουν λιγάκι πιο δύσκολο το setting αλλα όχι και τόσο δραματικά. Πάντως υπάρχει η δυνατότητα καθορισμου δικαιωμάτων και ανά σελίδα με ένα απλό tag.

5) Αποθήκευση δεδομένων και αναζήτηση

Τα δεδομένα αποθηκεύονται με Lucene σε documents στο φάκλο που ορίζουμε. Οπότε το retrieve είναι εξαιρετικά γρήγορο. Αν βέβαια κάποιος επιμένει υπάρχει και η δυνατότητα για αποθήκευση στη βάση. Το search είναι όλα τα λεφτά. Γραμμένο σε Ajax, εμφανίζει τις σελίδες που βρέθηκαν σαν popup ενώ πληκρολογούμε.

ΤΕΧΝΟΛΟΓΙΑ / ΕΓΚΑΤΑΣΤΑΣΗ

Όπως ανέφερα νωρίτερα το JSP Wiki είναι μία J2ΕΕ εφαρμογή. Επιμέρους τεχνολογίες που χρησιμοποιούνται περιλαμβάνουν

  • JSP
  • JSTL
  • Lucene
  • Log4j για logging
  • Ajax
  • Taglibs
  • JAAS connectivity για το Security

 

Είναι αρκετά lightweight και τρέχει σε οποιοδήποτε J2EE container (το έχω δοκιμάσει σε Tomcat, Glassfish, JBoss και Weblogic).

Εγκατάσταση

H JSPWiki παρέχει ένα πολύ καλο οδηγό εγκατάστασης. Τα γενικά βήματα που προτείνω είναι με την εξής σειρά:

  • Κατέβασμα του war αρχείου
  • Αλλαγές στα αρχεία
    • WEB-INF/jspwiki.properties (η καρδιά του συστήματος)
    • WEB-INF/jspwiki.policies (για το security)
    • WEB-INF/web.xml (για security και setting για τη βάση δεδομένων)
    • /templates (τα templates και skins)
    • WEB-INF/lib/JSPWiki.jar για αλλαγή στο ποιό θα είναι το default skin
  • Αλλαγές στον application server (datasources, realms κτλ.)
  • Αλλαγές στον HTTP server αν υπάρχει για να κάνει proxy στην εφαρμογή
  • Αλλαγές στη βάση δεδομένων (αν επιλέξουμε να χρησιμοποιηθεί)
  • Deploy στον application server και restart (αν χρειάζεται)

 

 ΣΥΜΠΕΡΑΣΜΑ

 Το JSPWiki είναι ένας δυνατός παίκτης στο χώρο των εφαρμογών Wiki και σίγουρα πάντως ο καλύτερος σε J2EE. Αν εξαιρέσουμε κάποια χρονοτριβή για το setup ιδιαίτερα του security το αποτέλεσμα θα σας αποζημιώσει.

REFERENCES

Passionate Archer, Runner, Linux lover and JAVA Geek! That's about everything! Alexius Dionysius Diakogiannis is a Senior Java Solutions Architect and Squad Lead at the European Investment Bank. He has over 20 years of experience in Java/JEE development, with a strong focus on enterprise architecture, security and performance optimization. He is proficient in a wide range of technologies, including Spring, Hibernate and JakartaEE. Alexius is a certified Scrum Master and is passionate about agile development. He is also an experienced trainer and speaker, and has given presentations at a number of conferences and meetups. In his current role, Alexius is responsible for leading a team of developers in the development of mission-critical applications. He is also responsible for designing and implementing the architecture for these applications, focusing on performance optimization and security.