Aug 25, 2014

Άμεση δοκιμή Web Services στον JDeveloper

Ο JDeveloper διαθέτει εδώ και πολύ καιρό ισχυρές δυνατότητες για την δημιουργία clients σε SOAP Web Services και από την έκδοση 12c και για REST. Μια άγνωστη, μικρή λειτουργία είναι το ότι μπορούμε άμεσα να ελέγξουμε ένα SOAP, REST ή HTTP Web Service, χωρίς να έχουμε κατασκευάσει ένα proxy client, κάτι που φυσικά κάνουν και πιο οργανωμένα εργαλεία όπως το SoapUI.

Αν ανατρέξουμε στο μενού Tools-->HTTP Analyzer, μπορούμε να δημιουργήσουμε μια νέα αίτηση για το είδος του Web Service που μας ενδιαφέρει.
O JDeveloper θα αναλάβει να διαβάσει το σχήμα των δεδομένων (WSDL, WADL) που θα του προσδιορίσουμε και έτσι θα προκατασκευάσει ένα δοκιμαστικό μήνυμα.
Φυσικά παρέχεται full trace για το μήνυμα που στάλθηκε καθώς και επηρεασμός HTTP headers, security credentials, κλπ, πράγμα που είναι πολύ χρήσιμο για έναν γρήγορο έλεγχο μιας υπηρεσίας είτε ενός SOA composite.

Aug 13, 2014

lxc virtualization και docker practices

Έχει περάσει ακριβώς ένας χρόνος από το πρώτο μου άρθρο για τους Linux containers και στο διάστημα που έχει μεσολαβήσει αυτή η λύση για lightweight virtualization έχει γίνει πιο ώριμη και εγώ ταυτόχρονα έχω αποκτήσει περισσότερη εμπειρία στην χρήση του. Το lxc:

  • έχει φθάσει αισίως σε μια σταθερή έκδοση (1.0.5 αυτή την στιγμή στο Ubuntu 14.04)
  • απαιτεί λιγότερες ρυθμίσεις σε σχέση με έναν χρόνο πίσω ενώ υποστηρίζει και containers χωρίς root δικαιώματα (unprivileged)
  • εξακολουθεί να τρέχει δίχως πρόβλημα τα βασικά προϊόντα τεχνολογίας της Oracle (όπως Database XE/11g/12c, SOA Suite 11g/12c) διαμέσου του πιστοποιημένου Oracle Enterprise Linux (OEL - ως virtual machine template)
  • αποτελεί την βάση της τεχνολογίας για το αναδυόμενο προϊόν του docker που προσπαθεί να οδηγήσει σε τυποποίηση την κατασκευή, παράδοση και συντήρηση lightweight virtual machines
Είχα την ευκαιρία να δουλέψω λίγο το docker και είναι πολύ ενθαρρυντικός ο αριθμός των δυνατοτήτων που ενσωματώνονται πολύ γρήγορα σε αυτό. Ωστόσο, από άποψη παραμετροποίησης το lxc, κατά την γνώμη μου, διαθέτει εκ φύσεως περισσότερες δυνατότητες (πχ διαμοιρασμός συστήματος αρχείων, port forwarding, κ.α.) Επιπλέον, το docker δεν υποστηρίζει ακόμα δυναμικές μνήμες (file system /dev/shm) που είναι προαπαιτούμενο για την εγκατάσταση του Oracle Database Server, αλλά ούτε υπάρχει το Oracle Enterprise Linux στα αποθετήρια του (αν και ένα κόλπο είναι να μετατρέψουμε ένα CentOS σε OEL)

Από την άλλη μεριά, υπάρχει πλήθος από εξαιρετικές ιδέες στο docker, που είναι άμεσα εφαρμόσιμες σε μια τυπική εγκατάσταση lxc. Μια από αυτές είναι η χρήση ενός layered file system. Έτσι μπορούμε να χρησιμοποιήσουμε ένα base template image (πχ OEL 6.5) στο οποίο θα προσθέσουμε τα πακέτα που μας ενδιαφέρουν, και το οποίο στην συνέχεια θα χρησιμοποιήσουμε ως βάση για την παραγωγή virtual machines, που όμως θα περιλαμβάνουν μόνο τις διαφορές (σε επίπεδο αρχείων) από το template image. Η υποδομή που υλοποιείται αυτή η ιδέα στο docker βρίσκεται στο file system aufs και την ίδια θα χρησιμοποιήσω και στο lxc για την κατασκευή ενός template image βασισμένο στο OEL 6.5. Έπειτα, σύμφωνα με τις ανάγκες, μπορώ να φτιάξω ακαριαία, μια καινούργια εικονική μηχανή βασισμένη στο template. Τα δεδομένα και οι παραμετροποιήσεις της νέας μηχανής αποθηκεύονται σε ξεχωριστό αποθηκευτικό χώρο. Οποιεσδήποτε αλλαγές στο template (πχ προσθήκη νέων προγραμμάτων) είναι αυτόματα ορατές και σε όλα τα virtual machines που το χρησιμοποιούν. Η ιδέα για την εφαρμογή αυτής της υλοποίησης προήλθε από αυτό το post και συμπυκνώνεται στην εικόνα:

