Jul 17, 2016

Προσοχή στις ρυθμίσεις NLS του SQL Developer


Στις ρυθμίσεις του SQL Developer υπάρχει ένα ειδικό tab για τις ρυθμίσεις του NLS που αφορά την αρχικοποίηση του session του χρήστη (πρακτικά το view NLS_SESSION_PARAMETERS)
Το default setting έχει μάλλον την τιμή "BYTE" ως length semantics πράγμα που σημαίνει πως εάν δώσουμε την εντολή 'CREATE TABLE' ή εάν κάνουμε 'Import data' (πχ από ένα excel spreadsheet) κατασκευάζοντας κατά συνέπεια έναν καινούργιο πίνακα, τότε θα διατηρηθούν τα byte (και όχι τα character) semantics ως προς το μέγεθος των δεδομένων που μπορεί να κρατήσουν οι varchar2 κολόνες.
Αν θέλουμε να αλλάξουμε αυτή την συμπεριφορά τότε είτε αλλάζουμε τις ρυθμίσεις NLS του SQL Developer είτε σε Length --> CHAR είτε επιλέγουμε το checkbox "Skip NLS settings" που θα χρησιμοποιήσει τις ρυθμίσεις της database που προσπαθούμε να συνδεθούμε.

Jun 6, 2016

Unit Testing σε projects του Oracle Service Bus

Είναι πολύ καλή πρακτική να έχουμε unit tests σε οποιοδήποτε έργο. Και αν και στην περίπτωση του Oracle SOA Suite υπάρχει ένα ενσωματωμένο testing framework, στην περίπτωση του Service Bus μπορούμε να έχουμε την εκτέλεση unit tests, για παράδειγμα κατασκευασμένων στο SOAP UI, ως τμήμα του maven project μας. Ας δούμε πώς μπορούμε να το κάνουμε αυτό, προσθέτοντας και δυνατότητες continuous integration (CI) στο project μας, ώστε να καταστήσουμε την εκτέλεση των unit tests αυτόνομη.

Στις εκδόσεις 12c, υπάρχει καλή υποστήριξη από maven plugins για τον Weblogic Server και το Service Bus. Έτσι προτού τρέξουμε τα unit tests, μπορούμε να χρησιμοποιήσουμε το Weblogic maven plugin για να εκκινήσουμε τον Weblogic server ή το domain μας.

Σημειώστε πως το maven plugin, επιδέχεται ως configuration parameter ("command") ποια εντολή θα χρησιμοποιηθεί ώστε να ξεκινήσει τον Weblogic (και όλο το domain ενδεχομένως) όπως επίσης και το ποιο είναι το URL ("httpPingUrl") που θα επιβεβαιώσει το πως έχει εκκινήσει ο Weblogic.

Για να προκαλέσουμε το deploy του Oracle Service Bus project μας στο Weblogic, χρησιμοποιούμε το OSB maven plugin, που κάνει bind στο maven phase pre-integration-test.
Έπειτα, για τις ανάγκες του unit testing μας, μπορούμε να φτιάξουμε test cases στο SOAP UI και φυσικά να τα αποθηκεύσουμε ως τμήμα του του OSB project. Για την κλήση του SOAP UI, θα ορίσουμε τα αντίστοιχα repositories στο service bus project pom:
Τέλος για να κάνουμε κλήση του SOAP UI project μας, δεν έχουμε παρά να παραμετροποιήσουμε το SOAP UI Pro maven plugin, δηλώνοντας τις απαραίτητες παραμέτρους (endpoint, project file location)
ώστε να έχουμε το αντίστοιχο αποτέλεσμα, τρέχοντας το mvn integration-test στο OSB project μας.

May 10, 2016

Τρέχοντας (running) OSB projects στον JDeveloper

Μια πολύ σημαντική βελτίωση για το Oracle SOA 12c είναι η δυνατότητα άμεσης δοκιμής των projects μας στον embedded Weblogic του JDeveloper, χωρίς την ρύθμιση ξεχωριστού SOA Server. Για παράδειγμα, κάνοντας δεξί click σε ένα Proxy Service και επιλέγοντας Run, γίνεται deploy το project μας και εμφανίζεται μια test οθόνη δεδομένων.
Επειδή συνήθως τα test-cases τα συντηρώ εκτός του JDeveloper (πχ. στο SOAP-UI) τότε αυτή η οθόνη είναι μάλλον άχρηστη. Μπορούμε λοιπόν να κάνουμε το εξής, αντί να τρέχουμε το Proxy Service μας, να επιλέξουμε το composite μας, κάνοντας εκεί Run. Η test-page του OSB έτσι δεν θα εμφανιστεί, αλλά το project μας θα έχει γίνει κανονικά deploy.
Αν μάλιστα θέλουμε πάντα να συμβαίνει αυτό, ακόμα και αν επιλέγουμε ένα proxy service, δεν έχουμε παρά να αλλάξουμε τις default run ρυθμίσεις.

