miércoles, 30 de abril de 2008

easymock: IllegalStateException y matchers

Una excepcion arrojada frecuentemente por EasyMock es la siguiente:
java.lang.IllegalStateException: 2 matchers expected, 1 recorded.
En particular, esto ocurre cuando un metodo de un objeto es invocado sin configurar previamente un matcher para cada argumento.
En general, para un metodo que posee n argumentos, EasyMock espera n matchers, en caso que, para alguno de esos argumentos, un matcher sea utilizado.

Observe el siguiente codigo:
public class Prueba {
public void metodo(String arg1, int arg2) {}
}
Al crear un mock para la clase prueba, se configurar la invocacion del unico metodo que posee, de la siguiente manera:
Prueba p = EasyMock.createControl().createMock(Prueba.class);
p.metodo(isA(String.class), 0);
Al ejecutar el codigo anterior, EasyMock arrojara una IllegalStateException, como la descripta al comienzo. Esto se debe a que isA es un matcher y no todos los argumentos en la configuracion del metodo utilizan matchers.
Modificando la configuracion para la invocacion del metodo de la siguiente manera:
p.metodo(isA(String.class), anyInt());
el codigo ejecutara sin inconvenientes, ya que todos los argumentos del metodo estan configurados empleando matchers.

Vinculos:

jueves, 24 de abril de 2008

jmx: Ejemplo con "Hola mundo!"

MBean para Hola Mundo!

En principio, es necesario crear una interfaz, que comience con el nombre de la clase que se desea administrar, seguida por el sufijo MBean. Esto permite generar un MBean estandar, el cual es inspeccionado por JMX mediante reflexion para exponer aquellos que. El codigo presentado a continuacion corresponde a la clase HelloMBean.java:
package test.jmx.sample1;

public interface HelloMBean {

public void setMessage(String message);

public String getMessage();

public void sayHello();
}
A continuacion, es necesario crear la clase que implementa la interfaz antes presentada. El siguiente codigo corresponde a la clase Hello.java:
package test.jmx.sample1;

public class Hello implements HelloMBean {

private String message;

public Hello() {
this.message = "Hello there";
}

public Hello(String message) {
this.message = message;
}

public String getMessage() {
return this.message;
}

public void sayHello() {
System.out.println(this.message);
}

public void setMessage(String message) {
this.message = message;
}
}
Agente empleando HtmlAdaptorServer



Administrando el HelloMBean

Iniciar el agente creado, SimpleAgent
Acceder, mediante navegador web, a la direccion http://localhost:8000


El MBean correspondiente a Hola Mundo! aparece listado como un MBean registrado a traves del agente SimpleAgent con el nombre "hellothere". Al seleccionar el vinculo se puede observar la siguiente pagina, que los datos y la funcionalidad disponible del objeto administrado:

Al final de la descripcion del bean, se encuentra el listado de operaciones que som administradas. En este caso, el objeto administrado solo dispone de un metodo sin parametros, por lo cual invocarlo es tan simple como presionar el boton:

Al presionar el boton "sayHello" podra observar en la consola que aparece el mensaje "Hola, Mundo!", lo cual indica que el metodo del objeto administrado fue ejecutado.

Vinculos:

jmx: JConsole

La distribucion de Java 5 incluye la implementacion de referencia de JMX asi como tambien la JConsole, que permite administrar

Para iniciar JConsole desde la lines de comando, acceda al directorio $JAVA_HOME/bin y corra el ejecutable jconsole:
$ cd $JAVA_HOME/bin
$ jconsole
Debera aparecer entonces una ventana como la siguiente:


El mismo resultado se obtiene ejecutando la clase JConsole, de la siguiente manera:
java -cp "$JAVA_HOME\lib\jconsole.jar" sun.tools.jconsole.JConsole
Para iniciar JConsole desde Eclipse IDE, utilice External Tools. Para configurar JConsole en Eclipse debera seleccionar la opcion del menu principal Run -> External Tools -> Open External Tools Dialog, y la siguiente ventana de dialogo aparecera:


