martes, 28 de abril de 2009

Web Service con Netbeans 6.5

En este post veremos la creación de Web Service utilizando el asistente de NetBeans 6.5

creamos una aplicación web cualquiera para este ejemplo utilice con soporte a JSF y le asigne el nombre de PrimerWS.




a continuación sobre el proyecto le damos nuevo y buscamos Web Service.



para este caso le asignamos un nombre "HelloWebService" y lo ubicamos dentro de package org.ws



ahora en la prespectiva de Design le damos click "add operation"



el servicio llamado "mensaje" recibe como parametro un String "name" y nos va a devolver un String.



nos vamos a la prespectiva Source y al parametro que nos llega le concatenamos el "Bienvenido :"



Agregamos las librerias correspondientes si es q no lo ha agregado el ID.



Corremos la aplicación para tener el Servicio Web activo.



Servicio Activado.



ahora para probar nuestro Web Service crearemos un Java Application



Le asignamos un nombre ClienteWS



click derecho sobre el proyecto New -> Web Service Client



Seleccionamos proyecto y luego Browse...



Seleccionamos nuestro Web Service creado en el proyecto anterior



ahora para trabajar con el servicio damos click derecho donde queremos que vaya el codigo que llama al web service en este caso lo hare en el main.



seleccionamos "mensaje"



agregamos las librerias.



y este es el codigo que nos generara, en el parametro name pongo "Luis Rondon" que va ser concatenado con el mensaje "Bienvenido :"



Corremos el main



En consola nos pintara el siguiente mensaje "Bienvenido : Luis Rondon"



hasta el proximo post

adeu

Referencias:

jueves, 23 de abril de 2009

FacesContext JSF - Tips

en JSF cuando trabajamos con los Managed Bean en ocasiones es necesario instanciar alguno en especial que se encuentra en sesion por ejemplo sessionMB que conservaria los valores de sesion como usuario activo, etc .

Podemos obtener de la siguiente manera:


NombreBeanEnSesion nombreBeanEnSesion = (NombreBeanEnSesion) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("NombreBeanEnSesion");


JSF se encarga de crear el bean, pero no de su eliminación, así que todo lo que guardemos en sesión o aplicación allí se quedará a menos que nosotros lo quitemos. Si queremos quitar un bean de la sesión (muy recomendable cuando el objeto ya no es necesario) podemos hacer algo como:


FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getSessionMap().remove("NombreBeanEnSesion");


hasta el proximo post

adeu


martes, 21 de abril de 2009

Instalación Linux Ubuntu

en construcción......

Instalación de Virtual Box


en construcción.....

LA NOTICIA DE LA SEMANA: ORACLE COMPRA SUN

Más información en http://www.oracle.com/sun. Además, tienes disponible desde mañana Martes 21 de Abril una conferencia telefónica de prensa de Sun y Oracle que se ha grabado desde corporación con los detalles del acuerdo. Para escucharla + 1 719.884.8882, passcode 923645.

Oracle Corporation (NASDAQ:ORCL) y Sun Microsystems (NASDAQ: JAVA) anuncian que han alcanzado un acuerdo definitivo en virtud del cual Oracle adquirirá Sun a un precio de 9,50 dólares por acción en efectivo. La transacción está valorada en aproximadamente 7.400 millones de dólares, ó 5.600 millones netos correspondientes al líquido y la deuda de Sun. 

“Esperamos que esta adquisición aumente los ingresos de Oracle en al menos 15 céntimos sobre una base no-GAAP en el primer ejercicio completo tras el cierre de la operación. Estimamos que el negocio adquirido contribuirá por encima de los 1.500 millones de dólares al beneficio operativo no-GAAP de Oracle en el primer año, incrementándose hasta más de los 2.000 millones de dólares en el segundo año. Esto podría hacer la adquisición de Sun más rentable en la contribución por acción durante el primer año que la que hemos previsto para las adquisiciones de BEA, PeopleSoft y Siebel todas juntas”, señala el Presidente de Oracle, Safra Catz. 

