Latest Posts

Thursday, July 12, 2018

ΕΝΟΤΗΤΑ 5 – STRINGS ΣΤΗΝ JAVASCRIPT

Michalis Kassapoglou
Ένα String είναι μια σειρά από χαρακτήρες που όλοι μαζί ανήκουν στην ίδια λέξη ή έκφραση. Στην JavaScript, οτιδήποτε (γράμματα, αριθμούς, κτλ) βάλουμε ανάμεσα σε single quotes (‘ ’) ή σε double quotes (“ ”) θεωρείται να είναι string. Αυτό σημαίνει ότι ο αριθμός 1 μέσα σε double quotes (“1”) θεωρείται σαν ο χαρακτήρας 1 ή το string με τιμή “1”.

Με βάση τα προηγούμενα παραδείγματα που έχουμε τρέξει, έχετε ήδη καταλάβει ότι μπορούμε πάλι να χρησιμοποιήσουμε το typeof τελεστή για να βεβαιωθούμε για είδος του data που περιέχει μια μεταβλητή.






Εάν δεν βάλουμε τίποτα ανάμεσα στα quotes, το αποτέλεσμα είναι επίσης string.




Όπως ήδη ξέρετε, το σύμβολο της πρόσθεσης ( + ) εκτελεί την πράξη της πρόσθεσης ανάμεσα σε αριθμούς. Εάν όμως το χρησιμοποιήσετε ανάμεσα σε δύο ή περισσότερα string τότε αυτό που έχουμε δεν είναι πρόσθεση (που έτσι και αλλιώς είναι πρακτικά αδύνατον) αλλά το κόλλημα τους ενός string δίπλα στο άλλο που ονομάζεται concatenation. Δηλαδή σκεφτείτε ότι έχουμε μια μεταβλητή x1 = “Michail” και μια μεταβλητή x2 = “Kassapoglou”. Η πράξη x3 = x1 + x2 θα ισούται με ένα καινούργιο string “MichailKassapoglou”. Αν θέλετε να έχετε κενό ανάμεσα στις δύο λέξεις στο τελικό αποτέλεσμα τότε θα πρέπει να το ορίσεται στο τέλος της πρώτης μεταβλητής όπως “Michail ”.



 
Αυτός ο διπλός ρόλος του συν ( + ) τελεστή είναι η ρίζα πολλών προβλημάτων σε JavaScript κώδικα. Για αυτό καλό θα ήταν να κάνετε έναν έλεγχο πρώτα αν όλες οι τιμές που προσπαθείτε να προσθέσετε είναι όλες αριθμοί ή όλα string για να αποφύγετε απρόσμενα αποτελέσματα.

Ο λόγος που προτείνουμε το πιο πάνω έλεγχο είναι επειδή όταν η JavaScript δει ένα string που μοιάζει με αριθμό όπως π.χ “1” (όχι όμως γραμμένο με χαρακτήρες όπως “one) τότε το string 1 μετατρέπεται αυτόματα στον αριθμό 1 για όλες τις αριθμητικές πράξεις εκτός από την πρόσθεση (λόγο του διπλού ρόλου που έχει). Ένας γρήγορος τρόπος (αν και όχι τόσο προτεινόμενος) για γρήγορη μετατροπή μιας string τιμής σε πραγματικό αριθμό είναι ο πολλαπλασιασμός της τιμής string με τον αριθμό 1. Η αντίστροφη διαδικασία (δηλαδή μετατροπή ενός αριθμού σε string) γίνεται αν προσθέσουμε στον αριθμό ένα άδειο string – δηλαδή τα double quotes χωρίς τιμή μέσα.







 
Αν πάμε στο https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String όπου υπάρχει ένα υπέροχο documentation της JavaScript θα δούμε έναν πίνακα που περιέχει και μερικά ειδικά strings που χρησιμοποιούμε στον κώδικα μας.


