Improving the Internet undersea connections

Have we got enough infrastructure for all the new mobile devices? Are we prepared for that?

Of course, from Spain I mean! I can imagine that you have read about the new massive undersea cable, which Microsoft and Facebook are going to build between Virginia Beach, USA, and Bilbao, Spain (some pieces of news: in Spanish by ElPais.es, and in English by USAtoday.com). That is the reason why I am going to write about that. As software developer, maybe it is not interesting for us, but it is pretty important in order to have a powerful software “on the cloud”.

Este post en español en este enlace

Of course, in order to connect Europe with USA, it is only possible do it by sea (undersea, of course), and Spain was using the connections with the rest of Europe (France, UK, …), which are connected with the USA. In fact, Spain has a direct connection with the USA (the Submarine Cable called Columbus-III), which connect Florida (USA) with Conil, in the south of Spain (and other places in Portugal and Italy), but it is not good enough for all the connections between both countries.

By the moment, you can see the current undersea connections on this website, submarinecablemap.com, which will be improved during the next years with the new connections.

undersea.PNG

Mejorando las conexiones de Internet por mar

¿Tenemos suficientes infraestructuras para todos los nuevos dispositivos móviles? ¿Estamos preparados para ello?

Por su puesto, me referio a España! Puedo imaginar que habrás leido sobre el nuevo cable submarino que Microsoft yFacebook van a construir entre Virginia Beach, USA, yBilbao, Spain (algunos artículos de noticias: en español por ElPais.es, y en inglés por USAtoday.com). Esta es la razón por la que voy a escribir sobre esto. Como software developer, quizás este no es interesante para nosotros, pero es bastante importante para tener un software más poderoso “en la nube”.

This post is in English in this link

Por su puesto, para conectar Europa con Estados Unidos, es posible hacerlo solo por mare (por su profundidades, claro), y España estaba usando las conexiones con el resto de Europa (Francia, Reino Unido, …) las cuales conectan con Estados Unidos: De hecho, España tiene una conexión directa con dicho país (el cable submarino llamado Columbus-III), el cual conecta Florida (Estados Unidos) con Conil, en el sur de España (además de otros lugares como Portugal e Italia), pero no es suficiente para conectar ambos paises.

Por el momento, puedes ver las actuales conexiones en el mar en esta web, submarinecablemap.com, las cuales serán mejoradas durante los proximos años con nuevas conexiones.

undersea.PNG

Maven: What is its purpose? How to install it? Examples

What is its purpose?

Apache Maven is a built automation tool used normally for Java projects. Maven has a XML file called pom.xml (Project Object Model), and that file describes the software project being built, its dependencies on other external modules and components, the build order, directories, and required plug-ins. The nice is that Maven dynamically downloads Java libraries and Maven plug-ins from several repositories, and stores them in a local cache.

In order to work, Maven can create your project quickly with a simple command since the sell (Linux/Mac/…) or cmd (Windows).

The directory structure for a Java project is very simple:

  • Project Home:
    • src
      • main
        • java
        • resources
      • test
        • java
        • resources
    • target
    • pom.xml

A project can be generate with Maven in any directory of your computer (only it is necessary configurate the “Environment Variables” of the system).

In addiction, you can use Maven with the more powerful IDE in order to have more posibilities: Eclipse, NetBeans, IntelliJ… Maven has a plugin for Eclipse in order to allow using Maven form this IDE avoiding the use of the Maven command line interface, and NetBeans includes full Maven support.

For example, I normally generate the project with Maven, add new libraries / plug-ins in the pom.xml file, and work with Eclipse for edit the code. In order to compile the project, you can use Maven and Eclipse separalety. This is an example of a pom.xml file:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.jmsimo</groupId>
  <artifactId>2014.01.07.1400</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>2014.01.07.1400</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongo-java-driver</artifactId>
      <version>2.10.1</version>
    </dependency>

    <dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>1.1.1</version>
    </dependency>

    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.19</version>
    </dependency>
  </dependencies>
</project>

Note: For the curious, this code is of a project that is using MongoDB, Spark Java and Freemarker.

In my opinion, if you never have worked with Maven, you should try to use it :)

How to install it?

Check Java version.

Are you using JDK 1.7? In order to check it: https://josemmsimo.wordpress.com/2014/01/14/how-to-install-java-jdk-and-jre-in-linux-and-windows-with-details/

Download and install Maven: http://maven.apache.org/download.cgi

download maven

Use the link of one of the binary files.

Once downloaded, unzip the file, and put the folder in a fixed directory (you don´t have to change the place of this folder in the future, for example, in Windows you could put the folder in C:\ ).

Now, you need add the “bin” folder to the “Environment variables”. For example, working with Windows, you could have this path: C:\apache-maven-3.2.1\bin

Note: If you don’t know how add this path to the “environment variables”, review the link for install the JDK 1.7 (in one step, it is configurated the path for Java, so that do the same for Maven).

Creating a new Maven project

And here starts the good :)

Using cmd / shell, go to the folder where you want create the project. In Windows:

  • Start / Run, and type cmd (for open the cmd.exe), and click there.
  • Once with the terminal, type: mvn archetype:generate
  • It will generate several lines. At the end (maybe in 5 or 10 seconds), the system will ask: “Choose a number or apply filter…” with a number. Click enter for use the default.
  • Later it will ask the version for use. Click enter for default (the last one).
  • Later it will ask the groupId. Type, for example: com.myfirstmaven
  • Later it will ask the artifactId for the class. Type, for example: MFM
  • Later it will ask the version. Click enter for default.
  • Later it will ask the default java packet. Type, for example: com.mypackage
  • Later it will ask for confirm. Click enter for ok.

