Mostrando entradas con la etiqueta Servicios. Mostrar todas las entradas
Mostrando entradas con la etiqueta Servicios. Mostrar todas las entradas

martes, 11 de febrero de 2014

Creando servicios en .NET

Hola, en este post le voy a explicar cómo crear servicios de Windows con .NET. ¿Pero qué son los servicios?

Los servicios de Windows son aplicaciones que corren en segundo plano y no necesitan la interacción del usuario. De hecho ni siquiera tienen interfaz visual. Son ideales ejecutar tareas de larga duración que se ejecutan cada cierto intervalo de tiempo o al desencadenarse una acción determinada en nuestra PC. Pueden ver la definición formal que dan nuestros amigos de Microsoft acá: http://msdn.microsoft.com/es-es/library/d56de412%28v=vs.110%29.aspx

Entre los beneficios más importantes de los servicios están que se ejecutan automáticamente al inicio de Windows, incluso sin la necesidad de que un usuario se haya logado, además permiten escoger el tipo de cuenta de sesión para iniciar, lo que nos la posibilidad de administrar los permisos y privilegios con que se ejecutará el servicio.

¿Cómo podemos ver un listado de todos los servicios que están ejecutándose en nuestra PC?, muy sencillo, en Microsoft Windows 7, pulsamos el botón "Iniciar" - "Panel de control" - "Herramientas administrativas" - "Servicios". Y nos mostrara una pantalla como esta con todos los servicios instalados en nuestra PC:

clip_image002

Para desarrollar nuestro propio servicio utilizaremos Visual Studio y unos de sus proyectos personalizados para la creación de servicios:

clip_image004

Después de crear el proyecto estamos listos para desarrollar nuestro servicio. Vamos a desarrollar un servicio de ejemplo que escriba en un fichero cada 15 segundos el texto:

“Mi Primer servicio!!!!!!”

Seleccionamos el fichero Service1.cs en nuestro explorador de soluciones y tendremos algo parecido a esto:

clip_image006

Como se puede observar tenemos una clase que hereda de ServiceBase que es la clase que provee las interfaces de los métodos de OnStart() y OnStop() que son los invocados automáticamente cuando se inicia y termina el servicio. Otro punto de interés son las propiedades de los servicios entre ellas podemos destacar:

· AutoLog: Indica si los comandos Iniciar, Detener, Pausar y Continuar deben notificarse en el registro de eventos.

· CanPauseAndContinue: Obtiene o establece un valor que indica si se puede pausar y reanudar el servicio.

· CanStop: Obtiene o establece un valor que indica si puede detenerse el servicio una vez se ha iniciado.

El listado completo de todas las propiedades y sus especificaciones las pueden encontrar en: http://msdn.microsoft.com/es-es/library/system.serviceprocess.servicebase%28v=vs.110%29.aspx

En la siguiente imagen se puede ver que no hay mucha complicación, creamos un componente Timer nos registramos al evento Elapsed y cada vez que pase el tiempo configurado abrimos un fichero y escribimos en él.

clip_image008

No olvidar llamar a las funciones de inicio y fin del temporizador, en los métodos OnStart() y OnStop() del servicio:

clip_image010

Justo ahora estamos listos para hacer el instalador del servicio, esta operación es muy sencilla de realizar tan solo con oprimir click derecho sobre la vista de diseño del servicio y nos saldrá una opción para la creación del instalador:

clip_image012

En este momento se nos adicionaran dos nuevas clases a nuestra solución, serviceProcessInstaller1 y serviceInstaller1:

clip_image014

Configuramos las propiedades del instalador como muestran las siguientes imágenes. Acá podemos configurar el nombre que tendrá el servicio, la descripción, el tipo de cuenta que iniciara el servicio y otras propiedades que nos podrían ser útiles.

clip_image016 clip_image018

Ya ahora lo que nos resta es instalar nuestro servicio, para ello utilizaremos la linea de comandos del Visual Studio. La podemos encontrar en "Iniciar" - "Todos los Programas" - "Microsoft Visual Studio 2010" - "Visual Studio Tools" - "Visual Studio 2010 Command Prompt". La ejecutamos en modo administrador y utilizando el aplicación InstallUtil.exe instalamos nuestro servicio.

Para instalar : InstallUtil.exe miServicio.exe

