Empezar con ZeroC Ice en Debian

IcePython

En esta receta se describe cómo instalar el middleware ZeroC ICE en Debian SID y cómo ejecutar un ejemplo básico en Python.

Introducción

ZeroC ICE es un middleware orientado a objetos, es decir, ICE proporciona herramientas, APIs, y soporte de bibliotecas para construir aplicaciones cliente-servidor orientadas a objetos. La filosofía de ZeroC ICE es la construcción de una plataforma tan potente como CORBA, pero sin cometer todos los fallos de ésta y evitando una complejidad innecesaria. ICE es software libre y está liberado bajo la licencia GNU/GPL.

Instalación

Si somos usuarios de Debian y/o derivados, la instalación es muy sencilla:

# apt-get update
# apt-get install zeroc-ice33

¡Hola, mundo!

El lenguaje de especificación de interfaces de ICE es Slice, y se utiliza para definir las interfaces, las operaciones, y los tipos de datos intercambiados entre el cliente y el servidor, entre otras cosas.

El clásico ejemplo de ¡Hola, mundo! en Slice sería muy sencillo:

module Demo {
   interface HolaMundo {
     void saludar ();
   };
};

¡Hola, mundo! en Python

Cliente:

import sys, traceback, Ice
Ice.loadSlice('holaMundo.ice', ['-I' '/usr/share/slice'])
import Demo
 
class Client (Ice.Application):
    def run (self, argv):
        basePrx = self.communicator().stringToProxy('HolaMundo:default -p 10000')
        holaMundoPrx = Demo.HolaMundoPrx.checkedCast(basePrx)
        holaMundoPrx.saludar()
        return 0
 
Client().main(sys.argv)

El cliente simplemente crea un proxy a un objeto que implementa la interfaz HolaMundo y, posteriormente, invoca a la operación saludar.

Servidor:

import sys, traceback, Ice
Ice.loadSlice('../slice/HolaMundo.ice', ['-I' '/usr/share/slice'])
import Demo
 
class HolaMundoI (Demo.HolaMundo):
    def saludar (self, current = None):
        print '¡Hola Mundo!'
 
class Server (Ice.Application):
    def run (self, argv):
        self.shutdownOnInterrupt()
        adapter = self.communicator().createObjectAdapterWithEndpoints(
            'HolaMundoAdapter', 'default -p 10000')
        adapter.add(HolaMundoI(), self.communicator().stringToIdentity('HolaMundo'))
        adapter.activate()
        self.communicator().waitForShutdown()
        return 0
 
Server().main(sys.argv)

El servidor crea un objeto de tipo HolaMundo y lo registra en un adaptador de objetos, encargado de manejar las operaciones remotas (o locales) sobre sus objetos asociados.

Ejecución

Servidor:

$ python Server.py

Cliente:

$ python Client.py

Referencias

ZeroC

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de david.villa

Por si sirve de ayuda a alguien

Aquí tenemos un repositorio con ejemplitos sencillos de ICE en distintos lenguajes:

https://arco.esi.uclm.es/svn/public/samples/ice-hello/

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.