mavenCMD

Ok, now we have a project created with an excelent structure in the folder C:\Users\j (in my case).

That project is (in my case) in: C:\Users\j\MFM, where you could see:

  • src
    • main
      • java
        • com
          • mypackage
            • App.java
    • test
      • java
        • com
          • mypackage
            • AppTest.java
  • pom.xml

The App.java file has only the typicall “Hello world”.

For compile and execute it, type: mvn compile exec:java -Dexec.mainClass=”com.mypackage.App”

mavenCompile

Ok, it was pretty simple. The current pom.xml is the basic one.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

<groupId>com.myfirstmaven</groupId>
 <artifactId>MFM</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>

<name>MFM</name>
 <url>http://maven.apache.org</url>

<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>

<dependencies>
 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
 </dependency>
</dependencies>
</project>

Remember that you can use Eclipse, IntelliJ or other in order to edit. For compile, with Eclipse for example, you could compile the file Api.java indendently without problems, so that since now, you could use the IDE where you are more comfortable.

Adding new libraries

This is my favorite part. For add dependencies, you don’t need download new libraries. Maven will do it! For do it, you only need load a new dependency in the pom.xml file (you can check the first pom.xml file with JUnit, MongoDB and SparkJava and FreeMarker). In the last pom.xml file, I have the JUnit by default. For add the MongoDB, the final result will be so:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.myfirstmaven</groupId>
<artifactId>MFM</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>MFM</name>
<url>http://maven.apache.org</url>

<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
 </dependency>
 <dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>2.10.1</version>
 </dependency>
</dependencies>
</project>

Links

How to install Java JDK and JRE in Linux and Windows (with details)

[En Español: clic aquí]

The JDK has a collection of progamming tools, including java, javac, javadoc, javaws, jar, apt, appletviewer, visualVM, etc. Too, the JDK also comes with a complete Java Runtime Environment, usually called a private runtime, due to the fact that it is separated from the “regular” JRE and has extra contents. It consists of a Java Virtual Machine and all of the class libraries present in the production environment, as well as additional libraries only useful to developers, such as the internationalization libraries and the IDL libraries (wikipedia reference).

So, the JDK is necessary for several things that I have proposed in this blog during some years, so that I have decided include an article more complete about it. There are others JDKs (different to Java JDK): for example OpenJDK. Here, I am going to write only about Java JDK.

  1. How to install Java JDK and JRE in Windows:
    1. Check if you have Java JDK 1.7 or higger in Windows.
    2. Check your “Environment Variables”.
  2. How to install Java JDK and JRE in Linux:
    1. Check if you have Java JDK 1.7 or higger in Linux.
    2. Other posibilities.

1. How to install Java JDK and JRE in Windows.

1.1. Check if you have Java JDK 1.7 or higger in Windows.

Go to “Computer” and access to “C:\Program Files\Java”, and check the folder that you have.

Folder Java

In my case, I have 2 versions of JDK (1.6 and 1.7) and 2 versions of JRE (jre6 and jre7). What is your case?

a) JDK: Do you have a folder called “jdk1.7…” (or higger)?

  • If it is so, go to the step b).
  • If you have not that folder:
    • 1. Download the Java JDK 7 since here. Accept the License Agreement if you agree, and download your Windows version.
      • Note: If you don’t know what is your version (32 or 64 bits), go to your desktop and click with the right bottom on “Computer”. You will see in the new window a line where is wrote: “System type: XX-bit Operating System”. Download the version x86 for 32 bits and the version x64 for 64 bits.

Java JDK 7 Download

    • 2. Install the Java JDK 7 that you have downloaded. It is very simple: Next, Next, Next… Finish.

b) JRE: Do you have a folder called “jre7…” (or higger)?

  • If it is so, go to the step 1.2.
  • If you have not that folder:
    • 1. Download the Java JRE 7 since here. Accept the License Agreement if you agree, and download your Windows version (the exe option is easier for install).
      • Note: If you don’t know what is your version (32 or 64 bits), go to your desktop and click with the right bottom on “Computer”. You will see in the new window a line where is wrote: “System type: XX-bit Operating System”. Download the version x86 for 32 bits and the version x64 for 64 bits.
    • 2. Install the Java JRE 7 that you have downloaded. It is very simple: Next, Next, Next… Finish (yes, it is pretty similar to the step a) xD ).

1.2. Check your “Environment Variables”.

The form easiest is:

  • Go to Start / and write in the search textbox “cmd”.
  • Click in “cmd.exe”. This is the command environment of Windows.
  • Write here: java -version

cmd java version

  • Posibilities:
    • If you have the version 1.7 or higger, you have not problem, you don’t need change your system… bye! (it is the case of the image).
    • If your have a smaller version, you need update your environment variables.
    • If you receive the text: “‘java -version’ is not recognized as an internal or external command…”, you need add a new environment variable.

If you need update or add an environment variable:

  • Go to your Desktop and click with the right bottom on “Computer”, and click on “Properties”.
  • In the new window, click in “Advanced system settings” (left side).
  • In the new window, click in “Advanced” (top side) and in the bottom “Environment Variables”.

System Properties and Environment Variables

  • In the new window, in the side of “System variables” add a new variable:
    • Check if the variable JAVA_HOME exist (and if exist, it is easier delete it and create a new one).
    • Click on “New”.
    • Variable name: JAVA_HOME
    • Variable value: C:\Program Files\Java\jdk1.7.XXX (insert your correct version)
    • Click on “OK”.
  • In the same window and in the same side (“System variables”), edit the variable “Path”:
    • Select the line where the variable is “Path”.
    • Click on “Edit”.
    • In the “Variable value”, access to the top right of the line and add: ;%JAVA_HOME%;%JAVA_HOME%\bin
      • The semicolon (;) is for separate the variables, and here is add the variable with the path and the variable with the bin path.
    • Click in “OK”.
  • Close the windows (click in OK).
  • In order to check if you have the correct version, open a new cmd.exe and write again the command: java -version