Apr 9, 2016

Chocolatey: εξαιρετικός package manager για Windows

Στο Linux μπορούμε με μια εντολή να στήσουμε ένα μηχάνημα εγκαθιστώντας τα προγράμματα της επιλογής μας. Κάτι τέτοιο μου έλειψε πολύ από τα Windows, που έχω αναγκαστεί να δουλεύω το τελευταίο διάστημα. Το να εγκαθιστάς ένα προς ένα τα προγράμματα ή να τα αναβαθμίζεις παίρνει πολύ χρόνο. Ευτυχώς που υπάρχει το Chocolatey, ένας package manager για τα Windows, παρόμοιος με το apt-get του Ubuntu.

Το chocolatey αποτελεί αποθετήριο για πολλά προγράμματα, που διαρκώς ενημερώνονται. Η εγκατάσταση ενός προγράμματος (πχ του 7zip) είναι τόσο απλή όσο η εντολή (σε command line/Powershell με δικαιώματα διαχειριστή):

chοco install 7zip

Η εγκατάσταση οποιουδήποτε προγράμματος είναι silent (χωρίς να εμφανίζεται ο γραφικός installer) με απλές ρυθμίσεις, εκτός αν θέλουμε κάτι διαφορετικό:
choco install  --notsilent
ενώ η αναβάθμιση μιας εφαρμογής:

choco upgrade -y  
 
Ειδικά για τον προγραμματισμό, αξίζει να αναφέρουμε πως η εγκατάσταση ή ενημέρωση προγραμμάτων όπως jdk8, Eclipse (Mars), Notepad++, MobaXterm, git, kdiff3, tortoisesvn, Atom χρειάζεται μόλις ένα κλικ !

Apr 1, 2016

Υποστήριξη high dpi από τα Java IDEs σε Windows 10

To Lenovo Yoga 2 Pro είναι ένα ισχυρό και ελαφρύ ultrabook, 13.3 ιντσών με εξαιρετικά υψηλή ανάλυση οθόνης 3200x1800. Κατά αυτόν τον τρόπο εφαρμογές που έχουμε φτιαχτεί με μέριμνα αυτών των πολύ υψηλών dpis εμφανίζονται εκπληκτικά ενώ άλλες λιγότερο ικανοποιητικά, αν όχι απογοητευτικά. Δουλεύοντας με διάφορα Java IDEs, έχουμε τις εξής παρατηρήσεις:
Ο JDeveloper 12c (12.2.1 αλλά και ο 12.1.3) δεν διαθέτει καλή υποστήριξη για high dpi οθόνες. Όταν ξεκινά ο installer εμφανίζεται σε ένα πολύ μικρό παράθυρο που μόλις διακρίνονται τα γράμματα.
Γενικά όλα (fonts, icons, menus, editors) δεν εμφανίζονται σωστά και τακτοποιημένα. Να ένα παράδειγμα για τους declarative editors του ADF.
Υπάρχει ένα επίσης απίστευτο bug που όταν ανοίγει κανείς το JSF visual editor, ο Jdeveloper ελαχιστοποιείται σαν παράθυρο! Παρόλο που μπορεί κάποιος να απενεργοποιήσει το dpi scaling για τον Jdeveloper, πάλι το αποτέλεσμα δεν είναι ικανοποιητικό. Μόνο με την μείωση της ανάλυσης οθόνης είναι εφικτό να δουλεύει κάποιος.
Το Eclipse μέχρι την τωρινή του έκδοση (Mars 4.5.x) δεν διαθέτει ικανοποιητική υποστήριξη dpi αλλά σίγουρα τα πράγματα είναι καλύτερα από τον Jdeveloper. Υπάρχει ένα workaround που περιγράφεται με την δημιουργία ενός manifest file που σίγουρα είναι αποδοτικό αλλά τα fonts εμφανίζονται blurry. Ένας από τους βασικούς στόχους της επόμενης έκδοσης (4.6 Neon) είναι η καλύτερη υποστήριξη dpi, οπότε δεν έχουμε παρά να αναμένουμε.
Τέλος, την πιο ικανοποιητική υποστήριξη την είχε το Android Studio που βασίζεται στο IntelliJ IDEA. Αν και μερικά παράθυρα διαλόγων δεν εμφανίζονται σωστά, η συνολική εμπειρία εμφάνισης είναι πολύ καλή για high dpi οθόνες.