Πριν κλείσουμε αυτή την ενότητα, θα αναφερθούμε και σε ένα καινούργιο χαρακτηριστικό που προστέθηκε με την ES6 και ονομάζεται template literals. Τα template literals επιτρέπουν μεταβλητές και πράξεις να ενσωματωθούν με το τελικό string που προσπαθούμε να δημιουργήσουμε. Πριν δείξουμε ένα παράδειγμα, πρέπει να αναφέρουμε το γεγονός ότι τα template literals πρέπει να περικλείονται από back-ticks ( ` ` ) τα οποία βρίσκονται επάνω αριστερά στο πληκτρολόγιο δίπλα από τον αριθμό 1. Τέλος, για να ενσωματώσουμε template literals μέσα στον κώδικα μας, πρέπει να χρησιμοποιήσουμε το σύμβολο του δολαρίου και άγκιστρα (${expression}).

Ας δούμε όμως ένα παράδειγμα, για να καταλάβουμε καλύτερα τα template literals.


 

Αν θέλετε να βρείτε περισσότερες πληροφορίες για τα template literals μπορείτε να πάτε στο https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals όπου θα βρείτε αρκετά παραδείγματα.

 
Μιχάλης Κασάπογλου
Michail.Kassapoglou

Tuesday, July 10, 2018

ΕΝΟΤΗΤΑ 4 – PRIMITIVE DATA TYPES – NUMBERS

Michalis Kassapoglou
Κάθε μεταβλητή που χρησιμοποιούμε στην JavaScript θα περιέχει δεδομένα που θα ανήκουν σε μια από τις πιο κάτω κατηγορίες:

1. Number: Σε αυτή την κατηγορία ανήκουν οι ακέραιοι αλλά και οι δεκαδικοί αριθμοί.
2. String: Αποτελείται από οποιαδήποτε αριθμό χαρακτήρων
3. Boolean: Οι μόνες πιθανές τιμές που μπορούμε να έχουμε είναι true ή false
4. Undefined: Όταν προσπαθούμε να διαβάσουμε μια μεταβλητή που δεν υπάρχει ή υπάρχει αλλά δεν έχουμε ορίσει μια αρχική τιμή, τότε το αποτέλεσμα είναι undefined.
5. Null: Αυτό είναι ένα ειδικό είδος στοιχείου που έχει αποκλειστικά και μόνο μια τιμή – null. Η διαφορά ανάμεσα με το undefined είναι ότι μια μεταβλητή που ισούται με null έχει αρχικοποιηθεί απλά η αρχική της τιμή είναι null. Θα δείξουμε την διαφορά λίγο πιο κάτω στα παραδείγματα που θα αναλύσουμε.

Κάθε άλλη τιμή που δεν ανήκει σε μια από τις πιο πάνω κατηγορίες σημαίνει ότι είναι αντικείμενο (object). Έχοντας λοιπόν την πιο πάνω θεωρία στο μυαλό μας, μπορούμε να μιλάμε για δύο μεγάλες κατηγορίες στην JavaScript:
a. Primitive (με τις 5 κατηγορίες που μόλις αναφέραμε)
β. Non-primitive (αντικείμενα – objects)

Σε αυτή την ενότητα θα δούμε μερικά παραδείγματα στα number primitives. Αλλά πριν φτάσουμε σε αυτό το σημείο, ας λύσουμε πρώτα μια άλλη απορία που ίσως ήδη σκέφτεστε – πως μπορώ να γνωρίζω τι είδος τιμής έχει μια μεταβλητή ή αλλιώς ποιο είναι το data type της μεταβλητής?

Η απάντηση έρχεται από έναν operator που ονομάζεται typeof και όταν το καλούμε επιστρέφει το όνομα της κατηγορίας στην οποία ανήκει η μεταβλητή. Οι πιθανές απαντήσεις που μπορούμε να πάρουμε από τον typeof τελεστή είναι οι ακόλουθες:
  • number
  • string
  • boolean
  • undefined
  • object
  • function

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



 
Παρατηρήστε ότι την δεύτερη φορά που αναθέσαμε την τιμή 1234 στην μεταβλητή a δεν χρειάστηκε να χρησιμοποιήσουμε την λέξη var μια και η μεταβλητή έχει ήδη οριστεί επίσημα μια φορά.

