Wednesday, July 11, 2007

Change your mind..think stateful!

Το πιο αξιοπερίεργο και challenging όταν προσπαθείς να χρησιμοποιήσεις ένα framework όπως το Seam (και ίσως άλλα τα οποία θα βασιστούν στην ιδια φιλοσοφία) , καθώς έχει γράψει κώδικα με framework όπως το Struts ή και απλά Servlets / JSP είναι ότι πρέπει να σταματήσεις να σκέφτεσαι Stateless και να ξεκινήσεις να σκέφτεσαι Stateful. Το τεχνικό migration δεν είναι δυσκολο - 10 κόλπα και τεχνικές στο ένα framework 10 κόλπα στο άλλο- configuration εδώ configuration εκεί. Είναι πια θέμα να δομήσεις την εφαρμογή σου με άλλο τρόπο - τα λεγόμενα internals! Ξέρεις όσο πιο πολυ το ψάχνεις ανακαλύπτεις το εξής -όταν λές statefull σημαίνει ότι πολλά layer και pattern που ήδη χρησιμοποιείς με ένα stateless web framework εξαφανίζονται ή αλλάζουν νέα παίρνουν την θέση τους. Όσο πιο πολυ διαβάζω και προσπαθώ να καταλάβω το Seam τόσο πιο πολυ εντυπωσιάζομαι απο αυτό που εχουν καταφέρει. Ταπεινή μου γνώμη είναι ότι δείχνει τον δρόμο μπροστά....αρκεί...όλοι εμείς που χρησιμοποιούμε τις τεχνολογίες ..να αλλάξουμε λίγο τρόπο σκέψης..μερικές φορές είναι το πιο δύσκολο πράγμα αυτό ξέρεις!

6 comments:

  1. Πάρη δεν έχω ασχοληθεί με Seam, αλλά αν κατάλαβα καλά από αυτά που λες και την introductory σελίδα της JBoss χρησιμοποιεί web continuations;

    Αν ισχύει αυτό τότε όντως το mind-set shift από Struts & JSF είναι τεράστιο :)

    ReplyDelete
  2. Διονύση,

    νομίζω ότι το Seam δεν χρησιμοποιεί continuations όπως τα continuations του Rife (ή τα continuations που συναντά κανείς σε γλώσσες προγραμματισμού όπως η Scheme) και απλά ο όρος αναφέρεται για να εξηγήσει το stateful μοντέλο του Seam.

    BTW το Seam όντως φαίνεται πολύ καλό. Αν θέλεις να του ρίξεις μία ματιά θα σου πρότεινα να κατεβάσεις το distribution και να δεις τα sample applications.

    ReplyDelete
  3. η αλήθεια είναι ότι χρησιμοποιεί
    μέσα από την χρήση του JBPM.Τα convertations είναι ουσιαστικά web continuations.

    Q: Does Seam have continuations?

    A: A jBPM "wait state" is a continuation. Each node in a pageflow definition or node in a business process definition is a jBPM wait state. Speaking more approximately, you might like to think of the conversation state as a continuation. (We do not usually talk in this kind of language because it is too mysterious-sounding and obfuscates simple concepts to make them seem more impressive.)

    http://labs.jboss.com/jbossseam/faq

    ReplyDelete
  4. Δεν ξέρω seam, αλλά μάλλον τα continuations του rife δεν τα έχει.
    Στο rife κάνεις .pause() στη μέση μίας μεθόδου, και επιστρέφει το http response στο χρήστη. Στο επόμενο request συνεχίζει από εκεί που ήτανε (ακριβώς μετά το pause()), όπως ακριβώς ήταν το execution context.

    http://rifers.org/wiki/display/RIFE/Web+continuations

    Mind boggling stuff, αλλά μάλλον θέλει καιρό ακόμα για να καθιερωθούν τέτοια πράγματα.

    ReplyDelete
  5. Βασικά είχα στο μυαλό μου το cocoon όπου με την χρήση flowscript (Rhino Javascript) είχαν από το 2004 continuations:

    http://www.ibm.com/developerworks/library/j-contin.html

    (κρίμα που τα σκ**** από τότε)

    ReplyDelete
  6. Το cocoon έχει πολύ καιρό τώρα continuations, (όχι οπωσδήποτε) χάρη στο Rhino - χρειάστηκε κάποιο patching στο Rhino που, απ'ότι θυμάμαι, ο Norris Boyd που ήταν και ο συγγραφέας του δεν ήθελε να ενσωματώσει. Βέβαια τα continuations δεν ήρθαν πρώτα στο cocoon (παρ'ότι εκεί έδειξαν τι πραγματικά αξίζουν!) αλλά τα πρωτοείδαμε στην Scheme.

    Στο θέμα τώρα, τα statefull session beans του EJB μου θυμίζουν περισσότερο αυτό που γίνεται στο Seam: αντί να τρέχεις όλη ώρα με το session.getAttribute() απλά φτιάχνεις κανονικά properties στο bean σου και αυτά παίρνουν τιμές μόνο για το http session του χρήστη (φαντάζομαι έχει πιο λεπτό διαμερισμό όπως Invocation scope κλπ). Το spring βέβαια αυτά τα πράγματα τα έχει πολύ καιρό τώρα ;-)

    ReplyDelete