Busque el ejecutable de JConsole inspeccionado el sistema de archivos y luego presione el boton "Run". En la imagen anterior puede observarlo.

Tambien puede ejecutar JConsole como una aplicacion Java desde Eclipse IDE. Para hacerlo acceda al menu Run -> Open Run Dialog and the following window should appear:

Seleccione el item Java Application de la lista de configuraciones, presione el boton que le permite crear una nueva configuracion y dele un nombre. En el cuadro llamado Main class, escriba o seleccione la clase de JConsole que contiene el bloque main, tenga en cuenta que el fully qualified name es necesario, asi como puede ver en la imagen.

El nombre de la clase es:
sun.tools.jconsole.JConsole
Luego, configure el classpath utilizado para ejecutar JConsole, de manera que la clase especificada sea encontrada:


La librearia requerida se encuentra en el directorio $JAVA_HOME/lib/jconsole.jar.

Vinculos:

martes, 22 de abril de 2008

dvd: Eliminar menu no deseado con PgcEdit y FixVTS

Eliminacion de PGC usando PgcEdit

Descargue PgcEdit y FixVTS, que son las herramientas necesarias para alterar el contenido del DVD. Debera disponer de los archivos del DVD, utilice DVDDecrypter o alguna aplicacion similar para copiarlos a su disco duro.

Luego ejecute PgcEdit y cargue los archivos del DVD accediendo a la opcion del menu principal File -> Open DVD, o mediante la combinacion Ctrl-O.

En el panel izquierdo puede observar el listado de los pgc en el DVD. Seleccione el pgc correspondiente al menu que desea eliminar, por ejemplo:

VTSM1, LU1 (en), 9 (0:36) 2b

En este caso debera eliminar los botones que contiene el menu, antes de proceder a eliminar el pgc. Si necesita ayuda para hacerlo, vea aqui.

Una vez eliminados los botones del menu, el pgc debera aparecer listado de la siguiente manera:

VTSM1, LU1 (en), 9 (0:36)

Con el pgc seleccionado, elija la opcion del menu principal PGC -> Kill PGC Playback y la siguiente ventana de advertencia aparecera:


Aqui se le advierte que PgcEdit verificara que es realmente posible eliminar el pgc y que el VOB en el cual se encuentra no sera modificado mediante esta accion. En mas, tampoco sera modificado al grabar el DVD, debera luego hacer uso de FixVTS para eliminar el pgc no utilizado del DVD.

Una vez que acepta el mensaje de advertencia en la ventana anterior, uno nuevo le avisa que el proceso se completo y que eliminar referencias al pgc hara que programas como FixVTS puedan mas tarde quitar del VOB correspondiente el contenido no utilizado:


Quitar contenido no referenciado con FixVTS

Ahora el momento de procesar el VOB donde el pgc fue eliminado para quitar el contenido del DVD que ya no se utiliza, y asi liberar espacio.

Ejecute entonces FixVTS, debera aparecer la siguiente ventana:


Seleccione el archivo VOB a procesar, presionando el boton "Open":


Una vez seleccionado el archivo, presione el boton "Cleanup!" y comenzara el proceso de correccion. FixVTS creara una copia del archivo que procesa para permitir volver atras los cambios.

Una vez finalizado el proceso, verifique que el DVD modificado funciona.

Vinculos:

lunes, 21 de abril de 2008

dvd: Eliminar un boton de menu con PgcEdit

Para comenzar, descargue PgcEdit.exe desde el sitio oficial y ejecutelo. Podra observar que la aplicacion inicia rapidamente, mostrando un menu muy completo y dos paneles vacios:


Primero debe cargar el DVD que desea modificar. Para esto debe disponer de los archivos que componen el DVD, los cuales puede obtener empleando el programa DVDDecrypter o uno similar. Seleccione del menu principal la opcion File -> Open DVD o presione la combinacion de teclas Ctrl-O.
Seleccione el directorio donde se encuentran los archivos del DVD, comunmente en el directorio VIDEO_TS. Una nueva ventana aparecera indicandole que PgcEdit analiza los archivos:


Seleccione del panel izquierdo el pgc que desea alterar. Por ejemplo, en el listado se encuentra el siguiente:

VTSM1, LU1 (en), 12 (0:31) 1b.

El anteultimo elemento muestra la duracion del pgc, mientras que el ultimo la cantidad de botones que contiene. Por este ultimo es posible inferir que se trata de algun tipo de menu.


Seleccione la opcion del menu principal Menu -> Show/Edit Menu Buttons or BOVs y aparecera una nueva ventana mostrando el menu en cuestion:


Ahora puede seleccionar el boton que desea eliminar, en este caso puede observar que el rectangulo verde que rodea a la palabra "Extras" es un boton. Sino, simplemente presione el boton "Edit" y una nueva ventana aparecera:


Si no selecciono el boton en el paso anterior, entonces utilice la barra deslizante con el nombre "Edit button". Al moverla podra activar el boton que desea eliminar, ya que aparecera resaltado en la ventana anterior.
Seleccione del menu principal la opcion Button -> Delete button. En este caso, como se trata de el unico boton en el menu, observara un mensaje de advertencia:


Acepte el mensaje para continuar, la ventana de "Edit" se cerrara y el boton quedara parcialmente borrado. Volvera entonces a la ventana "Menu buttons" donde debera presionar el boton "Close".
Finalmente seleccione del menu principal la opcion File -> Save DVD o presione la combinacion Ctrl-S y los cambios realizados quedaran salvados.

Vinculos:

martes, 15 de abril de 2008

jax-ws: Java Web Services

Para comenzar es necesario descargar el binario correspondiente a la implementacion de referencia de JAX-WS. En la seccion de vinculos se encuentra una referencia al sitio donde puede encontrarlo. Los ejemplos presentados aqui refieren a la distribucion que se encuentra aqui.

Instalacion de JAX-WS

Una vez que se ha obtenido JAX-WS, es necesario instalarlo en el entorno local para comenzar a desarrollar web services. Para ello descomprima la distribucion de JAX-WS de la siguiente manera:
java -jar JAXWSx.x.x-.jar
por ejemplo:
java -jar JAXWS2.1.3-20071218.jar
De esto resultara el directorio jaxws-ri que contiene las librerias, documentacion y ejemplos.

A continuacion se desarrolla un web service y un cliente que consuma el servicio para mostrar, mediante un ejemplo sencillo el proceso de creacion de web services mediante JAX-WS.

Creacion del servicio Echo

El servicio Echo es definido por la interfaz java IEchoService.java y la clase java que implementa dicha interfaz EchoServiceImpl.java. A continuacion se presenta el codigo para ambas, clase e interfaz:
package test.echo.service;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService(serviceName="EchoService", name="Echo")
public class EchoService {

@WebMethod()
public String echo(String value) {
return value;
}
}
JAX-WS provee un conjunto de anotaciones que permite convertir una simple clase java en un web service. Como se observa en el ejemplo anterior, la clase java EchoService se encuentra decorada con la anotacion @WebService, que indica que dicha clase es un web service.

La anotacion @WebMethod es utilizada para indicar cuales de los metodos de la clase definida como servicio seran expuestos o publicados.