Ας φτιάξουμε λοιπόν μια νέα μηχανή βασισμένη στο Oracle Enterprise Linux (πχ orabase):

sudo lxc-create -n orabase -t oracle

Μόλις τελειώσει αυτή η διαδικασία, πρέπει να εγκαταστήσουμε όλα τα πακέτα που χρειάζεται ο Oracle Database Server 11g/12c, που καλύπτουν και τις ανάγκες του Oracle Fusion Middleware. H λίστα αυτών των πακέτων προκύπτει από αυτήν την εντολή (το lxc δεν επιτρέπει την εγκατάσταση του Oracle unbreakable kernel, οπότε θα χρησιμοποιήσουμε την ακόλουθη εντολή για να πάρουμε απλά την λίστα των προγραμμάτων):

yum install oracle-rdbms-server-11gR2-preinstall --skip-broken

Σε αυτό το oracle base template, θα προσθέσουμε και μερικά πολύ βασικά εργαλεία διαχείριση και δυνατότητες ssh και X, απλά με μια εντολή:

yum install xauth bc unzip libXtst.* xdpyinfo openssh-clients libXext.i686 mlocate tar gcc kernel-devel make ncurses-devel wget telnet perl sudo

Ο χρήστης της εγκατάστασης όλου του λογισμικού της Oracle θα είναι ο "oracle" οπότε ας τον προετοιμάσουμε στο template για όλες τις μετέπειτα μηχανές:

/usr/sbin/groupadd dba
/usr/sbin/groupadd oinstall
/usr/sbin/useradd -g oinstall -G dba oracle
Έχουμε τελειώσει με το base image! Ας δούμε τώρα πώς θα φτιάξουμε τις επόμενες μηχανές. Ο κατάλογος που βρίσκονται οι containers στο Ubuntu είναι ο /var/lib/lxc.  Για να φτιάξουμε έναν νέο container (πχ oradb) θα του υποδείξουμε έναν κατάλογο όπου θα αποθηκεύονται τα ιδιωτικά του αρχεία (πχ /var/lib/lxc/oradb) που θα συγχωνεύονται μέσω του aufs με το template σε ένα άλλο σημείο (πχ /var/lib/lxc/oradb-aufs) που θα έχει την ολιστική εικόνα για το file system.

sudo mkdir -p /var/lib/lxc/oradb/rootfs /var/lib/lxc/oradb-aufs
sudo mount -t aufs -o br=/var/lib/lxc/oradb/rootfs:/var/lib/lxc/orabase/rootfs none /var/lib/lxc/oradb-aufs
sudo cp /var/lib/lxc/orabase/config /var/lib/lxc/oradb

Κάνουμε τώρα επεξεργασία το config αρχείου της εικονικής μας μηχανής oradb (/var/lib/lxc/oradb/config) ώστε να διαβάζει από το ενοποιημένο σύστημα αρχείων και να έχει αλλαγμένο όνομα:

lxc.rootfs = /var/lib/lxc/oradb-aufs
lxc.utsname = oradb

Αυτό ήταν. Μόλις ξεκινήσουμε την εικονική μηχανή μας (oradb) θα διαβάσει το λειτουργικό σύστημα από το template ενώ οποιοδήποτε αρχείο αλλάξουμε, θα αποθηκευτεί στο δικό της κατάλογο. Για παράδειγμα, αν θέλουμε να ορίσουμε μια στατική διεύθυνση για την νέα μας μηχανή, θα κάνουμε τις εξής ενέργειες:

1) Επεξεργασία του /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=oradb
GATEWAY=10.0.3.1

2) Επεξεργασία του /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.3.12
NETMASK=255.255.255.0
DHCPCLASS=
ONBOOT=yes

3) Αλλαγή του /etc/hosts
127.0.0.1 localhost oradb