2. How to install Java JDK and JRE in Linux.

2.1. Check if you have Java JDK 1.7 or higger in Linux.

The steps are:

  • Open a terminal / shell.
  • Write the command: java -version

java version en ubuntu

  • Posibilities:
    • If you have the version 1.7 or higger, you have not problem, you don’t need change your system… bye!
    • If your have a smaller version, you need update your java version.
    • If you receive the text: “java -version: command not found”, you need add java in your system.
  • For both add and update java in the system, I recommend these simple steps:
    • Add this repository, command: sudo add-apt-repository ppa:webupd8team/java
    • Update all the respotories, command: sudo apt-get update
    • Install Oracle Java 8 and JDK 7, commands:
      • sudo apt-get install oracle-jdk7-installer
      • sudo apt-get install oracle-java8-installer
    • Check the version that the system is using, command: java -version
    • Posibilities:
      • If your version is 1.7 or higger, it is OK, everything is right (you have finished :) ).
      • If your version is smaller, we need change the versión that is running. For do it:
        • Either update the alternatives, command: sudo update-alternatives –config java
        • Or set up the Java 8 environment variables directly, command: sudo apt-get install oracle-java8-set-default

– 

2.2. Other posibilities.

  • If it is not running and you prefer uninstall it, command: sudo apt-get remove oracle-java8-installer
  • For delete the repositories:
    • Install the ppa-purge, command: sudo apt-get install ppa-purge
    • Delete the respository, command: sudo ppa-purge ppa:webupd8team/java

 

Cómo instalar Java JDK y JRE en Linux y Windows (con detalles)

[In English: click here]

El JDK tiene una colección de herramientas de desarrollo, incluyendo java, javac, javadoc, javarw, jar, apt, appletviewer, visualVM, etc. También, el JDK viene con un completo Entorno de Ejecución para Java (en inglés Java Runtime Environment, JRE), el cual consiste en una Maquina Virtual de Java y todas las librerías de clases presentes en un entorno de producción, además de librerías adicionales solo para el uso de desarrolladores, como las librerías de internationalización y las librerías IDL (referencia de la wikipedia).

Así pues, el JDK es necesario para diversas cosas que he propuesto en este blog durante algunos años, así que he decidido incluir un artículo más completo sobre esto. Hay otros JDKs (direrentes a Java JDK): por ejemplo OpenJDK. Aquí, escribiré solo sobre Java JDK.

  1. Cómo instalar Java JDK y JRE en Windows:
    1. Comprueba si tienes Java JDK 1.7 o superior en Windows.
    2. Comprueba tus “Variables de Entorno”.
  2. Cómo instalar Java JDK y JRE en Linux:
    1. Comprueba si tienes Java JDK 1.7 o superior en Linux.
    2. Otras posibilidades.

1. Cómo instalar Java JDK y JRE en Windows.

1.1. Comprueba si tienes Java JDK 1.7 o superior en Windows.

Ve a “Mi PC” y accede a “C:\Archivos de programa\Java”, y comprueba si tienes esta carpeta.

Folder Java

En mi caso, tengo 2 versiones de JDK (1.6 y 1.7) y 2 versiones de JRE (jre6 y jre7). ¿Cuál es tu caso?

a) JDK: ¿Tienes una carpeta llamada “jdk1.7…” (o superior)?

  • Si esto es así, ve al paso b).
  • Si no tienes esa carpeta:
    • 1. Descarga Java JDK 7 desde aquí. Acepta el acuerdo de la licencia si te parece bien, y descarga tu versión para Windows.
      • Nota: Si no sabes cual es tu versión (32 o 64 bits), ve a tu escritorio y click con el botón derecho sobre “Mi PC”. Verás en la nueva ventana una linea que pondrá: “Tipo de sistema: XX-bit Sistema Operativo”. Descarga la versión x86 para 32 bits y la versión x64 para 64 bits.

Java JDK 7 Download

    • 2. Instala el Java JDK 7 que has descargado. Es muy simple: Siguiente, Siguiente, Siguiente… Finalizar.

b) JRE: ¿Tienes una carpeta llamada “jre7…” (o superior)?

  • Si esto es así, ve al paso b).
  • Si no tienes esa carpeta:
    • 1. Descarga Java JRE 6 desde aquí. Acepta el acuerdo de la licencia si te parece bien, y descarga tu versión para Windows (la opción exe es más sencilla de instalar).
      • Nota: Si no sabes cual es tu versión (32 o 64 bits), ve a tu escritorio y click con el botón derecho sobre “Mi PC”. Verás en la nueva ventana una linea que pondrá: “Tipo de sistema: XX-bit Sistema Operativo”. Descarga la versión x86 para 32 bits y la versión x64 para 64 bits..
    • 2. Instala el Java JDK 7 que has descargado. Es muy simple: Siguiente, Siguiente, Siguiente… Finalizar (si, es bastante similar a la del paso a) xD ).

1.2. Comprueba tus “Variables de Entorno”.

La forma más fácil es:

  • Ve a Inicio / y escribe en la casilla de búsqueda “cmd”.
  • Click en “cmd.exe”. Este es el entorno de comandos de Windows.
  • Escribe aquí: java -version