Las anotaciones que decoran a la clase EchoService deben ser procesadas para que JAX-WS genere las clases adicionales que dan forma al servicio Echo. Para esto es necesario emplear la herramienta Apt (Annotation processing tool) que se encuentra en la libreria jaxws-tools.jar. Esta herramienta puede ser invocada por linea de comando, de la siguiente manera:
apt -classpath C:\jaxws-ri\lib\FastInfoset.jar;
C:\jaxws-ri\lib\activation.jar;
C:\jaxws-ri\lib\http.jar;
C:\jaxws-ri\lib\jaxb-api.jar;
C:\jaxws-ri\lib\jaxb-impl.jar;
C:\jaxws-ri\lib\jaxb-xjc.jar;
C:\jaxws-ri\lib\jaxws-api.jar;
C:\jaxws-ri\lib\jaxws-rt.jar;
C:\jaxws-ri\lib\jaxws-tools.jar;
C:\jaxws-ri\lib\jsr173_api.jar;
C:\jaxws-ri\lib\jsr181-api.jar;
C:\jaxws-ri\lib\jsr250-api.jar;
C:\jaxws-ri\lib\resolver.jar;
C:\jaxws-ri\lib\saaj-api.jar;
C:\jaxws-ri\lib\saaj-impl.jar;
C:\jaxws-ri\lib\sjsxp.jar;
C:\jaxws-ri\lib\stax-ex.jar;
C:\jaxws-ri\lib\streambuffer.jar com.sun.tools.apt.Main
-d "jaxws-samples\bin"
-s "jaxws-samples\src"
-sourcepath "jaxws-samples\src"
-g:none "jaxws-samples\src\test\echo\service\IEchoService.java"
"jaxws-samples\src\test\echo\service\EchoServiceImpl.java"
o tambien puede ser incorparada al proceso de costruccion (build), invocada por Ant. Para hacerlo, es necesario primero declarar la tarea correspondiente a Apt, como se muestra a continuacion:

Luego es necesario definir los targets para invocar a la herramienta Apt y compilar la clase que contiene la logica del servicio Echo definida antes:

La ejecucion de Apt generara dos clases:
  • Echo.java
  • EchoResponse.java
en el directorio test/echo/service/jaxws. Estas dos son clases de bajo nivel y se encargan de encapsular los mensajes SOAP empleados en la consulta y en la respuesta. Son altamente dependientes de anotaciones empleadas por JAXB para el mapeo de XML a objetos java.

Si obtiene el siguiente mensaje de advertencia cuando se ejecuta la tarea que ejecuta apt:
apt:
[apt] warning: Annotation types without processors:
[javax.xml.bind.annotation.XmlRootElement,
javax.xml.bind.annotation.XmlAccessorType, javax.xml.bind.annotation.XmlType,
javax.xml.bind.annotation.XmlElement]
[apt] 1 warning
asegurece que apt recibe como argumento fork="true".

Si obtiene el siguiente mensaje:
apt:
[apt] java.lang.NoClassDefFoundError: com/sun/tools/apt/Main
[apt] Exception in thread "main"
asegurece que tools.jar, distribuido junto con el JRE, este incluido en el classpath empleado para ejecutar apt.

Ahora sera necesario generar el wsdl empleado para publicar el servicio. Para esto se debe emplear otra herramienta de JAX-WS llamada wsgen. A continuacion se muestra como ejecutar la herramienta wsgen por linea de comando:
C:\jaxws-ri\bin>wsgen -cp "project-home\jaxws-samples\bin"
-d "project-home\jaxws-samples\bin" -keep -wsdl
-r "project-home\jaxws-samples\src\test\echo\service\wsdl"
-s "project-home\jaxws-samples\src" test.echo.service.EchoService
o tambien puede ser incorparada al proceso de costruccion (build), invocada por Ant. Para hacerlo, es necesario primero declarar la tarea correspondiente a wsgen, como se muestra a continuacion:

Luego se define el target para invocar a la herramienta wsgen y generar el wsdl correspondiente al servicio:

Creacion del cliente para el servicio Echo

wsimport
Buildfile: C:\Documents and Settings\sg0203921\workspacee\jaxws-samples\build.xml
Trying to override old definition of task apt
wsimport:
[wsimport] parsing WSDL...
[wsimport] generating code...
[wsimport] compiling code...
BUILD SUCCESSFUL
Total time: 6 seconds
Clases generadas:
  • Echo_Type.java
  • Echo.java
  • EchoResponse.java
  • EchoService.java
  • ObjectFactory.java
  • package-info.java

Publicacion del servicio Echo en Tomcat 6

Vinculos:

domingo, 13 de abril de 2008

eclipse: Integracion con Tomcat

El plug-in de Sysdeo para Eclipse permite, entre otras cosas, ejecutar en forma normal o en modo "debug" aplicaciones que requieren de un contenedor de servlets como lo es Tomcat.

Descargar el software

