Como dijimos en otro post, estamos usando Protocol Buffers para comunicar datos entre Java y C++.

El presente post se centra en la instalación y utilización de la librería por una aplicación JEE 6.

Como imaginé – a pesar que no se encuentra en la Central >> – para usarla en Java vamos a usar Maven.

De todos modos antes tenemos que compilar el ejecutable en C++.

Para instrucciones de cómo hacerlo, refiérase a este post >> (si ud. usa Windows, déjeme decirle que tiene un problema serio, pero aún así puedo compilar Protocol Buffers >>).

Una vez hecho ésto, podemos verificar que el ejecutable esté disponible en la consola

$ protoc --version

libprotoc 2.4.1

Entonces, siguiendo el README al pie de la latra, nos situamos en la carpeta java/de la librería y corrremos los tests

protobuf-2.4.1/java$ mvn test

y nos aseguramos que todos pasen

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
...
Running com.google.protobuf.DeprecatedFieldTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 sec

Results :

Tests run: 252, Failures: 0, Errors: 0, Skipped: 0

Entonces dejamos el jar disponible en nuestro repositorio localpara usarlo en nuestra app

$ mvn install

Con éso ya podemos incluírla como dependencia en nuestro pom.xml.

Si tenemos m2eclipse lo más fácil es buscarla en la pestaña Dependencies.

Sino, ésta es la dependencia en xml

<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.4.1</version>
</dependency>

Entonces hagamos una prueba a ver si ésto funciona.
Creamos un .proto con una lista de algún tipo de dato básico

//evita conflictos dentro de protocol buffers
package ejemplo;
//especifico para Java con dominio institucional
option java_package = "com.numerica.cl.proto";
//nombre de la clase, no puede coincidor con el del message
option java_outer_classname = "CosaPB";

message Cosa{
optional int64 cdg=1;//Long
optional string nombre=2;
optional int32 x=3;
}

message Cosas{
repeated Cosa cosa=1;
}

Ésto lo compilamos con protoc

protoc --java_out=/home/dir/app/src/main/java/ CosaPB.proto

(nótese que en rigor hay que darle una directiva -I con la localización del .proto, por defecto es el directorio en que estás parado)

Una vez generada la clase, podemos usarla

import com.numerica.cl.proto.CosaPB.Cosas;
import com.numerica.cl.proto.CosaPB.Cosa;

//inicializamos
Cosas.Builder cosasB = Cosas.newBuilder();
for(MiCosa c : misCosas){
Cosa cPB= Cosa.newBuilder().setCdg(c.getCdg()).setNombre(c.getNombre()).setX(c.getX()).build();
cosasB.addCosa(cPB);
}
//construimos lista
Cosas cosas = cosasB.build();
//serializamos
FileOutputStream output = new FileOutputStream("CosasProtoBuff");
cosasB.writeTo(output);
output.close();

Era

Este sitio utiliza cookies.    Leer más