Αν δούμε τώρα τα περιεχόμενα του καταλόγου /var/lib/lxc/oradb θα μοιάζουν ως εξής. Θα περιλαμβάνονται μόνο τα νέα ή αλλαγμένα αρχεία σε σχέση με το template.

Aug 8, 2014

Μετατροπή αρχείων video μέσω του Firefox

Πριν λίγο καιρό χρειάστηκε να αποθηκεύσω και να παρακολουθήσω ένα video, κωδικοποιημένο σε μορφή .mov. Το μέγεθος του αρχείου για 30 λεπτά ήταν υπέρμετρα μεγάλο (=~ 1GB) οπότε χρειάστηκε κάποια μορφής συμπίεση. Αν και υπάρχουν διάφορα εργαλεία στο Linux για αυτήν την δουλειά, τελικά προτίμησα ένα plugin του Firefox, ονόματι Firefogg  που αναλαμβάνει να μετατρέψει βίντεο σε ανοικτά web πρότυπα, όπως WebM και Ogg. Ως plugin, το Firefogg είναι εξαιρετικά εύκολο στην χρήση του. Απλά επιλέγουμε το αρχείο από τον δίσκο μας και έπειτα το format που θα καταλήξει το αρχείο.
Το αποτέλεσμα ήταν εντυπωσιακό: τα αρχεία περιορίστηκαν στο 1/10 του αρχικού τους μεγέθους (εξοικονόμηση 90%)

Jul 27, 2014

Glossy displays και συχνές μετακινήσεις

Αν και δεν έχω κάνει ακόμα στο blog ένα επίσημο review, εδώ και περίπου ενάμιση χρόνο έχω αντικαταστήσει το Thinkpad T400 με το Sony VAIO SVE14A27CXH ως βασικό επαγγελματικό μου εργαλείο. Ευτυχώς η σειρά E των VAIO αποδείχτηκε πολύ φιλική με το Linux, με καλή ποιότητα και βάρος κατασκευής, γρήγορες αποδόσεις και επεκτασιμότητα, χωρίς να ξεφεύγει οικονομικά σε σχέση με άλλες πιο "επαγγελματικές" λύσεις. Θυμάμαι πως όταν ξεδίπλωσα την συσκευασία και έβαλα τον υπολογιστή στο γραφείο, μου έκανε ιδιαίτερη εντύπωση οι αντανακλάσεις που είχε η οθόνη. Η οθόνη λοιπόν ήταν τεχνολογίας "glossy" (glare), που πρακτικά όταν είναι σβηστή λειτουργούσε ως μαύρος καθρέφτης, ενώ σε λειτουργία επέτρεπε και τις αντανακλάσεις από ισχυρές πηγές φωτός.

 Αν και τα χρώματα της οθόνης είναι πραγματικά εξαιρετικά, αυτή η συμπεριφορά άρχισε να με κουράζει όταν χρειάστηκε να δουλεύω καθημερινά σε διαφορετικούς πελάτες (βλέπε consultant) , ειδικά σε γραφεία που βρίσκονταν κοντά σε παράθυρα. Οι αντανακλάσεις του φωτός σε κουράζουν και μειώνουν την αναγνωσιμότητα της οθόνης. Το ίδιο φυσικά συνέβη και δουλεύοντας τώρα το καλοκαίρι σε εξωτερικούς χώρους. Τελικά το πήρα απόφαση και αγόρασα μια anti-glare μεμβράνη με 10 ευρώ. Η εφαρμογή της θέλει προσοχή ώστε να μην προκύπτουν κενά αέρος.
Το αποτέλεσμα ήταν πραγματικά πολύ καλό. Αν και τα χρώματα στην οθόνη εμφανίζονται με μικρότερη ζωηρότητα, εξακολουθούν και είναι φωτεινά και ευδιάκριτα. Και έχοντας πια αρκετές επισκέψεις σε γραφεία συνεργατών αλλά και σε εξωτερικούς χώρους, είναι σαφέστατα πολύ πιο ξεκούραστη η εργασία. Παρατηρείστε στην ακόλουθη φωτογραφία την διαφορά αντανάκλασης ανάμεσα στο περίβλημα του laptop (πολύ ισχυρή) και στην οθόνη του που έχει το anti-glare περίβλημα.

Jul 19, 2014

Νέο χαρακτηριστικό: Weblogic logs στον JDeveloper 12.1.3