cmd java version

  • Posibilidades:
    • Si tienes la versión 1.7 o superior, no tienes ningún problema, no necesitas cambiar tu sistema… adios! (es el caso de la imagen superior).
    • Si tu sistema tiene una versión más pequeña, necesitas actualizar las variables de entorno.
    • Si recibes el texto: “‘java -version’ no es un comando reconocido…”, necesitarás añadir una nueva variable de entorno.

Si necesitas actualizar o añadir una variable de entorno:

  • Ve a tu escritorio y click con el botón derecho sobre “Mi PC”, y click en “Propiedades”. Desktop and click with the right bottom on “Computer”, and click on “Properties”.
  • En la ventana nueva, click en “Configuración avanzada del sistema” (en la parte izquierda).
  • En la ventana nueva, click en “Avanzada” (en la parte superior) y en el botón “Variables de entorno”.
    • Nota: Siento que las imágenes estén en inglés, pero es como tengo mi sistema. Los valores / textos serán similares.

System Properties and Environment Variables

  • En la nueva ventana, en la parte de “Variables del sistema”, añadir una nueva variable:
    • Comprobar si la variable JAVA_HOME existe (y si existe, es más fácil eliminarla y crear una nueva).
    • Click sobre “Nuevo”.
    • Nombre de variable: JAVA_HOME
    • Valor de variable: C:\Archivos de programa\Java\jdk1.7.XXX (inserta la versión correcta y asegúrate que la ruta sea la correcta)
    • Click en “OK”.
  • En la misma ventana y en el mismo lado (“Variables del sistema”), edita la variable “Path”:
    • Selecciona la variable donde el nombre es “Path”.
    • Click en “Editar”.
    • En “Valor de la variable”, accede al tope de la parte derecha y añade: ;%JAVA_HOME%;%JAVA_HOME%\bin
      • El punto y coma (;) es para separar variables, y aquí es añadieda la variable con el path y la variable con la “bin” path.
    • Click en “OK”.
  • Cierra las ventanas (click en OK).
  • Para comprobar si tienes la versión correcta, abre un nuevo cmd.exe y escribe otra vez el comando: java -version

2. Cómo instalar Java JDK y JRE en Linux.

2.1. Comprueba si tienes instalado Java JDK 1.7 o superior en Linux.

Los pasos son:

  • Abre el terminal / shell.
  • Escribe el comando: java -version

java version en ubuntu

  • Posibilidades:
    • Si tienes la versión 1.7 o superior, no tendrás ningún problema (a menos a día de hoy, enero de 2014), así que no necesitas cambiar cosas en tu sistema… adiós!
    • Si tienes una versión más pequeña, necesitas actualizar tu versión de java (es el caso de la imagen.
    • Si recibes el texto: “java -version: command not found”, necesitarás añadir java en tu sistema.
  • Para tanto actualizar como añadir  java en el sistema, recomiento estos sencillos pasos:
    • Añadir este repositorio, comando: sudo add-apt-repository ppa:webupd8team/java
    • Actualizar todos los repositorios, comando: sudo apt-get update
    • Instalar Oracle Java 8 y JDK 7, comandos:
      • sudo apt-get install oracle-jdk7-installer
      • sudo apt-get install oracle-java8-installer
    • Comprobar la versión que tu sistema está ahora utilizando, comando: java -version
    • Posibilidades:
      • Si tu versión es 1.7 o superior, ya está todo hecho, todo está correcto (si, has terminado :) ).
      • Si tu versión es más antigua, necesitas cambiar la versión que está funcionando por defecto. Para ello:
        • O actualizas entre las alternativas que tienes, comando: sudo update-alternatives –config java
        • O estableces a Java 8 como variable de entorno directamente, comando: sudo apt-get install oracle-java8-set-default

– 

2.2. Otras posibilidades.

  • No está funcionando bien y prefieres desinstalarlo, comando: sudo apt-get remove oracle-java8-installer
  • Para eliminar los repositorios:
    • Instalar el ppa-purge primero, comando: sudo apt-get install ppa-purge
    • Eliminar el repositorio, comando: sudo ppa-purge ppa:webupd8team/java

 

Conectando una aplicación Java con MongoDB en Windows

MongoDB es un sistema de base de datos NoSQL orientado a documentos y de código abierto. MongoDB, a diferencia de MySQL que guarda los datos en tablas de bases de datos relaciones, guarda estructuras de datos en documentos tipo JSON con un esquema dinámico (cuyo formato es llamado BSON). Con MongoDB, la integración de datos en ciertas aplicaciones es más fácil y rápida.

Esta guía / tutorial para conectar y utilizar datos de MongoDB usando Java en Windows 7 (aunque creo que con Windows 8 también funcionaría). Las partes que lo componen son:

  1. Instalación de MongoDB.
    1. Descarga de MongoDB.
    2. Descomprime MongoDB.
    3. Configura variables de entorno.
    4. Crea el archivo de configuración.
    5. Crea las carpetas para datos y logs.
    6. Ejecuta el servidor de MongoDB.
    7. Probar a ejecutar MongoDB.
  2. Descarga del driver mongo-java.
  3. Creación de un proyecto simple en Java (con Eclipse).
    1. Estructura básica del proyecto Java.
    2. Añadiendo código para imprimir las bases de datos MongoDB.
    3. Añadiendo una nueva base de datos a MongoSQL y operaciones (ejemplo 1).
    4. Añadiendo una nueva base de datos a MongoSQL y operaciones (ejemplo 2).

.

1. Instalación de MongoDB.

1.1. Descarga de MongoDB.

En primer lugar, descarga e instala MongoDB: http://www.mongodb.org/downloads

mongodb1

