Διαθέτετε ήδη το λογισμικό σας, αλλά εξακολουθείτε να χρειάζεστε μια πιο αποτελεσματική μέθοδο για να επιτρέψετε στους τεχνικούς χρήστες σας να επεκτείνουν την πλατφόρμα.
Παρόλο που το OSGi είναι γνωστό στους περισσότερους προγραμματιστές Java, η ενσωμάτωσή του στο προϊόν σας μπορεί να φαίνεται τρομακτικό έργο. Η έλλειψη σαφήνειας σχετικά με την ακριβή λειτουργία του OSGi μπερδεύει περαιτέρω τον δρόμο προς τα εμπρός.
Σε αντίθεση με οτιδήποτε θα ήθελαν να πειραματιστούν, το OSGi αισθάνεται περισσότερο σαν να προσπαθεί να πλεύσει στην πλατιά θάλασσα σε πολλούς προγραμματιστές Java.
Αυτό το άρθρο θα σας παρουσιάσει το ανοιξιάτικο σεμινάριο OSGi Felix χρησιμοποιώντας ένα απλό πρόγραμμα και δείτε, τα πλεονεκτήματά του και άλλες σημαντικές λεπτομέρειες.
Τι είναι λοιπόν το OSGi;
Η δημιουργία και η διανομή μονάδων και στοιχείων καθίσταται δυνατή από το πλαίσιο Java που είναι γνωστό ως OSGi (Open Service Gateway Initiative).
Δίνει έμφαση στην ενθυλάκωση λειτουργιών και στη χαλαρή σύζευξη, η οποία προσφέρει πολλά πλεονεκτήματα στους προγραμματιστές, συμπεριλαμβανομένης της αρθρωτής λειτουργικότητας που είναι εύκολα μεταβιβάσιμη μεταξύ των πηγαίων κωδίκων και της δοκιμής που δεν χρειάζεται ατελείωτες εξαρτήσεις.
Πώς λειτουργεί το OSGi;
Ένα δυναμικό σύστημα στοιχείων για Java ορίζεται από ένα σύνολο προδιαγραφών που ονομάζονται OSGi. Αυτές οι προδιαγραφές επιτρέπουν μια προσέγγιση ανάπτυξης όπου μια εφαρμογή δημιουργείται από διάφορα μέρη και στη συνέχεια συσκευάζεται σε πακέτα.
Οι τοπικές υπηρεσίες και οι υπηρεσίες που βασίζονται σε δίκτυο χρησιμοποιούνται από αυτά τα στοιχεία για την επικοινωνία. Ο στόχος είναι να γίνει ο βασικός κώδικας του προγράμματος όσο πιο συμπαγής είναι εφικτός. Είναι δυνατή η υψηλή σύζευξη μεταξύ αυτού του κώδικα και πολλών στοιχείων.
Τα επαναχρησιμοποιήσιμα δομικά στοιχεία της εφαρμογής ονομάζονται εξαρτήματα. Σκεφτείτε λειτουργίες όπως ένα καλάθι αγορών για τον ιστότοπο ηλεκτρονικού εμπορίου σας ή μια εφαρμογή μισθοδοσίας για το σύστημα διαχείρισης προσωπικού σας.
Τα στοιχεία μπορούν να χρησιμοποιήσουν το OSGi για να κρύψουν τις υλοποιήσεις τους από άλλα στοιχεία και να τους παρέχουν μόνο τα απαραίτητα δεδομένα μέσω υπηρεσιών.
Αυτό εμποδίζει τα στοιχεία να αλλάζουν ακούσια δεδομένα στα οποία δεν θα έπρεπε να έχουν πρόσβαση και διαχειρίζεται τις εξαρτήσεις.
Όλες οι συνδέσεις μεταξύ στοιχείων σε μια εφαρμογή OSGi γίνονται μέσω υπηρεσιών σε έναν ιδανικό κόσμο. Ένα πακέτο Java περιέχει το API που έχει καθοριστεί για υπηρεσίες.
Η συνεργασία μεταξύ παρόχων υπηρεσιών και πελατών απαιτεί τη χρήση κλάσεων ή/και διεπαφών, που αποτελούν το API.
Όλα τα στοιχεία OSGi συσκευάζονται μαζί σε πακέτα, καθένα από τα οποία περιλαμβάνει τους πόρους που χρειάζονται για να λειτουργήσουν. Τα πακέτα είναι αρκετά ξεκάθαρα για το τι χρειάζονται από το περιβάλλον και τι είναι ικανά να κάνουν.
Oφέλη
- Οι εφαρμογές OSGi έχουν πρόσβαση σε εξωτερικά αποθετήρια δέσμης.
- Το πλαίσιο επιτρέπει τη σχεδίαση προσανατολισμένη στις υπηρεσίες σε επίπεδο μονάδας.
- Καθιστά δυνατή τη διαχείριση των εκδόσεων και των εξαρτήσεων των πακέτα εφαρμογών εκτός από την τυποποίηση και την ευκολότερη ενσωμάτωση βιβλιοθηκών τρίτων.
- Οι εφαρμογές είναι πιο προσαρμόσιμες στις μεταβαλλόμενες απαιτήσεις, πιο φορητές και πιο γρήγορες στον επανασχεδιασμό.
- A εφαρμογή ιστού μπορεί να αναπτυχθεί ως ομάδα πακέτα έκδοσης OSGi με δυναμική διάρκεια ζωής χάρη στην ενσωμάτωση του πλαισίου με το μοντέλο προγραμματισμού Java EE.
- Αντί να εγκατασταθεί ως βιβλιοθήκη τρίτου κατασκευαστή ως μέρος της εφαρμογής, το πλαίσιο παρέχει τη δηλωτική συναρμολόγηση και τη βελτιωμένη δοκιμή μονάδας του Spring Framework σε τυποποιημένη μορφή που παρέχεται ως μέρος του χρόνου εκτέλεσης διακομιστή εφαρμογών.
- Για εταιρικές εφαρμογές που αποτελούνται από διάφορα πακέτα έκδοσης με δυναμικούς κύκλους ζωής, το πλαίσιο προσφέρει απομόνωση.
- Περιέχει ένα ενσωματωμένο αποθετήριο πακέτου που μπορεί να αποθηκεύσει κοινόχρηστα κοινά και εκδομένα πακέτα που χρησιμοποιούνται από πολλές εφαρμογές, εμποδίζοντας κάθε εφαρμογή να αναπτύξει ένα ξεχωριστό αντίγραφο κάθε κοινόχρηστης βιβλιοθήκης.
Ξεκινώντας με το OSGi Felix Spring
Λήψη των πόρων
Κάνοντας λήψη της πιο πρόσφατης έκδοσης του Apache Karaf από Αυτός ο δικτυακός τόπος, μπορούμε να ξεκινήσουμε την περιπέτειά μας στο OSGi.
Με βάση το Apache Felix, την εφαρμογή Apache της προδιαγραφής OSGi, το Apache Karaf παρέχει μια πλατφόρμα για εφαρμογές που βασίζονται σε OSGi.
Το Karaf παρέχει διάφορες χρήσιμες λειτουργίες πάνω από το Felix που θα μας βοηθήσουν να εξοικειωθούμε με το OSGi, όπως μια διεπαφή γραμμής εντολών που θα μας επιτρέψει να επικοινωνήσουμε με την πλατφόρμα.
Σημείο εισόδου για πακέτα
Μια εφαρμογή πρέπει να συσκευαστεί ως πακέτο OSGi για να μπορέσει να εκτελεστεί σε περιβάλλον OSGi. Επιπλέον, πρέπει να καθοριστεί το σημείο εισόδου της αίτησης. δεν είναι η τυπική δημόσια συνάρτηση static void main(String[] args).
Ας ξεκινήσουμε λοιπόν δημιουργώντας ένα "Γεια σου κόσμο” εφαρμογή βασισμένη στο OSGi.
Ξεκινάμε καθιερώνοντας μια βασική εξάρτηση OSGi API:
Ο χρόνος εκτέλεσης OSGi θα έχει πρόσβαση στην εξάρτηση, επομένως το πακέτο δεν χρειάζεται να το περιέχει. Επομένως, επισημαίνεται ως παρεχόμενο.
Τώρα ας δημιουργήσουμε την απλή κλάση HelloWorld:
Οι κλάσεις που λειτουργούν ως σημεία εισόδου για πακέτα πρέπει να υλοποιούν τη διεπαφή BundleActivator που παρέχεται από το OSGi.
Όταν εκκινηθεί το πακέτο που περιέχει αυτήν την κλάση, η πλατφόρμα OSGi καλεί τη συνάρτηση start(). Από την άλλη πλευρά, λίγο πριν σταματήσει η δέσμη, καλείται η συνάρτηση stop().
Ας μην ξεχνάμε ότι κάθε πακέτο μπορεί να έχει μόνο ένα BundleActivator. Και οι δύο τρόποι μπορούν να επικοινωνούν με το χρόνο εκτέλεσης OSGi χρησιμοποιώντας το αντικείμενο BundleContext που δίνεται.
Δημιουργία δέσμης
Κάντε το pom.xml ένα πραγματικό πακέτο OSGi κάνοντας τις απαραίτητες αλλαγές.
Πρέπει πρώτα να εκφράσουμε ξεκάθαρα ότι στόχος μας είναι να δημιουργήσουμε ένα πακέτο.
Στη συνέχεια, χρησιμοποιούμε το maven-bundle-plugin για να συσκευάσουμε την κλάση HelloWorld ως πακέτο OSGi, χάρη στην κοινότητα του Apache Felix:
Οι τιμές των κεφαλίδων OSGi που θέλουμε να συμπεριλάβουμε στο αρχείο MANIFEST του πακέτου καθορίζονται στην ενότητα οδηγιών.
Το Bundle-Activator είναι πράγματι το κατάλληλο όνομα της λύσης BundleActivator που θα χρησιμοποιηθεί για την εκκίνηση και τη διακοπή της δέσμης. Είναι συμβατό με την τάξη που μόλις δημιουργήθηκε.
Αν και δεν είναι κεφαλίδα OSGi, η κεφαλίδα Private-Package δίνει εντολή στην προσθήκη να προσθέσει το πακέτο στη δέσμη, αλλά απλώς να μην το κάνει προσβάσιμο σε άλλα πρόσθετα. Η εντολή εγκατάστασης mvn θα πρέπει να χρησιμοποιηθεί για τη δημιουργία του πακέτου.
Εγκατάσταση και εκτέλεση του πακέτου
Ας ξεκινήσουμε το Karaf εκτελώντας αυτήν την εντολή:
όπου το "KARAF HOME" αναφέρεται στο φάκελο όπου εγκαταστάθηκε το Karaf. Μπορούμε να χρησιμοποιήσουμε την ακόλουθη εντολή για να εγκαταστήσουμε το πακέτο όταν εμφανιστεί η προτροπή της κονσόλας Karaf:
Η χρήση του τοπικού αποθετηρίου Maven είναι ο τρόπος με τον οποίο ο Karaf καλείται να φορτώσει το πακέτο.
Επιστρέφοντας το αριθμητικό αναγνωριστικό του πακέτου, ο Karaf το γράφει. Αυτό το αναγνωριστικό μπορεί να διαφέρει ανάλογα με το πόσα πακέτα έχουν εγκατασταθεί προηγουμένως. Το πακέτο έχει πλέον εγκατασταθεί με επιτυχία και η εντολή εκκίνησης είναι η εξής:
Τη στιγμή που ξεκινάτε το πακέτο, εμφανίζεται η ένδειξη "Hello World by Jay". Μπορούμε τώρα να σταματήσουμε και να αφαιρέσουμε το πακέτο χρησιμοποιώντας:
Η κονσόλα εμφανίζει "Goodbye World by Jay".
Συμπέρασμα
Οι προγραμματιστές μπορούν εύκολα να προσθέσουν νέες λειτουργίες σε μια υπάρχουσα διαδικτυακή εφαρμογή, διατηρώντας την ασφαλή και απομονωμένη από άλλα στοιχεία του κύριου προγράμματος χρησιμοποιώντας το OSGi.
Μάθαμε για το OSGi σε αυτήν την ανάρτηση, συμπεριλαμβανομένου του τρόπου λειτουργίας του, των πλεονεκτημάτων του και ενός απλού προγράμματος. Δεν είναι δύσκολο να ενσωματώσετε το OSGi στη δική σας εφαρμογή.
Καλή κωδικοποίηση!
Αφήστε μια απάντηση