GlassFish y MySQL en OpenSolaris

Siguiendo con el orden de las cosas acerca de ir conociendo un poquito de OpenSolaris, y aprovechando el frió que asolo este fin de semana a la gran Tenochtitlan, decidí agregarle unos cuantos paquetes mas al sistema, entre ellos el servidor de aplicaciones glassfish para crear unas sencillas consultas MySQL mediante jsp, he aquí el procedimiento:

Instalamos el paquete de GlassFish, mediante el gestor de paquetes de OpenSolaris.

zeratul@aiur:~$ pfexec pkg install glassfish-2
zeratul@aiur:~$ pfexec pkg info glassfish-2
                         Nombre: web/glassfish-2
                       Resumen: GlassFish Java EE 5 Application Server
                      Categoría: Web Services/Application and Web Servers
                          Estado: Instalado
     Editor: opensolaris.org
                         Versión: 2.1
                         Versión: 5.11
                  Ramificación: 0.111
Fecha de empaquetado: Mon May 18 20:20:27 2009
                         Tamaño: 81.32 MB
                              FMRI: pkg:/web/glassfish-2@2.1,5.11-0.111:20090518T202027Z

Modificamos la linea que se muestra a continuación, presente en el siguiente archivo: /usr/appserver/config/asenv.conf, donde cambiaremos la ruta desde donde iniciaremos nuestro dominio, esto con el fin de establecer los archivos de configuración con los permisos asociados a nuestro usuario, se muestra la linea original comentada y la linea haciendo referencia a nuestro home.

#AS_DEF_DOMAINS_PATH=”/var/appserver/domains”
AS_DEF_DOMAINS_PATH=”/export/home/zeratul/appserver/domains”

Creamos el dominio con la siguiente instrucción, establecemos una contraseña para el usuario admin y dejamos la contraseña por defecto para el usuario master.

zeratul@aiur:~$ asadmin create-domain --user admin --adminport 4848 --savemasterpassword=true domain1
Please enter the admin password>
Please enter the admin password again>
Please enter the master password [Enter to accept the default]:>
Please enter the master password again [Enter to accept the default]:>
Using port 4848 for Admin.
Using default port 8080 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Domain being created with profile:developer, as specified by variable AS_ADMIN_PROFILE in configuration file.
------ Using Profile [developer] to create the domain ------
XML processing for profile: Base document [/usr/appserver/lib/install/templates/default-domain.xml.template]. Profile name [developer]. Processing property [domain.xml.style-sheets].
 
The file in given locale [es_MX] at: [/usr/appserver/lib/install/templates/locales/es_MX/index.html] could not be found. Using default (en_US) index.html instead.
Security Store uses: JKS
Domain domain1 created.

Iniciamos el servicio.

zeratul@aiur:~$ asadmin start-domain domain1
Starting Domain domain1, please wait.
Default Log location is /export/home/zeratul/appserver/domains/domain1/logs/server.log.
Redirecting output to /export/home/zeratul/appserver/domains/domain1/logs/server.log
Domain domain1 failed to startup. Please check the server log for more details.
CLI156 Could not start the domain domain1.

Si se nos presenta el error anterior de que no se puede iniciar el dominio, agregamos el nombre del equipo al archivo hosts en la linea que hace referencia a la dirección de loopback.

zeratul@aiur:~$ cat /etc/hosts
::1 aiur aiur.local localhost loghost
127.0.0.1 aiur.local localhost loghost aiur	;Agregar el nombre del equipo al final de la linea (aiur)

Volvemos a iniciar el dominio donde iniciara correctamente el servicio.

