Utilizing Spring Data JPA to simplify the Data Access Infrastructure

Παρακατω θα μιλήσουμε για τις δυνατοτητες του Spring Data και πως μπορουμε να τις εφαρμοσουμε σε υπαρχοντες μηχανισμους επικοινωνιας με την Βαση Δεδομενων με την χρηση του JPA programming Interface.

Λιγα λογια για το Java Persistence API.
To spring Data ειναι ενα σχετικα νεο project που στοχο εχει να απλοποιησει την διαδικασια ανταλλαγης δεδομενων με την Βαση Δεδομενων που χρησιμοποιουμε, το λεγομενο data access layer δηλαδη.
Πιο συγκεκριμενα θα δουμε στην πραξη το subproject Spring Data JPA που απλοποιει σημαντικα τις διαδικασιες ανταλλαγης δεδομενων μας στο repository layer οταν χρησιμοποιουμε JPA annotated Pojos(Plain old Java classes). Πρακτικα δηλαδη ειναι οι γνωστες java κλασεις που υλοποιουν την συμβαση που οριζει το Java Persistence API (JPA). Η συμβαση αυτη οριζει οτι πρεπει να τοποθετησουμε ορισμενα annotations τοσο στην κλαση μας οσο και στις μεταβλητες που περιλαμβανει αυτη η κλαση.
Τα annotations αυτα στην ουσια υλοποιουν το γνωστο ORM(Object Relational Mapping) ή πιο απλα την συνδεση κλασεων και tables μιας βασης δεδομενων.
Ειναι δηλαδη τα annotations αυτα καποια extra πληροφορια, συμφωνη με τον τροπο που οριζει το JPA interface , και υλοποιησιμη απο τον μηχανισμο που επεκτεινει το JPA interface και επικοινωνει πραγματικα με την Βαση Δεδομενων. To πλεον διαδεδομενο Framework που υλοποιει το JPA interface και τα JPA annotations προκειμενου να συνδεσει τις κλασεις με τα tables της Βασης Δεδομενων ειναι το Hibernate.
Πριν περασουμε στις ευκολιες που παρεχει το Spring Data JPA Και στο πως αυτο μπορει να εφαρμοστει στο project μας, Θα δουμε αρχικα ενα πραγματικο παραδειγμα επικοινωνιας με την βαση με τον «παραδοσιακο τροπο».
Continue reading “Utilizing Spring Data JPA to simplify the Data Access Infrastructure”

How to reference Spring Beans from Everywhere!

Λοπόν, με αφορμή κάτι που με ταλαιπωρούσε γράφω τον παρακάτω οδηγό έτσι ώστε να δείξω πως μπορείς να καλέσεις ενα Spring Bean απο πρακτικά οπουδήποτε.

Ουσιαστικά έχουμε τις εξής περιπτώσεις περιπτώσεις για να καλέσουμε ένα bean

  1. Σε Spring non Web Application
  2. Σε Spring Web Application
    1. Μέσα απο κάποιον controller
    2. Μέσα σε κάποιο servlet
    3. Μέσα σε κάποιο implementation ή οποιαδήποτε άλλη Business Logic Class (aka μια απλή java class)

Θα τις πάρουμε λοιπόν μία-μία για να δούμε πως θα δουλέψουμε.

Πρώτα όμως θα φτιάξουμε ένα Bean το οποίο και θα καλούμε κάθε φορά μέσα στο κώδικά μας.

Το Spring Bean δεν είναι τίποτε άλλο απο ένα POJO (Plain Old Java Object) το οποίο με το που γίνεται initialize το Spring Context οι setters του “γεμίζουν” με ό,τι ορίζουμε εμείς στο context.xml (το κύριο xml που ορίζοντε όλοι οι παράμετροι του Spring, θα μπορούσε να λέγεται και διαφορετικά)

Στο παράδειγμά μας θα φτιάξω ένα Constants Bean το οποίο θα περιέχει πχ “σταθερές” που θέλω να χρησημοποιώ παντού και να τις ελέγχω απο το XML

Continue reading “How to reference Spring Beans from Everywhere!”

J2EE και Aspect Oriented Programming

ΕΙΣΑΓΩΓΗ

Όπως οι περισσότεροι προγραμματιστές J2EE, έχω γαλουχηθει, στο μεγαλύτερο μέρος της καριέρας μου, και για πολλά χρόνια, στην ανάπτυξη συστημάτων λογισμικού με τη χρήση τεχνικών αντικειμενοστραφούς προγραμματισμού (OOP). Η μέθοδος αυτή είναι η πλέον διαδεδομένη με κύριο χαρακτηριστικό τον κατακερματισμό ενός προβλήματος σε αντικείμενα που χαρακτηρίζονται από ιδιότητες (μέθοδους) και δεδομένα (μεταβλητές).