Η ανακοίνωση της έκδοσης 12c για το JDeveloper, ADF, Weblogic και την οικογένεια SOA/BPM/OSB στα τέλη του Ιουνίου, θα αναγκάσει μερικούς από εμάς να περάσουμε (άλλο) ένα καλοκαίρι διαβάζοντας αλλά και δοκιμάζοντας νέα χαρακτηριστικά. Σίγουρα ένα από τα πιο "τρανταχτά" γνωρίσματα αποτελεί η δυνατότητα εκτέλεσης και αποσφαλμάτωσης SOA, BPM και OSB ροών απευθείας στον JDeveloper. Κάτι λιγότερο σημαντικό είναι πως πια ο Application Server Navigator του JDeveloper μας προσφέρει τη δυνατότητα απευθείας εμφάνισης των log files ενός Weblogic domain (για την ακρίβεια του Administration Server), κάτι πολύ χρήσιμο όταν κάνουμε development.
Αν επιλέξουμε ένα αρχείο του Weblogic και διαλέξουμε στο δεξί κλικ την επιλογή "View", θα εμφανιστούν τα περιεχόμενα του log file, δυστυχώς χωρίς δυνατότητα αυτόματης ανανέωσης.

Jul 1, 2014

10$ κάθε βιβλίο της Packt ως τις 5 Ιουλίου !

Ο εκδοτικός οίκος της Packt έχει ήδη συμπληρώσει 10 χρόνια ζωής, έχοντας αμέτρητα τεχνικά βιβλία. Στα πλαίσια του εορτασμού, έως την 5η Ιουλίου προσφέρονται όλα τα βιβλία στην τιμή των 10$ το καθένα!

Περισσότερες πληροφορίες για την προσφορά θα βρείτε εδώ.

Ανάμεσα στους πιο πρόσφατους τίτλους, ξεχωρίζουν hot topics όπως "Mastering Java Server Faces 2.2", "Extending Puppet", "Mastering AngularJS Directives", "Node.js Blueprints", "Mastering Clojure Data Analysis", "Application Development in iOS 7", "Scala for Java Developers" κ.α.

Jun 29, 2014

Disaster-Recovery Weblogic Servers διαμέσου του LXC

Σε περίπτωση που θέλουμε να σχεδιάσουμε μια αρχιτεκτονική υψηλής διαθεσιμότητας, βασισμένη στον Oracle Weblogic Server, σε ένα δευτερεύον σημείο πρόσβασης (disaster-recovery site) το πρώτο που θα κάνουμε είναι να διαβάσουμε την επίσημη τεκμηρίωση. Εκεί περιγράφεται κατά κύριο λόγο μια συμμετρική αρχιτεκτονική, όπου η ενημέρωση του μεσαίου επιπέδου (middleware) πραγματοποιείται με disc replication ή αλλιώς με τον συγχρονισμό των shared storages μεταξύ των δυο sites (production και disaster-recovery) που περιλαμβάνει τα Weblogic domains, εφαρμογές, κλπ.
Προκειμένου να επιβεβαιώσουμε μια τέτοιου είδους αρχιτεκτονική, μπορούμε είτε να την εφαρμόσουμε απευθείας σε ένα σύστημα (πχ με την χρήση virtualization software OVM ή VMWare) είτε με έναν πιο απλό τρόπο που είναι το lxc. Για παράδειγμα, έχω κατασκευάσει έναν Oracle Linux-based container (με το όνομα orasoa) στον οποίον εγκαθίσταται ένας Weblogic Server και γίνονται deployments εφαρμογών. Ας υποθέσουμε πως πρόκειται για τον production server. Η δημιουργία ενός αντιγράφου (clone)  είναι απλή υπόθεση για το lxc, απλά χρησιμοποιούμε την εντολή lxc-clone. Έτσι δημιουργείται μια δεύτερη μηχανή (πχ orasoaclone), με τα ίδια ακριβώς χαρακτηριστικά όπως στο production.
Τελικά, για να ελέγξουμε την τακτική ενημέρωση ενός DR site, ας προσομοιάσουμε την αντιγραφή των περιοχών shared storages ανάμεσα στα δυο sites, με την αντιγραφή σε επίπεδο host OS που φιλοξενεί τα lxc containers. Αν λοιπόν, όλοι μας οι containers βρίσκονται στην διαδρομή /var/lib/lxc (default για το Ubuntu) τότε απλά αρκούν εντολές σαν αυτές:

rsync -azv orasoa/rootfs/home/oracle/user_projects/prod_domain/servers/AdminServer/ orasoaclone/rootfs/home/oracle/user_projects/prod_domain/servers/AdminServer
rsync -azv orasoa/rootfs/home/oracle/user_projects/prod_domain/config/ orasoaclone/rootfs/home/oracle/user_projects/prod_domain/config

ώστε να μεταφερθούν καινούργιες εκδόσεις των εφαρμογών αλλά και εν γένει των Weblogic domains στο δευτερεύον site. Φυσικά, όπως αναφέρει και το documentation της Oracle, το δευτερεύον site δεν είναι ενεργό παρά μόνο για τις ανάγκες του switchover. Ωστόσο, το shared storage του DR θα πρέπει να είναι προσβάσιμο από το παραγωγικό σύστημα για τις ανάγκες του συγχρονισμού.

Jun 22, 2014

Keyboard shortcuts στον JDeveloper


Τις προάλλες ο καλός συνάδελφος Θανάσης Σακελαρίου, μου έδειξε ένα φοβερό keyboard shortcut στο JDeveloper. Εφόσον έχει συμπληρωθεί ήδη μια έκφραση, πατώντας Ctrl+Alt+v γίνεται η ανάθεση της σε μια μεταβλητή, όπως για παράδειγμα φαίνεται στην παρακάτω έκφραση getAttribute(). Αυτή η συντόμευση είναι αντιστοιχίζεται στο μενού Refactor-->Introduce Variable
Ένας κατάλογος για γενικές συντομεύσεις του περιβάλλοντος του JDeveloper βρίσκεται εδώ, ενώ ειδικά για την επεξεργασία Java κώδικα περισσότερες πληροφορίες εδώ. Υπάρχει επίσης ένας χρήσιμος οδηγός για τις 30 πιο συνηθισμένες συντομεύσεις πληκτρολογίου σε αυτό το σημείο.

Τέλος, χρήσιμη και παραμετροποιήσιμη δυνατότητα του JDeveloper είναι και τα code templates που αυτόματα συμπληρώνουν ένα κομμάτι κώδικα μετά από έναν συνδυασμό πλήκτρων.

Jun 4, 2014

Σύντομος και ασφαλής υπολογισμός ενός inline if της Groovy στο ADF

Στο ADF μπορούμε σε πολλαπλά σημεία να χρησιμοποιήσουμε εκφράσεις της Groovy για διάφορες λειτουργίες. Ειδικά ως προς τους υπολογισμούς συχνά πρέπει να ελέγχουμε αν υπάρχει σωστή αρχικοποίηση τιμών ώστε να αποφύγουμε τιμές όπως null. Ευτυχώς στην Groovy υπάρχει μια βελτίωση του inline if ώστε να καλύπτεται με συντομία και ασφάλεια η απουσία τιμής. Για παράδειγμα στο σχήμα fod, ο υπολογισμός ενός πεδίου LineTotal που προκύπτει από δυο άλλα (UnitPrice και Quanity) μπορεί να οριστεί ως:

(Quantity ?: 0) * (UnitPrice ?: 0)

May 14, 2014

Πρώτες εντυπώσεις από το FreeBSD

Κατά διαστήματα είναι χρήσιμο να εξετάζει κανείς διαφορετικές γλώσσες προγραμματισμού ή λογισμικό, όχι απαραίτητα συνεκτικά με το κύριο αντικείμενο εργασίας του, προκειμένου να παίρνει ιδέες και κυρίως να εμπλουτίζει τον τρόπο σκέψης του. Πιστεύω ακράδαντα πως ο προγραμματισμός έχει μια πολύ ισχυρή φύση "κοινωνικότητας" προκειμένου ένας επαγγελματίας να είναι αποδοτικός και ει δυνατόν, να βελτιώνεται.

Το τελευταίο χρονικό διάστημα βρήκα την ευκαιρία να ασχοληθώ σε μικρό βαθμό με το BSD. Υπήρξαν διάφοροι λόγοι για την περιέργεια μου. Ένας από αυτούς ήταν η συμπεριφορά του ως λειτουργικό σύστημα, μιας και διαθέτει την φήμη για ένα πολύ σταθερό σύνολο, που εξάλλου χρησιμοποιείται και από το Mac OS. Μια άλλη τεχνολογία που παρουσιάζει ενδιαφέρον είναι αυτή του lightweight virtualization που υλοποιείται με το jails (αντίπαλο δέος του lxc που έχω αναφερθεί στο παρελθόν) Μια τρίτη περιοχή είναι η υποστήριξη της Java και των εργαλείων της. Δεν είχα ιδιαίτερες φιλοδοξίες για το λογισμικό της Oracle, μιας και κανένα προϊόν δεν είναι certified με αυτήν την πλατφόρμα.