Feb 11, 2016

Αναβάθμιση του Samsung Note 10.1 (2014) σε Android Lollipop 5.1.1

Διαθέτω το Samsung Note 10.1 (2014) πάνω από ενάμιση χρόνο και είμαι απόλυτα ικανοποιημένος από τις αποδόσεις του, την σταθερότητα του, την φανταστική οθόνη και μπαταρία του αλλά κυρίως για το "μαγικό" του πενάκι (S pen) που επιτρέπει να κρατάω οργανωμένες τις σημειώσεις μου από διάφορες συναντήσεις. To συγκεκριμένο μοντέλο εξακολουθεί να βρίσκεται ακόμα και σήμερα στην αγορά.
Μέχρι πρότινος το tablet έτρεχε την έκδοση Android Kit Kat (4.4.2) αλλά αυτές τις ημέρες αναβαθμίστηκε σε Lollipop 5.1.1, δίχως προβλήματα στην περίπτωση μου. Οι αλλαγές δεν είναι μεγάλες αλλά έχω απομονώσει την προσθήκη των κουμπιών "Delete" και αυτών της πλοήγησης του δρομέα (cursor) στο πληκτρολόγιο της Samsung, γεγονός που διευκολύνει περαιτέρω την πληκτρολόγηση.
Κατά δεύτερο λόγο το multitasking, με την ταυτόχρονη προβολή πολλαπλών παραθύρων έχει βελτιωθεί, με το window-snapping, την δυνατότητα ελαχιστοποίησης παραθύρου αλλά  και την υποστήριξη gestures.

Dec 9, 2015

Πώς να τρέξουμε Ansible scripts από Windows

Το Ansible απέχει μόλις μια εντολή από το να τρέχει σε ένα Linux control machine (πχ sudo apt-get install ansible στην περίπτωση του Ubuntu) Το ίδιο όμως δεν ισχύει στα Windows, ώστε εκεί να κατασκευάζουμε και να τρέχουμε τα Ansible scripts μας. Πέρα από την λύση ενός Linux guest virtual machine, υπάρχει μια ακόμα: το να τρέξουμε το Gygwin, που μας επιτρέπει να κάνουμε compile Linux εφαρμογές στα Windows, και μέσα σε αυτό να κάνουμε build το Ansible.

Το πιο απλό και πλήρες πακετάρισμα του Gygwin για Windows είναι το babun. Αναλυτικές πληροφορίες για το πώς να εγκαταστήσουμε το Ansible βρίσκονται εδώ. Επί της ουσίας θα :

  • Κάνουμε εγκατάσταση του Ansible μέσω της εντολής: curl https://raw.githubusercontent.com/chrisgilbert/scripts/master/bootstrap_ansible_windows.sh | bash
  • Ακολουθεί το rebase του Gygwin
  • Κάνουμε compile και install το sshpass

Όλα τα παραπάνω βήματα έχουν ελεγχθεί σε Windows 10 64-bit.

Nov 23, 2015

Πιο εύκολη ανάγνωση log files με το εργαλείο lnav

Το τελευταίο χρονικό διάστημα χρειάστηκε να επεξεργαστώ αρκετά μεγάλα log files του Weblogic και ένα πολύ σημαντικό βοήθημα αποδείχθηκε το lnav. Στα βασικά του χαρακτηριστικά περιλαμβάνονται η υποστήριξη πολλών διαφόρων τύπων logs (πχ Apache, Linux, κλπ), η εκτέλεση του σε περιβάλλον terminal και ο χρωματισμός των log levels.
Αν πάρουμε ένα παράδειγμα από τον Weblogic, τα errors χρωματίζονται με κόκκινο χρώμα, τα warnings με κίτρινο. Η πλοήγηση μεταξύ τους είναι πολύ εύκολη: πατώντας 'w' προχωρούμε στο επόμενο warning μήνυμα, ενώ με 'W' στο προηγούμενο. Τα ίδια ισχύουν και για τις συντομεύσεις 'e' και 'Ε' για τα σφάλματα. Με αυτόν τον τρόπο μπορούμε να πλοηγηθούμε ταχύτατα σε ένα ή περισσότερα log files. Ανάλογες συντομεύσεις υπάρχουν για την ωριαία ή την ημερήσια μετάβαση σε νέα log entries.
Ένα άλλο χρήσιμο χαρακτηριστικό είναι η αυτόματη κατασκευή ιστογραμμάτων (συντόμευση 'i') που δείχνει σε ωριαία βάση το πλήθος των errors και warnings.
Επίσης, το lnav μπορεί να αντιμετωπίσει ένα log file σαν μια relational database, και με την αυτόματα βοήθεια της sqlelite μπορούμε να φτιάξουμε πιο ισχυρά και πιο συνδυαστικά ερωτήματα μας.