Φυσικά και οι αριθμοί εκτός από ακεραίους μπορεί να είναι και δεκαδικοί.



Αξίζει επίσης να σημειώσουμε το γεγονός ότι στην JavaScript μπορούμε να ορίσουμε και Octal όπως και hexadecimals αριθμούς. Όταν ο αριθμός ξεκινάει με μηδέν (π.χ. 0776) τότε αυτός θεωρείται octal αριθμός ενώ όταν ξεκινάει με 0X τότε θεωρείται hexadecimal. Το αποτέλεσμα όμως παραμένει number για τον typeof τελεστή. Επίσης έχουμε και δυαδικούς αριθμούς που με την έκδοση ES6 της JavaScript μπορούμε να προσθέσουμε 0B μπροστά από τον αριθμό (π.χ. 0B1111).

Υπάρχει μια ειδική τιμή που μπορεί να πάρει μια μεταβλητή που ονομάζεται Infinity. Το Infinity αντιπροσωπεύει έναν αριθμό που είναι πολύ μεγάλος σε μέγεθος και κατά συνέπεια αδυνατεί η JavaScript να τον χειριστεί. Ένας αριθμός με περισσότερα από 309 μηδενικά (η ψηφία) θα μας επιστρέψει Infinity όταν προσπαθήσουμε να το εκτυπώσουμε στην οθόνη μας ενώ στο typeof έλεγχο όπως δείχνει και το πιο κάτω παράδειγμα θα πάρουμε number σαν αποτέλεσμα που είναι σωστό γιατί το Infinity είναι κατά βάση αριθμός. Όπως επίσης θα πάρουμε Infinity όταν διαιρέσουμε οποιονδήποτε αριθμό με το μηδέν.




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



Όπως μόλις είδαμε, το Infinity είναι ένα είδος αριθμού. Όμως υπάρχει και ένα άλλος αποτέλεσμα που υπάρχει πιθανότητα να πάρουμε σαν αποτέλεσμα του typeof τελεστή και αυτό είναι το NaN (Not a Number). Παίρνουμε NaN σαν αποτέλεσμα όταν προσπαθούμε να κάνουμε αριθμητικές πράξεις αλλά η διαδικασία αποτυγχάνει όπως π.χ. όταν πολλαπλασιάζουμε τον αριθμό 10 με τον χαρακτήρα “a”.

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



Πριν κλείσουμε την ενότητα ας αναφερθούμε και σε δύο ακόμα μεθόδους που μας βοηθάνε να αξιολογήσουμε την τιμή μιας μεταβλητής: Number.isNaN( ) και Number.isInteger.

Number.isNaNαξιολογεί αν η τιμή μιας μεταβλητής είναι αριθμός ή όχι χωρίς να χρειαστεί να κάνει casting πριν τον έλεγχο όπως έκανε η πιο παλιά μέθοδο isNaN( ).

Number.isIntegerεπιστρέφει true εάν ο αριθμός δεν είναι το άπειρο και δεν περιέχει δεκαδικά ψηφία δηλαδή είναι καθαρά ακέραιος.

Ας δούμε ένα παράδειγμα που χρησιμοποιεί τις πιο πάνω μεθόδους




Μιχάλης Κασάπογλου

Thursday, July 5, 2018

ΕΝΟΤΗΤΑ 2 – ΠΩΣ ΝΑ ΜΕΤΑΦΕΡΟΥΜΕ ΑΡΧΕΙΑ ΜΕ ΤΟ APACHE CAMEL

Michalis Kassapoglou
Αν και υπάρχει αρκετή θεωρία και integration patterns στην οποία στηρίζεται το Apache Camel, θα μπορούσαμε για αρχή να δώσουμε ένα απλό παράδειγμα για το πόσο εύκολα μπορούμε να πραγματοποιήσουμε ορισμένες διενέργειες που κάτω από διαφορετικές συνθήκες θα έπρεπε να γράψουμε αρκετές γραμμές κώδικα.

