Tag: Ubuntu

  • Easily switch between java versions using alternatives in Linux

    This approach works in several distros, I’ve been using it in Ubuntu for a while and just used it in Fedora as well.
    As a developer, you might need to switch between java versions often, this approach will come in handy then.
    We will be using the command “alternatives”, in this case to check the configuration of your Java installation. The default is most often OpenJDK, while you might need Oracle Java.
    Run “alternatives –display java” to see which versions you can currently choose from:
    [code gutter=”false”]
    [joris@today ~]$ alternatives –display java
    java – status is manual.
    link currently points to /usr/java/latest/bin/java
    Current `best’ version is /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-3.b13.fc21.x86_64/jre/bin/java.
    [joris@today ~]$
    [/code]
    There’s no Oracle Java yet, make sure you’ve installed Oracle Java. If you haven’t, you can check this blog post: Install Oracle Java in Fedora, Red Hat or CentOS using Yum and RPM
    When Oracle Java is installed, you can add it to your alternatives: “sudo alternatives –install /usr/bin/java java /usr/java/latest/bin/java 20000”
    Please note: I used “latest” in the command above, another options is to specifically set the version you want. This way you can install several JDK’s and switch as shown below.
    When that is finished, you can select your current flavour of Java:
    [code gutter=”false”]
    [joris@today ~]$ sudo alternatives –config java
    There are 2 programs which provide ‘java’.
    Selection Command
    ———————————————–
    * 1 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-3.b13.fc21.x86_64/jre/bin/java
    + 2 /usr/java/latest/bin/java
    Enter to keep the current selection[+], or type selection number:
    [/code]
    Choose the option you want to switch between Java versions.
    As mentioned by enkouyami, please check if you need to use update-java-alternatives instead of alternatives. The use of alternatives was valid when I wrote the post, but might not be working anymore!

  • Dynamic HTTP endpoint in Oracle Service Bus 12c based on values in a database routing table

    This article outlines how to set a dynamic endpoint in an OSB HTTP Business Service. The endpoint is retrieved from a routing table which resides in an Oracle 12c database.

    Components used for this solution:

    1. Ubuntu Linux 14.04 64bit
      1. JDeveloper, running the Quick Start Oracle Fusion Middleware suite
        1. Oracle Service Bus 12c
        2. Oracle Weblogic 12c
        3. OSB Project location:
          1. https://github.com/visscher/Fusion/tree/master/DBRouting
      2. Oracle Virtualbox Developer Days image for DB 12c, running:
        1. Oracle Database 12c
      3. Oracle SQL Developer 4

    This picture shows the running solution in the OSB test console:
    Oracle Service Bus Console 12c : Pipeline Testing - DBRouting_v1Pipeline - Google Chrome_019

    Database table preparation

    We need a routing table in our schema, I’m using this table setup:

    CREATE TABLE "C##JORIS"."ROUTINGTABLE"
      (
        "ROUTE" VARCHAR2(50),
        "ENDPOINT" VARCHAR2(100)
      );
    Where ROUTE stands for the identifier and ENDPOINT is the HTTP endpoint we try to reach.
    I’ve inserted two rows:
    Insert into ROUTINGTABLE (ROUTE,ENDPOINT) values ('SalesOrder','http://localhost:7101/salesEndpoint');
    Insert into ROUTINGTABLE (ROUTE,ENDPOINT) values ('FinanceReceipt','http://localhost:7101/financeEndpoint');
    These two endpoints will point to very simple OSB services which we will create in a moment.
    Selection_022

    Weblogic configuration: JDBC Data Source

    We need to configure a JDBC data source in our Weblogic server, this data source is used by the XQuery function to execute SQL.
    Start JDEVeloper, select your integrated Weblogic Server and start it up.
    When your domain is started, open the WLS Console:
    http://127.0.0.1:7101/console/
    Login and open the Data Sources summary:
    Selection_020
    Navigation in Console: DefaultDomain - Services - Data Sources
    Create a new datasource, in my example I use the JNDI name “LocalDB
    When you’re done with the configuration, test the datasource to make sure all is well:
    Selection_021
    The status message will be green and show a check mark if you’ve configured your data source correctly.

    JDeveloper: Oracle Service Bus project

    If you import the DBRouting project from here, you should have all the necessary services.
    I will only discuss the assign steps which are needed in the DBRouting_v1Pipeline.pipeline.
    Selection_023
    There are three assign actions:
    1.) Assign $route: node-name($body/*[1])
    This assign determines our routing key. It is the same key as
    the first column in the routing table.
    The XPath here is used to select the name of the first node
    but you can change this to what you want to route on.
    2.) Assign $query: 
    fn:concat("select ENDPOINT from ROUTINGTABLE where ROUTE = '", $route, "'")
    This assign determines the query which will be executed in
    the next step. We want to select the ENDPOINT which belongs
    to the ROUTE which was assigned in step 1.
    3.) Assign $query: 
    (fn-bea:execute-sql(
     xs:string("LocalDB"),
     xs:string("ENDPOINT"),
     $query
     )/*:ENDPOINT)[1]
    This assign actually executes the SQL query to our database,
    which is the first argument.
    The second argument names the re-occurring rows, in this
    case "ENDPOINT".
    The thirst argument is the query to execute.
    The XPath after the execute-sql statement is to make sure
    we only get one endpoint.
    4.) After those assigns, we use place a task “Routing Options” in the HTTP Route node:
    We only use the “URI” Routing Option:
    $endpoint/text()
    Selection_024
    This ends the article, if you execute the pipeline you will see the endpoint has become dynamic, it is retreived from the routing table:
    Oracle Service Bus Console 12c : Pipeline Testing - DBRouting_v1Pipeline - Google Chrome_019
  • Start JDeveloper on Ubuntu Linux for Fusion Middleware SOA Suite 12c

    Okay, this was a bit awkward, I installed the quick start 12c Fusion Middleware and was well underway to getting it all up and running.
    Untill I closed JDev and couldn’t find the executable anymore..!
    For anyone who had the same embarrassing situation, it’s located here:

    *MiddlewareInstallationFolder*/jdeveloper/jdev/bin/jdev
  • Find Java JRE location on Ubuntu Linux

    Everybody knows that the java executable is located in /usr/bin/java , but what if you need the JDK / JRE location itself?
    Just using “whereis” will not get you there, that will point you to the /usr/bin/java point.
    joris@howlingmad: ~_011
     
    So, let’s find out a but more about /usr/bin/java:

    ls -l /usr/bin |grep java

    joris@howlingmad: ~_012
     
    Awesome, this will lead us somewhere, it’s a symlink to /etc/alternatives/java
    So let’s do the same there:

    ls -l /etc/alternatives/ |grep java

    And we’ve hit the jackpot, among the lines here, there’s a bunch of lines pointing us to the JRE location:
    joris@howlingmad: ~_013
     
    As you can see in the screenshit, our java executable within the JRE location is:

    /usr/lib/jvm/java-7-oracle/jre/bin/java

    Which means the JRE location is:

    /usr/lib/jvm/java-7-oracle/jre

     
     
     

  • Oracle SQL Developer 4 does not run on Oracle Java 7 on Ubuntu 14.04

    Wow, ain’t this awkward :-). I cannot run Oracle SQL Developer 4 (4.0.2) on Ubuntu with Oracle JDK 7..

    To be complete: when running SQL Developer with JDK 7 from Oracle itself, displays the following error;

    joris@dipshit:~/programs/sqldeveloper$ ./sqldeveloper.sh
    Oracle SQL Developer
    Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
    LOAD TIME : 968#
    # A fatal error has been detected by the Java Runtime Environment:
    #
    # SIGSEGV (0xb) at pc=0x6aa69be0, pid=9537, tid=1836366656
    #
    # JRE version: Java(TM) SE Runtime Environment (7.0_65-b17) (build 1.7.0_65-b17)
    # Java VM: Java HotSpot(TM) Server VM (24.65-b04 mixed mode linux-x86 )
    # Problematic frame:
    # C 0x6aa69be0
    #
    # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
    #
    # An error report file with more information is saved as:
    # /home/joris/programs/sqldeveloper/sqldeveloper/bin/hs_err_pid9537.log
    #
    # If you would like to submit a bug report, please visit:
    # http://bugreport.sun.com/bugreport/crash.jsp
    #
    /home/joris/programs/sqldeveloper/sqldeveloper/bin/../../ide/bin/launcher.sh: line 1193: 9537 Aborted (core dumped) ${JAVA} "${APP_VM_OPTS[@]}" ${APP_ENV_VARS} -classpath ${APP_CLASSPATH} ${APP_MAIN_CLASS} "${APP_APP_OPTS[@]}"

    Solution: Run Oracle SQL Developer with OpenJDK

    First we’ll need to install OpenJDK:

    sudo apt-get install openjdk-7-jdk 

    Then we’ll need to change the path which SQL Developer uses. This was asked once when you first started it and it is saved in the following path:

    ~/.sqldeveloper/4.0.0/product.conf

    The file [[ product.conf ]] contains the value SetJavaHome, we need to change this to the OpenJDK path;

    If you're running 32 bit Ubuntu:

    SetJavaHome /usr/lib/jvm/java-7-openjdk-i386

    Or if you're running 64 bit Ubuntu:

    SetJavaHome /usr/lib/jvm/java-7-openjdk-amd64

    After saving this change, you can start SQL Developer on Ubuntu 14.04 and it will use OpenJDK 7, without changing your regular Java settings!

  • SSH: Different settings (keys!) for different hosts

    There’s a simple way to create aliases in a SSH config file. This way you can connect way easier to different hosts, combined with this blog post to use keys to log in.
    Where you used to use this connect string:

    ssh [email protected]
    [email protected]'s password: <<enter boresome password>>

    You can now just enter

    ssh pi

    Where “pi” is the alias that you’ll be using!
    The only thing you’ll need to do is create the following file:
    [[ ~/.ssh/config ]]

    Host pi
      HostName 192.168.0.5
      User pi
      << (!) Only add below line if you're using keys to log in >>
      IdentityFile ~/.ssh/keys/raspberry_key

    Aint that awesome!?
    Ps. If you’re still being asked to enter your password, check your keys and please look at this blog post I wrote.
     

  • Suspend in Gnome 3

    I was searching for the suspend button in Gnome 3 and could not find it, even though I knew it was enabled when I logged into Unity and was able to suspend the same laptop..!
    Appearently it is hidden (a bit).
    This is the top right menu in Gnome 3 by default (without suspend options)
    Screenshot from 2014-08-11 13:43:44
    If you press “alt” while this menu is open, it will show the suspend button (with the pause icon):
    Screenshot from 2014-08-11 13:44:22
    So now I can suspend my laptop again!
    Happy energy savings! 🙂
     

  • SSH without password

    SSH is one of the most friendly deamons in the Linux toolbox, you can port forward your home server, you can surf the internet via your own proxy server, you can transfer files, it’s the first thing I set up on a freshly installed box and by far the most used service around my home (yeah, that’s nerdy) 🙂
    This post will outline how you can create a public and private RSA key pair, and then we will use that key pair to authenticate ourselves to another computer in the network.
    We will need to complete the following steps:

    1. Create a public/private rsa key pair
    2. Copy the public key to the remote host via ssh-copy-id
    3. Login to the remote system without a password

    Create a public/private rsa key pair

    If you haven’t created a rsa key pair yet, we can create it with this command:

    ssh-keygen

    As shown in this screenshot:
    Screenshot from 2014-07-28 21:28:18If you have previously created a key pair, you will be asked to replace this.
    For my home machines I don’t use a passphrase, if you’re more paranoid (or careful) you can do so. Please read this article for more info on passphrases and how to use them.
    The keys have been generated in /home/yourloginname/.ssh and are called id_rsa and id_rsa.pub.
    Never, never send someone your private (id_rsa) key! That is the same as handing over your house keys..

    Copy the public key to the remote host via ssh-copy-id

    This step should be repeated for all hosts to which you want to SSH with the newly created RSA key pair.
    The command used is:

    ssh-copy-id -i ~/.ssh/id_rsa [email protected]

    Screenshot from 2014-07-28 21:30:35
     
    You will need to enter your password one last time, after that your public key is added to the authorized_keys file, which is automatically created on the target system.
    After this step you don’t need to use a password any more!

    Login to the remote system without a password

    Just SSH into the remote system:
    Screenshot from 2014-07-28 21:32:01
    And wonder what you’re gonna do with all that extra time you’ve just won because entering passwords belongs to the past… 🙂
     
     

  • Authentication – Subversion on command line will not remember credentials

    I ran into this issue today on my command line SVN client.
    Every time I ran the SVN command against my repository, it asks for my password. It does remember the username but doesn’t store the password.
    There are a couple of settings to check in two different files:

    • .subversion/config
    • .subversion/servers

    .subversion/config

    The config file contains a setting which sets the password store you will be using. We need to disable all password stores and use an empty list, which is done by uncommenting (or adding) the next line

    password-stores =

    .subversion/servers

    The servers file contains settings which allow you to save your passwords in general and to save the passwords in plaintext (please be careful when choosing this option!)
    This file is divided in sections which are set with the [] brackets. In the [global] group you should uncomment (or add) the following lines:

    store-passwords = yes
    store-plaintext-passwords = yes
  • Supercharge your CLI bash history search

    This is a repost from https://coderwall.com/p/oqtj8w but it’s so handy, I want to share anyway 🙂
     
    Create ~/.inputrc and fill it with this:

    "\e[A": history-search-backward
    "\e[B": history-search-forward
    set show-all-if-ambiguous on
    set completion-ignore-case on

     

    This allows you to search through your history using the up and down arrows … i.e. type “cd /” and press the up arrow and you’ll search through everything in your history that starts with “cd /”.