Como puedes ver, puedes instalar MongoDB en Windows, Linux, Mac OS X y Solaris (en la misma web, tienes otros instaladores para otros sistemas, como FreeBSD, Debian, Gentoo, etc.). Debes de tener en cuenta si tu sistema operativo está a 32 o 64 bits.

MongoDB 2.4.8 para Windows 64 bits ocupa 101 MB comprimidos.

.

1.2. Descomprime MongoDB.

Una vez descargado, descomprime el archivo en, por ejemplo, c:\mongodb\ (crea antes la carpeta). Debe quedar un aspecto similar a éste:

mongodb2

.

1.3. Configura variables de entorno.

La carpeta bin contiene una serie de ejecutables, por lo que es conveniente añadir dicha carpeta en las variables de entorno de Windows. Para ello:

  • Click con el boton derecho sobre Mi PC / Propiedades.
  • Click en “Configuración avanzada del Sistema”
  • En la pestaña “Avanzado”, click en “Variables de Entorno”.
  • En “Variables del sistema”, en la variable “Path”, añade al final del valor “;c:\mongodb\bin\”.
  • Pulsa OK a esta ventana y a las otros.

mongodb3

.

1.4. Crea el archivo de configuración.

Crea un archivo con nombre “mongo.config” en c:\mongodb\ y en éste indica estos parámetros:

##store data here
dbpath=c:\mongodb\data

##all output go here
logpath=c:\mongodb\log\mongo.log

##log read and write operations
diaglog=3

.

1.5. Crea las carpetas para datos y logs.

Crea las carpetas “data” y “log” en “c:\mongodb\”.

En ellas se añadirán los datos de las bases de datos y los archivos logs respectivamente.

.

1.6. Ejecuta el servidor de MongoDB.

Para ejecutar el servidor de MongoDB tienes dos alternativas:

  1. Ejecutarlo en el shell de windows y dejar dicha ventana abierta todo el rato.
  2. Añadir al servidor de MongoDB como Servicio de Windows para que se inicie automáticamente cuando se arranque el sistema operativo.

La primera alternativa simplemente consiste en ejecutar “cmd.exe” (el command de Windows) e introducir el siguiente comando:

mongod –config c:\mongodb\mongo.config

Siempre que no cierres la ventana, podrás interactuar con MongoDB, ya que el servicio estará activo. El resultado será algo similar al de la imagen:

mongodb20

.

La segunda alternativa también es bastante simple, aunque en este caso se añade un nuevo servicio a Windows, y sería recomendable tenerlo parado (stop) cuando no estamos utilizándolo. Para ello, ejecuta “cmd.exe” (el command de Windows) pero en este caso como administrador (para ello, click con el botón derecho sobre “cmd.exe” y pulsa sobre “Ejecutar como administrador”) e introduce los siguientes comandos:

mongod --config c:\mongodb\mongo.config –install
net start MongoDB

mongodb21

El primer comando instala a MongoDB como un servicio de Windows, y el segundo comando inicia el servidor de MongoDB.

El resultado será algo similar al de la imagen:

mongodb22

.

Nota: Quizás en un futuro quieres detener o eliminar MongoDB como servicio de Windows. Para ello, aquí tienes estos comandos:

  • Para detener el servicio: net stop MongoDB
  • Para eliminar el servicio: mongod –remove

.

1.7. Probar a ejecutar MongoDB.

Asegúrate que instalaste y configuraste con éxito MongoDB. Para ello, ejecutar “cmd.exe” (el command de Windows) e introducir el siguiente comando:

mongo

Si todo salió con éxito, el resultado será algo similar al de la imagen:

mongodb23

.

2. Descarga del driver mongo-java.

Descárgalo desde aquí: https://github.com/mongodb/mongo-java-driver/downloads

El driver de Mongo en su versión 2.10.1 ocupa 389 KB.

Nota: Una excelente colección de drivers para MongoDB para multitud de lenguajes la tienes aquí: http://docs.mongodb.org/ecosystem/drivers/

Sugiero guardar el driver en una carpeta fácil de recordar. En mi caso, he creado en “c: \mongodb” la carpeta “drivers”, y ahí los voy guardando (c:\mongodb\drivers\).

.

3. Creación de un proyecto simple en Java (con Eclipse).

3.1. Estructura básica del proyecto Java.

La idea de esta guía es que sea lo más simple posible, por lo que realizaré un proyecto Java con Eclipse muy sencillo. Para ello:

  • Abre Eclipse.
  • Click en Archivo / Nuevo / Otros.
  • En la nueva ventana, click en Java / Java Project, y click en “Siguiente”.

mongodb10

  • Pon un nombre el proyecto, por ejemplo “mongo-project” (en mi caso ni me he complicado en la ubicación y lo crearé sobre wamp en c:\wamp\www\mongo-project), y click en “Siguiente”.

mongodb11

  • En la pestaña librerías, click en “Añadir JAR externo”, y agregamos el driver que habíamos descargado previamente, y click en “Finalizar”.

mongodb12

  • La estructura del proyecto será muy simple, tal y como se puede ver en la imagen.

mongodb13

.

3.2. Añadiendo código para imprimir las bases de datos MongoDB.

A continuación, añadir una nueva clase en nuestro proyecto Java en el que escribiremos el siguiente código. En dicho código, se crea una conexión para la base de datos y se hace un listado de las bases de datos:

import java.net.UnknownHostException;
import java.util.List;

import com.mongodb.MongoClient;

/**
 * Prueba para realizar conexión con MongoDB.
 * @author j
 *
 */