Τα παραδείγματα που θα δείξουμε τώρα και σε μελλοντικές ενότητες στηρίζονται σε αυτά που βρίσκονται στο Camel in Action βιβλίο (https://github.com/camelinaction/camelinaction) αλλά θα τα τροποποιήσουμε έτσι ώστε να παίζουν στον Wildfly.

Το πιο απλό σενάριο που θα μπορούσαμε να αναπτύξουμε είναι η μεταφορά ενός αρχείου από έναν τοπικό φάκελο σε έναν άλλον φάκελο. Αργότερα θα δούμε και πιο προχωρημένες τεχνικές όπως το διάβασμα ενός αρχείου, την ανάλυση του, την πρόσθεση έξτρα στοιχείων σε αυτό και μετά την τελική μεταφορά του είτε σε ένα άλλο φάκελο είτε σε ένα JMS Queue. Για τώρα ας δούμε τα βήματα που χρειάζεται να ακολουθήσουμε για να δημιουργούμε τέτοιου είδους projects.

Όπως είπαμε στην προηγούμενη ενότητα, θα χρησιμοποιήσουμε το NetBeans για να παρουσιάσουμε τα παραδείγματα μας. Ακολουθούμε λοιπόν τα παρακάτω βήματα:


 
και πατάμε Next.

 
2. Στο search ψάχνουμε για wildfly-camel και επιλέγουμε την επιλογή wildfly-camel-archetype-cdi


 
πατάμε Next.

3. Στο τελικό παράθυρο, πατήστε Finish να δημιουργήσετε το project.




Βασικά αυτό που έχουμε καταφέρει είναι να δημιουργήσουμε με την βοήθεια του Maven ένα απλό αλλά ολοκληρωμένο web project που χρησιμοποιεί Apache Camel και τρέχει στον Wildfly. Επειδή όμως ο κώδικας που μας προσφέρει το project δεν είναι ακριβώς αυτό που θέλουμε πρέπει να κάνουμε μερικές αλλαγές. Πάμε λοιπόν να δούμε βήμα προς βήμα πως να αλλάξουμε το project μας για να εκτελέσει την μεταφορά αρχείων.

1. Για αρχή, ας κάνουμε δεξί κλικ επάνω στο project και ας επιλέξουμε rename για να δώσουμε ένα πιο κατάλληλο όνομα στο project μας.




2. Ανοίξτε το POM.xml αρχείο (βρίσκετε στο Project Files) και αλλάξτε το version.wildfly.camel σε 6.1.0 (είναι 6.0.0).




3. Διαγράψτε τα αρχεία MyServlet και MyBean από το πακέτο com.mycompany.mavenproject1





4. Τέλος σβήνουμε το κώδικα που υπάρχει μέσα στην μέθοδο configure( ) και γράφουμε το εξής:




Όπως καταλαβαίνετε η μόνη γραμμή που έπρεπε να προσθέσω για να πετύχω τον τελικό σκοπό του project ήταν ο απλός κώδικας from("file:E:\\testdata1").to("file:E:\\testdata2");
Φυσικά για να παίξει ο πιο πάνω κώδικας θα πρέπει να έχετε δημιουργήσει δύο φακέλους στον σκληρό σας δίσκο και να τους δηλώσετε μέσα στον κώδικα.

5. Κάνουμε δεξί κλικ επάνω στο project και επιλέγουμε clean and build. Αυτή η διαδικασία θα μας δημιουργήσει το απαραίτητο WAR αρχείο το οποίο θα κάνουμε deploy στον Wildfly. Το WAR αρχείο μπορείτε να το βρείτε στην διεύθυνση που δηλώνεται στο output.





6. Βρίσκουμε αυτό το αρχείο και το κάνουμε paste μέσα στο deployments φάκελο του Wildfly (Wildfly | standalone | deployments)





Ξεκινάμε τον Wildfly με την εξής εντολή:

standalone.bat -c standalone-full-camel.xml


Θα μπορούσατε να κάνετε και deploy το WAR αρχείο ενώ ο Wildfly τρέχει κάνοντας το απλά paste μέσα στο deployments φάκελο. Ο Wildfly θα το αναγνώριζε αμέσως.

Δημιουργήστε ένα απλό txt αρχείο και πετάξτε το μέσα στον πρώτο φάκελο. Αμέσως θα ενεργοποιηθεί το route του Camel και θα το μεταφέρει στον δεύτερο φάκελο. Αργότερα θα βάλουμε και απλά logs components στα routes για να μπορέσουμε να παρακολουθούμε το αποτέλεσμα και από την κονσόλα του Wildfly.

Από την πιο πάνω αντίδραση του προγράμματος, είναι εύκολο να καταλάβουμε ότι υπάρχει εσωτερικά στο Camel ένας routing μηχανισμός που, αφού επιλέξει σε ποιο μήνυμα θα ενεργήσει με βάση τα κριτήρια που έχουμε θέσει, ενεργοποιείται και πράττει επάνω σε αυτό. Ο μηχανισμός του Route είναι συνδυασμός δύο πραγμάτων: (α) μια domain-specific γλώσσα προγραμματισμού και (β) υλοποίηση συγκεκριμένων enterprise integration patterns.


Η Camel domain-specific language (DSL) προσφέρει την ευελιξία να γραφτεί χρησιμοποιώντας διάφορες γλώσσες προγραμματισμού όπως Java, Scala, κτλ. Ο κύριος σκοπός ύπαρξης της DSL είναι να μπορεί να ελευθερώνει τον προγραμματιστή από την γλώσσα προγραμματισμού (κάνοντας την πιο εύκολη στην σύνταξη) έτσι ώστε να μπορεί ο προγραμματιστής να συγκεντρωθεί στην πρακτική λύση του εκάστοτε προβλήματος που συνήθως είναι integration πρόβλημα. Όπως ήδη είδαμε στο παράδειγμα, με την Java και με απλές εντολές όπως from και to μπορέσαμε να ορίσουμε ένα ολοκληρωμένο route.

 
Τώρα για να καταλάβουμε λίγο καλύτερα τα Enterprise Integration Patterns (EIP), καλό θα ήταν ρίξουμε μια γρήγορη ματιά στο εξής site: http://www.enterpriseintegrationpatterns.com/. Αν κάνετε κλικ σε κάποιο από τα Patterns που προσφέρονται στην δεξιά στήλη της οθόνης, θα δείτε ένα διάγραμμα και μια μικρή θεωρία που το ακολουθεί (πχ. Το Message Translator)





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

Γυρνώντας πίσω στον κώδικα μας τώρα, θα προσέξουμε ότι το Camel προσφέρει CDI dependency injection framework έτσι ώστε να έχουμε την δυνατότητα να χρησιμοποιήσουμε Camel routes και να τα καλέσουμε μέσα από CDI beans. Για να μπορέσουμε να γράψουμε Camel Routes, χρειάζεται η κλάση μας να κληρονομεί (extends) από την RouteBuilder κλάση. Ο κώδικας μας θα γραφτεί μέσα στην μέθοδο configure( ) που είναι η μόνη μέθοδο που χρειάζεται να υλοποιηθεί.

Τέλος θα μπορούσαμε να δούμε την υλοποίηση του Camel Route με πιο γραφικό τρόπο που ονομάζεται hawtio κονσόλα και η οποία εγκαταστάθηκε αυτόματα όταν κάναμε unzip το Apache Camel μέσα στο φάκελο του Wildfly. Με τον Wildfly να τρέχει και το project να είναι ήδη deployed, πηγαίνετε στο εξής URL: http://localhost:8080/hawtio/login




Εδώ μας ζητάει τα στοιχεία με τα οποία είχαμε εγκαταστήσει τον Wildfly. Εγώ είχα χρησιμοποιήσει το όνομα μου και το password : welcome1.

Αφού μπείτε στο γραφικό περιβάλλον του hawtio αν κάνετε κλικ στα αριστερά επάνω στο route1 και μετά από στο route diagram θα μπορείτε να δείτε το route.





Θα επισκεφτούμε αυτή την κονσόλα αρκετές φορές στο μέλλον για να πάρουμε διάφορες πληροφορίες γύρω από τα routes των εφαρμογών μας.

Για τώρα νομίζω ότι καλύψαμε αρκετά θέματα σε αυτή την ενότητα. Από την επόμενη ενότητα θα προσπαθήσουμε να ενωθούμε σε ένα JMS Queue και να στείλουμε όπως και να λάβουμε μηνύματα από αυτό.

Μιχάλης Κασάπογλου



Sunday, July 1, 2018

ΕΝΟΤΗΤΑ 1 – ΕΓΚΑΤΑΣΤΑΣΗ APACHE CAMEL ΣΤΟΝ WILDFLY

Michalis Kassapoglou
Στην σημερινή εποχή που η πολυπλοκότητα των συστημάτων έχει αυξηθεί, ψάχνουμε συνεχώς εύκολους και εναλλακτικούς τρόπους σύνδεσής μεταξύ τους χωρίς να θυσιάσουμε την ταχύτητα ή την αξιοπιστία στην ποιότητα του αποτελέσματος. Μια τέτοια αξιόπιστη και αξιόλογη integration λύση είναι το Apache Camel framework.

Το Camel είναι ένα integration framework που έχει σαν στόχο την εύκολη σύνδεση μεταξύ διάφορων συστημάτων. Ο μηχανισμός που στηρίζει αυτή την λειτουργία ονομάζεται routing engine builder που μας επιτρέπει να δημιουργούμε routing rules χρησιμοποιώντας απλό κώδικα java. Με αυτούς τους κανόνες η εφαρμογή αποκτάει την δυνατότητα να δέχεται μηνύματα σε οποιοδήποτε μορφή, και αφού τα τροποποιήσει και τα επεξεργαστεί με βάση κάποια λογική που έχουμε προσθέσει εμείς, να τα στείλει σε έναν ή και περισσότερους τελικούς προορισμούς.

Η φήμη του Apache Camel στηρίζεται στο γεγονός ότι χρησιμοποιώντας το ίδιο API μπορεί να ενωθεί και να επικοινωνήσει με οποιαδήποτε σύστημα ανεξάρτητα από το πρωτόκολλο και το είδος των δεδομένων που χρησιμοποιούνται. Τουλάχιστον πάνω από 80 εγκαταστημένα πρωτόκολλα και είδη δεδομένων υποστηρίζονται από το Camel χωρίς να είναι αναγκαία επιπλέον συνδεσμολογία και μετατροπή δεδομένων.

Αν και προσφέρει τόσα πολλά πρέπει να μην ξεχνάμε ότι το Apache Camel είναι framework και όχι ESB. Ένα ESB επάνω στο οποίο θα μπορούσαμε να τρέξουμε ένα Apache Camel Application είναι το ServiceMix από την Apache (http://servicemix.apache.org/). Στο ServiceMix όμως θα πρέπει να γράψουμε και να πακετάρουμε τις εφαρμογές μας σε java OSGI. Η ανάγκη που είχαν οι προγραμματιστές να μπορούν να ενσωματώσουν Camel κώδικα σε Java EE εφαρμογές με την δυνατότητα να χρησιμοποιούνται όλα τα annotations τελικά έγινε πραγματικότητα. Το Wildfly-Camel project που ξεκίνησε εδώ και λίγο καιρό (βασικά είναι δύο χρόνια τώρα) μας προσφέρει την ευκολία να ενσωματώσουμε camel routes με τις Java EE εφαρμογές μας. Ας δούμε όμως τι χρειαζόμαστε για να μπορέσουμε να εκτελέσουμε τέτοιου είδους εφαρμογές.

Πάνω από όλα πρέπει να δούμε ποια είναι η τελευταία έκδοση του Wildfly-Camel και ποιον Wildfly Application Server υποστηρίζει. Αυτή την πληροφορία μπορούμε να την πάρουμε από εδώ: https://github.com/wildfly-extras/wildfly-camel/releases

 
Οπότε σαν πρώτο βήμα κατεβάζουμε το wildfly-camel-patch-6.1.0.tar.gz που περιέχει όλες τις βιβλιοθήκες του Camel.

Σαν δεύτερο βήμα, κατεβάζουμε τον Wildfly version 12. Αν και αυτή την στιγμή είναι διαθέσιμος και ο Wildfly 13 για να σιγουρευτούμε ότι δεν θα αντιμετωπίσουμε κάποιο πρόβλημα ας συμβατότητας ας παραμείνουμε στον Wildfly 12 (http://wildfly.org/downloads/)


Αποσυμπιέζουμε το zip αρχείο του Wildfly και ανοίγουμε μια cmd κονσόλα. Πηγαίνουμε στο bin φάκελο του wildfly και τρέχουμε την εντολή add-user.bat.




 

Στο εμφανιζόμενο μενού πατάμε Enter για να δεχτούμε την default τιμή που είναι Management User.


Για username μπορείτε να γράψετε ότι θέλετε αρκεί να μην το ξεχάσετε γιατί θα το χρειαστούμε αργότερα. Συνήθως γράφω το όνομα μου.


 
Για password μπορείτε να βάλετε κάτι απλό και εύκολο για να το θυμάστε. Συνήθως σε τεστ περιβάλλον δίνω το welcome1 και απαντάω yes στην ερώτηση αν θέλω να το χρησιμοποιήσω.


 
Αφού γράψετε άλλη μια φορά το password για επαλήθευση, απλά πατήστε Enter σε όλες τις επόμενες επιλογές και απαντήστε με “yes” μέχρι να ολοκληρωθεί η διαδικασία.

Τώρα που έχουμε τον Wildfly έτοιμο, μπορούμε να αποσυμπιέσουμε το wildfly-camel-patch-6.1.0.tar.gz αρχείο ενώ βρισκόμαστε μέσα στο root folder του Wildfly. 


 
Μετά το τέλος της αποσυμπίεσης θα παρατηρήσετε ότι έχει δημιουργηθεί ένα έξτρα αρχείο με το όνομα fusepatch ενώ πολλές άλλες έξτρα βιβλιοθήκες που έχουν σχέση με το Camel έχουν προστεθεί σε αυτές του Wildfly.

Για να ξεκινήσουμε τον wildfly με ενεργοποιημένο το Camel θα πρέπει να το τρέξουμε από το cmd από το bin directory με την εξής εντολή:
standalone.bat -c standalone-full-camel.xml


 
Σαν επιβεβαίωση της σωστής λειτουργίας, θα πρέπει το τελικό μήνυμα στην κονσόλα να λέει ότι ο server είναι started:


 
Για να το σταματήσουμε απλά πατάμε Ctrl + C. 


 
Για να γράψουμε Java EE εφαρμογές που περιέχουν Camel routes, θα πρέπει να έχουμε εγκαταστήσει την Java 8 στο σύστημα μας και ένα περιβάλλον ανάπτυξης εφαρμογών java. Στα δικά μου παραδείγματα θα χρησιμοποιήσω το Netbeans.

Τώρα που έχουμε το περιβάλλον μας έτοιμο, μπορούμε από την επόμενη φορά να αρχίζουμε να τρέχουμε διάφορες εφαρμογές Apache Camel στον Wildfly Application Server και να δημιουργήσουμε πολλά διαφορετικά είδη connections όπως JMS, Rest Services, JDBC, κτλ.

Μιχάλης Κασάπογλου