Showing posts with label java. Show all posts
Showing posts with label java. Show all posts

Sunday, November 13, 2011

Java EE 6 Application ως Client για το web service Μη Φυσικών Προσώπων της ΓΓΠΣ

Με αφορμή την πρόσκληση του κ. Σπινέλλη για κατάθεση παραδειγμάτων χρήσης του web service Μη Φυσικών Προσώπων και έχοντας λίγο χρόνο το ΣΚ αποφάσισα να γράψω μία μίνι εφαρμογή για το σκοπό αυτό.
Το maven project που ετοίμασα (http://code.google.com/p/gsisclient) χρησιμοποιεί τις παρακάτω τεχνολογίες
- Java EE 6
- JSF 2
- XHTML
- PrimeFaces 2.2.1

Το παράδειγμα (.war ) έχει δοκιμαστεί με επιτυχία σε GlassFish 3.1 αλλά λογικά θα τρέχει σε όποιον Application Server υποστηρίζει Java EE 6. ( Υπάρχει διαθέσιμο για download στο : http://gsisclient.googlecode.com/files/gsisclient.war )

Για να εκτελεστεί σωστά πρέπει να υπάρχει το http://gsisclient.googlecode.com/files/RgWsBasStoixNSoapHttpPort.wsdl στο root του C: Εναλλακτικά μπορείτε να το αντιγράψετε όπου επιθυμείτε αλλά θα πρέπει να γίνουν οι κατάλληλες τροποποιήσεις στον κώδικα.
Το παραπάνω δε θα χρειάζονταν αν υπήρχε το σωστό location στο αρχικό WSDL. ( https://www1.gsis.gr/wsgsis/RgWsBasStoixN/RgWsBasStoixNSoapHttpPort?wsdl )
Μετά το deployment στον Application server η μινι-εφαρμογή "τρέχει" στο context /gsisclient 
Ένα printscreen μπορείτε να βρείτε στο : http://gsisclient.googlecode.com/files/gsisclient.png
Τέλος εκτός από την αναζήτηση και προβολή των στοιχείων με βάση το ΑΦΜ, το παράδειγμα περιλαμβάνει και έλεγχο εγκυρότητας ΑΦΜ. Μέσα στον κώδικα υπάρχουν τα κατάλληλα Unit Tests για όλες τις κρίσιμες μεθόδους.

Sunday, February 27, 2011

Java 7:Το νέο non-blocking I/O (NIO.2) - Part I

H Java 7, σε λίγο καιρό θα είναι πλέον γεγονός (υπάρχουν ήδη debug builds και beta εκδόσεις προς δοκιμή) και θα περιλαμβάνει πλήθος νέων χαρακτηριστικών που θα βελτιώσουν - αλλά λιγότερο και άλλα περισσότερο - την ποιότητα του κώδικα και θα κάνουν τη ζωή των developers ακόμα πιο εύκολη. Ένα από τα πιο αμφισβητούμενα APΙ της Java (από την έκδοση 1.4) και μετά ήταν και είναι το non-blocking I/O API (ΝΙΟ), τα βασικά στοιχεία του οποίου ήταν συνοπτικά τα εξής:
  • Δυνατότητα κωδικοποίησης και αποκωδικοποίησης αρχείων με διαφορετικά σετ χαρακτήρων
  • Ένα interface το οποίο μπορούσε να διαβάζει και να διαχειρίζεται αρχεία στη μνήμη
  • Δυνατόητα για επεξεργασία δεδομένων (read & write) χωρίς εμπόδια (non-blocking operations)
  • Μία νέα βιβλιοθήκη για regular expressions η οποία είχε στηριχθεί στην ισχυρή και σταθερή υλοποίηση της Perl
Όλα τα παραπάνω ήταν πράγματι ένα σημαντικό βήμα της Java αλλά υπήρχαν ακόμα αρκετά ζητήματα που είχαν μείνει σε εκκρεμότητα
  • Δεν ήταν δυνατή η διαχείριση αρχείων με τον ίδιο τρόπο και με σταθερότητα σε όλα τα λειτουργικά συστήματα.Όποιος έχει αναπτύξει κώδικα και χρειάστηκε να επεξεργαστεί αρχεία από ένα σύστημα σε windows και Linux θα χαμογελάσει κουνώντας το κεφάλι! Για το λόγο αυτό κατηγορήθηκε ότι καταστρατηγεί το slogan : "write once, run everywhere"
  • Δεν είχε ένα ενιαίο μοντέλο διαχείρισης των ιδιοτήτων των αρχείων (read / write access κτλ.)
  • Ήθελε μεγάλη προσπάθεια και error-prone κώδικα για να διαβάσει κάποιος τα περιεχόμενα ενός καταλόγου αναδρομικά.
  • Δεν επέτρεπε τη χρήση λειτουργιών που ήταν διαθέσιμες αποκλειστικά από ένα λειτουργικό σύστημα.
  • Η ανεπηρέαστη επεξεργασία δεδομένων για αρχεία δεν υποστηρίζοντα ακόμα και μέχρι την έκδοση 1.6
Η νέα έκδοση του NIO ( NIO.2 ) το οποίο ξεκίνησε ως JSR-203 είναι πλέον γεγονός στη Java 7 και αποτελεί μία από τις σημαντικότερες βελτιώσεις της με κυριότερα χαρακτηριστικά τα παρακάτω :
  • Νέες βασικές κλάσεις για διαχείριση αρχείων
    • FileSystem
    • FileStore
    • Path – Αντικαθιστά την παλαιά κλάση file
  • Ιδιότητες Αρχείων
  • Υποστήριξη λειτουργιών που είναι διαθέσιμες μόνο από συγκεκριμένα λειτουργικά συστήματα (π.χ. Symbolic Link) 
  • Το WatchService για την παρακολούθηση αλλαγών σε αρχεία ή της ιδιότητες αυτών και την ενεργοποίηση τμήματος κώδικα. 
  • Δυνατότητα αναδρομικής ανάγνωσης καταλόγων (μέθοδος walkFileTree)
  • Υποστήριξη ασύγχρονης επεξεργασίας αρχείων (Interface SeekableByteChannel) 
Ας δούμε μερικές παραπάνω λεπτομέριες για τις 3 κύριες κλάσεις της βασικής βιβλιοθήκης του NIO.2 
  • FileSystem - Αποτελεί την κλάση που αναλαμβάνει την "επικοινωνία" με το τρέχων σύστημα αρχείων, είτε αφορά το εξ'ορισμού σύστημα αρχείων που παρέχεται από το Λειτουργικό Σύστημα είτε από ένα εναλλακτικό σύστημα αρχείων που ανακτήθηκε με το URI7.
  • FileStore - Κλάση, η οποία αναλαμβάνει τη διαχείριση των partitions, των μονάδων δίσκων κτλ. Αντιπροσωπεύει με άλλα λόγια, το αποθηκευτικό μέσο στο οποίο βρίσκεται ένα αρχείο
  • Path - Η κλάση που αντικαθιστά την παλιά κλάση File και χρησιμοποιείται για όλες τις ενέργειες πάνω σε ένα αρχείο (αντιγραφή, μετακίνηση, διαγραφή κτλ.) και διαχειρίζεται όλες τις έννοιες μιας πλήρης διαδρομής (path) είτε αυτή αφορά ένα αρχείο είτε έναν κατάλογο. Αξιοσημείωτο είναι ότι όλες οι μέθοδοι της κλάσης Path δημιουργούν μόνο ένα είδος exception, το κλασσικό IOException. Αν και αυτό είναι αναμφίβολα ένα βήμα προς την απλοποίηση του κώδικα και βοηθάει προς την κατεύθυνση αυτή, υπάρχουν κάποιες (λίγες ομολογουμένως περιπτώσεις) στις οποίες, καθιστά δύσκολο τον εντοπισμό ενός πιο εξειδικευμένου προβλήματος και τη διαχείρισή του.

Στα επόμενα άρθρα θα δείξω μερικά σύντομα παραδείγματα τόσο για τις βασικές κλάσεις του NIO.2 όσο και για τα υπόλοιπα νέα χαρακτηριστικά.