Παρά το γεγονός ότι ο OOP έχει μεγάλη επιτυχία στη διαμόρφωση και υλοποίηση πολύπλοκων συστημάτων λογισμικού, έχει και τα προβλήματά του. Η πρακτική εμπειρία με μεγάλα έργα έχει δείξει ότι οι προγραμματιστές ενδέχεται να αντιμετωπίσουν  προβλήματα με τη διατήρηση του κώδικα τους, δεδομένου ότι όσο μεγαλύτερο το λογισμικό που υλοποιείται τόσο και πιο δύσκολος γίνεται ο ξεκάθαρος διαχωρισμός του έργου σε ενότητες (αντικείμενα), πράγμα και το οποίο  αποτελεί τη βάση του OOP. Για παράδειγμα, μια μικρή αλλαγή σε μία επαναχρησιμοποιούμενη ενότητα μπορεί τελικά να προκαλέσει πολλές αλλαγές σε άλλες, ανεξάρτητες, ενότητες του κώδικα.

Τέτοιου είδους προβλήματα και πολλές άλλες ανησυχίες έρχεται να επιλύσει μία διαφορετική τεχνική, ο πτυχοστρεφής  ή κατά άλλους θεματοστρεφής προγραμματισμός (AOP). Πάμε να δούμε  λοιπόν κάποια προκατάρκτικά στοιχέια για αυτόν.

Σημείωση: Προτείνω γενικά τον όρο πτυχοστρεφή γιατί εκφράζει καλύτερα την έννοια aspect στα ελληνικά ακόμη και σε λειτουργικό επίπεδο.

Continue reading “J2EE και Aspect Oriented Programming”

RESTfull Services in Spring 3 MVC

SpringSourceΤα τελευταία χρόνια, το έχει γίνει η ντε φάκτο εναλλακτική λύση αντί για τις SOAP / WSDL /WS αρχιτεκτονικές. Δε μπορούσε λοιπόν να μείνει απ’εξω από τη τελευταία έκδοση του Spring τη 3.0.

Έτσι λοιπόν κατασκεύασαν μια υλοποίηση για ‘RESTful’ Web services και application και τις ενσωμάτωσαν στο @Controller model του Spring MVC.

RESTful χαρακτηριστικά στο Spring MVC 3.0

URI Templates

Ένα από τα πολύ σημαντικά χαρακτηριστικά είναι τα uri templates.

Μέχρι τώρα ήταν σχετικά δύσκολο να έχεις friendly urls. Έπρεπε να χρησιμοποιήσεις url rewriting αρκετές «πατέντες» ή κάποιο ποιο εξειδικευμένο κομμάτι του framework που να σου δίνει flows και να μανατζάρει όλο αυτό το κομμάτι.

Continue reading “RESTfull Services in Spring 3 MVC”

J2EE URL rewrite

To mod_rewrite module του Apache web server πιθανόν το ξέρετε. Πόσες νύχτες έχουν κάποιοι από εμάς ξοδέψει για να το configure-άρουμε ξεσκαρτίζοντας ως και τα ποιο απίθανα forum (από Κορέα μέχρι Αργεντινή) για να χρησιμοποιήσουμε τις απεριόριστες δυνατότητες που έχει ως προς την επαναεγγραφή του URL on the fly στη δική μας περίπτωση.

Να όμως που υπάρχει και έκδοση του URL rewrite σε επίπεδο web application. Η συγκεκριμένη τεχνολογία λέγεται Url Rewriter Filter, ένα ελέυθερα διαθέσιμο προϊόν της Tuckey. Σε αυτό το άρθρο περιγράφω κάποια χαρακτηριστικά και κάποιες πρακτικές οδηγίες χρήσεως.

 

Continue reading “J2EE URL rewrite”

Χρησιμοποιώντας το XPath για να πάρουμε attributes

Μόνιμα έψαχνα τρόπο να πάρω την τιμή απο ένα attribute σε ένα xml αλλά κάθε φορά που το έβρισκα μετά ξέχναγα πως το είχα κάνει. Οπότε αποφάσισα επιτέλους να το γράψω κάπου 🙂

Έστω λοιπόν το XML παρακάτω

<messages>
 <note id="1821">
  <to>MpouMpoulina</to>
  <from>Kolokotronis</from>
  <heading>Reminder</heading>
  <body>Today we invade, ps bring food</body>
</note>
<note id="1940">
  <to>Metaxas</to>
  <from>People</from>
  <heading>Reminder</heading>
  <body>Today we say NO</body>
</note>
</messages>

Και θέλω να πάρω το id attribute στο πρώτο node, τότε γράφω το XPath query
[string( //note[1]/@id ) ] και παίρνω 1821