# JSLEE

Java Service Logic Execution Environment (JSLEE), también conocido como JAIN SLEE debido a su origen inicial bajo el programa JAIN.
Un Entorno de Ejecución de Lógicas de Servicio (SLEE) es un concepto muy conocido en la industria de telecomunicaciones. Un SLEE es un entorno de ejecución de servicios con baja latencia, alto rendimiento y orientación a eventos de forma asíncrona. JSLEE es el estándar de Java para SLEE.
JSLEE está diseñado para permitir implementaciones de estándares que atiendan los grandes requerimientos de aplicaciones de comunicaciones. La especificación de JSLEE está diseñada para que las implementaciones puedan conseguir escalabilidad y disponibilidad a través de arquitecturas de cluster.
JSLEE es el único estándar de la industria para aplicaciones de comunicaciones portables. Por ejemplo, una aplicación de comunicación puede ser escrita una vez y ser ejecutada en muchas implementaciones diferentes de JSLEE. La portabilidad de aplicaciones es posible por la combinación de un API (especificado usando el lenguaje de programación Java), una especificación técnica ambigua, una implementación de referencia, y un conjunto riguroso de tests que un vendedor debe pasar antes de que su producto cumpla con la especificación JSLEE.
JSLEE es el punto de integración para recursos de redes múltiples y protocolos. Las aplicaciones pueden usar muchos recursos de redes externas junto con el entorno JSLEE.
La especificación JSLEE permite a los desarrolladores tanto escribir componentes robustos como integrar las conocidas propiedades de transacciones ACID en el modelo de programación. Los componentes pueden ser usados para resolver problemas más complejos.

## Fundamentos de JainSlee

La arquitectura JAINSLEE define un entorno dirigido a las aplicaciones de telecomunicaciones, como una colección de componentes orientados a objetos reutilizables, y para componer estos componentes en servicios de niveles más altos y sofisticados.
La arquitectura SLEE también define la relación entre estos componentes y el contenedor que hospedará estos componentes en tiempo real. La especificación SLEE permite el desarrollo de servidores de aplicaciones altamente disponibles y escalables, y sobre todo, una vez escritas las aplicaciones. Podrá ejecutarse en cualquier entorno que implemente la especificación SLEE.
SLEE define también las interfaces de control usadas para administrar el entorno de aplicación y los componentes de aplicación ejecutados en el sistema. Define una serie de estándares que facilitan que se ofrezcan funciones comunes útiles para componentes de aplicaciones.

### Servicio

El administrador del sistema JAINSLEE controla el ciclo de vida de un servicio a través de las interfaces de manejo estándar dadas por un compliant (obediente). Un servicio incluye información que lo describe, como su nombre, su vendedor, su versión … y cualquier código del programa que sea parte del servicio. El código del programa puede incluir clases Java, perfiles y bloques de Construcción de Servicios (SBB)

### Perfil

Un perfil JAINSLEE contiene los datos suministrados. Estos tienen un esquema, que es un conjunto de atributos o propiedades, como pueden ser un número de teléfono, un correo electrónico, etc.
JSLEE define también el concepto de Especificación de Perfiles. Una Especificación de Perfiles incluye "interfaces" de manejo para modificar o actualizar un perfil, definiendo el esquema del perfil y su lógica, que puede ejecutarse para asegurar que el perfil es válido. Los SBB que corren en JAINSLEE pueden acceder a estos perfiles como una parte de su aplicación lógica.

### Service Building Block (SBB)

El elemento definido por JAINSLEE para la reutilización es el SBB. Un SBB es un componente software que envía y recibe eventos y realiza la lógica computacional basada en el recibo de estos eventos y su estado actual. Los SBBs son componentes de estado y como tales pueden recordar los resultados de cálculos previos, y esos resultados pueden aplicarse en cálculos futuros. Un SBB puede estar formado por otros SBBs, haciendo posible aplicaciones más complejas construidas por una colección de SBBs que interpretan la lógica basada en el recibo de eventos.
Los eventos son usados para representar acontecimientos importantes que pueden ocurrir en puntos arbitrarios del tiempo; por ejemplo, el acto de un sistema externo delegando al SLEE para asistir el establecimiento de la llamada puede ocurrir en cualquier momento, y es fácilmente modelable como un evento. La definición de un SBB incluye información que describe al SBB (nombre, vendedor …) los eventos que recibe y el código que proporciona la lógica del SBB, que consta de clases java.

### Evento

Un evento representa un suceso inesperado que puede requerir un proceso. Aporta información que describe el suceso (por ejemplo, un recurso externo como un protocolo de pila) del propio SLEE. De un componente dentro de SLEE los eventos son una abstracción usada para modelar sucesos inesperados que no están relacionados con ningún hilo en ejecución. Por ejemplo, considerando una llamada entre dos partes, Alicia y Borja, Alicia puede llamar a Borja en cualquier momento. El suceso inesperado de Alicia llamando al número de Borja puede ser modelado como un evento, y el suceso inesperado de Borja respondiendo al teléfono que suena, también.

### Recursos y adaptadores de recursos

Los recursos son entidades externas que interactúan con otros sistemas externos del SLEE, como una red de elementos (HLR, MSC, etc.), protocolos de pilas, directorios y bases de datos.
Un adaptador de recursos adapta las interfaces particulares y requerimientos de un recurso en interfaces y requerimientos de JAINSLEE.