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.
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.
Si somos usuarios de Debian y/o derivados, la instalación es muy sencilla:
# apt-get update
# apt-get install zeroc-ice33
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 ();
};
};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(), Ice.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.
Servidor:
$ python Server.py
Cliente:
$ python Client.py
Comments
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.