Στα πλαίσια μιας δοκιμής μικρής κλίμακας, αποφάσισα να χρησιμοποιήσω ένα έτοιμο virtual machine image του FreeBSD, που ονομάζεται VirtualBSD. Αυτό είναι διαθέσιμο τόσο για VirtualBox όσο και για VMWare και αφορά αρχιτεκτονικές 64-bit. Μέσα σε λίγα λεπτά προέκυψε ένα έτοιμο σύστημα προς χρήση! Να μια φωτογραφία από το web site των δημιουργών του VirtualBSD, έκδοση 10.0. Ένας οδηγός γρήγορης εισαγωγής και μάλιστα στα ελληνικά βρίσκεται εδώ.
Το VirtualBSD έρχεται με ένα μεγάλο πλήθος χρηστικών εφαρμογών (LibreOffice, Skype, Pidgin, VLC, κλπ) Το να αναβαθμίσει κανείς μια εφαρμογή ή να εγκαταστήσει μια καινούργια προκαλεί αρχικά έκπληξη, αφού κατά τον παραδοσιακό τρόπο, χρειάζεται να γίνεται άντληση από το internet του πηγαίου κώδικα της εφαρμογής και να ακολουθήσει compilation με την προτροπή για διάφορα flags. Ίσως με αυτόν τον τρόπο ενθαρρύνεται η σταθερότητα του συστήματος. Από την άλλη, μια νέα έκδοση του LibreOffice θα χρειάζεται τουλάχιστον ένα διώρο compilation με την CPU σε υψηλό φόρτο! Εντύπωση μου έκανε πάντως το package (ή καλύτερα ports) management στο BSD: μπόρεσα από διαφορετικά τερματικά να κάνω εγκατάσταση ταυτόχρονα δυο εφαρμογές. Διαχειριστές πακέτων στο Linux όπως στο Ubuntu (deb) και στο Oracle Linux/RedHat συνήθως βάζουν κλειδώματα στη βάση δεδομένων των εφαρμογών και επιτρέπουν μια ενημέρωση την φορά. Το σύστημα των αρχείων ακολουθεί μια μεγαλύτερη πειθαρχία με τις νέες εφαρμογές να τοποθετούνται στον κατάλογο /usr/local.

Ένα άλλο πολύ θετικό του BSD είναι η χαμηλή κατανάλωση πόρων και ιδίως της μνήμης (RAM), ακόμα και παρακάτω από το Linux. Αυτό σου δίνει την αίσθηση ενός στιβαρού, multitasking UNIX συστήματος.  Επίσης η διαχείριση των εργασιών κατά την εκκίνηση (startup jobs) είναι πολύ απλή, σε αντίθεση με πολύ σοφιστικέ προσεγγίσεις στο Linux (systemd, upstart)

To BSD ενσωματώνει μια τεχνολογία lightweight virtualization που ονομάζεται jails. Αντίστοιχα με το lxc, επιτρέπει να τρέχουν μέσα στον ίδιο kernel προστατευμένα αντίγραφα του λειτουργικού συστήματος. Η υλοποίηση μου άρεσε πάρα πολύ όπως και η ύπαρξη διαφορετικών, ισχυρών εργαλείων διαχείρισης (warden και ezjail) Υπάρχει ακόμα μια υποτυπώδης υποστήριξη για την εκκίνηση Debian μέσα σε ένα τέτοιο περιβάλλον! Όπως και στο lxc, ένας νέος container ξεκινά σε δυο-τρια δευτερόλεπτα.

Ως προς την Java, το VirtualBSD έρχεται με την προεγκατεστημένη έκδοση OpenJDK 1.6.0.32, ενώ στον κατάλογο ports θα βρούμε επίσης τις εκδόσεις OpenJDK 7/8, το NetBeans 8 και το Eclipse Indigo (3.7.1) H εγκατάσταση του OpenJDK8 και του NetBeans 8 ήταν δίχως προβλήματα (αν και πήρε πολύ ώρα λόγω του compilation) Για την ορθή λειτουργία, χρειάστηκε να προστεθεί στο αρχείο etc/netbeans.conf η σωστή αναφορά στο OpenJDK8 home καθώς και η παράμετρος nosplash για την εκκίνηση, δηλαδή:

netbeans_default_options="-J-client ... --nosplash"
netbeans_jdkhome="/usr/local/openjdk8"