Para desintalar : InstallUtil.exe /u miServicio.exe

clip_image020

Despues de instalado el servicio lo mandamos a iniciar, en caso que no lo este, y si todo va bien pues podremos ver como cada 15 segundos se adiciona el texto en nuestro fichero:

clip_image022

clip_image024

Esto es todo, para el próximo post les estaré comentado como depurar este tipo de aplicaciones.

{ Leer Más }


martes, 30 de julio de 2013

En la Ciudad de México 6to Simposio Internacional de SOA, Tecnología de Nube + Servicio.

clip_image002

En los días 5 y 6 de noviembre del 2013 se desarrollará en la Ciudad de México la Conferencia más Grande del Mundo Dedicada a SOA, Computación en Nube y Tecnologías Modernas de Servicio. El evento de este año atrae a oradores, conferencistas, autores y expertos de la industria de alrededor del mundo para promover el compartir de conocimientos y la experiencia en los campos cada vez más amplios de tecnología de servicio. Los temas incluirán Arquitectura Orientada al Servicio (SOA-Service Oriented Architecture), Computación en Nube, Datos Grandes, Virtualización Contemporánea, Planeación de Capacidad, Web Semántico, y muchos más

Los temas que se estarán abordando son los siguientes:

  • Patrones y arquitecturas para la Computación en la Nube.
  • Herramientas y buenas prácticas para Big Data.
  • Tecnologías emergentes e innovadoras para servicios.
  • Arquitecturas para aplicaciones móviles.
  • Arquitectura y diseño de Apis.
  • Modelos y prácticas para SOA y la Orientación a Servicios.
  • Seguridad de datos en aplicaciones hosteadas en la Nube.
  • Virtualización e Infraestructura de Servicios.
  • Arquitectura Empresarial basada en la Nube.
  • Casos de estudio reales.
  • Frameworks de gobierno para proyectos SOA y de Computación en la Nube.

Más información en http://www.servicetechsymposium.com/es/

{ Leer Más }


sábado, 25 de mayo de 2013

Desplegando un servicio axis2 en un servidor Tomcat.

clip_image002

A veces se nos pide un requerimiento dentro de proyecto de que expongamos determinadas funcionalidades vía servicios web.

Mi solución más rápida es crear un servicio en axis2 y desplegarlo en un servidor tomcat usando el mismo axis2. Veamos cómo:

Paso 1: crear el servicio axis2.

Paso 2: descargarnos el tomcat y el war del axis2 y desplegar axis2 como una aplicación dentro de tomcat.

Paso 3: desplegar el servicio dentro del axis2.

El paso 1 se puede realizar de diferentes vías. Buscando en google hay una explicada en español que salió ayer y viene como anillo al dedo para los fan de wso2. La pueden encontrar aquí.

El paso 2 es cosa de buscar las instalaciones tanto del tomcat como de axis2, descargarlos y ya. El war de axis2 debe ser desplegado como una aplicación más dentro del tomcat.

El tomcat tiene esta esta forma cuando lo descompactan.

clip_image003

En la carpeta bin lo más interesante son los ejecutables startup.sh o .bat para iniciar el servidor y el shutdown.sh o .bat para apagar el servidor. sh para linux y .bat para Windows

En la carpeta conf tenemos el fichero server.xml para la configuración de los puertos y cosas de seguridad relacionadas con los certificados si queremos usar https. También tenemos el fichero tomcat-users.xml para los usuarios iniciales del tomcat.

En la carpeta webapps es donde ponemos nuestros war, las aplicaciones, para que sean desplegadas y luce así.

clip_image005

Lo que haré ahora es tomar el war de axis2 y ponerlo en esta carpeta y arrancar el servidor. En mi caso estoy usando la versión axis2-1.6.1-war del axis2, ustedes pueden usar la más actual.

Cuando inician el server puede ir al navegador y poner esta url: http://localhost/axis2/ tengan en cuenta que estoy usando el puerto 80, si usaran el 8080 tendrían que especificarlo en la URL.

Verán algo como esto.

clip_image007

Como ven todo muy fácil y sin complicación.

Ahora vamos al paso 3. Buscamos nuestro servicio en axis2 que tendrá extensión .aar y lo copiaremos en [TOMCAT]\webapps\axis2\WEB-INF\services\ donde [TOMCAT] es la ubicación del servidor de tomcat. Usaré este servicio Echo.aar