“La adquisición de Sun transforma la industria TI, combinando el mejor software empresarial y los más avanzados sistemas de computación de misión crítica”, apunta el CEO de Oracle, Larry Ellison. “Oracle será la única compañía que pueda construir un sistema integrado –de las aplicaciones a los discos- en el que todas las piezas encajan y trabajan juntas, liberando así a los usuarios. Nuestros clientes se benefician de la importante reducción de los costes de integración de los sistemas, al mismo tiempo que el rendimiento, la fiabilidad y seguridad del sistema aumentan significativamente”. 

Para Oracle, poseer los dos activos clave de software de Sun –Java y Solaris- supone sustanciales ventajas estratégicas a largo plazo que ofrecer a sus clientes. Java es una de las marcas más reconocidas en la industria informática, una de las tecnologías más ampliamente desplegadas en todo el mundo y el software más importante que Oracle ha adquirido hasta la fecha. Oracle Fusion Middleware, el negocio de mayor crecimiento de Oracle, está construido sobre el lenguaje y el software Java de Sun. Oracle puede ahora garantizar la innovación continua y la inversión en tecnología Java para beneficiar tanto a los clientes como a la comunidad Java. 

El sistema operativo Sun Solaris es, desde hace mucho tiempo, la plataforma líder para la base de datos Oracle, el mayor negocio tradicional de Oracle. Con la adquisición de Sun, Oracle puede optimizar su base de datos para algunas de las funcionalidades únicas y avanzadas de Solaris. Oracle está más comprometido que nunca con Linux y otras plataformas abiertas y continuará dando soporte y mejorando sus sólidas alianzas sectoriales. 

“Oracle y Sun han sido pioneros en el sector y colaboradores muy cercanos durante más de 20 años”, declara el Presidente de Sun, Scout McNealy. “Esta combinación es una evolución natural de nuestra relación y será una operación que defina la industria para los próximos años”. 

“Hoy es un día fantástico para los clientes, desarrolladores, socios y empleados de Sun en todo el planeta, al unir sus fuerzas con el líder mundial en software empresarial para impulsar la innovación y el valor que aportamos en todos los ámbitos del mercado tecnológico”, señala Jonathan Schwartz, CEO de Sun, “desde la plataforma Java, que toca prácticamente a cualquier sistema de negocio existente hoy en el mundo, dando infinitas posibilidades a los consumidores de dispositivos móviles y electrónica de consumo, hasta la convergencia del almacenamiento, las conexiones y la computación dirigida por el sistema operativo Solaris y los sistemas SAPRC y x64 de Sun. Junto a Oracle, ampliaremos el horizonte de la innovación para crear un valor atractivo para nuestra base de clientes y el mercado en su conjunto”. 

“Sun es un pionero en informática empresarial, y esta combinación reconoce la innovación y el éxito de los clientes que la compañía ha logrado. Nuestros mayores clientes nos han estado pidiendo que diésemos un paso más y adoptásemos un papel más amplio para reducir la complejidad, los riesgos y los costes, mediante el suministro de una gama completamente optimizada y basada en estándares”, destaca el Presidente de Oracle, Charles Phillips. “Esta operación preservará y mejorará las inversiones realizadas por nuestros clientes, mientras continuamos trabajando con nuestros socios para dar a nuestros clientes mayor margen de elección”. 

La junta directiva de Sun Microsystems ha aprobado unánimemente la transacción. Se prevé su cierre para este verano, sujeto a la aprobación de los accionistas de Sun, a determinadas aprobaciones reguladoras y a las habituales condiciones de cierre. 

Puede consultar el listado completo de las adquisiciones de Oracle en estos dos links: 

http://emeapressoffice.oracle.com/Content/Detail.asp?ReleaseID=1225&NewsAreaID=17 

http://www.oracle.com/corporate/acquisition.html 

Fuente : ORACLE

Tutorial, Manual JAVA J2EE y mas...

Muy completo vale la pena revisarlo.


Temas

- Java Programming (with Passion!)

- Performance, Debugging, Testing, Monitoring, and Management (with Passion!)
Advanced Java Progamming (with Passion!) - work in progress

- Java EE Programming (with Passion!)

- Ajax Programming (with Passion!)

- Web Services Programming (with Passion!)

- Identity Manager (with Passion!)

- Java FX Programming (with Passion!)

- mas....

http://www.javapassion.com/

lunes, 13 de abril de 2009

In2 - Sperit (España Barcelona 2009 - actualmente)

Actualmente me encuentro trabajo en SPERIT IT Consulting Services perteneciente al grupo IN2 Ingeniería de la Información.