Descargue el software de Sysdeo correspondiente a la version de Eclipse que utiliza.

Vinculos:

java: Introduccion a JavaSpaces

Que es JavaSpaces?

Permite construir aplicaciones distribuidas empleando las facilidades que proveen las programacion orientada a objetos y Java.

Vinculos:
Jini - Network technology
Jini - Starter kit
Jini - Core Platform definitions
Jini.org
Blitz - Tools for easy JavaSpaces
GigaSpaces - Complete JavaSpaces implementation and more
GigaSpaces Wiki
Getting started with the JavaSpaces technology

martes, 8 de abril de 2008

Axis2: Echo web service

Creacion del Servicio

Para desarrollar el servicio de Echo, es necesario crear una clase java que sea el punto de entrada y que se pueda registrar y publicar en la apilacion web de Axis2. El codigo fuente correspondiente al servicio es el siguiente:
package test.echo.service;

public class EchoService {

public String echo(String value) {
return value;
}
}
Cada servicio requiere tambien una minima configuracion como la que se presenta a continuacion, que permite a Axis2 conocer los detalles necesarios sobre el servicio:


La configuracion presentada debe estar definida en un archivo xml cuyo nombre debe ser services.xml.

Empaquetado del servicio

Para poder desplegar el servicio en Tomcat a traves de la aplicacion web de Axis2, es necesario respetar una estructura predefinida. La clase java para el servicio debera estar ubicada en la estructura de directorio definido por la estructura de paquete, mientras que tambien es necesario incluir en archivo services.xml.

Publicacion del servicio

Aparecera entonces listado entre los servicios publicados a traves de la aplicacion web de Axis2 en Tomcat:


Al hacer click en el servicio "Echo", el wsdl correspondiente al servicio sera mostrado por el navegador:


Creacion del client para consumir el Servicio

Para crear un cliente que puede consumir el servicio Echo, se emplea la utilidad de Axis2 que permite generar codigo a partir de un wsdl, llamada wsdl2java.
Acceda el directorio AXIS_HOME/bin y ejecute desde alli esta utilidad, especificando algunos parametros, como se muestra a continuacion:
wsdl2java -uri http://localhost:8080/axis2/services/Echo?wsdl -p
test.echo.client -o C:\axis2-1.3\samples\userguide
Los parametros especificados tienen el siguiente singnificado:
uri: La URL donde el wsdl a partir del cual se generara el codigo se encuentra.
p: La estrutura de paquete que se desea para el codigo generado.
o: La ubicacion en el sistema de archivos donde seran generadas las clases.

El codigo generado consiste en las siguientes dos clases java:
  • EchoStub.java
  • EchoCallbackHandler.java


Estas clases contiene demasiadas lineas de codigo, dificil de entender y casi imposible de modificar. Es importante tener claro de utilizar las utilidades para generacion de codigo permite obtener una solucion rapida, pero no siempre efectiva.

Ahora es necesario crear el punto de entrada para la ejecucion del cliente del servicio. A continuacion se muestra un ejemplo:
package test.echo.client;

import java.rmi.RemoteException;

import org.apache.axis2.AxisFault;

public class EchoClient {

public void run() {
try {
EchoStub es = new EchoStub();

EchoStub.Echo request = new EchoStub.Echo();
request.setParam0("Hello, Echo!");

EchoStub.EchoResponse response = es.echo(request);

System.out.println(response.get_return());

} catch (AxisFault e) {
e.printStackTrace();

} catch (RemoteException re) {
re.printStackTrace();
}
}

public static void main(String[] args) throws Exception {
EchoClient ec = new EchoClient();
ec.run();
}
}
Al ejecutar el cliente, la salida que se vera por consola es: "Hello, Echo!"

Vinculos:

Axis2: Instalacion y ejemplos en Eclipse

Creacion de axis2.war

Para generar la aplicacion web que permite administrar servicios, es necesario acceder al directorio webapp y ejecutar el archivo de compilacion que alli se encuentra:
C:\axis2-1.3\webapp> ant
Buildfile: build.xml