Cuando lo hagan verán un error como este en la consola:

clip_image009

Bueno, no es que todos los tutoriales funcionan a la primera, se preguntarán. En este caso es intencional y el error se debe a que el servicio que escogí, que no es que siempre pase, se expone tanto a través de http como de https y el axis2 ni el servidor tomcat fueron configurados para soportar https.

Una solución puede ser habilitar el https, pero lo que haremos será deshabilitar este transporte en el fichero services.xml del servicio.

Para hacerlo deben meterse dentro del .aar del servicio y buscar esta ruta: Echo.aar\META-INF\ services.xml

Cuando lo abran verán lo siguiente:

clip_image011

Eliminan o comentan esta línea <transport>https</transport> y listo. Solo tienen que reiniciar el servidor y el error se habrá ido y podrán ver el servicio a través de la aplicación web de axis2.

Van a http://localhost/axis2/ dan clic en Services y ya está.

clip_image012

Si dan clic en “echo” podrán acceder al WSDL del servicio.

Luego es cosa de consumirlo nada más.

{ Leer Más }


viernes, 17 de mayo de 2013

Servicios de datos con WSO2 para resolver el acceso a datos.

En la entrada Introducción a Spring JDBC como solución a los problemas de uso e JDBC en proyectos productivos veíamos cómo podíamos implementar el acceso a datos usando Spring JDBC y luego en la entrada Sustituyendo la capa de persistencia de Spring JDBC por Spring + Hibernate hacíamos lo mismo pero usando Spring + Hibernate + Anotaciones.

En esta entrada entonces quiero ilustrarles un posible problema y la solución que se le puede dar.

Asumamos que somos los desarrolladores de una aplicación donde una de las entidades es “capítulo” y que hemos creado un DAO para dicha entidad. Esto permite que se pueda acceder desde cualquier lugar de la aplicación a los datos de “capítulo” a través del DAO correspondiente, pero que pasa si otra aplicación por algún motivo justificado necesita acceder a esos mismos datos. ¿Cómo se hace?

Soluciones pueden existir 2 o 3, pero en mi caso quiero exponerles una que he usado bastante y que consiste en crear un servicio de acceso a datos que exponga a través de SOAP o REST un conjunto de operaciones CRUD sobre dicha entidad. Pueden ver esta solución en la siguiente imagen.

image

Como se puede ver en la imagen el “Sistema propio” bien puede optar por acceder a la entidad directamente en la BD o puede hacerlo vía el servicio web. El resto de las aplicaciones tiene ahora acceso a los datos de la entidad “Capitulo” de una forma controlada gracias al uso del AS o el DSS.

Las ventajas de este enfoque son:

  • Se desarrolla más rápido el acceso a la entidad, con tan solo 3 minutos tienes creado un servicio web que cumple con todos los estándares del Stack WS-*.
  • Se puede brindar acceso a los datos de la entidad a otras aplicaciones sin requerir nuevas implementaciones.
  • La aplicación dueña de la entidad puede seguir accediendo de la manera tradicional o empezar a hacerlo desde el servicio web. Aquí si el servicio web cumple con la misma interface con que cumplía la implementación usando JDBC o Hibernate no debe haber problema para hacer el cambio.
  • Al usar la plataforma de WSO2 al servicio se le pueden incorporar facilidades para la autenticación, autorización y auditorias que aseguren un correcto acceso a los recursos.
  • El servicio expuesto es interoperable e independiente de la tecnología, o sea que se puede consumir desde cualquier lenguaje de programación.

Desventajas:

  • Por lo general se dice que el acceso a los servicios es más lento que si se accede directamente a los recursos, y es algo cierto. Lo que se debe determinar es si la latencia introducida afecta la experiencia del usuario final o del sistema. Aquí temas como el cacheo de la información juegan un papel fundamental.
  • A los desarrolladores no les gusta tener fuera de su control funcionalidades del sistema y en este caso el servicio está fuera del sistema en un servidor externo, lo que requiere un acceso diferente a la BD.
  • Si solo se requiere un servicio web para 1 entidad, la solución dada puede ser como el ejemplo de usar un cañón para matar un mosquito. Algunas otras variantes como RMI o incluso Spring Web Services puede ser más interesante de implementar. Aunque si la empresa se encuentra dentro de una iniciativa SOA o en alguna implementación de una solución de integración si tiene mucho sentido implementar un servicio de acceso a datos. Esto último lo pueden ver en la siguiente entrada Introducción a SOA y BPM.

Para aquellos que quieran ver cómo implementar un servicio de acceso a datos usando la suite de WSO2 en solo 3 minutos los invito a que vean este enlace.

El servicio que se crea por esa vía contiene las operaciones CRUD básicas y lo bueno es que luego se puede modificar para ajustarlo a nuestras necesidades. Si alguien quiere hacerlo desde cero y no usar la funcionalidad de “Generate” pues lo puede hacer sin ningún problema.

En otras entradas estaremos viendo más de estos temas.

Palabras claves: servicio web, servicio de acceso a datos, WSO2, AS, DSS, SOAP.

{ Leer Más }


domingo, 28 de abril de 2013

Introducción a la plataforma de educación a distancia Moodle


Los conceptos de educación a distancia, aulas virtuales, e-learning, entre otros, han adquirido nueva vigencia en los últimos años, por representar una eficiente y económica vía para la superación de directivos y ejecutivos de cualquier organización que precise de sus miembros una permanente actualización tecnológica y científica.
Para la educación a distancia, tienen gran importancia los Sistemas de Gestión de Aprendizaje (LMS por sus siglas en inglés: Learning Management System), pues constituyen una valiosa herramienta informática para la implementación de cursos virtuales.
Entre los LMS destaca, a nivel mundial, Moodle; su nombre es el acrónimo de Modular Object Oriented Dynamic Learning Environment (Entorno de Aprendizaje Modular Orientado a Objetos), por poseer las siguientes características: es software libre, muy efectivo para la creación de ambientes educativos virtuales pues  permite integrar herramientas de producción de recursos, comunicación, administración y gestión de cursos y usuarios, interacción en tiempo real y diferido y de creación de comunidades de usuarios y grupos específicos para desarrollo de una tarea concreta. 
Posee en este sentido, las siguientes ventajas:
  • Desarrollado en software libre, lo que evita conflictos de propiedad intelectual con relación a los cursos soportados sobre ella.
  • Su arquitectura y herramientas son apropiadas para clases en línea, así como también para complementar el aprendizaje presencial o semipresencial. 
  • Es una herramienta que permite crear y gestionar cursos, temas y/o contenidos con la inclusión de una gran cantidad de actividades y dar seguimiento exhaustivo del trabajo de los estudiantes. Permite además la comunicación a través de chat, correo electrónico  foros, potenciando el aprendizaje cooperativo.
  • Promueve una pedagogía constructivista social (colaboración, actividades, reflexión crítica, etc.). 
  • Integra en una única pantalla información completa, de manera útil y personalizada.
  • Permite colocar recursos variados para formar una unidad de contenidos.
  • Se pueden incorporar todas las actividades que se consideren necesarias en cada tema.
  • Admite variadas formas de evaluación de las tareas propuestas a los estudiantes.
  • Proporciona una información exhaustiva de la actividad de cada estudiante,  permite además el análisis de la información y la descarga de la misma a una hoja de cálculo o un documento de texto.
  • Posibilita que cada estudiante avance de acuerdo a su propio ritmo de aprendizaje.
  • Los estudiantes se familiarizan rápidamente con el entorno de la plataforma, pues su navegación resulta amigable; además es multiplataforma, por lo que corre en cualquier navegador.
  • Permite diferentes opciones de retroalimentación. 
  • Posee una sólida seguridad en toda la plataforma. 

Las características anteriormente señaladas resultan avaladas por estudios realizados por investigadores de diferentes países, así como por la significativa presencia de propuestas de cursos en línea dentro de Internet.
Un importante estudio realizado por la UDI (Universitaria de Investigación y Desarrollo, de Colombia), permitió constatar que al menos 35172 sitios de Internet emplean esta plataforma, ofertando estos 1 486 613 cursos con 14 927 351 usuarios. 
Las siguientes son algunas de las Universidades que utilizan Moodle como plataforma:

Los siguientes estudios, recomiendan el empleo de Moodle como plataforma de soporte de cursos a distancia:
  • GRAF, S. y LIST B. “An Evaluation of Open Source ELearning Platforms Stressing Adaptation Issues”. Universidad de tecnología de Viena.
  • COMEZAÑA P., Oscar y GARCÍA P., Francisco. “Plataformas para educación basada en web: Herramientas, procesos de evaluación y seguridad”.
  • “Selección de un entorno virtual de enseñanza/aprendizaje de código fuente abierto para la Universitat Jaume I”. Documento del Centro de educación y nuevas tecnologías -CENT- de la Universitat Jaume I.
  • DELGADO J., Julio y LEON A., Adolfo. “Propuesta para la creación de un centro para la Educación Virtual y desarrollo de Software”. Escuela de Ingeniería Mecánica de la Universidad Industrial de Santander.
  • http://www.edutools.info, sitio del WCET -The Western Cooperative for Educational Telecommunications-
  • http://www.gate.upm.es, Página del GATE -Gabinete de TeleEducación- de la Universidad Politécnica de Madrid.
  • http://www.ossite.org/join/sp/, JOIN proyecto europeo que busca evaluar la calidad de las plataformas de teleenseñanza (LMS).
  • http://www.elearningworkshops.com, Comunidad eLearning Workshops.
  • http://www.futureu.com, Sitio de Futureu que ofrece un informe comparativo de algunas plataformas de tipo comercial.

En resumen, Moodle, como plataforma LMS, contiene una estructura de soporte para la creación y organización pedagógica de diferentes tipos de materiales didácticos, que permite ejecutar administrar, distribuir y controlar las actividades de formación presenciales o a distancia, en función del aprendizaje en línea.

{ Leer Más }


miércoles, 10 de abril de 2013

Creando una aplicación web HTML5 en Netbeans en 5 minutos que consume datos a través de un servicio RESTful.

Exponer datos a través de una aplicación web siempre es un requerimiento en cualquier aplicación. Los IDE de desarrollo en menor o mayor grado hacen de este trabajo cada vez una simpleza mayor. Para ilustrar esta afirmación les traigo en esta entrada como exponer la información de una tabla a través de un servicio RESTful y cómo construir un cliente de este servicio que se despliega  en una aplicación HTML5. No se preocupen, no tienen que saber nada de esto. Solo seguir los pasos:

Prerrequisitos:

  • Tener un Sistema Gestor de Bases de Datos instalado, con una base de datos y tablas con información guardada. Estás serán consumidas por el servicio a desarrollar.
  • Tener un servidor de aplicaciones. Puede ser Apache tomcat o Glassfish. Almacenará la aplicación y el servicio.
  • Tener el Netbeans 7.3 con un servidor configurado para el tomcat o el Glassfish que tienes desplegado.
Paso 1:

Abrir el Netbeans y crear un proyecto web con Maven:

Paso 2:

Seleccionar en el wizard para crear un servicio RESTful con acceso a una base de datos relacional:

Paso 3:

En dependencia de como tengas la conexión a la base de datos ya sea por JNDI o creando una conexión directa con JDBC seleccionas la o las tablas necesarias y se mapean contra las entidades JPA.
Paso 4:
Luego de terminado el paso 3 tendrás esta estructura en tu proyecto:


Ahí podrás probar  el funcionamiento del servicio dando clic derecho encima de una de las operaciones y dándole a la segunda opción.

Así en 4 pasos has creado un servicio RESTful que accede a una base de datos relacional usando JPA. Ahora vamos a ver como se crea una aplicación con HTML5.

Es importante que este proyecto esté configurado para ser levantado desde el servidor tomcat y que se haya creado correctamente la conexión a la base de datos.

Paso 1:

Creas un nuevo proyecto “HTML5 Application”.


Paso 2:

En el wizard seleccionas que vas a crear un nuevo fichero que tendrá un cliente JavaScript para un servicio RESTful.


Paso 3:

Termina de configurar este cliente especificándole la salida de interfaz de usuario que deseas y el proyecto donde está  el servicio RESTful.


Cuando termines tendrás algo como esto:


Finalmente cuando ejecutes el proyecto y te habrá  en la aplicación en el servidor verás algo como esto:


Es válido aclarar que debes usar el navegador Chrome y un componente para su uso con Netbeans, de lo contrario no te funcionará.

{ Leer Más }


IconIconIcon