Las visitas de hoy a la página: 75
This page validates as XHTML 1.0, and will look much better in a browser that supports web standards, but it is accessible to any browser or Internet device. It was created using techniques detailed at glish.com/css/.
Este jueves 20 de Octubre de 2005 tendremos la Segunda Reunión de la Comunidad Java de México. El lugar nuevamente será el Hotel Galería Plaza. La cita es a las 6:30 pm. Para asistir sera necesario hacer un registro al evento, el registro es gratuito solo accedan al sitio de la Comunidad y entren a la liga de registro. Solo un detalle con el registro: Si tienes un proxy configurado sera difícil que puedas entrar, lo mejor es entrar sin proxy, ya ven problemas técnicos...
En esta ocasión me toca estar como speaker, hablare un poco de Spring y hierbas relacionadas (IoC, DI, AOP), tratare de mostrar mas código que slides, a ver como le sale el experimento. Después de mi intervención, Sun Microsystems de México tendrá su participación en el evento. Luego de un receso tendremos sesiones de intercambio de experiencias sobre Spring, Ambientes de desarrollo, Estrategias de Pruebas, Alternativas de persistencia y Desarrollo de aplicaciones móviles. Al mas puro estilo de mesa redonda debatiremos de estos temas. Ya para terminar la jornada vendrá el convivio y el networking...
A pesar de los difíciles días en el trabajo, estaré por alla divirtiéndome con mis compañeros y amigos, un poco de ocio no me caera nada mal :P
Hasta la otra...
16 de Marzo de 2005.
| 17:00 |
Bienvenida. |
Luis Antonio Mani |
| 17:20 |
Overview Java |
Jorge Vargas García |
| 18:00 |
J2SE. Panorama general. |
Juan Manuel Reyes |
| 19:00 |
J2SE. Caso práctico |
Juan Manuel Reyes |
17
de Marzo de 2005.
| 17:00 |
JDBC y persistencia |
Domingo Suárez
Torres |
| 18:00 |
J2EE. Panorama general. |
Jesus Ramos Cardona |
| 19:00 |
Mercado laboral en tecnología Java |
Emilio Osorio |
18
de Marzo de
2005.
|
17:00 |
Integrando XML, Java, TeX y DSSSL. Caso práctico |
Jorge Vargas |
| 18:00 |
Web Services |
Víctor Romero |
| 19:00 |
Desarrollo WEB. Caso práctico |
Jorge Vargas |
Me ha llegado de parte de mi estimadisimo Jesús Carmona, una canción que en verdad como dice Jésus es "Master Piece". La rolita ya tiene algo de tiempo, es del 2003, pero no por ello pierde su vigencia.
La rola trata sobre nada más y nada menos que el patrón de diseño MVC, la compuso James Dempsey que no se ahora pero en ese momento era Ingeniero de Operaciones en Apple.
Es una canción divertida, didáctica, con ritmo, agradable, la primera vez que la escuche me encanto y si ustedes no la conocen creo que bien vale la pena escucharla. Sobre todo si están empezando y no saben de que trata el patrón MVC.
En el blog de Dion Almaer pueden descargar el MP3 de esta joya, o más directo aqui http://www.oreillynet.com/pub/wlg/3533
Saludos y hasta la otra.
Un compañero del trabajo, me ha pasado un link realmente interesante, se trata de un buscador de Jar's.
Se llama Jarhoo, lo he probado y es realmente util, sobre todo cuando no sabes en que jar de los mulpiples jar's de tus aplicaciones esta esa clase que necesitas o en todo caso que no necesitas...
Se los recomiendo, http://www.jarhoo.com
Pues este lunes tuvimos una reunión informal, algunos miembros del JUG de la UPIICSA y la profesora Marina Vicario de la Academia de Informática. Platicamos sobre la realización de la I Jornada Técnica del JUG. Ya habiamos planeado la jornada para la segunda semana de noviembre, pero dado el poco tiempo, se ha movido a Marzo del 2005. Con este "colchón" de tiempo, estamos seguros que se organizara un mejor evento. :)
El viernes pasado tuvimos una reunión interna, en la cual se tomo la decisión de la emisión de una revista electronica, la cual permitira de mejor manera la transferencia de conocimientos a los miembros del JUG. El JUG ha crecido un poco, ya somos 120 :).
Poco a poco toma forma el JUG, dentro de 15 dias tendremos otra reunión, esta se esta planeando que se lleve a cabo en las instalaciones de la escuela, asi que ni modo Jorge...:)
Hay intenciones de conseguir "sponsors" para el evento, eso lo veo estos dias, espero conseguir algo para los chavos, tal vez souvenirs, playeras, etc. algo que se puedan llevar los asistentes al evento. Veremos que obtenemos...
¿Podra javaHispano participar en este evento al?
En fin, les agradezco a mis compañeros del JUG, entre ellos a Jorge Vargas, Juan Reyes, Héctor Fernández, Luis Mani, entre otros. Por su ayuda y soporte a este proyecto que cada vez más se fortalece.. Sobre todo les agradezco el haberlos conocido y conocerlos mejor...
Primero los encuentros.....
Este viernes algunos miembros del JUG de la UPIICSA, estuvimos presentes en la primera reunión de este grupo.
Ya nos habiamos tardado en hacer esta reunión, teniamos que poner en orden algunas proyectos del Grupo como:
Pues fijamos la reunión para el viernes 6 de agosto a las 19:00 hrs. en el Bar del Sanborns Aeropuerto. La papos(Miriam Garcia) y yo hemos llegado primero, ella falto al trabajo y yo me sali temprano. Estuvimos esperando un momento, poco despues llego Juan Manuel Reyes y un compañero suyo del trabajo. Mientras platicabamos llego un poco despues Jorge Vargas.
La verdad escogimos mal el lugar, en viernes y en un bar, habia mucho ruido (música viva), asi que decidimos cambiarnos para poder platicar mejor, justo en esto estabamos cuando llego Héctor Fernández y una acompañante.
Hablamos sobre la organización de la Jornada Técnica. La cual se va a realizar en la primero o segunda semana de noviembre en las instalaciones de la UPIICSA. Esta jornada se va a realizar en tres dias, cada dia va a ver 3 platicas, no pongo los titulos de las platicas, dado que pueden cambiar en los proximos dias. Espero que dentro de las siguientes dos semanas podamos ya definr bien el programa de la jornada.
Otro tema que tocamos fue una propuesta para tener nuestro propio sitio, con algunos servicios para los miembros del JUG. Yo creo que HostingJava.info, es una buena opción para nuestro hospedaje, ¿alguno de ustedes puede recomendarme algún otro?
Una propuesta de Juan Reyes fue que el grupo dejara de ser llamado el JUG de la UPIICSA y que tomara otro nombre para no cerrarlo solo a estudiantes de esta escuela, fue muy buena idea, estamos ahora pensando en el nuevo nombre de este grupo.
Pues a grandes rasgos esos fueron los temas tratados con respecto al grupo.
En toda la reunión pude apreciar el interes de los asistentes por hacer crecer este JUG. La verdad cada vez estoy más entusiasmado con este proyecto. Sobre los asistentes puedo decir que todos ellos tiene muy buenas opiniones y son muy propositivos. El ambiente que senti en la reunión fue de un gran compañerismo y camaraderia. Estoy muy contento. :) La pase muy bien, son muy agradables todos ellos...
Desde aqui les agradezco el interes demostrado en este esfuerzo compartido, ya espero la proxima reunión que será dentro de tres semanas, mientras en una lista de Yahoo, seguiremos discutendo los temas pendientes.
En el transcurso de esta semana enviare al grupo una minuta detallada sobre los temas tocados en la reunión.
Desencuentros... bueno, un desencuentro
No se que habra pasado, no lo entiendo. Y es que al principio tuve una sensación de culpabilidad, pero pues no sabia de que sentirme asi. Posteriormente me senti desorientado, tal vez un poco enojado y ahora me siento decepcionado.
La razón de esto no la conozco, yo solo puedo decir lo que paso de mi parte. No he tenido respuesta a ningún correo que le envie, y pues ya tiene tiempo de esto. Desde mayo que no lo veo. Justo una semana antes de cuando se realizo el evento en la UPIICSA de la conferencia de Siga Desarrollos.
Como mencione en alguna ocasión en este blog, lo vi por ultima vez un domingo, cuando me entrego un maletín del I Congreso de javaHispano. Se trata de RuGI, y es que la verdad, no queria hacer ningún comentrario en este blog. Pero pues no he sabido nada de el. No me ha contestado a ningún correo que le he enviado.
En mi último post de este blog, me puso un comentario, al cual conteste que estaba sorprendido de leerlo. Y la verdad que lo estaba.
Algo que me desoriento mucho, fue cuando borro el post de su blog, de la reunión que tuvimos alguna vez. Lo senti ofensivo.
Y es que en dicha reunión platicamos sobre "reunir" a la comunidad de javaHispano de México. Note en RuGI, interes en ello. Pero hasta la fecha nada de nada.
Lo que en verdad me da muchas vueltas en la cabeza cuando pienso en ello, es el motivo por el cual RuGI me ignora. Por eso me senti enojado, bueno es que no me gusta que me ignoren. Pero eso no puedo evitarlo.
La forma en la que se han dado las cosas me desorienta, pero no se que hacer. Si al menos supiera los motivos que a tenido RuGI, para ignorarme, los aceptaria. Pero cuando no sabes el porque de las cosas, no sabes que pensar o como aceptar lo que sucede.
Si algún comentario o actitud mia lastimaron la sensibilidad de RuGI, pues te pido una disculpa RuGI, aunque se que nunca fue mi intención hacerlo. De hecho no recuerdo algo ofensivo de mi parte.
Pues eso era todo.
En un proyecto que recientemente he terminado, use JFreeChart y JfreeReport, ademas de estos frameworks, use JCommons.
Ya para terminar el proyecto, le agregue al proyecto (que es una aplicación Swing), un dialogo Acerca de.
JCommons, provee un dialogo de esta naturaleza, pense: je je je, una tarea facil.
Sucede que este dialogo lo use de esta manera:
import org.jfree.ui.about.AboutFrame; import org.jfree.ui.about.ProjectInfo;
ProjectInfo projectInfo = new ProjectInfo();
projectInfo.setLogo(ResourceLoader.getImage("logoLeman.png"));
projectInfo.setName("Leman");
projectInfo.setVersion("0.9.2");
projectInfo.setCopyright("Copyright (c) 1997-2004 Yum-Ká Software.");
projectInfo.setInfo("Aplicación de un Sistema de Gestión de la Calidad");
projectInfo.setLicenceName("GNU GPL");
projectInfo.setLicenceText(ResourceLoader.getTextFile("licence-GPL.txt"));
/**
* Los siguiente métodos, reciben un objeto que
* implemente la interface List.
*/
projectInfo.setContributors(null);
projectInfo.setLibraries(null);
AboutFrame aboutFrame = new AboutFrame("Acerca de", projectInfo);
aboutFrame.show();
Hasta aquí todo sencillo y muy rápido.
Como verán, deje pendiente agregar al dialogo, la información referente a los desarrolladores y las librerias empleadas. Pues después de hacer la primera demo del proyecto, que me dicen. Es necesario saber quienes participarón en el desarrollo del proyecto. Bueno, pense, Algo trivial
Me di a la tarea de hacer lo que me habian pedido. Entonces empezaron unos cuantos detalles. Antes de seguir, deben saber, que estaba usando el J2SE SDK 1.4.2_04.
Me pidieron varios cambios, ya saben, cambios no documentados, asi que empece con aquellos que eran prioritarios. Deje al final, lo del dialogo Acerca de
Cuando llegue a esa parte, intente atacar el problema asi:
ArrayList developers = new ArrayList();
ArrayList libraries = new ArrayList();
developers.add("Desarrollador 1");
developers.add("Desarrollador 2");
developers.add("Desarrollador n...");
libraries.add("JFreeReport");
libraries.add("JFreeChart");
libraries.add("JCommons");
projectInfo.setContributors(developers);
projectInfo.setLibraries(libraries);
No lei la documentación de JCommons, asi que me lleve una grata sorpresa al ejecutar mi aplicación y al tratar de mostrar mi Acerca de....
java.lang.ClassCastException
mmm, algo anda mal, ¿Que sera?. Me tome unos minutos para checar el codigo fuente de JCommons, y descubri mi error. Resulta que el objeto contenedor que almacena los contributors y las libraries, debe almacenar objetos Contributor y Library, respectivamente.
La JVM, me escupia este error, al tratar de convertir el objeto almacenado en el ArrayList, en un Contributor, en el ArrayList, yo estaba guardando un String.
El error anterior no me hubiera pasado en tiempo de ejecución en el nuevo y flamante J2SE SDK 1.5.0-beta2-b51, lo hubiera tenido en tiempo de compilación. Esto debido a la caracteristica de Generics, disponible a partir de esta versión. Pero bueno, antes de abordar Generics y Autoboxing, les comento como resolvi mi problema y me cubri de gloria al entregar el proyecto. :P
ArrayList contributors = new ArrayList();
ArrayList libraries = new ArrayList();
Contributor c;
Library l;
c = new Contributor("Desarrollador 1", "dev01@server.com");
contributors.add(c);
c = new Contributor("Desarrollador 2", "dev02@server.com");
contributors.add(c);
c = new Contributor("Desarrollador n", "devnn@server.com");
contributors.add(c);
l = new Library("JFreeChart", "0.9.18", "license", "info");
libraries.add(l);
l = new Library("JFreeReport", "0.8.4.10", "license", "info");
libraries.add(l);
projectInfo.setContributors(contributors);
projectInfo.setLibraries(libraries);
Ahora si, pues resulta que los tipos genericos era algo que a Java la hacia mucha falta, hace tiempo C# implementa esta funconalidad, cuando lei la especificación me agrado mucho, casi me paso al lado obscuro de la fuerza. :)
En fin, explico brevemente:
El ArrayList, puede almacenar cualquier tipo de objeto Java, para ser exactos, cualquier objeto que descienda de java.lang.Object. También puede almacenar tipos de datos primitivos, gracias al Autoboxing. El Autoboxing es el proceso de convertir tipos primitivos a objetos Java y viceversa, esto de manera automatica.Esta conversión tiene la pega en el performance de la aplicación. No es recomendable utilizar en exceso el Autoboxing.
Sin generics, por ejemplo si deseamos crear una estructura que almacene objetos de una sola clase, tenemos de dos sopas:
Crear una clase contenedor, que solo admita el tipo de objeto que nosotros especifiquemos.
Dejar que el desarrollador no meta la pata y solo almacene en algún contenedor Java(ArrayList, y compañia) los objetos de la clase especificada.
Si consideramos la primera opción, esto supone trabajo extra al desarrollador, ya que necesita diseñar e implementar esta clase, un ejemplo hipotetico seria:
Supongamos que deseamos almacenar en un ArrayList objetos de esta clase.
class MiObjeto {
private String nombre;
public MiObjeto(String nombre) {
this.nombre = nombre;
}
public String toString() {
return this.nombre;
}
}
Ahora, creamos una clase se solo admita almacenar en ella objetos de tipo MiObjeto. La implementación de una clase con la funcionalidad de un ArrayList por ejemplo, requiere mucho trabajo, y eso solo para que pueda almacenar unicamente objetos MiObjeto. Si necesitamos almacenar otro tipo de objetos, hay que crear esa clase. Demasiado trabajo, para algo tan simple.
Ya vimos que si usamos el segundo enfoque, pues estamos propensos a muchos errores, y lo peor es que la mayoria de ellos solo se detectan en tiempo de ejecución.
Con generics, esto se facilita mucho, si tenemos la necesidad de una estructura que solo admita objetos de tipo MiObjeto, la implementación es muy sencilla y limpia:
public class Demo {
public static void main(String[] args) {
// podemos tener Collecciones de objetos, de tipos seguros
Collection<MiObjeto> nombres = new ArrayList<MiObjeto>();
nombres.add(new MiObjeto("domix"));
nombres.add(new MiObjeto("mirix"));
nombres.add(new MiObjeto("lulix"));
nombres.add(new MiObjeto("jessix"));
nombres.add(new MiObjeto("javix"));
// esto es fabuloso¡¡
for(MiObjeto nombre : nombres) {
System.out.println("nombre = " + nombre);
}
}
}
La salida del programa es algo parecido a esto:
E:\pruebasSDK1.5>ant
Buildfile: build.xml
compilar:
[javac] Compiling 1 source file to E:\pruebasSDK1.5\classes
probar:
[java] nombre = domix
[java] nombre = mirix
[java] nombre = lulix
[java] nombre = jessix
[java] nombre = javix
BUILD SUCCESSFUL
Total time: 3 seconds
Si el desarrollador es muy despistado y codificara algo mal, como esto:
public class Demo {
public static void main(String[] args) {
// podemos tener Collecciones de objetos, de tipos seguros
Collection<MiObjeto> nombres = new ArrayList<MiObjeto>();
nombres.add(new MiObjeto("domix"));
nombres.add(new MiObjeto("mirix"));
nombres.add(new MiObjeto("lulix"));
nombres.add(new MiObjeto("jessix"));
nombres.add(new MiObjeto("javix"));
nombres.add("burrix");
// esto es fabuloso¡¡
for(MiObjeto nombre : nombres) {
System.out.println("nombre = " + nombre);
}
}
}
El compilador nos avisa, del despiste y no permite compilar
E:\pruebasSDK1.5>ant
Buildfile: build.xml
compilar:
[javac] Compiling 1 source file to E:\pruebasSDK1.5\classes
[javac] E:\pruebasSDK1.5\src\Demo.java:23: add(MiObjeto) in java.util.Collection<MiObjeto> cannot be applied to (java.lang.String)
[javac] nombres.add("burrix");
[javac] ^
[javac] 1 error
BUILD FAILED
E:\pruebasSDK1.5\build.xml:8: Compile failed; see the compiler error output for
details.
Total time: 3 seconds
Muy cojonudo, ¿no?.
Otra caracteristica muy fregona de este nuevo SDK, es la nueva sintaxis del for. Chequen:
for(MiObjeto nombre : nombres) {
System.out.println("nombre = " + nombre);
}
Para recorrer el ArrayList, ya no es necesario obtener un Iterator y movernos a travez de el. Ahora con la sintaxis de arriba podemos recorrer el ArrayList, de una manera muy sencilla. Aunque podemos seguirlo haciendo a la manera antigua.
Ahora me surgio una inquietud, ¿Que pasa si decompilamos el byte-code de la clase?.
Increiblemente obtenemos el suguiente código:
// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
import java.io.PrintStream;
import java.util.*;
public class Demo
{
public Demo()
{
}
public static void main(String args[])
{
ArrayList arraylist = new ArrayList();
arraylist.add(new MiObjeto("domix"));
arraylist.add(new MiObjeto("mirix"));
arraylist.add(new MiObjeto("lulix"));
arraylist.add(new MiObjeto("jessix"));
arraylist.add(new MiObjeto("javix"));
MiObjeto miobjeto;
for(Iterator iterator = arraylist.iterator();
iterator.hasNext();
System.out.println((new StringBuffer()).append("nombre = ").append(miobjeto).toString()))
miobjeto = (MiObjeto)iterator.next();
}
}
Como ven el compilador si genera el código para obtener el Iterator y hacer el recorrido como ha sido siempre. Genial. :)
Hasta la otra.
domix
Pues como ya les había mencionado con anterioridad, esta semana se llevo a la Conferencia "Desarrollo de Aplicaciones Web con Java y herramientas Borland".
Pues puedo decir con seguridad, que hemos tenido éxito, ya que el auditorio estuvo casi lleno, más o menos unos 300-350 asistentes.
De nuevo he de agradecer a muchas personitas que me han ayudado mucho en la realización del evento, las nombrare a continuación, sin ningún orden en particular:
Ing. Enrique Freyermuth, Jefe de las Academias de Informática de la UPIICSA
M. en E. Claudia Marina Vicario Solórzano, Profesora de las Academias de Informática
Mis amigos, todos ellos estudiantes de Ciencias de la Informática
Luis Antonio Mani Barrera
Alexandra Beltrán García
Humberto Martines Díaz
Denyce Castañeda Monterrosas
Alejandro Mora Ascencio
La próxima semana, posteare otro mensaje incluyendo al demás personal de la academia, ya que ellos me apoyaron muchísimo.
También agradecer a RuGI, él me apoyo con recursos ($), para ofrecer unos regalitos a los asistentes, estos regalitos consistieron en plumas grabadas con la leyenda:
Tu Lenguaje, Tu Comunidad
javaHispano.org
UPIICSA Mayo 2004
RuGI, no pudo acompañarme, me hubiera gustado que estuviera ahí, pero en fin. El próximo semestre haremos otro evento. ;)
Y un reconociendo especial a el M. en C. Gustavo Adolfo Arellano, ya que como decimos en México, se rifo.
Gracias a todos ellos, en verdad, muchas gracias.
Cometí un error imperdonable, olvide la cámara que me había prestado un amigo, no pude tomar fotos del evento y de las personitas que estuvieron ahí, hay un video, cuando logre rippearlo (esta en VHS), pondré unos cuadros.
Las actividades de ese día comprendieron:
La apertura del evento por la Prof. Marina Vicario, después de esto, tuve una intervención para promover javaHispano, la verdad me puse nervioso, pero creo que cumplí mi objetivo, que era hablar de javaHispano y de anunciar el Grupo de Usuarios Java de la UPIICSA. Prosiguió Gustavo Arellano, el contenido de su material estuvo bastante interesante, comprendió todo el ciclo de desarrollo, desde la metodología de Borland, llamada ALM (Application LifeCycle Management), la cual para cada fase de esta, comprende una o varias herramientas Borland, las cuales son intercambiables por herramientas semejantes de otros fabricantes.
Al término de su intervención de nuevo tome la palabra para invitar de nuevo a mis compañeros a unirse al JUG de la UPIICSA, puedo asegurar que a raíz de este acontecimiento, el número de miembros del JUG se ha duplicado, en estos momentos, tenemos registrados 64 miembros.
Me alegra que en menos de un mes hayamos juntado a esta cantidad de interesados en tecnología Java en mi escuela, los planes a corto plazo del JUG comprenden la realización de unos talleres de diversos niveles. Ya les contare de los avances.
Eso fue a grandes rasgos lo que ocurrió el lunes 17. Y pondre algunas fotos de los que hicieron posible el evento.
Hasta la otra.
domix
Después de un largo proceso burocrático, al fin el evento que les comente hace tiempo, es una realidad. No podría haberlo llevado a cabo sin la ayuda de las siguientes personas: Profesora Claudia Marina Vicario Solórzano, Ing. Enrique Freyermuth Moreno Jefe de las academias de Informática, Lic. María Evelia López Moreno Jefa de la oficina de Difusión cultural, mis amigos Luis Antonio Mani Barrera, Luis Alberto Arenas Salinas, Luis Hernández Alcántara, y algunos más. Disculpen si omití a algunos
Por supuesto también agradecer a Gustavo Arellano, como de que no, sin él no habría evento.
Tengo que admitir que no estoy satisfecho con lo que he logrado, la propuesta inicial incluía tres charlas técnicas, de las cuales solo me aprobaron una sola.
En fin, RuGI va a asistir al evento y le vamos a robar unos minutos Gustavo Arellano, para promover javaHispano y un JUG que esta en fase de creación.
Lo dicho, el próximo semestre volveré con mas fuerza, este evento crecerá mas y dará mucha información importante, lo sostengo: El próximo semestre volveré
Ok, basta de desahogos
.
Visiten este lugar, ahí esta la información, pero para los vagos, aquí les pongo algunos datos
Conferencia Técnica Desarrollo de aplicaciones Web con Java y Herramientas Borland
Impartida por el M. en C. Gustavo Arellano, Gerente de Calidad de Siga Desarrollos S.A. de C.V. Borland Bussiness Partner
El lugar: IPN UPIICSA Auditorio Víctor Bravo Ahúja el 17 de mayo de 2004 a las 17:00 hrs
Para los y las que viven en México, D.F., les hago extensiva la invitación, no importa que no sean del Politécnico, pueden asistir, deben dejar una identificación oficial en la entrada de la escuela y mencionar que van a la conferencia. no deben tener problemas con eso.
Ok, es todo por ahora, asi que, hasta la otra....
Bueno, pues basicamente se me metio en la cabeza, la realización de una Jornada Técnica en mi escuela. Empece ya con algunas cosillas.
Hasta ahora, tengo asegurada la asistencia de Gustavo Arellano, él es Gerente de Calidad de Siga Desarrollos, los representantes de Borland en México. Ademas, aún no confirmada la asistencia, pero es casi un hecho de RuGI, asi que RuGI, ya tienes el paquete encima.. :). Por cierto yo tambien tengo pensado dar una platica. ;D
Tengo el apoyo tambien de las Academias de Informática, a travez del Profesor Enrique Freyermuth, le presente la propuesta por escrito y pues le parecio muy buena idea. Por ahora me asegura que me apoya con el recursos necesarios de promoción y publicidad, aparte de dar su aval en la escuela.
Me falta apartar el auditorio principal de la escuela, eso lo hare el lunes, espero que todo salga bien.
Ya les detallare los temas a tratar en la Jornada, eso lo tengo que detallar aún.
En estos momentos, me encuentro estudiando EJB's por eso me surgió la necesidad de ejecutar JBoss en mi equipo.
No era nada practico para mi iniciarlo desde la línea de comandos cada vez que lo ocupaba, asi que me le pregunte a mi gurú como podria iniciar JBoss como un servicio de Windows.
Encontre dos opciones:
De estas dos, me decidi por Java Service Wrapper, el proceso para iniciar JBoss como un servicio a continuacion:
{WRAPPER_HOME}\bin\Wrapper.exe
{WRAPPER_HOME}\src\bin\App.bat.in
{WRAPPER_HOME}\src\bin\InstallApp-NT.bat.in
{WRAPPER_HOME}\src\bin\UninstallApp-NT.bat.in
{JBOSS_HOME}\bin\JBoss.bat
{JBOSS_HOME}\bin\InstallJBoss-NT.bat
{JBOSS_HOME}\bin\UninstallJBoss-NT.bat
@echo off @echo off rem rem Find the application home. rem if "%OS%"=="Windows_NT" goto nt echo This is not NT, so please edit this echo script and set _APP_HOME manually set _APP_HOME=.. goto conf :nt rem %~dp0 is name of current script under NT set _APP_HOME=%~dp0 rem : operator works similar to make : operator set _APP_HOME=%_APP_HOME:\bin\=% rem rem Find the wrapper.conf rem :conf set _WRAPPER_CONF="%~f1" if not %_WRAPPER_CONF%=="" goto startup set _WRAPPER_CONF="%_APP_HOME%\conf\wrapper.conf" rem rem Run the application. rem At runtime, the current directory will be that of Wrapper.exe rem :startup "%_APP_HOME%\bin\Wrapper.exe" -c %_WRAPPER_CONF% if not errorlevel 1 goto end pause :end set _APP_HOME= set _WRAPPER_CONF=
#********************************************************************
# Wrapper Properties
#********************************************************************
# Java Application
wrapper.java.command=%JAVA_HOME%\bin\java
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized. Helper
# classes are provided to do this for you. See the Integration section
# of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=%JBOSS_HOME%\lib\wrapper.jar
wrapper.java.classpath.2=%JAVA_HOME%\lib\tools.jar
wrapper.java.classpath.3=%JBOSS_HOME%\bin\run.jar
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=../lib
# Java Additional Parameters
wrapper.java.additional.1=-Dprogram.name=run.bat
# Initial Java Heap Size (in MB)
wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=64
# Application parameters. Add parameters as needed starting from 1
wrapper.app.parameter.1=org.jboss.Main
wrapper.app.parameter.2=-c # Tipo de servidor
wrapper.app.parameter.3=all # En este caso se usa el completo, opcion "all"
# se puede usar "default" o "minimal"
#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Format of output for the console. (See docs for formats)
wrapper.console.format=PM
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=INFO
# Log file to use for wrapper output logging.
wrapper.logfile=../logs/wrapper.log
# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=LPTM
# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffix. For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=0
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
wrapper.logfile.maxfiles=0
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper NT Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section. The
# service can then be reinstalled.
# Name of the service
wrapper.ntservice.name=JBoss
# Display name of the service
wrapper.ntservice.displayname=JBoss Application Server
# Description of the service
wrapper.ntservice.description=JBoss Application Server
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed. AUTO_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false
{WRAPPER_HOME}\lib\Wrapper.DLL
{WRAPPER_HOME}\lib\wrapper.jar
Con eso bastaria para iniciar para hacer una prueba. Esta consiste en ejecutar el archivo {JBOSS_HOME}\bin\JBoss.bat, con la finalidad de detectar algun error en la configuracion del Wrapper. La salida de la consola de las ultimas dos lineas, debe ser algo parecido a esto:
jvm 1 | 21:01:55,340 INFO [Server] JBoss (MX MicroKernel) [3.2.3 (build: CVS Tag=JBoss_3_2_3 date=200311301445)] Started in 44s:781ms
Para detener JBoss, desde otra consola, tecleamos {JBOSS_HOME}\bin\shutdown.bat -S.
Si no tuvimos problemas, ejecutamos el archivo {JBOSS_HOME}\bin\InstallJBoss-NT.bat, obtendremos algo como esto:
C:\jboss-3.2.3\bin>InstallJBoss-NT.bat wrapper | JBoss Application Server installed. C:\jboss-3.2.3\bin>
Con esto ya no debemos preocuparnos por iniciar JBoss cada vez que tengamos que usarlo, ahora correra como un servicio de Windows. Ya solo bastara abrir la consola de Servicios de Windows e iniciar JBoss.
Echen un vistazo:
Si deseamos remover el servicio, ejecutamos {JBOSS_HOME}\bin\UninstallJBoss-NT.bat
Practico ¿no?
Linderel, habia hecho algo similar...
Por cierto, la instancia de JBoss ejecutandose, consumira los 64 MB que le indicamos al archivo de configuración. Obviamente se pueden establecer parametros diferentes, pero como comentaba usuariox, suele ser un poco doloroso tenerlos apartados para un solo proceso...
Hasta la otra.