SPERIT IT Consulting Services.
SPERIT IT Consulting Services, es una empresa que ofrece Servicios de Head Hunting y Outsourcing en el ámbito de los Sistemas de Información que tiene como objetivo el ofrecer servicios de alto valor para nuestra clientela y cree firmemente que su principal activo son las personas.


IN2 Ingeniería de la Información.
IN2, Ingeniería de la Información es una empresa que ofrece servicios de alto nivel tecnológico en el ámbito de los sistemas de información.

Visión:
La visión de IN2 es ser una empresa Innovadora, de Soluciones Tecnológicas en ámbitos concretos de mercado, de Alta Calidad, Rentable, de Prestigio y Marca re conocida, que cree firmemente que su principal activo son las personas y sabe colaborar con sus "partners" en la consecución de sus objetivos.

Objetivo:
Nuestro Objetivo es ofrecer Servicios de Alto Valor en Proyectos y Estrategias sobre Tecnologías de la Información.
Por ello estamos comprometidos con la Tecnología, desde nuestro nacimiento en 1994; con nuestros Clientes en la consecución de su Proyecto; con las Personas, verdadero activo de IN2 y con un servicio de Calidad.

Valores:
Los valores que promueve IN2 son:
aprovechar, aumentar y liberar el talento de los Colaboradores, buscando la rentabilidad, en beneficio de los Socios, Colaboradores, Clientes y Proveedores.

seguir criterios de Honradez, Coherencia, Claridad y Credibilidad. 

maximizar esfuerzos para crear un excelente clima laboral, donde los Colaboradores se sientan a gusto y crezcan, tanto profesional como personalmente.

Compromiso:
IN2 tiene como principales compromisos, la Calidad, la innovación y la obtención del beneficio esperado por los clientes.
Para ello desarrollamos y aplicamos metodologías de trabajo que proporcionan procesos de innovación y aseguramiento de la calidad.

Favorecemos el compromiso firme de nuestros colaboradores en la obtención de resultados tangibles de negocio para nuestros clientes.


jueves, 9 de abril de 2009

JPA + PORTLETS CON VISUAL WEB JSF + LIFERAY

Demo aplicando tecnologias como JPA (ver) + Portlets con Visual Jsf (ver) + Liferay (ver), para este demo se debe ver un vistazo a los links anteriores.

este demo ha sido desarrollado con el id Netbeans 6.5 y Base de Datos MySql

he tratado de ser lo mas detallado posible utilizando pantallazos.

Primero crear un proyecto con visual web JSF.





asignamos un nombre al proyecto DemoMySql.



asignamos como server a Liferay Portal Server 5.1 (ver)




en frameworks seleccionamos Portlets Support y finish




creamos nuestro primer portlet



le asignamos un nombre


creamos el Entity Bean





Seleccionamos la conexion a la BD y seleccionamos a que tabla se va a crear el Entity Bean



seleccionamos con que driver realizamos la Unidad de Persistencia para este caso usaremos HIbernate





Ahora creamos los JPA CONTROLLER



seleccionamos el Entity Bean que le vamos a crear el JPA Controller para nuevo, update delete etc...





ahora que ya tenemos los Entity Beans y los servicios para este, volvemos al nuestro portlet inicial que para este caso es portletListado, en pa prespectiva Java creamos una lista de tipo Person algo como esto

private List lista = null;

y le generamos su get y set



inicializamos la lista en el constructor



ahora hacemos lo mismo con el servicio PersonJpaController



lo inicializamos en el constructor



en el metodo _init() (puede ser cualquier metodo) creado por defecto por el netbeans cargamos la lista con el servicio creado.



llamamos el metodo _ini() en el constructor para q se realice la carga inicial del listado



ahora cambiamos a la prespectiva Design y arrastramos un componente de tipo Table



ahora procedemos a cargar la tabla con la lista creada, click derecho en la tabla y la opción Table Layout



en Get Data From seleccionamos la lista creada y seleccionamos los campos que queremos que se muestre en la tabla.





ahora corremos la aplicación agregamos el portlet creado







y tenemos nuestro demo listado funcionando




Cualquier duda, Sugerencia, comentario bienvenido sea

hasta el proximo post

martes, 7 de abril de 2009

Patron Singleton - Implementación

