Kotlin exercise 1: Connect to MongoDB -part 2-


In the first part of this exercise we have seen how connect to a MongoDb with Java. Now that is clear how the connection can be performed, we can try to do the same with Kotlin.
Ok, no waste other time, start coding:

import com.mongodb.BasicDBObject
import com.mongodb.MongoClient
import com.mongodb.MongoException
import java.net.UnknownHostException
import java.util.*

 * Created by Claudio on 01/05/16.
 * This is a main to test mongoDB connection in kotlin

fun main(args: Array<String>) {

        val mongo = MongoClient("localhost", 27017)

        val db = mongo.getDB("testDB")

        val table = db.getCollection("person")

        //Reflection example
        val person = Person("Jon","Doe",20);

        val data = person.javaClass;

        //Insert document
        val document = BasicDBObject()
        document.put("name", "mkyong")
        document.put("age", 30)
        document.put("createdDate", Date())

        /**** Find and display ****/
        val searchQuery = BasicDBObject();
        searchQuery.put("name", "mkyong");

        val cursor = table.find(searchQuery);

        while (cursor.hasNext()) {
    catch (e: UnknownHostException) {
        e.printStackTrace ( );
    } catch (e: MongoException) {


Sorry but the kotlin code isn’t highlighted

How we see the code is similar with Java example and the output is equal:

Schermata 2016-05-04 alle 21.10.01

This code can be converted from Java code with the intellij IDE function called: “Convert java code to kotlin code”. This can be reached from the search tool or vith copy and paste of java code to kotlin file:


For exercise the “Main.kt” code is was written from scratch.

In this little exercice I learned how connect to MongoDb and how code something more difficult to “hello world” in Kotlin.

A little step for mankind, a big step for a developer!



Kotlin exercise 1: Connect to MongoDB -part 1-


After the firts posts on Kotlin, i want to creating something more difficult. And i chose to try a database connection in Kotlin.

In this exercise i chose to connect my little application to a Mongo database. This choice is driven by a book that i started to read in  these days: “MongoDb in action”, because i want to know more about this type of database. So i decided to try to use both new things: kotlin and MongoDB.

This exercise is organized in this way: first part is a java test connection and operations with MongoDB then the same operations are written in Kotlin.

Ok, let’s start with code:

Firt of all create the instance of mongodb client and create te DB:

import com.mongodb.*;

import java.net.UnknownHostException;
import java.util.Date;

 * Created by Claudio on 30/04/16.
public class Main {

    public static void main(String[] args) {

        try {
            MongoClient mongo = new MongoClient( "localhost" , 27017 );

            DB db = mongo.getDB("testDB");

            DBCollection table;
            table = db.getCollection ("clienti");

            //Insert document
            BasicDBObject document = new BasicDBObject();
            document.put("name", "mkyong");
            document.put("age", 30);
            document.put ("createdDate", new Date ( ));

            /**** Find and display ****/
            BasicDBObject searchQuery = new BasicDBObject();
            searchQuery.put("name", "mkyong");

            DBCursor cursor = table.find(searchQuery);

            while (cursor.hasNext()) {

        } catch (UnknownHostException e) {
            e.printStackTrace ( );
        } catch (MongoException e) {


this is a little example to show how to:

  • connect to MongoDB (line 14)
  • create or get database (lines 16-19)
  • create a document (lines 22-26)
  • get insered data (lines 29-32)
  • show on standart output the datas (34-35)

The result of running this code is:

Schermata 2016-05-04 alle 21.09.20

The next part is focused on the Kotlin equivalent code.


What is great in Kotlin? Data class!


One of the great things in Kotlin is the Data class.

When you are working with a data class, you spend a lot of time to write getters and setters and equal operator and so on…

Kotlin show all his power in this situations, in fact you can write only something like this:

data class Person (val name: String, val age:Int)  //Formattare

And.. it’s all!

If you want to add a new parameter, you can add and then all it’s ok! You don’t waste your time to write new getters and setters and modify the equal operator.

Now, we want to use this data class: it’s so simple!

fun getUser(): User {
    return User("Alex", 1)

fun main(args: Array<String>) {
    val user = getUser()
    println("hello my name is  ${user.name}, and I'm ${user.id}")

    // or

    val (name, id) = getUser()
    println("hello my name is $name, and I'm $id")

    // or

    println("hello my name is ${getUser().component1()}, and I'm ${getUser().component2()}")

I think this is a cool feature of kotlin because, in this way, the code is less verbose than other lenguages.

How to set up kotlin into android project

In this post I want to show how to start an android project with some kotlin classes:

Start android studio and install the kotlin plugin: go to “search everywhere” and write plugin. In Plugins select kotlin and install it.

Schermata 2016-03-30 alle 18.11.37

Schermata 2016-03-30 alle 18.13.02.png

After this, create a new Android project and then, into search everywhere, type Configure kotlin and select Configure kotlin in project. This operation modify your build.grandle and add some rows:

Schermata 2016-03-30 alle 18.13.43

Schermata 2016-03-30 alle 18.19.18.png

After this operation it’s possible to convert java code into kotlin code, so it’s possible to convert an activity written in java, into activity written in kotlin: Select the activity to convert and then select  “Convert java file to kotlin file” from Code menu

Schermata 2016-03-30 alle 18.20.43.png


Now we can start to write our kotlin code in this android project.

Kotlin – first steps –

What is Kotlin?

From the jetbrains blog :

Kotlin is a pragmatic programming language for JVM and Android that combines OO and functional features and is focused on interoperability, safety, clarity and tooling support.

Being a general-purpose language, Kotlin works everywhere where Java works: server-side applications, mobile applications (Android), desktop applications. It works with all major tools and services…

I want to try this new programming language for two reasons:

  • I want to study something new
  • I was born as c++ developer and, for me, Kotlin is very simple to read and to understand, so i can use this language where java is used.

The number of github Kotlin projects is esponenctially increased in the last few years, so this is another good reason to start to learn this programming language.



Well, after this introduction about “why” i want to learn Kotlin, let’s start with something interesting for the developer.

Like every fist step into new programming language I started from “HelloWorld”:

fun main(args: Array&lt;String&gt;){
    println(&quot;Hello World&quot;);

These two lines of code show how to create a function (fun), how to declare the parameters accepted by the function and hoe to write something on the standard output.

For me is very simple and intuitive.

I want to go deeper into the Kotlin world!




Apache Thrift


What is Apache Thrift? Thrift is a framework. With this framework the programmers can create high-performance cross-language services.

With Thrift you can write the specifications of the contract between two or more microservices (client side and server side), and then you can generate the stub code for the right programming language.

The programming languages supported by Apache Thrift are:

AS3 C C++ C#
D Dart Delphi Erlang
Go Haskell Haxe Java
JavaScript Lua Node.js Objective-C
OCaml Perl PHP Python
Ruby Smalltalk TypeScript

The “contract”is written in IDL (Interface Definition Language). Into this file the developer specify the abstract data type. After this definition, the IDL can be compiled into source code. This step seems to be a wasting time, but is useful because the developer must consider the interface in isolation, without thoughts on code.

I think Apache Thrift is a very useful framework for this reasons:

  • The design stage of the micorservice is independent from the implementation stage
  • Is useful in heterogenic  teams: all developers can work on a project and use the preferred programming language.
  • In this way, the designer, create a contract between the services that is clear and documented.

Useful links about this argument are:


Docker: Install on linux

Docker is a technology that allow you to package an application with all it needs to run correctly into a standardized unit called container.

This idea is very useful because you can develop your application and then deploy that into the correct environment and don’t be in trouble about the target machine and the other software installed.

First of all you need to install the docker environment on your machine. I try docker on a linux mint virtualized machine. Docker doesn’t have many requirements but a reasonable modern kerlel is advised. For this point is important to verify if the wget is correctly installed, on command line write:

which wget

if the prompt respond something like this:

Schermata del 2016-01-17 08:00:05

you have wget on your machine and now we can install docker, great!

wget -qO- https://get.docker.com/ |sh

then, you linux, starts to download the file and install it.

When the installation is finished you see something like this on your consolle:

Schermata del 2016-01-17 07:56:04

now we can verify the installation:

sudo docker run hello-world

Now Docker try to find the hello-world container on you machine, if don’t find it the engine stats to download from Docker hub. At the end you read this:

Schermata del 2016-01-17 08:03:40.png

It’s important to underline that, in this way, you need to run docker with sudo. If you would like to run Docker as a non-root user, should consider adding your user to the docker group with something like:

sudo usermod -aG docker klaus

Rememeber that logout and new login is necessary!