init:
[mkdir] Created dir: C:\axis2-1.3\dist
[mkdir] Created dir: C:\axis2-1.3\dist\temp
[copy] Copying 53 files to C:\axis2-1.3\dist\temp

prepare.repo:
[copy] Copying 8 files to C:\axis2-1.3\dist\temp\WEB-INF
[mkdir] Created dir: C:\axis2-1.3\dist\temp\WEB-INF\conf
[copy] Copying 1 file to C:\axis2-1.3\dist\temp\WEB-INF\conf

create.war:
[war] Building war: C:\axis2-1.3\dist\axis2.war
[delete] Deleting directory C:\axis2-1.3\dist\temp

BUILD SUCCESSFUL
Total time: 6 seconds
Instalacion de axis2.war

Una vez que la aplicacion web se encuentra correctamente empaquetada, es necesario colocarla en el directorio webapps del servidor web:
C:\axis2-1.3\dist> cp axis2.war C:\apache-tomcat-6.0.14\webapps

Luego es necesario iniciar el servidor web:
C:\apache-tomcat-6.0.14\bin>startup
Using CATALINA_BASE: C:\apache-tomcat-6.0.14
Using CATALINA_HOME: C:\apache-tomcat-6.0.14
Using CATALINA_TMPDIR: C:\apache-tomcat-6.0.14\temp
Using JRE_HOME: c:\dev\jdk1.5.0_11


Podra observar en la consola algunos mensajes indicando el despliegue de aplicaciones, entre ellas la recien agregada:
INFO: Deploying web application archive axis2.war
[INFO] Deploying module: addressing-1.3
[INFO] Deploying module: metadataExchange-1.3
[INFO] Deploying module: ping-1.3
[INFO] Deploying module: script-1.3
[INFO] Deploying module: soapmonitor-1.3
[INFO] script module activated
[INFO] Deploying Web service: version.aar

Al iniciar el servidor, apunte su navegador a la siguiente URL: http://localhost:8080/axis2. Debera entonces visualizar lo siguiente:


Ahora es momento de crear un proyecto java en Eclipse y agregar a alguno de los ejemplos incluidos en la distribucion de Axis2. Por el momento incluiremos los ejemplos de la guia de usuario donde se muestra como crear diversos tipos de clientes de web services.

Primero es necesario crear el proyecto java:


El nombre del proyecto no es importante, pero si es necesario saber donde a sido desempaquetado Axis2, ya que en esa ubicacion es donde se encuentra el directorio samples con los ejemplos. Como se observa en la imagen el ejemplo importado es "userguide". Ahora es necesario verificar que todos los archivos requeridos son importandos, por lo cual debera presionar el boton "Next":


Para lograr una compilacion exitosa es necesario definir cuales y la ubicacion de las librerias requeridas. Estas tambien se encuentra en la ubicacion donde Axis2 fue desempaquetado, en el directorio lib. Entonces debera activar la solapa "Libraries" y luego presionar el boton "Add external jar":


Para terminar presione el boton "Finish", y el proyecto quedara creado, listo para compilar y ejecutar.

Vinculos:

Axis2: Web Services y Java

Introduccion

Apache Axis2 es la implementacion en Java para clientes y servidores de web services. Introduce mejoras respecto a su predecesor, Axis1, suministrando facilidades para:
  • Enviar mensajes SOAP (con o sin adjuntos)
  • Recibir y procesar mensajes SOAP
  • Crear web services desde clases Java
  • Crear clases Java para cliente y servidor a partir del WSDL
  • Crear y utilizar REST web services
  • Crear y utilizar web services que utilizan las recomendaciones WS-*
Manejo de mensajes SOAP

En Axis2, acciones como crear un mensaje SOAP, encriptarlo, enviarlo, procesarlo, etc., son conocidas como "fases". Axis2 define fases por defecto, como "pre-dispatch", "distpatch", "message processing", etc. Cada fase esta definida por un conjunto de "handlers". Axis2 permite definir que manejadores se aplican en cada fase y el orden en el cual son ejecutados. Ademas de los manejadores provistos por Axis2, es posible agregar manejadores particulares. Los "handlers" provienen de modulos como Rampart, que es la implementacion de WS-Security para web services en Java.