public class prueba {
	/**
	 * Main del proyecto.
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("Prueba conexión MongoDB");
		MongoClient mongo = crearConexion();

		if (mongo != null) {
			System.out.println("Lista de bases de datos: ");
			printDatabases(mongo);

		} else {
			System.out.println("Error: Conexión no establecida");
		}
	}

	/**
	 * Clase para crear una conexión a MongoDB.
	 * @return MongoClient conexión
	 */
	private static MongoClient crearConexion() {
		MongoClient mongo = null;
		try {
			mongo = new MongoClient("localhost", 27017);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}

		return mongo;
	}

	/**
	 * Clase que imprime por pantalla todas las bases de datos MongoDB.
	 * @param mongo conexión a MongoDB
	 */
	private static void printDatabases(MongoClient mongo) {
		List dbs = mongo.getDatabaseNames();
		for (String db : dbs) {
			System.out.println(" - " + db);
		}
	}
}

.

El resultado será algo similar a éste:

mongodb30

.

3.3. Añadiendo una nueva base de datos a MongoSQL y operaciones (ejemplo 1).

A continuación se añaden ciertas operaciones para hacer más fácil la visión de insert, update, select y delete archiconocido en MySQL. La sintaxis es aquí muy distinta, pero no por ello es más complicado.

En este ejemplo, el código se plasma solo en el main de una forma, llamémosle a lo bestia. Aun así, quizás así sea mucho más fácl para ser entendido por novatos:

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;

/**
 * Prueba para realizar conexión con MongoDB.
 * @author j
 *
 */
