Ice es el acrónimo de Internet Communications Engine.

Ice Platform es una solución para comunicar sistemas de misión crítica.

Ice tiene una doble licencia:

· GPL: ”By linking with Ice (directly or indirectly, statically or dynamically, at compile time or run time), your application is subject to the terms of the GPL, which require that you release the source code of your application if and when you “distribute” it. Distributing an application includes giving it to customers, contractors, parent companies, subsidiaries, or any legal entity other than your own. Also note that the GPL does not permit you to distribute your application if it depends on non-free software (other than common operating system components), meaning that you can only distribute your application if all of its dependencies also have a license that is compatible with the GPL. “

· Comercial para proyectos en los que no encaje esta licencia. Se ofrecen varios modelos: licencias por CPU, anuales,….

Ice está diseñado con el objetivo de ser fácil de usar, robusto y de alto rendimiento y escalabilidad.

Ofrece:

.

· Portings y APIs para los principales lenguajes: desde C++, Java, C# (lenguajes .Net en general), Python, Flex, Silverlight, PHP a lenguajes como Objective-C (Ice Touch ), ActionScript y Java para Android.

· Multiplataforma: Windows, Linux, Mac OSX, Solaris, Android,

· Ofrece un IDE de desarrollo para Eclipse, Visual Studio, XCode y Flash Builder.

· Llamadas síncronas y asíncronas

· Tolerancia a fallos: con múltiples instancias de un servidor corriendo en diferentes máquinas con fail-over transparente

· Balanceo de carga

· Rendimiento: se usa un protocolo binario

· (Ice Services) Servicios para:

o distribución de eventos,

o filtrado,

o autenticación,

o monitorización,

o distribución de software,

o replicación

o persistencia

· Seguridad: tráfico puede ir por SSL, funcionamiento aún con firewalls

· Versionado

· Documentación

· Soporte

· Desarrollo cross-language

Modelo de Programación:

El modelo de programación de Ice se muestra en la figura:

En el caso de Java:

1. Definiré el interfaz de mi servicio con Slice (Specification Language for Ice):

En el ejemplo el Servidor provee un objeto de tipo Invoice con dos operaciones que podrán invocar los clientes.

El módulo es el equivalente al paquete en Java.

2. Compilaré la definición Slice a Java con:

>slice2java –output-dir generated Printer.ice

3. Escribiré el cliente Java:

En Java se puede identificar en la definición Slice cómo queremos mapear, por ejemplo:

[“java:type:java.util.ArrayList<Biz.Item>”] sequence<Item> ItemSeq;

Que genera:

java.util.ArrayList<Biz.Item> items = new java.util.ArrayList<Biz.Item>();

4. Escribiré el código del Servicio Java en la clase generada a tal efecto:

5. Escribo el código del Servidor Java para que pueda invocarlo el cliente:

6. Lanzo cliente y servidor en dos aplicaciones Java.

Servicios interesantes:

· IceStorm: sistema de distribución de eventos publish–subscribe que permite crear aplicación Push. Una invocación puede enviarse a cualquier número de suscriptores basado en tópicos.

· Freeze: permite persistir el estado de objetos Ice en una base de datos Berkeley DB

· Glacier2: servicio que permite comunicar clientes y servidores entre firewalls y NATs:

· IcePatch2: servicio de distribución de software que permite hacer update remoto de componentes:

Podéis descargar el instalador, fuentes, demos,… aquí.

Podéis seguir aprendiendo sobre Ice aquí:

Presentación completa Ice for Java: http://download.zeroc.com/Training/2.0/Java_Slides.pdf

Ice Programming for Java:http://download.zeroc.com/Training/2.0/Java_StudentWorkbook.pdf