Distribuciones

Axis2 provee dos tipos de distribuciones:
  • Binaria estandard
  • WAR (Web Archive)
Distribucion binaria estandard

Provee las librerias y utilidades necesarias para crear aplicaciones que interactuan con web services. Los siguientes archivos se encuentran incluidos en esta distribucion:
/bin
+- axis2.bat
+- axis2.sh
+- axis2server.bat
+- axis2server.sh
+- java2wsdl.bat
+- java2wsdl.sh
+- wsdl2java.bat
+- wsdl2java.sh
+- setenv.sh
/lib
+- activation-1.1.jar
+- ...
+- XmlSchema.jar
/repository
+- /modules
+- modules.list
+- addressing-1.1.mar
+- ...
+- /services
+- services.list
+- version.aar
+- ...
/samples
+- ...
/webapp
+- ...
/conf
+- axis2.xml

LICENSE.txt
README.txt
NOTICE.txt
INSTALL.txt
release-notes.html
Utilidades

axis2.bat: Permite ejecutar comandos java sin necesidad de tener que incluir las librerias de axis en el classpath.
java2wsdl.bat: Permite crear la descripcion del web service a partir de clases java.
wsdl2java.bat: Permite crear las clases java necesarias para consumir un web service.
axis2server: Es un servidor web sencillo que permite enviar y recibir mensajes a una aplicacion.

Directorios

lib: Aloja las librerias de Axis2 y todas aquellas otras requeridas.
repository: Aloja modulos y web services.
conf: Incluye el archivo de despliegue global axis2.xml.
samples: Contiene ejemplos.

Vinculos:

lunes, 7 de abril de 2008

java3d: Ejemplos de Java 3D desde Eclipse

Para ejecutar los ejemplos de Java 3D desde Eclipse es necesario primero crear un projecto java a partir del codigo fuente de los ejemplos:


Luego podra configurar el classpath para el proyecto, asi como tambien la ubicacion donde las clases seran compiladas. Por el momento, quedaran las opciones por defecto:


Es necesario ahora borrar los siguientes archivos:
  • COPYRIGHT.txt
  • LICENSE.txt
  • README-build.html
  • README-FIRST.txt
  • THIRDPARTY-LICENSE-3DLABS.txt
  • THIRDPARTY-LICENSE-VIEWPOINT.txt
y el directorio nbproject.

Puede verificar que, en el directorio donde se encuentran los ejemplos, dos nuevos archivos fueron creados por Eclipse: .project y .classpath.

Puede emplear el archivo build.xml incluido para compilar los ejemplos y generar las clases necesarias para ejecutarlos.

Primero ejecute el target "clean" empleando las facilidades de Eclipse. Despliegue el menu contextual sobre el archivo build.xml y seleccione la opcion Run AsAnt Build... :


A continuacion se puede observar la salida generada por Ant:
Buildfile: C:\j3d-examples\build.xml
init:
clean:
[delete] Deleting directory C:\j3d-examples\build
[delete] Deleting directory C:\j3d-examples\dist
BUILD SUCCESSFUL
Total time: 2 seconds
Luego es necesario ejecutar el target "jar", que esta definido por defecto en el archivo build.xml. La salida generada por Ant es la siguiente:
Buildfile: C:\j3d-examples\build.xml
init:
init-compile:
compile:
[mkdir] Created dir: C:\j3d-examples\build\classes
[javac] Compiling 148 source files to C:\j3d-examples\build\classes
[javac] Note: Some input files use or override a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[copy] Copying 48 files to C:\j3d-examples\build\classes\org\jdesktop\j3d\examples\resources
[copy] Copying 44 files to C:\j3d-examples\build\classes\org\jdesktop\j3d\examples
jar:
[mkdir] Created dir: C:\j3d-examples\dist
[jar] Building jar: C:\j3d-examples\dist\j3d-examples.jar
BUILD SUCCESSFUL
Total time: 6 seconds
Ahora que el jar con los ejemplos fue generado, puede ejecutar cualquiera de ellos. Para hacerlo emplee el menu "Run" de Eclipse:



Al ejecutar el applet observara lo siguiente:

[java3d_examples005.PNG]

Vinculos:

java3d: Instalacion de Java 3D

Para instalar Java 3D apunte el navegador a la siguiente ubicacion y descargue el instalador o el paquete de librerias comprimidas en zip. En este caso la instalacion se realizara para el sistema Windows, por lo que seleccionamos el archivo java3d-XXX-windows-i586.zip.

Al extraer los archivos de la distribucion se creara el directorio java3d-XXX-windows-i586 con los siguientes archivos:
  • COPYRIGHT.txt
  • LICENSE-Java3D-vXXX.txt
  • README-distribution.txt
  • README-unzip.html
  • README.txt
  • j3d-jre.zip (Contiene las librerias de Java 3D a instalar)
El archivo README-unzip.html contiene informacion acerca de la instalacion de las librerias para JRE y JDK.

Solo resta descomprimir el contenido del archivo j3d-jre.zip en el directorio apuntado por la variable de entorno JAVA_HOME/jre.

Verifique que los archivos j3d*.dll se encuentran en el directorio JAVA_HOME\jre\bin, mientras que los j3dcore.jar, j3dutils.jar y vecmath.jar deben estar ubicados en el directorio JAVA_HOME\jre\lib\ext.

Puede ahora descargar los ejemplos y demostracion para verificar la instalacion y ver a Java 3D en accion. Descarguelos desde la siguiente ubicacion.

Al extraer los ejemplos, podra encontrarlos en el directorio j3d-examples/src. La distribucion de los ejemplos contiene los siguientes archivos y directorios:
  • build.xml
  • COPYRIGHT.txt
  • LICENSE.txt
  • manifest.mf
  • README-build.html (Contiene informacion relacionada a la compilacion y ejecucion de los ejemplos)
  • README-FIRST.txt
  • THIRDPARTY-LICENSE-3DLABS.txt
  • THIRDPARTY-LICENSE-VIEWPOINT.txt
  • /src
  • /nbproject
El archivo build.xml puede ser usado mediante Ant directo o a traves de Eclipse para compilar los ejemplos. El directorio nbproject contiene el archivo de configuracion de proyecto para Netbeans.

Vinculos:

java2d: Mostrando una imagen

Java 2D provee algunas clases muy utiles para cargar imagenes en formato BMP, JPG, GIF y PNG sin hacer esfuerzos. En el siguiente ejemplo muestro como hacerlo:

InputStream is = this.getClass().getResourceAsStream("imagen.png");

try {
BufferedImage img = ImageIO.read(is);

} catch (IOException ioe) {
System.out.println("Unable to load image.");
}


La imagen decodificada por ImageIO y almacenada en una instancia de BufferedImage. Luego, para mostrar en pantalla, es necesario proveer una implementacion particular del metodo paint de algun componente, como el JPanel de Swing. En el siguiente ejemplo muestro como hacerlo:

public class Image2D extends JPanel {

private BufferedImage img;
...

public void paint(Graphics g) {

if (null == this.img) return;

Graphics2D g2 = (Graphics2D) g;
g2.drawImage(this.img, null, 0, 0);
}


El segundo parametro pasado al metodo drawImage es nulo ya que no es de interes producir ninguna modificacion sobre la imagen cargada, solo mostrarla como es.

java2d: Dibujando una linea

Java 2D se encuentra incluido en la distribucion estandar de J2SE. Dibujar una linea o alguna forma como un rectangulo o un circulo es simple. En el siguiente ejemplo muestro como hacerlo:

package test;

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class Line2D extends JPanel {

@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;

int width = this.getWidth();
int height = this.getHeight();

g2.drawLine(20, 20, width - 20, height - 20);
}
}


Como se puede ver en el ejemplo, es necesario proveer una implementacion particular del metodo paint. En este ejemplo la implementacion provista dibuja una linea en el panel.

Vinculos: