Helloworld-manualespanol

Anuncio
507953
1
Contenido
Contenido
2
Cambios
2
Introducción
3
Descripción del servicio
Introducción
Arquitectura
4
4
4
Paso a paso
Capa de negocio
Adapter
Interface
Service Proxy
Fichero de propiedades
Despliegue del servicio
Cliente
5
5
5
7
7
9
9
10
Cambios
FECHA
15/05/2005
AUTOR
Jorge Vea-murguía Merck
CAMBIOS
Creación del documento
jvea [arroba] ita [punto] es
Instituto Tecnológico de Aragón
2
Introducción
El presente documento expone una documentación básica del primer ejemplo desarrollado por el Instituto
Tecnológico de Aragón para el proyecto Digital Business Ecosystem.
Entorno de ejecución
El presente ejemplo ha sido probado con el siguiente entorno de ejecución:
Producto / Librería
Versión
servENT
0.1.2
FADA
5.2.6.1
JVM
1.4.8_02
Lib dbe-toolkit-protocoladapter
0.5.1
Lib dbe-toolkit-proxyframework
0.6.3
Lib fada-toolkit
5.2.6.1
Lib sun-servent
0.2.1
Referencias
Para obtener más información sobre el proyecto, el lector puede acudir a las siguientes referencias:
•
Página oficial del proyecto: http://www.digital-ecosystem.org
•
Página oficial del proyecto en Aragón: http://www.ita.es/dbe
•
Página oficial con la ayuda: http://gaudi.techideas.info/dist/user_guide/
En el caso de querer contactar con el grupo, puede hacerlo en la dirección dbe [arroba] ita [punto] es
3
Descripción del servicio
Seguidamente pasamos a describir el servicio de Helloword desarrollado.
Introducción
Integración de un negocio dentro del DBE.
Arquitectura
Hay una capa que representa un aplicación final, la cual integramos en el mundo DBE. La comunicación con el
ServENT se realiza a través de un adapter, que abre un canal de comunicación utilizando RMI. En el Proxy
implementamos el cliente de RMI, el cual da paso a los clientes del DBE a la capa de negocio. Toda la
arquitectura puede estar en la misma máquina.
•
HelloWorld: responsable de recibir mensajes y guardarlos en un fichero, anotando la hora y fecha de
recepción. Es capaz de publicar en una página Web los mensajes que va recibiendo (los que están
almacenados en el fichero).
•
Client: Se ha creado un cliente que ejecuta el servicio a través de el ServENT
El interfaz que hará las veces de descriptor de servicio (SDL), será el IHelloWorldInterface.java
void addMessage (String message);
4
Paso a paso
Los pasos a seguir para poder desarrollar este servicio son los siguientes:
1- Definir una capa de negocio
2- Crear un adapter que sirva de puente entre el service Proxy y capa de negocio
3- Definir el interface del servicio del adapter.
4- Desarrollar la implementación del interface dentro del service Proxy.
5- Crear el fichero con las propiedades del servicio.
6- Desplegar el servicio en un serVENT.
7- Opcionalmente, desarrollar un cliente a modo de prueba que conecte con un servENT (el mismo o bien un
vecino) y ejecute el servicio desplegado.
Capa de negocio
En primer lugar nos creamos nuestro negocio.
Tiene dos funcionalidades básicas. La primera es la escritura en un fichero de texto y la segunda la publicación vía
Web de los mensajes almacenados en el mismo.
HelloWorld.java
Este fichero contiene el main de nuestra aplicación.
Message.java
Se encarga de escribir en el fichero mensajes
WebServer.java
Publica vía Web los mensajes almacenados en el fichero.
Adapter
Para entrar en el mundo DBE tenemos que modificar nuestro negocio. Las comunicaciones las realizamos a
través de RMI. RMI es una opción, podríamos haber utilizado Soap.
package org.dbe.demos.ita.helloworld;
import java.rmi.*;
5
import java.rmi.server.UnicastRemoteObject;
public class messageRMI extends UnicastRemoteObject implements IMessage{
public messageRMI(String name) throws RemoteException
{
super();
System.setSecurityManager(new RMISecurityManager());
try
{
Naming.rebind("rmi://193.144.228.57/IMessage",this);
System.out.println("RMI Server");
}
catch(Exception e)
{
System.err.println("Excepcion"+e.getMessage());
e.printStackTrace();
}
}
public void message(String message)throws RemoteException {
try
{
Message myMessage=Message.getInstance("message");
myMessage.addMessage(message);
}
catch(Exception e)
{
System.err.println("Excepcion"+e.getMessage());
e.printStackTrace();
}
}
6
}
Interface
Heredamos el interface de IMessage. Nos sirve de puente entre la capa de negocio y DBE. Aquí definimos las
funciones que vamos a utilizar desde el ServENT. Casualmente el interface que nos creamos es el mismo que el
que ya teníamos creado con la clase mensaje
package org.dbe.demos.ita.helloworld.client;
import org.dbe.demos.ita.helloworld.IMessage;
public interface IHelloWorldInterface extends IMessage{ }
Service Proxy
La comunicación con el adapter se realiza en el propio proxy, por lo que no sólo hace las funciones de service
Proxy. Como Proxy debe implementar el interface anterior y el interface Adapter, para que pueda ser desplegado
dentro del servENT.
package org.dbe.demos.ita.helloworld.client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import org.dbe.demos.ita.helloworld.IMessage;
import org.dbe.servent.Adapter;
import org.dbe.servent.ServiceContext;
public class HelloWorldServiceImpl implements Adapter,IHelloWorldInterface{
7
IMessage mymessageRMI;
public HelloWorldServiceImpl(){
}
public void init(ServiceContext arg0) {
System.setSecurityManager(new RMISecurityManager());
try {
mymessageRMI=(IMessage)Naming.lookup("rmi://"+
arg0.getParameter("ip")+"/IMessage");
}
catch (MalformedURLException e)
{
e.printStackTrace();
System.err.println("MalformedURLException!"+e);
}
catch (NotBoundException e)
{
e.printStackTrace();
System.err.println("NotBoundException!"+e);
}
catch (RemoteException e)
{
e.printStackTrace();
System.err.println("RemoteException!"+e);
}
}
public void destroy() {
8
}
public void message(String message) {
try {
mymessageRMI.message(message);
}
catch (RemoteException e)
{
e.printStackTrace();
System.err.println("RemoteException!"+e);
}
}
}
Fichero de propiedades
Antes de realizar el despliegue del servicio, es preciso generar el fichero con las propiedades del mismo. Para ello,
hay que generar un fichero deployment.props con la siguiente información:
•
applicationName: Nombre del servicio
•
adapter: clase que implementa el interface y hace de adapter
•
smid: identificador del service manifest
•
ip: IP es el parámetro que se lee desde la clase service proxy por el método init(), que comunica con
nuestra capa de negocio.
En nuestro ejemplo, el fichero deployment.props queda como sigue:
applicationName=ITA Helloworld Service
adapter=org.dbe.demos.ita.helloworld.client.HelloWorldServiceImpl
smid=helloword
ip=193.144.228.57
Despliegue del servicio
Para desplegar el servicio, la forma más simple es copiar el fichero de propiedades junto con las clases bajo la
carpeta deploy del servENT. La estructura final sería la siguiente:
9
Bajo la carpeta: servent/deploy/MiEjemplo/, ubicaremos:
•
El fichero deployment.props
•
La carpeta classes con todas las clases.
Primero el registro de rmiregistry desde la ruta donde tengamos las clases de la capa de negocio.
rmiregistry&
Después ejecutamos la capa de negocio con las variables de sistema de java correspondientes.
-Djava.security.police: Tendremos especia cuidado en permitir la comunicación de RMI. Para ello hay que
modificar el fichero de políticas de java o pasarle como parámetro un fichero de política que no interfiera en otros
programas de java.
-Djava.rmi.server.hostname: La Ip de la maquina que hace de servidor de RMI
-Djava.rmi.server.codebase: las clases donde estan los ficheros RMI
ejemplo para lanzar la capa de negocio
java -Djava.security.police=file:../helloworld/bin/javaallow.police -Djava.rmi.server.hostname=193.144.228.57
Djava.rmi.server.codebase=file:../helloworld/bin/ org.dbe.demos.ita.helloworld.HelloWorld
-
Por último, deberemos iniciar el ServENT o reiniciarlo en caso de que ya estuviera lanzado mediante el script
servent/bin/run.sh
Cliente
Para comprobar el correcto funcionamiento del servicio, hemos desarrollado un cliente que manda el mensaje de
hola desde el dbe. Para lanzar el cliente hay que escribir la IP de nuestro servidor DBE
A la hora de crear el ClientHelper que permite obtener la referencia al servicio, hay que poner la dirección de un
ServENT, de forma que pueda efectuar la búsqueda a través de FADA y devuelva la referencia al servicio dado.
import java.net.URL;
import org.dbe.demos.ita.helloworld.client.IHelloWorldInterface;
import org.sun.dbe.ClientHelper;
public class Client {
String _ip;
public Client(String ip) {_ip=ip;
}
public void test() {
10
try {
System.out.println("Creating ClientHelper...");
ClientHelper helper = new ClientHelper(new URL(
"http://"+_ip+":2728"));
System.out.println("Getting IHelloWorldInterface...");
IHelloWorldInterface myHelloWorld = (IHelloWorldInterface) helper.getProxy(
IHelloWorldInterface.class, new String[] { "helloworld" });
myHelloWorld.message("hola desde el dbe");
} catch (Exception ex) {
System.out.println("Don't find DBE.");
//ex.printStackTrace();
}
}
public static void main(String[] args) {
try {
Client myClient = new Client(args[0]);
myClient.test();
} catch (Exception ex) {
System.out.println("write ip server DBE...");
//ex.printStackTrace();
}
}
}
Si ejecutamos el cliente, para ver el resultado, a través de un navegador en la dirección http://legacySystem:8080/
11
Descargar