Feb 17, 2007

Σύνδεση ADF Swing σε απομακρυσμένα (remote) ADF Business Components

Η συντριπτική πλειονότητα των άρθρων, παραδειγμάτων και how-tos για τον JDeveloper (http://otn.oracle.com/products/jdev) αναφέρονται στην ανάπτυξη εφαρμογών για το διαδίκτυο. Δεν θα πρέπει να αγνοεί κανείς όμως, πως υπάρχουν περιπτώσεις που οι ανάγκες επιβάλλουν την κατασκευή εφαρμογών που τρέχουν σε συγκεκριμένους clients, ενδεχόμενα χωρίς την ύπαρξη Application Server (πράγμα που σημαίνει πως ο επιχειρηματικός κώδικας βρίσκεται στον client), διαθέτοντας ένα πλούσιο user interface που προσομοιάζει τις παραδοσιακές εφαρμογές που εκτελούνται σε ένα Windows desktop. Οι βιβλιοθήκες Swing της Java καθώς και το συνοδευόμενο πλαίσιο ανάπτυξης μας επιτρέπουν την δόμηση τέτοιου είδους εφαρμογών, ενώ με το πρόγραμμα Java Web Start που παραδίδεται με κάθε JRE επιτυγχάνεται η κεντρική διαχείριση των εφαρμογών: με την εκκίνηση της εφαρμογής από το desktop, γίνεται σύνδεση με έναν τοπικό Web Server προκειμένου να εξακριβωθεί αν υπάρχουν νεώτερες εκδόσεις. Σε περίπτωση που κάτι τέτοιο συμβαίνει, η εφαρμογή γίνεται download τοπικά, αποθηκεύεται για μελλοντική χρήση και τελικά εκτελείται.

Σε μικρότερο ή μεγαλύτερο βαθμό, η κατασκευή αυτού του τύπου των εφαρμογών είναι τεκμηριωμένη καθώς κάνοντας αναζήτηση στο διαδίκτυο υπάρχουν άφθονα παραδείγματα για Java Swing εφαρμογές. Αυτό που έχει όμως ενδιαφέρον είναι η σύνδεση των Swing με το Oracle ADF. Πώς δηλαδή θα παρουσιάζονται ADF στοιχεία στις φόρμες Swing. Προχωρώντας σε μια διαφοροποίηση της αρχιτεκτονικής, θα αναφερθώ σε μια τοπολογία όπου τα Business Components έχουν γίνει deploy σε έναν Application Server, βρίσκονται δηλαδή κεντρικά και δεν εκτελούνται απευθείας στον client. Εναλλακτικά θα μπορούσε να συμβαίνει και το τελευταίο, αλλά υπάρχουν περιπτώσεις που θα θέλαμε πρόσβαση στο ίδιο business module είτε από web περιβάλλον είτε από client/server οπότε η διάθεση του μέσω ενός εννιαίου Application Server είναι επιβεβλημένη.

Ας ξεκινήσουμε την κατασκευή φτιάχνοντας πρώτα από όλα τα Business Components. Αφότου έχουμε τελειώσει με αυτό, επιλέγουμε το Application Module μας και μετά "Business Component Deployment"

Σε αυτό το σημείο φροντίζουμε να επιλέξουμε 'EJB Session Beans" ώστε η επιχειρηματική λογική των ADF BC να εκτελεστεί στον Application Server και οι clients να συνδέονται σε αυτόν για εξυπηρέτηση.

Στο επόμενο βήμα ορίζουμε τον Application Server στον οποίο θα αποθηκευτούν τα Business Components

ενώ στο τέλος δηλώνουμε το Application Module που πρόκειται να εξαχθεί ως EJB:

Έπειτα από όλη αυτή τη διαδικασία, το deployment στον Application Server πραγματοποιείται κάνοντας δεξί click στο EJB deployment profile που έχει δημιουργηθεί. Οποιαδήποτε αλλαγή στο μέλλον στα Business Components θα χρειαστεί αυτή την ενέργεια για να ενεργοποιηθεί στον Application Server.

Έτσι, ολοκληρώσαμε την ανάπτυξη του back-end της εφαρμογής. Για τη δημιουργία του user interface, δημιουργούμε ένα νέο project και από τις επιλογές του New Gallery διαλέγουμε την ADF Swing-->Form που θα μας κατασκευάσει μια πρότυπη φόρμα για κάποιο View των ADF BC. Στο βήμα 3 θα μας ζητηθεί το Application Module πάνω στο οποίο θα γίνει το data binding.

Σε αυτό το σημείο, κάνουμε click στο κουμπί "New" και επιλέγουμε το Business Component project μας. Ιδιαίτερη προσοχή πρέπει να δώσουμε ώστε στην επιλογή Configuration να δώσουμε το όνομα του configuration του Oracle Application Server (το configuration Local αναφέρεται στο όταν BC και UI τρέχουν στο ίδιο JVM, ενώ το embededAS στο OC4J που έρχεται μαζί με τον JDeveloper. Παίρνουμε την τρίτη επιλογή - AS)

Κατόπιν αυτού διαλέγουμε το BC View που μας ενδιαφέρει και τα attributes που θα εμφανιστούν. Σε όλες τις επόμενες οθόνες αρκεί να πατήσουμε "Next".

To ADF Swing περιβάλλον ανάπτυξης είναι ανάλογο αυτού του Web, επιτρέποντας το drag-and-drop ADF στοιχείων και την εμφάνισή τους με πολλαπλούς τρόπους σε μια φόρμα. Ας σημειωθεί πως η εφαρμογή μπορεί να δοκιμαστεί άμεσα επιλέγοντας μια φόρμα (Java Frame) και διαλέγοντας "Run'.

Αφότου αναπτύξουμε και τις οθόνες μας, το τελικό στάδιο είναι η διάθεση της εφαρμογής μέσω του Application Server. Προτού ξεκινήσουμε αυτή τη διαδικασία, ας σιγουρευτούμε πως έχουμε στη διάθεση μας ένα κλειδί που έχει παραχθεί από το keytool διότι η εκτέλεση φορμών ή applets απαιτεί το παραγόμενο JAR να είναι signed. Έπειτα διαλέγουμε την επιλογή "Java Web Start Files for ADF Swing" για το project μας (κάνοντας δεξί click πάνω του). Στις επόμενες οθόνες του wizard μπορούμε να συμπληρώσουμε κάποια γενικά στοιχεία για την εφαρμογή (όνομα, κατασκευαστής) καθώς επίσης και τον τρόπο εκτέλεσης της, αν δηλαδή θα εκτελείται απευθείας στο desktop ή διαμέσου ενός browser (applet)

O JDeveloper δημιουργεί για λογαριασμό μας όλα τα απαραίτητα αρχεία για το deployment. Για να είναι επιτυχημένο αυτό, χρειάζεται:
  1. Σημαντική υπόδειξη: είναι απαραίτητο στο client PC, το αρχείο javaws.policy να περιέχει τη δήλωση: grant { permission java.security.AllPermission; };
  2. Να γίνει rebuild το Swing project
  3. Να γίνει δήλωση στο παραγόμενο αρχείο ctbuild.xml των κλειδιών για το signing των βιβλιοθηκών
  4. Να εκτελεστεί το ANT αρχείο ctbuild.xml διαλέγοντας τον στόχο "sign" (που είναι default)
  5. Να γίνει deploy στον Application Server το deployment profile client_war.deploy. Αυτό θα περιλάβει τις βιβλιοθήκες του βήματος 4. Σε αυτό το σημείο δηλώνεται το virtual root που μπορεί να χρησιμοποιηθεί για πρόσβαση στην εφαρμογή
  6. Χρησιμοποιώντας την προηγούμενη πληροφορία μπορούμε να δοκιμάσουμε το deployment από έναν browser στο URL: http://{app_server}:{port}/{virtual_root}/oc4j.html
  7. Κάνουμε click στο link του launch και επιλέγουμε ο browser μας να ανοίξει το αρχείο με το πρόγραμμα javaws

Αυτό ήταν! Η πρώτη οθόνη της εφαρμογής θα εμφανιστεί αμέσως αργότερα.

Κλείνοντας, αν θελήσουμε η πρόσβαση στην εφαρμογή να γίνεται απευθείας από ένα εικονίδιο στην επιφάνεια εργασίας του χρήστη, τότε απλά εκτελούμε την εντολή "javaws {launch_url}" όπου launch_url είναι αυτό της μορφής http://{app_server}:{port}/{virtual_root}/oc4j.jsp Από την κονσόλα του Java Web Start είναι δυνατή η διαχείριση όλων των Java desktop εφαρμογών.

6 comments:

Ανθή said...

Καλησπέρα,

Θα ήθελα να σας ρωτήσω κάτι για Oracle / Java / Forms. Αν και δεν σχετίζεται με το παρόν post σας, ίσως γνωρίζετε να με βοηθήσετε.

Προσπαθώ να κάνω import java classes σε Oracle Forms 6i.

Χρησιμοποιώ την επιλογή Import Java Classes, που δίνει ο Forms Builder. Μου ανοίγει έναν κατάλογο με τα java classes που είναι στο classpath μου. Παρα ταύτα, όποιο από αυτά και να διαλέξω, μου απαντάει με μήνυμα λάθους

Importing Class Main...
Exception occurred: java.lang.UnsupportedClassVersionError: Main (Unsupported major.minor version 49.0)


Έχω δοκιμάσει να κάνω re-compile τα classes μου με διαφορετικό jdk, αλλά το λάθος φαίνεται να επιμένει.

Meanwhile θα ήθελα να χρησιμοποιήσω Java 5, ή ακόμα καλύτερα 6. Γίνεται? Αν όχι, σε ποιο jdk πρέπει να γυρίσω?

Σας ευχαριστώ πάρα πολύ!

Stavros said...

Ανθή,
Τα Oracle Forms 6i απαιτούν JDK 1.2.2. Προσπάθησε να κάνεις compile την κλάση σου σε αυτό το περιβάλλον και φρόντισε ώστε το location του JRE να συμπεριλαβάνεται στο PATΗ και στο FORMS60_PATH.

Σχετικά τώρα με τις εκδόσεις της Java που μπορούν να χρησιμοποιηθούν με τα Oracle Forms ισχύουν τα εξής:

Forms 6i --> JDK 1.2.2
Forms 9i, 10g --> JDK 1.3, 1.4

Αν θέλεις να χρησιμοποιήσεις αντικειμένα κατασκευασμένα με JDK 1.4/1.5 θα πρέπει να αντικαταστήσεις τον Oracle JInitiator me to Sun Java Plugin.
(Σχετικά άρθρά/κείμενα: http://fdegrelle.over-blog.com/article-4135746.html,
http://www.oracle.com/technology/products/forms/pdf/10gR2/forms1012faq.pdf)

Καλή συνέχεια.

Ανθή said...

Σταύρο σε ευχαριστώ πάρα πολύ!

Χάρη στην βοήθειά σου κατάφερα να κάνω import τα classes μου.

Γράφεις
Forms 9i, 10g --> JDK 1.3, 1.4

Τελικά και τα 2 forms versions παίζουν με JDK 1.4? Αναρωτιέμαι πόσο θα περιμένουμε για να δούμε forms να συνεργάζονται με 1.5 και 1.6 :-)

Και πάλι ευχαριστώ πολύ,
Ανθή

Stavros said...

Ανθή,

Καταρχάς χαίρομαι για την τελική έκβαση του θέματος..

Επιπλέον ήθελα να σε ενημερώσω ότι θεωρητικά τα Forms 9i υποστηρίζουν το JDK 1.4.2 και μάλιστα υπάρχει upgrade document στη διεύθυνση http://www.oracle.com/technology/products/forms/pdf/forms_jdk141.pdf .
Σε σχέση τώρα με την υποστήριξη του JDK 5 και ιδιαίτερα του JDK 6 φοβάμαι ότι θα πρέπει όλοι να περιμένουμε την νέα έκδοση Forms που θα συμπεριληφθεί στην major Release 11 του Oracle Application Server η οποία αναμένεται προς το τέλος του ημερολογιακού έτους 2007 - αρχές 2008. Μέχρι τότε και αφού οι ανησυχίες σου είναι συναφείς με τόσο σύγχρονη τεχνολογία θα σου σύστηνα να πειραματιστείς με τον JDeveloper 10g και το ADF. Πίστεψέ με, αξίζει τον κόπο και ιδιαίτερα τον χρόνο!

Φιλικά,

Σταύρος.

Ανθή said...

Χμ, φοβάμαι λίγο τα ADF, μήπως είναι από αυτές τις τεχνολογίες που ανθούνε για λίγο καιρό και μετά εξαφανίζονται (πχ εκείνο το plsql package της oracle που σου έβγαζε html.. δεν το ξαναείδα ποτέ).

Ξέρω^Η^Η^Η^Η Υποθέτω πως ο Σεραφείμ είναι υπερ, ε?

Εσύ Σταύρο? Τα χρησιμοποιείτε?

thanx^2!

Serafeim Karapatis said...

Πολύ συνοπτικά θα παρατηρούσα πως η ανάπτυξη λογισμικού στον κόσμο της Java, ειδικά για το web, έχει απλοποιηθεί αρκετά, με την εισαγωγή των Java Server Faces και των EJB 3.0. Το ADF στοχεύει στην πιο παραγωγική αξιοποίηση αυτών των προτύπων και βρίσκεται στην αγορά εδώ και 3 και πλέον χρόνια (άρα όχι ένα στοίχημα εφήμερο) και χρησιμοποιείται ευρύτατα τόσο από την Oracle εσωτερικά όσο και από πελάτες και συνεργάτες της που βρίσκουν οφέλη σε αυτή την μεθοδολογία ανάπτυξης εφαρμογών, βασισμένο σε ανοικτά πρότυπα, τώρα και στο μέλλον.

Για περισσότερες πληροφορίες:
http://www.oracle.com/technology/products/jdev/collateral/papers/10131/jdeveloper_adf_sod.pdf