Nov 27, 2021

Διόρθωση προβλήματος αρχείων με ελληνικούς χαρακτήρες στο IDEA Intellij

 Μια καλή και σταθερή λύση για την εγκατάσταση εργαλείων προγραμματισμού στο Ubuntu είναι διαμέσου snaps. Μπορώ μάλιστα να επιβεβαιώσω πως οι αναβαθμίσεις γίνονται απρόσκοπτα, δίχως παρενέργειες, τουλάχιστον αναφορικά με το IDEA Intellij. Κάτι όμως που συνάντησα στην εγκατάσταση μου ήταν η αδυναμία εμφάνισης στον project explorer αρχείων που περιελάμβαναν ελληνικούς χαρακτήρες στην ονομασία τους, ενώ και το maven build αποτύγχανε με το σφάλμα:

Malformed input or input contains unmappable characters: ...

Φαίνεται πως το snap δεν ξεκινούσε με τις αναγκαίες πολυγλωσσικές παραμέτρους. Θα πρέπει λοιπόν, να ανατρέξουμε στο .desktop αρχείο του snap, που βρίσκεται στην διαδρομή /var/lib/snapd/desktop/applications και να προσθέσουμε την ρύθμιση περιβάλλοντος LC_ALL, ως εξής:

Exec=env BAMF_DESKTOP_FILE_HINT=/var/lib/snapd/desktop/applications/intellij-idea-ultimate_intellij-idea-ultimate.desktop LC_ALL=en_US.utf8 /snap/bin/intellij-idea-ultimate %f:wq

Oct 8, 2021

Αλλαγή laptop και μεταφορά virtual machines και containers

 

Πολύ πρόσφατα αποφάσισα να αλλάξω laptop. Το SONY Vaio SVE14A27CXH τα πήγε θαυμάσια για οκτώ χρόνια και ήταν πολύτιμος βοηθός μου σε πολλά, δύσκολα έργα. Ωστόσο, άρχισε να δείχνει την ηλικία του σε απαιτητικά Java και Javascript builds και έτσι ο αντικαταστάτης του είναι το Lenovo Thinkpad E14 Gen3 σε ενισχυμένη έκδοση. Κατά την αντικατάσταση διατήρησα το ίδιο λειτουργικό σύστημα (Kubuntu 20.04 LTS) και έτσι έχω κρατήσει μερικές σημειώσεις για την μεταφορά των virtual machines (VirtualBox) αλλά και των containers (lxc και docker)

Προτού ξεκινήσετε, ελέγξτε αν έχετε δηλώσεις στο /etc/hosts, ειδικές ρυθμίσεις στο firewall ή στο δίκτυο σας (πχ bridge ή tap device) για την επικοινωνία των υποδομών σας, ώστε να την διατηρήσετε και στο νέο setup.

Ως προς το VirtualBox, αυτό που θα χρειαστεί είναι να σταματήσετε (shutdown ή discard saved state) όλα τα virtual machines σας. Έπειτα να αντιγράψετε τον φάκελο ~/.VirtualBox καθώς και τον φάκελο που συντηρείτε τα virtual machines σας στον νέο υπολογιστή. Για λόγους τυποποίησης, όλα τα virtual machines τα κρατάω στο mount point /vm.

Ως προς το LXC, αρκεί η αντιγραφή των περιεχομένων του φακέλου /var/lib/lxc στον νέο σας υπολογιστή. 

Τέλος, για τα docker containers που θέλετε να μεταφέρετε, πρώτα τα σταματάτε. Έπειτα από την εντολή docker images, διαλέγετε ποια σας είναι χρήσιμα, σημειώνοντας το repository και το tag. Η εντολή που θα σας αποθηκεύσει το docker image είναι η ακόλουθη:

docker save -o output_container.tar <repository>:<tag>

Αυτή η εντολή δεν μεταφέρει και external volumes που χρησιμοποιεί ο container, οπότε φροντίστε να τα πάρετε backup και να τα μεταφέρετε ξεχωριστά. Το restore του docker image είναι ως εξής:

docker load -i output_container.tar

Apr 13, 2019

Προγραμματισμένη (scheduled) κλήση σε JMX bean στο Weblogic

Έστω ότι σε μια legacy εφαρμογή έχει αναπτυχθεί κώδικας σε JMX bean ώστε να διευκολυνθεί η απομακρυσμένη κλήση επιχειρηματικής λογικής. Μέσω του WLST μπορούμε να φτιάξουμε ένα script που θα καλεί το JMX bean, και με τη σειρά του μπορεί να προστεθεί στον χρονοπρογραμματισμό του Linux (πχ cron)

Για το παράδειγμα μας έχουμε ενα JMX bean κάνει bind στο Object Name: "com.example.jmx:type=Integration,name=Export" και έχει γίνει deploy σε έναν managed server (πχ ManagedServer_1) Έχουμε κατασκευάσει μια μέθοδο χωρίς παραμέτρους σε αυτό το bean (πχ startExport), την οποία θέλουμε να καλέσουμε μέσω του δυναμικού προγραμματισμού του cron. Ακολουθεί ένα WLST που υλοποιεί αυτή τη διαδικασία:

# connect to the WebLogic server
#
connect('', '', '')
#
domainCustom();
print ''
print ''
#
# go to custom mbean package/folder
#
cd('com.example.jmx')
#
cd('com.example.jmx:Location=ManagedServer_1,name=Export,type=Integration')
#
# create object name
#
auditJmx=ObjectName('com.example.jmx:Location=ManagedServer_1,name=Export,type=Integration')
print ''
print ''
#
# invoke operation/method form the custom mbean
#
mbs.invoke(auditJmx, 'startExport',None,None)
print ''
print '--------------------------'
disconnect()

Τώρα, αυτό το Jython script μπορούμε να το καλέσουμε μέσω του wlst.sh και έτσι να το χρονοπρογραμματίσουμε κατάλληλα στο crontab.

May 13, 2017

ADF και EJB timers

Είναι εξαιρετικά εύκολο να χρονοπρογραμματίσουμε την εκτέλεση μιας ADF BC μεθόδου χρησιμοποιώντας EJB timers. Ας ξεκινήσουμε με την υλοποίηση των μεθόδων σε ένα Application Module τις οποίες ορίζουμε στο client interface. Στο παράδειγμα μας δυο μέθοδοι, exportData και uploadData που εκτελούνται σε τακτικά χρονικά διαστήματα.
Σε ένα νέο JDeveloper project (πχ ονόματι tasks) ενσωματώνουμε τις κατάλληλες maven εξαρτήσεις για τo JEE και το ADF όπως:

  <dependency>
      <groupId>com.oracle.adf.library</groupId>
      <artifactId>Java-EE</artifactId>
      <version>12.2.1-1-0</version>
      <type>pom</type>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.oracle.adf.library</groupId>
      <artifactId>EJB</artifactId>
      <version>12.2.1-1-0</version>
      <type>pom</type>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.oracle.adf.library</groupId>
      <artifactId>ADF-Common-Runtime</artifactId>
      <version>12.2.1-1-0</version>
      <type>pom</type>
      <scope>provided</scope>
    </dependency>

Απαραίτητο είναι επίσης να ορίσουμε και το maven dependency για το model project μας. Φτιάχνουμε τώρα μια java κλάση που καλεί την διαδικασία exportData. Χρησιμοποιούμε το Schedule annotation για τον χρονοπρογραμματισμό ενώ κάνουμε μια απλή σύνδεση στο Application module για να καλέσουμε την μέθοδο που θέλουμε από το client interface.

Το παράδειγμα δοκιμάστηκε σε JDeveloper 12.2.1.1.0.

Apr 21, 2017

Συμβουλές για JMeter και ADF 12c