En ocasiones necesitamos instanciar una clase solo una vez, la solución es hacer que sea la propia clase la responsable de controlar la existencia de una única instancia. Existe un patrón de diseño clásico que dicta este comportamiento: el singleton o instancia única.


Estructura, qué es un singleton

Con un diagrama UML, un singleton es algo tan simple como lo siguiente:





Podemos observar dos características básicas:

Restricción de acceso al constructor...
Con esto conseguimos que sea imposible crear nuevas instancias.Solo la propia clase puede crear la instancia.
Mecanismo de acceso a la instancia...
El acceso a la instancia única se hace a través de un único punto bien definido, que es gestionado por la propia clase y que puede ser accedido desde cualquier parte del código – en principio -


Parece sencillo. Más adelante veremos posibles extensiones que podemos aplicar al patrón inicial.


Implementación

Ahora que sabemos como es, vamos a intentar llevarlo al código de varias maneras distintas. 1. Instanciación bajo demanda

Lo que vamos a intentar en primer lugar es coger el diseño UML propuesto y llevarlo a Java directamente. Tenemos el código siguiente:


public class Singleton {

static private Singleton singleton = null;

private Singleton() { }

static public Singleton getSingleton() {

if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}

/*
* Metodos del singleton.
*/

public String metodo() {
return "Singleton instanciado bajo demanda";
}

}



Esta implementación se caracteriza porque nuestra instancia única se crea cuando se usa por primera vez – bajo demanda – gracias a una sentencia condicional. En el siguiente punto eliminaremos esto, no por ser incorrecto, sino porque en general no es necesario.

Para utilizar nuestro Singleton solo tenemos que solicitar la instancia única del mismo. Habitualmente se hace de dos formas diferentes, la primera se usa en llamadas puntuales.


Singleton.getsingleton().metodo();



La segunda se usa cuando vamos a invocar nuestro Singleton varias veces, evitando llamadas innecesarias a métodos. Este tipo de singleton es un objeto como otro cualquiera, así que puede ser referenciado sin problemas.


Singleton s = Singleton.getSingleton();
s.metodo();



2. Instanciación automática


Como ya dije, la condición del método singleton() puede ser eliminada. Dicha condición se va a evaluar a cierto siempre salvo la primera vez. Además, el cargador de clases de Java, cuando referenciamos una clase no cargada anteriormente, se ocupa de cogerla de disco y cargarla en memoria inicializando sus miembros static.

Por tanto el siguiente código actúa exactamente igual que el caso 1, creando la instancia en la primera invocación pero eliminando la condición.


public class Singleton {

static private Singleton singleton = new Singleton();

private Singleton() { }

static public Singleton getSingleton() {
return singleton;
}

/*
* Metodos del singleton.
*/

public String metodo() {
return "Singleton ya instanciado";
}

}



Eliminar una condición puede ser una mejora pequeña o grande. Como siempre la optimización debe hacerse por las partes del código que se ejecutan extensivamente.

La manera de acceder al Singleton es la misma que en el caso 1, por supuesto.

3. No hay instancia


Java nos permite trabajar con clases sin necesidad de instanciarlas – posibilidad que usamos en los casos anteriores para acceder al Singleton-. Esta nueva implementación conserva la idea pero no su estructura, ya que aquí realmente no hay una instancia. El Singleton es una clase con métodos y atributos estáticos y nunca llega a existir un objeto.


public class Singleton {

static {
/*
* Inicializacion del singleton
*/
}

private Singleton() { }

/*
* Metodos del singleton.
*/

public static String metodo() {
return "Singleton estatico";
}

}



Con esa implementación, no podemos guardar referencias al objeto como en los casos anteriores – porque el objeto no existe – así que las invocaciones a métodos serán todas del tipo:


Singleton.metodo();



Una desventaja evidente es la necesidad de definir todos los métodos y atributos como static. Unas líneas más abajo comentaremos una posible extension del patrón básico para la cual esta implementación no es útil - a la hora de crear jerarquías de singletons -.


¿Qué usar?... En el fondo es una cuestión de estilo, gusto o de necesidades. Las soluciones propuestas son validas en muchos ámbitos.


Alguna extensión

El singleton, puede extenderse. Puede resultar interesante entre otras:

Que haya un número variable de instancias, seguimos controlando la cantidad, pero esta es mayor que uno.
Extender el singleton, siendo la superclase la que decida que instancia de una subclase debe ser devuelta, como puede verse en el diagrama.





Controlando la concurrencia

Hemos encontrado un mecanismo para tener una única instancia de un objeto y acceder a ella. Ahora bien, qué pasa en una aplicación multihilo, donde varios threads acceden simultáneamente al mismo espacio de memoria.

Posiblemente podremos cometer errores debido a inconsistencias de datos – dirty reads, escrituras fantasma, etc - . Por ello es necesario controlar el acceso concurrente, sincronizando los threads en ejecución.

La sincronización de threads en Java es capítulo aparte y por eso no nos extenderemos más. Únicamente sincronizaremos un Singleton y veremos como actúa. Este Singleton serializa las lecturas y escrituras de una variable. Para mostrar el bloqueo, asumiremos que la escritura tarda unos segundos – durmiendo al thread que escriba – y que no queremos que durante este proceso pueda leerse el valor.


public class Singleton {

static int valor;

static {
valor = 0;
}

private Singleton() { }

public static synchronized String getValor() {
return Integer.toString(valor);
}

public static synchronized void setValor(int nuevoValor) {

System.out.println(Thread.currentThread().getName() + " toma el bloqueo");
valor = nuevoValor;
try {
Thread.sleep(2000);
} catch (InterruptedException ie) { }

System.out.println(Thread.currentThread().getName() + " suelta el bloqueo");
}
}



Ahora generaremos dos hilos uno cambiará el valor y el otro intentará leer.


public class Main {

public static void main(String[] args) {

Thread t = new Thread() {
public void run() {
Singleton.setValor(25);
}
};
t.start();

t = new Thread() {
public void run() {
System.out.println(this.getName() + " intentando leer valor");
System.out.println(this.getName() + " leido valor " + Singleton.getValor());
}
};
t.start();
}
}



Si ejecutamos obtenemos la siguiente salida:


Thread-0 toma el bloqueo
Thread-1 intentando leer valor
Thread-0 suelta el bloqueo
Thread-1 leido valor 25




Esta idea, quizás, no parece tener mucho sentido con una variable entera - a no ser que sea el balance de una cuenta corriente o algo parecido- . Pero si el obtener y el fijar implicasen cambios estructurales en una lista enlazada, por ejemplo, sin proteger el acceso concurrente podemos llegar a tener inconsistencias estructurales en la misma.

Se debe tener cuidado al serializar, pues se degrada el rendimiento. Debe buscarse el máximo paralelismo con la mínima serialización. Si llegamos al punto en que no hay trabajo en paralelo, es mejor hacer que la aplicación sea monothread.


El cargador de clases y la mentira a medias

Es ahora cuando después de explicar todo esto exponemos la verdad: los singletons en Java no existen... Tras el shock inicial, pasemos a la explicación.

Antes mencioné a grandes rasgos como funciona un cargador de clases. Quedó claro que nuestra clase Singleton se encargaba de mantener una única instancia. Sin embargo, quién dice que solo existe un cargador de clases.

De existir varios cargadores de clases, podría existir un singleton diferente en cada uno pero único en el contexto de ese cargador. Cada cargador es independiente del resto.

El lector no debería preocuparse realmente. Todo es cuestión de ser cuidadosos. Si estamos seguros de que solo hay un cargador de clases – como en una aplicación standalone común – trabajamos como hasta ahora.

Si existen varios cargadores de clases pueden suceder dos cosas. Si nuestro Singleton se usa solo para lectura de datos, no hay problema. Si lo usamos para escritura de datos debemos tener en cuenta que se pueden producir inconsistencias. Montar un “protocolo de coherencia entre singletons” es inviable – a la par que absurdo -. Lo normal en estos casos es centralizar la escritura, por ejemplo en una base de datos.

Este enfoque es habitual en aplicaciones web; entornos donde suele haber múltiples cargadores de clases. Puede haber casos donde un servidor web nos de alguna alternativa. Por ejemplo, Jakarta Tomcat proporciona una manera de compartir clases entre cargadores, sin embargo, estas soluciones son desaconsejables, pues nada nos asegura que en el futuro tengamos que cambiar nuestro entorno de ejecución, invalidando estas “peculiares” soluciones.