Το lnav είναι διαθέσιμο σε Linux και Mac OS X. H έκδοση που περιλαμβάνει το Ubuntu 14.04 LTS είναι σχετικά παλαιά (0.6.2.x) και έτσι μπορούμε να κατεβάσουμε απευθείας από το lnav web site το binary της τελευταίας έκδοσης (0.8.0)

Nov 1, 2015

Ξεκινώντας με το Activiti BPM στο Ubuntu

To Activiti BPM αποτελεί μια ελαφριά αλλά και ισχυρή υλοποίηση του BPMN 2.0. Η πλατφόρμα αποτελεί έργο ανοικτού κώδικα (open source) και βασίζεται στην Java . Σαν δομικές αρχές έχει:

  • την απλότητα στην κατασκευή και στην πρόσβαση στην πλατφόρμα, προσφέροντας Java και REST APIs
  • την εύκολη και ευέλικτη πακετοποίηση του, ακόμα και ως τμήμα μιας JEE εφαρμογής (WAR, EAR)
  • τον άμεσο έλεγχο μιας BPMN διαδικασίας με testing frameworks όπως για παράδειγμα το JUnit.
Η γραφική απεικόνιση ενός BPMN 2.0 process μπορεί να γίνει στο Eclipse με την βοήθεια ενός ειδικού plugin, ενώ έτοιμες εφαρμογές για τα REST APIs και τον Activiti Explorer (αντίστοιχο του Oracle BPM workspace) προσφέρονται εδώ. Σε αυτό το άρθρο θα περιγραφούν αυτές οι δυο διαστάσεις: η σχεδιαστική μέσω του Eclipse και η runtime σε έναν Tomcat 7 Server. Για όλα αυτά θα χρησιμοποιηθεί το Ubuntu 14.04 (LTS) ως πλατφόρμα ανάπτυξης ώστε σε λιγότερο από 20 λεπτά να έχουμε ένα λειτουργικό περιβάλλον για τα workflows μας.

Αν και μπορούμε να κατεβάσουμε αυτόνομα το Eclipse για να λειτουργήσει στο Ubuntu, μια άλλη προσέγγιση είναι να χρησιμοποιήσουμε το bundled command-line tool "Ubuntu Make" που αποτελεί ένα repository για τα development tools όπως Eclipse, Android Studio, Visual Studio Code, κ.α. Αφού λοιπόν εγκαταστήσουμε το Ubuntu Make με τις εντολές:

$ sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
$ sudo apt-get update
$ sudo apt-get install ubuntu-make
Τότε, μπορούμε να εγκαταστήσουμε και το Eclipse με την εντολή umake ide eclipse, που θα μας ζητήσει τον κατάλογο προορισμού και τελικά θα εγκαταστήσει το προϊόν.
Η έκδοση του Eclipse είναι η Luna (4.4.2) και σε αυτήν θα χρειαστεί να προσθέσουμε το Activiti plugin καθώς και ένα Maven plugin. Μετά από όλα αυτά, είμαστε έτοιμοι να σχεδιάσουμε αλλά και να κάνουμε unit test σε μια BPMN διαδικασία, έχοντας ως οδηγό το αναλυτικό Activiti User Guide.
Για το deployment σε έναν Java server, όπως για παράδειγμα τον Tomcat, μπορούμε να έχουμε μια ειδικού σκοπού virtual machine είτε μέσω Docker (όπου μπορούμε να δανειστούμε έτοιμα images για Tomcat 7) είτε να φτιάξουμε ένα δικό μας. Μιας και προτιμώ το lxc, η δημιουργία ενός Ubuntu container είναι θέμα δευτερολέπτων με την εντολή:

$ sudo lxc-create -t ubuntu -n tomcat