zeratul@aiur:~$ asadmin start-domain domain1
Starting Domain domain1, please wait.
Default Log location is /export/home/zeratul/appserver/domains/domain1/logs/server.log.
Redirecting output to /export/home/zeratul/appserver/domains/domain1/logs/server.log
Domain domain1 is ready to receive client requests. Additional services are being started in background.
Domain [domain1] is running [Sun GlassFish Enterprise Server v2.1 (9.1.1) (build b60e-fcs)] with its configuration and logs at: [/export/home/zeratul/appserver/domains].
Admin Console is available at [http://localhost:4848].
Use the same port [4848] for "asadmin" commands.
User web applications are available at these URLs:
[http://localhost:8080 https://localhost:8181 ].
Following web-contexts are available:
[/web1  /__wstx-services ].
Standard JMX Clients (like JConsole) can connect to JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://aiur.local:8686/jmxrmi] for domain management purposes.
Domain listens on at least following ports for connections:
[8080 8181 4848 3700 3820 3920 8686 ].
Domain does not support application server clusters and other standalone instances.

Nos dirigimos a un navegador web y mediante el puerto 8080, GlassFish nos debe dar su pagina de bienvenida.

glassfish1-1

Ahora necesitamos el controlador de Java para poder conectarnos a bases de datos MySQL, descargamos la ultima versión del siguiente sitio: http://dev.mysql.com/downloads/connector/j/

Necesitamos colocar el archivo .jar que viene en el archivo comprimido dentro de la carpeta ext que se ubica en la siguiente ruta: /export/home/zeratul/appserver/domains/domain1/lib/ext

zeratul@aiur:~/appserver/domains/domain1/lib/ext$ ls
mysql-connector-java-5.1.10-bin.jar

Paramos e iniciamos el servidor glassfish para que tome los cambios.

zeratul@aiur:~$ asadmin stop-domain domain1
zeratul@aiur:~$ asadmin start-domain domain1

Ahora realizaremos un pequeño archivo jsp para realizar una sencilla consulta al servidor MySQL que guarda los registros de llamadas de nuestro Asterisk. De manera rápida crearemos un archivo llamado listar.jsp, dentro de la carpeta: /export/home/zeratul/appserver/domains/domain1/docroot

<%@ page  import="java.io.*,java.util.*,java.net.*,java.sql.*" %>
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>Ejemplo consulta  JSP</title></head>
<body><center>
<%
Connection  canal = null;
Statement instruccion=null;
ResultSet tabla= null;
String conexion =  "jdbc:mysql://mysql.demerzel.org:3306/asteriskcdr?user=asterisk&password=mysecret";
 
//Abrir el enlace
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
canal =  DriverManager.getConnection(conexion);
instruccion =  canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
}
catch(ClassNotFoundException e){ out.println(e);}
catch(SQLException e){ out.println(e);}
try{
tabla =  instruccion.executeQuery("select src, dst, calldate, sec_to_time(billsec), channel, dstchannel from cdr where billsec!=0 and disposition='ANSWERED' and calldate between '2009-12-01 00:00:00' and '2009-12-31 23:59:59' order by calldate, src, dst limit 25");
out.println("<table border=1>");
out.println("<tr><th>Origen</th><th>Destino</th><th>Fecha</th><th>Duraci&oacute;n</th><th>Canal Origen</th><th>Canal Destino</th></tr>");
while(tabla.next()){
out.println("<tr><td>"+tabla.getString(1)+"</td><td>"+tabla.getString(2)+"</td><td>"+tabla.getString(3)+"</td><td>"+tabla.getString(4)+"</td><td>"+tabla.getString(5)+"</td><td>"+tabla.getString(6)+"</td></tr>");
}
out.println("</table>");
}
catch(Exception e){  out.println(e);}
%>
</center></body>
<html>

El servidor MySQL no esta en el mismo equipo por lo tanto debemos darle los permisos adecuados al usuario para realizar consultas desde OpenSolaris. Una sentencia sencilla como la siguiente sera suficiente:

GRANT SELECT ON asteriskcdr.* TO asterisk@192.9.200.114 IDENTIFIED BY 'mysecret';

Ingresamos a la dirección web http://midirecciónip:8080/listar.jsp, y se nos debe desplegar el listado de llamadas de las que hicimos consulta.

glassfish2-1

Referencias:
El articulo original de como instalar GlassFish.
http://blogs.sun.com/observatory/en_US/entry/glassfish
De aquí tome el archivo jsp de ejemplo.
http://casidiablo.net/instalacion-de-un-entorno-web-tomcat-jsp-mysql/

One Comment

  1. Reply
    Cristian January 13, 2010

    Qué buen ejemplo… sigue así!

Leave a Reply

Your email address will not be published. Required fields are marked *