O καλύτερος τρόπος να ξεκινήσει κανείς σενάρια performance testing με το JMeter σε εφαρμογές ADF, είναι να χρησιμοποιήσει το test plan από εδώ, να το διαμορφώσει σε ένα test fragment και να το αξιοποιήσει σε περαιτέρω πλάνα. Επιπλέον συμβουλές που δοκιμάστηκαν σε ADF 12.2.1.2.0 :


  • Όπως αναφέρεται και στο soadev blog ο resolver για το _afrLoop έχει την μορφή: _afrLoop',\s*'([0-9]{13,16})
  • Για πιο αποτελεσματικό recording ADF εφαρμογών μπορούμε να παραλείψουμε αρχεία css, png και js διαμορφώνοντας κατάλληλα τον script recorder
  • Για την καλύτερη οργάνωση των HTTP requests που γίνονται record, είναι προτιμότερο να τα οργανώσουμε ανά transaction controller

  • Τέλος, στη λίστα των patterns to test, ας προσθέσουμε το "Because of inactivity..." επειδή είναι ένα πολύ πιθανό μήνυμα όταν δεν έχει διαμορφωθεί σωστά το σενάριο



Jan 8, 2017

Oracle Fusion Middleware RCU στο Amazon cloud (AWS)

To AWS προσφέρει την υποστήριξη της Oracle Database (Oracle RDS) με παρεχόμενες άδειες και με ειδικά γνωρίσματα όπως:

  • δίνεται λογαριασμός με DBA privileges αλλά δεν παρέχεται πρόσβαση στα SYS και SYSTEM accounts
  • δεν προσφέρεται SSH πρόσβαση στους database servers
  • υποστηρίζονται μόνο Oracle Managed Files (OMF) για datafiles
Περισσότερες πληροφορίες εδώ και εδώ.

Μέσω του Ansible, όταν έτρεξα το RCU για ένα 12.2.1.1.0 domain διόρθωσα ώστε το script ώστε ο database user να μην έχει SYSDBA δικαιώματα (normal user), αλλά πήρα το ακόλουθο λάθος ORA-20900: RDS only supports Oracle Managed Files.

Έχουμε δυο επιλογές:

  • στο RCU script μας παιρνάμε την παράμετρο honorOMF που κατασκευάζει τα datafiles συμβατά με OMF
  • κατασκευάζουμε τα tablespaces μόνοι μας και ξανατρέχουμε το RCU
Πέρα από αυτό, δεν αντιμετώπισα κανένα άλλο πρόβλημα στο να τρέξω μια 12.2.1.1.0 ADF εφαρμογή στο AWS χρησιμοποιώντας είτε Oracle RDS 11.2.0.4 είτε το 12.1.0.2.

Nov 20, 2016

Windows bash shell και γραφικές εφαρμογές X-Server

Μια από τις σημαντικότερες αλλάγες των Windows 10 anniversary update είναι η ενσωμάτωση του Ubuntu bash shell που μας προσφέρει ένα κέλυφος για Linux command-line. Στο ενσωματωμένο Ubuntu 14.04 (και σύντομα 16.04) πέρα από τα τυπικά εργαλεία που μπορούμε να τρέξουμε στο Windows Bash Shell (scripts, vi, awk, grep, κλπ) αλλά και τα πιο εξελιγμένα (πχ Ansible, MySQL) μπορούμε επίσης να έχουμε και εκτέλεση γραφικών εφαρμογών όπως Firefox, glogg, κλπ.

Ειδικά για την τελευταία περίπτωση, νομίζω πως ο πιο απλός τρόπος είναι η χρήση του Mobaxterm, αφού προσφέρει απευθείας έναν X Server για την οθόνη μας. Στις τελευταίες εκδόσεις του Mobaxterm, υπάρχει η επιλογή σύνδεσης του Ubuntu  Bash.


Έτσι, εκτελώντας ένα πρόγραμμα που απαιτεί X-Windows, το Mobaxterm ανακατευθύνει σωστά την γραφική έξοδο στην οθόνη μας.