Switching between multiple Java versions on OS X quickly

If you’re a Java developer like me, you will need to work on various Java versions. If so, adding the following in your ~./bash_profile makes switching between versions a snap. (As of this writing, I’m running on OS X El Capitan.)


alias java6='export JAVA_HOME=$(/usr/libexec/java_home -v 1.6);java -version'
alias java7='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7);java -version'
alias java8='export JAVA_HOME=$(/usr/libexec/java_home -v 1.8);java -version'
alias java9='export JAVA_HOME=$(/usr/libexec/java_home -v 9);java -version'

NOTE: Java 9 above is the beta version, so it may be 1.9 once it’s been finalized.

How to install jshell via Homebrew

At the time of this writing, Java 9 is in beta. I installed because I wanted to check out jshell, Java’s new REPL (read-evaluate-print-loop). On top of the below, I brew-installed jenv (a must for managing different JDK versions).


$ brew install Caskroom/versions/java9-beta
$ jenv add /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
$ jenv shell oracle64-9-ea
$ java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+102-2016-01-21-003129.javare.4316.nc)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+102-2016-01-21-003129.javare.4316.nc, mixed mode)
$ jshell
|  Welcome to JShell -- Version 9-ea
|  Type /help for help

-> "Hello JDK 9!"
|  Expression value is: "Hello JDK 9!"
|    assigned to temporary variable $1 of type String

I also did the following to get jshell to work:

1. Added to ~/.bash_profile


eval "$(jenv init -)"

2. Added my hostname in /etc/hosts


amp-macbook    127.0.0.1

Cheers, and enjoy learning lambdas!

Mongo DB: Iterate through a MongoCollection

This is specifically for Mongo 3.x, where MongoCollection is preferred over DBCollection. Adding for personal archiving.


MongoCollection<Document> mongoCollection =
            getMongoCollection(databaseName, collectionName);

        FindIterable<Document> documents =
            mongoCollection.find(eq(COLUMN, "lastName"))
                .sort(ascending("lastname"));

        for (Document document : documents) {
            ...
        }

Cucumber-JVM: Running a @Before step only for certain scenarios

You can make use Cucumber’s @Before and @After to execute only for certain scenarios like the below. This is especially useful if you, say, wanted to make a (Mongo) DB connection for a few test scenarios.


@Before("@mongo")
public void beforeScenario() {
  // actions
}

@After("@mongo")
public void afterScenario() {
  // actions
}

To complete the hook, you simply add “@mongo” tag to the scenarios in your feature file. Cheers!