Ξεκινώντας τον container μας, έχουμε ήδη ssh δυνατότητες οπότε μπορούμε να εκμεταλλευτούμε το Ansible για να τρέξουμε την εγκατάσταση του Tomcat με έναν αυτοματοποιημένο και επαναχρησιμοποιήσιμο τρόπο:
To μόνο πια που απομένει είναι να μεταφέρουμε τα WARs activiti-explorer.war, activiti-rest.war του Activiti distribution στον κατάλογο /var/lib/tomcat7/webapps και να δούμε τις sample BPMN διαδικασίες ή να κάνουμε deploy και τις δικές μας.

Oct 22, 2015

Patching του Weblogic με την βοήθεια του Ansible

To Ansible είναι από τα εργαλεία αυτοματισμού που με απλό και δομημένο τρόπο λύνουν τα χέρια των DevOps και γλυτώνουν κυριολεκτικά πάρα πολλές ώρες επαναλαμβανόμενων εργασιών. Ως προς τα προϊόντα της Oracle θαυμάσιες πηγές παραδειγμάτων Ansible είναι για την Oracle Database (και το RAC) το oravirt, ενώ για το μεσαίο επίπεδο το Middleware Snippets. H πρόσφατη μάλιστα εξαγορά του από την RedHat αναμένεται να δώσει ακόμα μεγαλύτερη ώθηση στο προϊόν.

Σε αυτό το άρθρο θα ήθελα να δώσω ένα παράδειγμα patching του Weblogic με την χρήση του Ansible. Για να κάνουμε τα πράγματα πιο δύσκολα, παλαιότερες εκδόσεις του Weblogic χρησιμοποιούσαν για αυτήν την δουλειά το Smart Update (bsu) ενώ νεότερες εκδόσεις (συμπεριλαμβανομένης και της 12c) το opatch. Για την απλότητα των πραγμάτων θα κατασκευάσουμε έναν Ansible ρόλο, έστω weblogic-patching. Στον κατάλογο vars/ ας φτιάξουμε το αρχείο weblogic_patches.yml με έστω τα περιεχόμενα:

patches:
- { patch_id: '19637454', patch_dist: 'p19637454_121300_Generic.zip', patch_type
: 'opatch', flags: 'apply', oh: "{{ mw_home }}" }
- { patch_id: '19637463', patch_dist: 'p19637463_1036_Generic.zip', patch_type:
'bsu', flags: '', oh: "{{ mw_home }}" }

H μεταβλητή patches ορίζεται λοιπόν ως ένα collection, που περιλαμβάνει δυο στοιχεία: τα δυο patches που θέλουμε να εφαρμόσουμε. Μπορούμε φυσικά να βάλουμε όσες εγγραφές (patches) χρειαζόμαστε. Στον τύπο αυτών των στοιχείων έχουμε ορίσει το patch_id, την τοποθεσία του στον Ansible host καθώς και ένα attribute, το patch_type, που διακρίνεται σε opatch ή bsu. Επίσης, υπάρχει μια άλλη ιδιότητα που ονομάζεται flags και αφορά πρόσθετες παραμέτρους για το patching.

To playbook μας θα ενσωματώσει το αρχείο των μεταβλητών και θα τις χρησιμοποιήσει για να καλέσει τον κατάλληλο ρόλο:

# hosts could come from tags
- name: Patch Weblogic
  hosts: all
  vars_files:
    - vars/weblogic_patches.yml
  remote_user: root
  gather_facts: no

  roles:
    - {role: weblogic-patching, patch_list: "{{ patches }}" }

Ενώ ο weblogic-patching ρόλος θα κάνει διάσχιση του patches collection και θα αποφασίσει τι θα κάνει ανάλογα με την τιμή του patch_type. Σε αυτό θα μας βοηθήσει η εντολή when του Ansible:

...
- name: launch OPatch
  su: yes
  su_user: oracle
  shell: "export ORACLE_HOME={{ item.oh }};export PATH={{ item.oh }}/OPatch:$PATH;opatch {{ item.flags }} < {{ oracle_base }}/patches/silent.iss"
  args:
     chdir: "{{ oracle_base }}/patches/current/{{ item.patch_id }}"
  with_items: patches
  when: item.patch_type == 'opatch'

- name: launch bsu
  su: yes
  su_user: oracle
  shell: "./bsu.sh -install -patch_download_dir={{ mw_home }}/utils/bsu/cache_dir -patchlist={{ item.patch_id }} -prod_dir={{ mw_home }}/{{ wl_home_11g }}"
  args:
     chdir: "{{ mw_home }}/utils/bsu"
  with_items: patches
  when: item.patch_type == 'bsu'