I’m currently working on moving a Tomcat-based application into EC2. The code was written for Java 5.0. While Java 6 would probably work, I’d like to keep everything as “same” as possible, since EC2 presents its own challenges. I spun up a couple of t1.micro instances and copied everything over, including the Java 5 JDK, jdk-1_5_0_22-linux-amd64.rpm. Installing from RPM was easy, but the EC2 instance defaults to using OpenJDK 1.6:
[root@ec2 ~]# java -version java version "1.6.0_20" OpenJDK Runtime Environment (IcedTea6 1.9.10) (amazon-52.1.9.10.40.amzn1-x86_64) OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)
There were a couple of things I had to do to get the system to accept the Sun JDK as its “real” java.
Alternatives
Red Hat’s “alternatives” system is designed to allow a system to have multiple versions of a program installed and make it easy to choose which one you want to run. Unfortunately I’ve found the syntax a bit strange and always have to Google it, so I figured I’d document it here for posterity.
So here’s the default:
[root@ec2 ~]# alternatives --config java There is 1 program that provides 'java'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java Enter to keep the current selection[+], or type selection number:
Here’s how to add Sun java, assuming the java binary is in /usr/java/jdk1.5.0_22/jre/bin/java (where the RPM puts it).
[root@ec2 ~]# alternatives --install /usr/bin/java java /usr/java/jdk1.5.0_22/jre/bin/java 1 [root@ec2 ~]# alternatives --config java There are 2 programs which provide 'java'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java 2 /usr/java/jdk1.5.0_22/jre/bin/java Enter to keep the current selection[+], or type selection number: 2 [root@ec2 ~]# java -version java version "1.5.0_22" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03) Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode)
Yay! Unfortunately this doesn’t help with the other problem I had with Tomcat, which was that EC2 instances set the JAVA_HOME var to OpenJDK as well (/usr/lib/jvm/jre). Fortunately this is an easy fix as well.
Setting JAVA_HOME
The JAVA_HOME var is set in /etc/profile.d/aws-apitools-common.sh. Comment out this line:
export JAVA_HOME=/usr/lib/jvm/jre
Create a new file, /etc/profile.d/sun-java.sh, and put this in it:
export JAVA_HOME=/usr/java/jdk1.5.0_22/jre
Also in that file I added the following to instruct the JVM to process all dates in America/New_York, since that’s the timezone all of our other servers use, and it makes reading log files easier when all dates are in the same tz:
export TZ=America/New_York
(I found I had to do this even after pointing /etc/localtime to the correct zoneinfo – Java was stuck on UTC even after the rest of the system was using America/New_York.)
3 responses to “Installing Sun (Oracle) JDK 1.5 on an EC2 instance”
Great you helped me out! I'm having probelms with Jira.
Really cool doc. Nice work mate!
Thanks, this is exactly what I was looking for!