lunes, 6 de abril de 2009

Gestion de usuarios Liferay

construcción...

Instalación Basica Liferay

Instalación básica

Un requisito previo para instalar Liferay es instalar primero el JDK (kit del desarrollo de Java). Ir a http://java.sun.com y descargar la última versión del JDK.
Instalar en la ruta por defecto que nos da la aplicación.
Ir al panel de control, ejecutamos el icono sistema. Ir a avanzado, y al botón de las variables de entorno. Agregar una variable de sistema llamada JAVA_HOME y como valor, el directorio donde se instaló el JDK.
Añadir la variable JAVA_HOME al path:
O Por consola, ejecutando “cmd”: c:\>PATH=%PATH%;%JAVA_HOME%/bin;
O Desde las variables de entorno: añadir al valor de la variable PATH, “%JAVA_HOME%/bin;”





Instalación de la última versión del paquete (bundle) de liferay.
http://sourceforge.net/project/downloading.php?group_id=49260&use_mirror=heanet&filename=liferay-portal-tomcat-5.5-5.1.2.zip&47774754
El portal de Liferay se obtiene de la página de Liferay o directamente desde Sourceforge.net. Existen diferentes versiones, recomiendo descargar la última versión estable del portal. Ésta es en gran medida la manera más rápida y fácil de instalar Liferay.
Evitar por tanto, descargar versiones que lleven el identificador RC (Release Candidate).
Puede obtener el paquete recomendado en Liferay desde la página de transferencia directa de : http://www.liferay.com/web/guest/downloads/portal.
El paquete recomendado utiliza el servlet del Tomcat como servidor de aplicaciones para ejecutar Liferay. Para instalarlo, descomprimirlo simplemente. Creará una carpeta y una estructura de la carpeta por debajo de esta. Desinstalar Liferay es tan simple como suprimir esta carpeta.


Una vez descomprimido se puede hacer funcionar inmediatamente. Utiliza una base de datos encajada (Hypersonic) vacía.
Nos posicionamos en la carpeta a la cual usted instaló Liferay. Dentro de esta carpeta debe tener una carpeta llamada bin; abrir esta carpeta. Borrar lportal.properties y lportal.log de esta carpeta, si existen.
Ya se puede arrancar el servidor Tomcat. Doble click en el archivo startup.bat. Liferay se inicia y creará automaticamente una nueva base de datos en blanco.
Para ver el portal, abrir un navegador y escribir la URL siguiente: http://localhost:8080

Acceso al portal.

Acceder a la ruta:
http://localhost:8080
Ir a la parte Sign In.
Usuario: test@liferay.com
Password: test.

Conexión a Base de Datos

Modificar el fichero C:\usr\servers\liferay\conf\Catalina\localhost\ROOT.xml
Modificación del driver de conexión
driverClassName=“com.mysql.jdbc.Driver”
Modificación URL de conexión
url=“jdbc:mysql://host/db?useUnicode=true&characterEncoding=UTF-8”
Modificación usuario
Modificación password
Creación de la estructura de tablas Liferay. Por defecto, las crea automaticamente.
En la carpeta c:\usr\dev\liferay\portal\sql\portal se encuentras los script para la creación.
Ejemplo para MySQL  c:\usr\dev\liferay\portal\sql\portal\portal-mysql.sql
Con el script .sql se genera la estructura.

Para que la base de datos funcione con Oracle, en el fichero ..\liferay\conf\Catalina\localhost\ROOT.xml, habría que descomentar la parte de Oracle y comentar la sección correspondiente a otra BD. La estructura seria parecida a esta:

Oracle

name="jdbc/LiferayPool"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@p-0112:1521:liferay6"
username="openxava"
password="openxava"
maxActive="10"


Una vez arrancado Liferay, ya se puede comenzar a administrar el portal. En el lado izquierdo de su pantalla esta el portlet de acceso. Conectar con las credenciales siguientes:
Conexión: test@liferay.com
Contraseña: test



La primera vez que se abre una sesión, se presentarán los términos legales de la página del uso. En la parte inferior de su pantalla presionar el botón aceptar.
Los términos de la pantalla pueden ser modificados para requisitos particulares más adelante si se desea.
Una vez logueados, apareceremos en la parte pública de la comunidad “Guest”.