public class prueba {
	/**
	 * Main del proyecto.
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("Prueba conexión MongoDB");
		MongoClient mongo = null;
		try {
			mongo = new MongoClient("localhost", 27017);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}

		if (mongo != null) {

			//Si no existe la base de datos la crea
			DB db = mongo.getDB("bd-ejemplo");

			//Crea una tabla si no existe y agrega datos
			DBCollection table = db.getCollection("trabajador");

			//Crea los objectos básicos
			BasicDBObject document1 = new BasicDBObject();
			document1.put("nombre", "Jose");
			document1.put("apellidos", "Lopez Perez");
			document1.put("anyos", 45);
			document1.put("fecha", new Date());

			BasicDBObject document2 = new BasicDBObject();
			document2.put("nombre", "Maria");
			document2.put("apellidos", "Martinez Aguilar");
			document2.put("anyos", 35);
			document2.put("fecha", new Date());

			BasicDBObject document3 = new BasicDBObject();
			document3.put("nombre", "Juan");
			document3.put("apellidos", "Navarro Robles");
			document3.put("anyos", 25);
			document3.put("fecha", new Date());

			BasicDBObject document4 = new BasicDBObject();
			document4.put("nombre", "Lucia");
			document4.put("apellidos", "Casas Meca");
			document4.put("anyos", 66);
			document4.put("fecha", new Date());

			BasicDBObject document5 = new BasicDBObject();
			document5.put("nombre", "Jose");
			document5.put("apellidos", "Naranjo Moreno");
			document5.put("anyos", 33);
			document5.put("fecha", new Date());

			BasicDBObject document6 = new BasicDBObject();
			document6.put("nombre", "Jose Luis");
			document6.put("apellidos", "Romero Diaz");
			document6.put("anyos", 55);
			document6.put("fecha", new Date());

			BasicDBObject document7 = new BasicDBObject();
			document7.put("nombre", "Ana");
			document7.put("apellidos", "Canovas Perez");
			document7.put("anyos", 24);
			document7.put("fecha", new Date());

			BasicDBObject document8 = new BasicDBObject();
			document8.put("nombre", "Lucia");
			document8.put("apellidos", "Martinez Martinez");
			document8.put("anyos", 67);
			document8.put("fecha", new Date());

			//Insertar tablas
			table.insert(document1);
			table.insert(document2);
			table.insert(document3);
			table.insert(document4);
			table.insert(document5);
			table.insert(document6);
			table.insert(document7);
			table.insert(document8);

			//Actualiza la edad de los trabajadores con el nombre "Jose"
			BasicDBObject updateAnyos = new BasicDBObject();
			updateAnyos.append("$set", new BasicDBObject().append("anyos", 46));

			BasicDBObject searchById = new BasicDBObject();
			searchById.append("nombre", "Jose");

			table.updateMulti(searchById, updateAnyos);

			//Listar la tabla "trabajador"
			System.out.println("Listar los registros de la tabla: ");
			DBCursor cur = table.find();
			while (cur.hasNext()) {
				System.out.println(" - " + cur.next().get("nombre") + " " + cur.curr().get("apellidos") + " -- " + cur.curr().get("anyos") + " años (" + cur.curr().get("fecha") + ")");
		    }
			System.out.println();

			//Listar de la tabla "trabajador" aquellos que se llamen "Jose"
			System.out.println("Listar los registros de la tabla cuyo nombre sea Jose: ");
			BasicDBObject query = new BasicDBObject();
			query.put("nombre", "Jose");

			DBCursor cur2 = table.find(query);
			while (cur2.hasNext()) {
				System.out.println(" - " + cur2.next().get("nombre") + " " + cur2.curr().get("apellidos") + " -- " + cur2.curr().get("anyos") + " años (" + cur2.curr().get("fecha") + ")");
			}
			System.out.println();

			//Eliminar los trabajadores cuyo nombre sean "Ana"
			table.remove(new BasicDBObject().append("nombre", "Ana"));

			//Eliminar los trabajadores cuyos anyos sean mayor que 50
			BasicDBObject query2 = new BasicDBObject();
			query2.put("anyos", new BasicDBObject("$gt", 65));
			table.remove(query2);

			//Eliminar los trabajadores con los apellidos abajo indicados en la lista
			List lista = new ArrayList();
			lista.add("Casas Meca");
			lista.add("Navarro Robles");
			BasicDBObject query3 = new BasicDBObject();
			query3.put("apellidos", new BasicDBObject("$in", lista));
			table.remove(query3);

			//Listar la tabla "trabajador" (otra vez)
			System.out.println("Listar los registros de la tabla: ");
			DBCursor cur3 = table.find();
			while (cur3.hasNext()) {
				System.out.println(" - " + cur3.next().get("nombre") + " " + cur3.curr().get("apellidos") + " -- " + cur3.curr().get("anyos") + " años (" + cur3.curr().get("fecha") + ")");
		    }
			System.out.println();

			//Listar las tablas de la base de datos actual
			System.out.println("Lista de tablas de la base de datos: ");
			Set tables = db.getCollectionNames();
			for(String coleccion : tables){
				System.out.println(" - " + coleccion);
			}
			System.out.println();

			//Listas las bases de datos
			System.out.println("Lista de todas las bases de datos: ");
			List basesDeDatos = mongo.getDatabaseNames();
			for (String nombreBaseDatos : basesDeDatos) {
				System.out.println(" - " + nombreBaseDatos);
			}
			System.out.println();

			//Borrar base de datos
            db.dropDatabase();

		} else {
			System.out.println("Error: Conexión no establecida");
		}
	}
}

.

3.4. Añadiendo una nueva base de datos a MongoSQL y operaciones (ejemplo 2).

Este ejemplo está totalmente basado en el anterior. De hecho, primero cree este código separado en funciones (aquí indicado) y a continuación el del punto 3.3. para darle una lectura más simple. No obstante, este código es muy mejorable, y el separarlo por funciones no lo hace ni más rápido ni más ligero que el anterior:

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;

/**
 * Prueba para realizar conexión con MongoDB.
 * @author j
 *
 */
public class prueba2 {
	/**
	 * Main del proyecto.
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("Prueba conexión MongoDB");
		MongoClient mongo = crearConexion();

		if (mongo != null) {

			//Si no existe la base de datos la crea
			DB db = mongo.getDB("bd-ejemplo");
			System.out.println();

			//Crea una tabla si no existe y agrega datos
			insertTrabajador(db, "trabajador", "Jose", "Lopez Perez", 45);
			insertTrabajador(db, "trabajador", "Maria", "Martinez Aguilar", 35);
			insertTrabajador(db, "trabajador", "Juan", "Navarro Robles", 25);
			insertTrabajador(db, "trabajador", "Lucia", "Casas Meca", 66);
			insertTrabajador(db, "trabajador", "Jose", "Naranjo Moreno", 33);
			insertTrabajador(db, "trabajador", "Jose Luis", "Romero Diaz", 55);
			insertTrabajador(db, "trabajador", "Ana", "Canovas Perez", 24);
			insertTrabajador(db, "trabajador", "Lucia", "Martinez Martinez", 67);

			//Actualiza la edad de los trabajadores con el nombre "Jose"
			updateNombreTrabajador(db, "trabajador", "Jose", 46);

			//Listar la tabla "trabajador"
			System.out.println("Listar los registros de la tabla: ");
			selectTablas(db, "trabajador");
			System.out.println();

			//Listar de la tabla "trabajador" aquellos que se llamen "Jose"
			System.out.println("Listar los registros de la tabla cuyo nombre sea Jose: ");
			selectTablasWhere(db, "trabajador", "Jose");
			System.out.println();

			//Eliminar los trabajadores cuyo nombre sean "Ana"
			deleteTrabajadorPorNombre(db, "trabajador", "Ana");

			//Eliminar los trabajadores cuyos anyos sean mayor que 50
			deleteTrabajadorEdadMayorQue(db, "trabajador", 65);

			//Eliminar los trabajadores con los apellidos abajo indicados en la lista
			List lista = new ArrayList();
			lista.add("Casas Meca");
			lista.add("Navarro Robles");
			deleteTrabajadorEnLista(db, "trabajador", lista);

			//Listar la tabla "trabajador" (otra vez)
			System.out.println("Listar los registros de la tabla: ");
			selectTablas(db, "trabajador");
			System.out.println();

			//Listar las tablas de la base de datos actual
			System.out.println("Lista de tablas de la base de datos: ");
			printColecciones(db);
			System.out.println();

			//Listas las bases de datos
			System.out.println("Lista de todas las bases de datos: ");
			printDatabases(mongo);
			System.out.println();

			//Borrar base de datos
            db.dropDatabase();

		} else {
			System.out.println("Error: Conexión no establecida");
		}
	}

	/**
	 * Ejemplo para crear una conexión a MongoDB.
	 * @return MongoClient conexión
	 */
	private static MongoClient crearConexion() {
		MongoClient mongo = null;
		try {
			mongo = new MongoClient("localhost", 27017);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		return mongo;
	}

	/**
	 * Ejemplo que imprime por pantalla todas las bases de datos MongoDB.
	 * @param mongo conexión a MongoDB
	 */
	private static void printDatabases(MongoClient mongo) {
		List basesDeDatos = mongo.getDatabaseNames();
		for (String nombreBaseDatos : basesDeDatos) {
			System.out.println(" - " + nombreBaseDatos);
		}
	}

	/**
	 * Ejemplo que imprime por pantalla todas las colecciones / tablas de una base de datos.
	 * @param db de tipo DB
	 */
	private static void printColecciones(DB db) {
		Set tables = db.getCollectionNames();

		for(String coleccion : tables){
			System.out.println(" - " + coleccion);
		}
	}

	/**
	 * Ejemplo que inserta un registro dado un DB, nombre de tabla y campos de la tabla (id, nombre, apellidos y años).
	 * @param db
	 * @param tabla
	 * @param id
	 * @param nombre
	 * @param apellidos
	 * @param anyos
	 */
	private static void insertTrabajador(DB db, String tabla, String nombre, String apellidos, int anyos) {
		//Recoge datos de la tabla
		DBCollection table = db.getCollection(tabla);

		//Crea un objecto básico y le añade elementos
		BasicDBObject document = new BasicDBObject();
		document.put("nombre", nombre);
		document.put("apellidos", apellidos);
		document.put("anyos", anyos);
		document.put("fecha", new Date());

		//Inserta la tabla
		table.insert(document);
	}

	/**
	 * Ejemplo que modifica el campo anyos dado una DB, tabla e id de usuario.
	 * Hay varias formas de actualizar los registros, y ésta es una de ella.
	 * Otros tipos de actualización de registros aquí: http://www.mkyong.com/mongodb/java-mongodb-update-document/
	 *
	 * @param db
	 * @param tabla
	 * @param id
	 * @param nuevosAnyos
	 */
	private static void updateNombreTrabajador(DB db, String tabla, String nombre, int nuevosAnyos) {
		//Recoge datos de la tabla
		DBCollection table = db.getCollection(tabla);

		//Prepara para insertar un nuevo campo
		BasicDBObject updateAnyos = new BasicDBObject();
		updateAnyos.append("$set", new BasicDBObject().append("anyos", nuevosAnyos));

		//Busca el/los registro/s con el nombre indicado
		BasicDBObject searchById = new BasicDBObject();
		searchById.append("nombre", nombre);

		//Realiza la actualización
		table.updateMulti(searchById, updateAnyos);
	}

	/**
	 * Ejemplo que imprime por pantalla todos los trabajadores
	 * @param db
	 * @param tabla
	 */
	private static void selectTablas(DB db, String tabla) {
		//Recoge datos de la tabla
		DBCollection table = db.getCollection(tabla);

		//Busca y muestra todos los datos de la tabla
		DBCursor cur = table.find();
		while (cur.hasNext()) {
			System.out.println(" - " + cur.next().get("nombre") + " " + cur.curr().get("apellidos") + " -- " + cur.curr().get("anyos") + " años (" + cur.curr().get("fecha") + ")");
	    }
	}

	/**
	 * Ejemplo que imprime por pantalla todos los trabajadores con nombre indicado
	 * @param db
	 * @param tabla
	 * @param nombre
	 */
	private static void selectTablasWhere(DB db, String tabla, String nombre) {
		//Recoge datos de la tabla
		DBCollection table = db.getCollection(tabla);

		//Creando el filtro en el campo "nombre"
		BasicDBObject query = new BasicDBObject();
		query.put("nombre", nombre);

		//Busca y muestra todos los datos de la tabla donde "nombre" sea el indicado
		DBCursor cur = table.find(query);
		while (cur.hasNext()) {
			System.out.println(" - " + cur.next().get("nombre") + " " + cur.curr().get("apellidos") + " -- " + cur.curr().get("anyos") + " años (" + cur.curr().get("fecha") + ")");
		}
	}

	/**
	 * Ejemplo que elimina los trabajadores con nombre indicado
	 * @param db
	 * @param tabla
	 * @param nombre
	 */
	private static void deleteTrabajadorPorNombre(DB db, String tabla, String nombre) {
		//Recoge datos de la tabla
		DBCollection table = db.getCollection(tabla);

		//Indica el campo y valor y lo elimina
		table.remove(new BasicDBObject().append("nombre", nombre));
	}

	/**
	 * Ejemplo que elimina los trabajadores con una edad mayor a la indicada
	 * @param db
	 * @param tabla
	 * @param anyos
	 */
	private static void deleteTrabajadorEdadMayorQue(DB db, String tabla, int anyos) {
		//Recoge datos de la tabla
		DBCollection table = db.getCollection(tabla);

		//Indica el campo y valor que ha de ser mayor para eliminarlo
		BasicDBObject query = new BasicDBObject();
		query.put("anyos", new BasicDBObject("$gt", anyos));
		table.remove(query);
	}

	/**
	 * Ejemplo que elimina los trabajadores cuyos apellidos estén en una lista
	 * @param db
	 * @param tabla
	 * @param lista
	 */
	private static void deleteTrabajadorEnLista(DB db, String tabla, List lista) {
		//Recoge datos de la tabla
		DBCollection table = db.getCollection(tabla);

		//Indica la lista de nombres que quiere eliminar
		BasicDBObject query = new BasicDBObject();
		query.put("apellidos", new BasicDBObject("$in", lista));
		table.remove(query);
	}
}

Comparativa Frameworks PHP: Zend, Symfony, Codeigniter, Yii y Cake PHP

[In English: https://josemmsimo.wordpress.com/2013/12/02/php-frameworks-comparison-zend-symfony-codeigniter-yii-and-cake-php ]

Según la Wikipedia: “En el desarrollo de software, un framework o infraestructura digital, es una estructura conceptual y tecnológica de soporte definido, normalmente con artefactos o módulos de software concretos, que puede servir de base para la organización y desarrollo de software. Típicamente, puede incluir soporte de programas, bibliotecas, y un lenguaje interpretado, entre otras herramientas, para así ayudar a desarrollar y unir los diferentes componentes de un proyecto.”

En PHP, los frameworks más importantes son: Zend, Symfony, Codeigniter, Yii y Cake PHP. Sería recomendable perder algunas horas en aprender de forma básica como funcionan cada uno de ellos, ya que cada uno presenta detalles que pueden ser más o menos interesantes.

En esta infografía de ZFort.com hay algunos detalles interesantes:

top-php-frameworks-infographic