Ανάπτυξη επιχειρησιακών εφαρμογών Πρότυπα σχεδίασης, πλαίσια και ενδιάμεσο λογισμικό Ανδρέας Παπασαλούρος Τμήμα Μαθηματικών
Περίγραμμα Βασικές έννοιες Σχεδιαστικά πρότυπα Πλαίσια Σχεδίαση επιχειρησιακών εφαρμογών Ενδιάμεσο λογισμικό για επιχειρησιακές εφαρμογές: Η πλατφόρμα Java Enterprise Edition Μια μελέτη περίπτωσης
Σχεδιαστικά πρότυπα (design patterns) Σχεδιαστικές λύσεις οι οποίες παρατηρούνται επανειλημένα σε παρόμοια προβλήματα. Αρχικά προτάθηκαν από τον αρχιτέκτονα C. Alexander για το πεδίο της αρχιτεκτονικής. Ιδιαίτερα διαδεδομένη είναι η χρήση τους στο πεδίο της αντικειμενοστρεφούς σχεδίασης. Προάγουν την δημιουργία επαναχρησιμοποιήσιμου κώδικα Εμποδίζουν το πρόβλημα της “ανακάλυψης του τροχού.
Ένα παράδειγμα: Observer Σκοπός Δημιουργία μιας σχέσης ένα προς πολλά μεταξύ αντικειμένων έτσι όταν ένα αλλάζει, όλα τα αντικείμενα που εξαρτώνται από αυτό να ειδοποιούνται και να αλλάζουν αυτόματα. Επιτρέπει το συγχρονισμό αλληλεπιδρώντων αντικειμένων μέσω ενός μηχανισμού διάδοσης των αλλαγών
Observer Περιβάλλον Ένα σύνολο από αλληλεπιδρώντα αντικείμενα Πρόβλημα Η ενημέρωση των αντικειμένων για την αλλαγή της κατάστασης ενός από αυτά Λύση Ένα αντικείμενο (subject) καταγράφει και ενημερώνει τα υπόλοιπα που ενδιαφέρονται για την κατάστασή του (observers)
Observer: Δομή Subject attach() detach() notify() Observer > update() * observers * ConcreteObserver observerState update() ConcreteSubject subjectState getState() setState() subject for all o in observers { o.update() } observerState = subject.getState()
Observer: Λειτουργία s : ConcreteSubjecto1 : ConcreteObservero2 : ConcreteObserver setState() notify() update() getState() update() getState()
Observer: Παράδειγμα
Observer
Observer: Παράδειγμα abstract class GraphMode { //Mode of mouse functions int mode; //The list of the observers Vector modeListeners = new Vector(); void notify() { for (Enumeration e = modeListeners.elements();e.hasMoreElements();) { ModeListener listener= (ModeListener) e.nextElement(); listener.update(); } void addModeListener(ModeListener listener) { modeListeners.add(listener); }
Observer : Παράδειγμα class ConcreteCanvasMode extends CanvasMode { void setMode(int mode) { this.mode = mode; notifyListeners(); } int getMode() { return this.mode; }
Observer: Παράδειγμα public interface ModeListener { void update(); } public class GraphFrame extends JFrame implements ModeListener { GraphCanvas canvas; ConcreteCanvasMode mode; public GraphFrame() { canvas=new GraphCanvas(); mode=GraphCanvas.getMode(); mode.addModeListener(this); } public void update() { int mode = canvas.getMode(); }
Observer Συνέπειες Χαλαρή σύζευξη μεταξύ Subject και Observer Υποστήριξη της επικοινωνίας Μη αναμενόμενες ανανεώσεις (αρνητική) Γνωστές Χρήσεις Ενδεικτικά: Java Observable core API class, User interface frameworks: GEF (Eclipse), MVC (Smalltalk) Άλλες ονομασίες Dependents, Publish-Subscribe
Πλαίσια (frameworks) Ένα σύνολο από συνεργαζόμενες κλάσεις οι οποίες συνιστούν ένα επαναχρησιμοποιούμενο σχέδιο για μια συγκεκριμένη κατηγορία λογισμικού Παραδείγματα Graphics Editing Framework Spring Rails (Ruby)
Επιχειρησιακές εφαρμογές (enterprise applications) Εφαρμογές για τη διαχείριση δεδομένων σε εταιρείες, οργανισμούς Άλλη ονομασία: Πληροφοριακά συστήματα Παραδείγματα: συστήματα χρηματιστηριακών συναλλαγών τραπεζικά συστήματα Συστήματα διαχείρισης αποθηκών και ανεφοδιασμού Συστήματα ηλεκτρονικού εμπορίου (B2B και B2C)
Χαρακτηριστικά Ε.E. Διαχείριση μεγάλου όγκου δεδομένων Διαχείριση αποθηκευμένων (persistent) δεδομένων Ταυτόχρονη πρόσβαση στα δεδομένα (για ανάγνωση και καταχώρηση Πρόσβαση από ετερογενείς διασυνδέσεις χρήστη Web Κινητά τηλέφωνα Εφαρμογές desktop σε περιβάλλον τοπικού δικτύου
Απαιτήσεις Ε.E. (2) Ολοκλήρωση / διασύνδεση με άλλες επιχειρησιακές εφαρμογές Συστήματα άλλων οργανισμών Βάσεις δεδομένων Προϋπάρχοντα (legacy) συστήματα Σύνθετη επιχειρησιακή λογική Σύνθετο μοντέλο δεδομένων Λειτουργικές και μη λειτουργικές απαιτήσεις οι οποίες είναι πιθανό να μεταβάλλονται με το χρόνο
Προσεγγίσεις για την ανάπτυξη Ε. Ε. Αρχιτεκτονική δύο ζωνών (2-tier ή client-server) Αρχιτεκτονική τριών ζωνών (3-tier ή, γενικά, n-tier)
Αρχιτεκτονική δύο ζωνών Το στρώμα παρουσίασης περιέχει Την επιχειρησιακή λογική Τη διασύνδεση με τη βάση δεδομένων
Αρχιτεκτονική δύο ζωνών -2 Παραδείγματα: MS Windows Data Access Controls Frontpage Data Access Pages Πλεονεκτήματα Ευκολία Ταχύτητα στην ανάπτυξη
Προβλήματα της αρχιτεκτονικής δύο ζωνών Ισχυρή σύζευξη (tight coupling) μεταξύ κώδικα παρουσίασης (φόρμες) και επιχειρησιακής λογικής Ισχυρή σύζευξη μεταξύ υποσυστήματος παρουσίασης και του υποσυστήματος αποθήκευσης δεδομένων Πλεονασμός (επανάληψη) κώδικα σε ετερογενείς εφαρμογές πελάτη (π.χ. Web, mobile, desktop, command line) Δυσκολία διαχείρισης αλλαγών στην επιχειρησιακή λογική
Αρχιτεκτονική τριών ζωνών
Πλεονεκτήματα Ευκολία στη διαχείριση Δυνατότητα σύνδεσης ετερογενών εφαρμογών πελάτη (π.χ. εφαρμογές Windows, Web, mobile, κλπ) Πρόσβαση στην εφαρμογή μέσα από ένα ενιαίο API Μειονεκτήματα Μεγάλο μέγεθος εφαρμογής Η διαχείριση αντικειμένων της εφαρμογής στη μνήμη και συγχρονισμός τους με τη βάση δεδομένων έχουν υψηλό κόστος ανάπτυξης (ακόμη και με τη χρήση εξειδικευμένου λογισμικού)
Ε. Ε. : Αντικειμενοστρεφής σχεδίαση και σχεσιακές βάσεις δεδομένων Το αντικειμενοστρεφές σχέδιο ενός λογισμικού συστήματος απεικονίζεται άμεσα σε αντικειμενοστρεφείς γλώσσες προγραμματισμού (Java, C++, C#, κλπ) Στις επιχειρησιακές εφαρμογές είναι απαραίτητη η αποθήκευση των αντικειμένων σε βάσεις δεδομένων (persistent object storage) Η χρήση αντικειμενοστρεφών συστημάτων διαχείρισης βάσεων δεδομένων δεν αποτελεί λύση Έλλειψη ωριμότητας Ευρεία διάδοση σχεσιακών Συστημάτων Διαχείρισης Βάσεων Δεδομένων (Oracle, SQL Server, MySQL, PostgreSQL, κλπ)
Το πρόβλημα Πώς σχεδιάζουμε (και υλοποιούμε) μια εφαρμογή ώστε Να ικανοποιεί τις αρχές της αντικειμενοστρεφούς σχεδίασης Υποσύνολο των αντικειμένων του συστήματος να αποθηκεύονται σε υπάρχοντα σχεσιακά συστήματα βάσεων δεδομένων … με δεδομένο ότι τα δύο μοντέλα είναι εγγενώς διαφορετικά (Object-Relational Impedance Mismatch)
Οργάνωση της ζώνης επιχειρησιακής λογικής: Σχεδιαστικά πρότυπα Ορισμός κλάσεων που αντιστοιχούν σε μια (ή περισσότερες) κλήσεις προς τη βάση δεδομένων (Transaction Script) Ορισμός μιας κλάσης (και ενός αντικειμένου) για κάθε πίνακα στη βάση δεδομένων (Table Module) Ορισμός ενός πλήρους αντικειμενοστρεφούς μοντέλου των δεδομένων της εφαρμογής (Domain Model)
Transaction Script Κλάσεις που υλοποιούν τη λογική της εφαρμογής ως διαδικασίες που καλούν τη βάση δεδομένων Οι διαδικασίες αποτελούν μεθόδους της κλάσης Transaction Script Κάθε τέτοια μέθοδος ορίζει στην ουσία μια δοσοληψία (transaction) στο σύστημα Κατάλληλο για μικρές εφαρμογές
Table Module Κάθε κλάση αντιστοιχεί σε έναν πίνακα της βάσης Ένα μοναδικό αντικείμενο της κλάσης χρησιμοποιείται για την πρόσβαση σε όλα τα στοιχεία του πίνακα στη βάση Έτσι, ένα στιγμιότυπο (instance) μιας κλάσης Table Module αντιστοιχεί σε όλες τις γραμμές (rows) του αντίστοιχου πίνακα στη βάση Μια κλάση Table Module είτε παρέχει ένα μοναδικό στιγμιότυπο (singleton) είτε αποτελεί μια συλλογή από στατικές μεθόδους.
Παράδειγμα Table Module Για κάθε πίνακα στη βάση ορίζεται μια κλάση Table Module Δεν ορίζονται συσχετίσεις μεταξύ των κλάσεων, καθώς τα στιγμιότυπα των κλάσεων δεν αντιστοιχούν σε γραμμές του αντίστοιχου πίνακα
Domain Model Οι πίνακες της βάσης απεικονίζονται ως αντικείμενα στη μνήμη Κάθε στιγμιότυπο μιας κλάσης αντιστοιχεί σε μια γραμμή του αντίστοιχου πίνακα Πλεονεκτήματα του Domain Model είναι η φυσική αναπαράσταση των οντοτήτων του πεδίου εφαρμογής σε κλάσεις της εφαρμογής Κατανοητή σχεδίαση, ευανάγνωστος κώδικας, εύκολη συντήρηση του προγράμματος Προκύπτουν προβλήματα όπως: Ο συγχρονισμός των δεδομένων στη μνήμη και στο δίσκο Ο συγχρονισμός της ταυτόχρονης προσπέλασης των αντικειμένων από πολλούς πελάτες Διαχείριση δοσοληψιών (ACID transactions) Εξειδικευμένο λογισμικό είναι διαθέσιμο για την για την απεικόνιση αντικειμένων στη βάση δεδομένων και την αντιμετώπιση των παραπάνω προβλημάτων (Object/Relational Mapping tools) Ο απ’ ευθείας προγραμματισμός απεικόνισης αντικειμένων στη βάση είναι συνήθως ιδιαίτερα σύνθετος και δε συνίσταται.
Παράδειγμα Domain Model
Τεχνικές για την απεικόνιση κλάσεων σε πίνακες Table Data Gateway Αντικείμενο που ενσωματώνει την πρόσβαση σε έναν πίνακα της βάσης δεδομένων (μέσω μεθόδων Create, Read, Update, Delete – CRUD) Row Data Gateway Αντικείμενο που ενσωματώνει την πρόσβαση σε μια εγγραφή πίνακα (μέσω μεθόδων Insert, Update, Delete) Active Record Αντικείμενο που ενσωματώνει την πρόσβαση σε μια εγγραφή πίνακα καθώς και τη λογική της εφαρμογής που σχετίζεται με το συγκεκριμένο αντικείμενο Data Mapper Χρησιμοποιείται για την απεικόνιση κλάσεων σε πίνακες κυρίως όταν η σχέση μεταξύ τους δεν είναι ένα προς ένα.
Απεικόνιση διαγράμματος κλάσεων σε σχεσιακή βάση δεδομένων Απεικόνιση κλάσεων Απεικόνιση σχέσεων
Απεικόνιση κλάσεων Μια κλάση απεικονίζεται σε έναν πίνακα της σχεσιακής βάσης δεδομένων Κάθε χαρακτηριστικό της κλάσης απεικονίζεται σε ένα πεδίο του πίνακα Είναι δυνατόν περισσότερες από μια κλάσεις να απεικονιστούν στον ίδιο πίνακα
Απεικόνιση συσχέτισης ένα προς πολλά * *
Απεικόνιση συσχέτισης πολλά προς πολλά Ορίζεται ένας πίνακας συσχέτισης * * employees skills
Απεικόνιση κληρονομικότητας Κληρονομικότητα «συγκεκριμένου» πίνακα (Concrete Table Inheritance) αναπαράσταση μιας ιεραρχίας κλάσεων με ένα πίνακα για κάθε συγκεκριμένη κλάση Κληρονομικότητα απλού πίνακα (Single Table Inheritance) αναπαράσταση μιας ιεραρχίας κλάσεων με ένα πίνακα για όλες τις κλάσεις Κληρονομικότητα πίνακα κλάσεων (Class table Inheritance) αναπαράσταση μιας ιεραρχίας κλάσεων με ένα πίνακα για κάθε κλάση
Concrete Table Inheritance Εφαρμόζεται σε μια σχέση κληρονομικότητας μεταξύ μιας αφηρημένης κλάσης και συγκεκριμένων απογόνων της Ορίζεται ένας πίνακας ανά συγκεκριμένη κλάση
Concrete Table Inheritance: Παράδειγμα
Single Table Inheritance Στον πίνακα της βάσης ορίζεται ένα πεδίο που καθορίζει τον τύπο της εγγραφής Σε κάθε εγγραφή ενδέχεται να υπάρχουν πεδία που χρησιμοποιούνται μόνο από συγκεκριμένες υποκλάσεις με αποτέλεσμα τη σπατάλη χώρου
Single Table Inheritance: Παράδειγμα
Class Table Inheritance Ορίζεται σχέση ξένου κλειδιού μεταξύ των πινάκων που αντιστοιχούν στις κλάσεις με σχέση κληρονομικότας Για την πρόσβαση στα στοιχεία μιας κλάσης απαιτείται η προσπέλαση περισσότερων από ενός πινάκων στη βάση
Class Table Inheritance (παράδειγμα)
Διασύνδεση με βάσεις δεδομένων Βιβλιοθήκες κλάσεων που επιτρέπουν τη σύνδεση με βάσεις δεδομένων και εκτέλεση ερωτημάτων σε μορφή SQL μέσα από γλώσσες προγραμματισμού JDBC (Java) DAO, ADO.NET Άλλες (π.χ. σύνδεση PHP scripts με ΣΔΒΔ όπως PostgreSQL, MySQL, κλπ)
Παράδειγμα: JDBC import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; //... try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=some"); // Do something with the Connection //... } catch (SQLException ex) { // handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); //... MySQL Connector/J Documentation
Παράδειγμα: JDBC (συνέχ.) ResultSet rs = null; try { stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT foo FROM bar"); // or alternatively, if you don't know ahead of time that // the query will be a SELECT... if (stmt.execute("SELECT foo FROM bar")) { rs = stmt.getResultSet(); } // Now do something with the ResultSet.... } catch (SQLException sqe) { // it is a good idea to release }
Πλαίσια απεικόνισης O/R Τι προσφέρουν Διαφανή υποστήριξη «παραμενόντων αντικειμένων» (transparent persistence) Caching Διαχείριση δοσοληψιών (Transaction management) Τεχνικές Patterns που αναφέρθηκαν παράπάνω Εμπλουτισμός πηγαίου κώδικα και αντικειμενικού κώδικα Απεικόνιση με βάση την ανίχνευση τύπων σε χρόνο εκτέλεσης (reflection) και μετα-δεδομένα
Ένα παράδειγμα με το Hibernate Δύο κλάσεις του πεδίου εφαρμογής: Book Author Με σχέση πολλά προς πολλά.
Η κλάση Book package public class private Integer id; private String title; private String private Set authors = new HashSet (); private Date publicationDate; public Book() { } // standard getters/setters follow here... }
Η κλάση Author package public class private Integer id; private String name; public Author() { } // standard getters/setters follow here... }
Η κλάση Book Manager class BookManager { private void createAndStoreBook(String title, Date theDate) { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); Book aBook = new Book(); aBook.setTitle(“Introduction to Software Engineering”); //... session.save(theBook); tx.commit(); HibernateUtil.closeSession(); }
Πλαίσια απεικόνισης O/R Java TopLink (Oracle) JDO (Sun) Hibernate (RedHat).ΝΕΤ Object Spaces (MS Visual Studio) Deklarit Vanatec Άλλα Ruby on Rails Active Records Framework …
.NET O/R Mapping frameworks Object Spaces (MS Visual Studio) Deklarit Vanatec
Άλλες προσεγγίσεις Ψηφιδοστρεφείς (component based) τεχνολογίες J2EE Entity Beans COM+ components Οι παραπάνω προσεγγίσεις είναι δυνατόν να χρησιμοποιηθούν σε συνδυασμό με τα patterns που παρουσιάστηκαν
Τεχνολογικά χαρακτηριστικά Επ. Εφ. Κατανεμημένες – υποστήριξη από cluster αρχιτεκτονικές υλικού Ανάγκη για διαχείριση φορτίου (load balancing) Αυτόματη/διαφανής ανάκαμψη (fail-over) Διαχείριση δοσοληψιών (ιδιότητες ACID) Ασφάλεια Οργάνωση πόρων (resource pooling)
Ενδιάμεσο Λογισμικό (middleware) Τα παραπάνω χαρακτηριστικά καλύπτονται από κατάλληλες πλατφόρμες ενδιάμεσου λογισμικού (middleware) Κυριότερες πλατφόρμες: Java Enterprise Edition (Java EE).NET
Απεικόνιση της Java EE στην αρχιτεκτονική τριών ζωνών
Προδιαγραφές Web (ζώνης παρουσίασης Servlets (μικροϋπηρεσίες) web components ικανά για τη δημιουργία δυναμικού περιεχομένου για διάδραση μεταξύ πελάτη που βρίσκεται σε Web περιβάλλον και του κομματιού business logic της εφαρμογής που βρίσκεται στο server Java Server Pages – JSPs
EJB Enterprise Java Beans - EJBs (Επιχειρησιακά συστατικά λογισμικού) Η προδιαγραφή EJB αποτελεί τον πυρήνα της πλατφόρμας Java EE
Άλλες σχετικές τεχνολογίες και API Java Database Connectivity (JDBC) Java Naming and Directory Interface (JNDI) Java Message Service (JMS) Java Authentication and Authorization Service (JAAS) Remote Method Invocation (RMI) Java Transaction API
Διακομιστές εφαρμογών (application servers) Λογισμικό το οποίο υλοποιεί τις προδιαγραφές των υπηρεσιών της Java EE “An application server, in an n-tier architecture, is a server that hosts an API to expose business logic and business processes for use by third-party applications” [Wikipedia] Παραδείγματα: Jboss (Red Hat) Oracle OC4J (Oracle Corporation) Websphere (IBM)
Υποδοχείς (containers) - 1 Οντότητες λογισμικού οι οποίες εκτελούνται εντός των εξυπηρετητών (servers) και είναι υπεύθυνές, η κάθε μια για διαχείριση ειδικών τύπων συστατικών λογισμικού. Παρέχουν το περιβάλλον εκτέλεσης των συστατικών λογισμικού που ένας προγραμματιστής αναπτύσσει.
Τύποι υποδοχέων Υποδοχέας εφαρμογών (Application container) Φιλοξενεί αυτόνομες Java εφαρμογές (JVM) Υποδοχέας μικροεφαρμογών (Applet container) Παρέχει ένα περιβάλλον εκτέλεσης για μικροεφαρμογές (applets). (JVM) Υποδοχέας Ιστού (Web container) Φιλοξενεί web εφαρμογές Ιστού, όπως servlets και Java Server Pages (JSP) – Παράδειγμα: Apache Tomcat Υποδοχέας επιχειρησιακών εφαρμογών (Enterprise container) Φιλοξενεί EJB συστατικά λογισμικού
Υποδοχείς -3
Enterprise Java Beans Τ ριών ειδών συστατικά Session beans : προορίζονται για την υλοποίηση υπηρεσιών κα μεταφορά δεδομένων. Entity beans: ύλοποίηση αντικειμένων του πεδίου εφαρμογής (domain objects) και αποθήκευσή τους στη βάση Message-driven beans : έχουν σχεδιαστεί για να παρέχουν ασύγχρονή ανταλλαγή μηνυμάτων, δηλαδή ό καλών δεν περιμένει απάντηση κατά την κλήση μιας υπηρεσίας
Stateless Session EJBeans Ένα stateless session bean είναι φτιαγμένο για να φέρει εις πέρας, τους στόχους μιας λειτουργίας εντός του χρόνου μιας απλής μεθόδου. Τα stateless beans επιτρέπεται να υλοποιούν πολλές business λειτουργίες, άλλα κάθε μέθοδος δεν μπορεί να θεωρεί ότι κάποια άλλη είχε κληθεί πριν από αυτή.
Stateless Session EJBeans -2 Τα stateless session beans αποτελούνται από τα ακόλουθα στοιχεία: Τα business interfaces : τα οποία περιέχουν τις δηλώσεις των business μεθόδων οι οποίες πρέπει να είναι ορατές από τις εφαρμογές πελάτη. Από μια κλάση bean: η οποία περιέχει την υλοποίηση κάθε business μεθόδου που εκτελείται από αυτό.
Stateless Session EJBeans -3 Απομακρυσμένη και τοπική διασύνδεση (interface)
Παράδειγμα τοπικής διασύνδεσης
Παράδειγμα stateless session bean
Stateful Session Bean Προσφέρουν τη δυνατότητα για πολλαπλές κλήσεις σε μια υπηρεσία από τους πελάτες και να έχουν τη δυνατότητα κάθε κλήση τους να μπορεί να έχει πρόσβαση ή να μπορεί να αποκτήσει τα αποτελέσματα προηγούμενων κλήσεων. Η κάρτα αγοράς(shopping cart) μιας εφαρμογής οn-line αγορών(e-commerce).
Entity Beans Τα entity beans είναι αντιπροσωπεύουν μόνιμα δεδομένα (persistent). Επίσης επιτρέπουν διαμοιραζόμενη πρόσβαση, έχουν πρωτεύοντα κλειδιά, και μπορούν να λάβουν μέρος σε συσχετίσεις με άλλα entity beans. Απλές Java classes με κατάλληλες επισημάνσεις (annotations) Καλύνται μέσω session beans υλοποιούν την επιχειρησιακή λογική της εφαρμογής.
Παράδειγμα Entity Bean
Παράδειγμα: Μια εφαρμογή διαχείρισης μαθημάτων SchoolApp
SchoolApp: Διάγραμμα κλάσεων πεδίου εφαρμογής
SchoolApp: Σχεσιακό διάγραμμα
SchoolApp
Μειονεκτήματα Πολύπλοκες τεχνολογίες, σχετικά δύσκολες στην εκμάθηση Δεν είναι κατάλληλη για μικρές εφαρμογές. Διαρκώς εξελισσόμενη προδιαγραφή: Τρέχουσα προδιαγραφή: Java EE 5. Προηγούμενη: J2EE 1.4. Αντίστοιχη εξέλιξη στους application servers Απαιτείται διαρκής ενημέρωση Σχετικά μεγάλος αριθμός αρχείων ρυθμίσεων και μεταδεδομένων: Απαραίτητη η χρήση εξειδικευμένων εργαλείων ανάπτυξης
Εργαλεία ανάπτυξης NetBeans Eclipse (Eclipse IDE for Java EE Developers ) JDeveloper Χρησιμοποιεί τεχνικές UML modelling Model Driven Architecture (MDA) για την απλοποίηση της σχεδίασης/ ανάπτυξης.
Βιβλιογραφία Fowler, M., Patterns of Enterprise Application Architecture, Addison-Wesley, Hibernate Reference Documentation, Matthews, M., MySQL Connector/J Documentation