sábado, 6 de septiembre de 2008

j2ee: Ejecutar Glassfish desde Eclipse

Requerimientos

Para poder crear un servidor Glassfish en Eclipse es necesario disponer de:
  • Eclipse 3.2 o superior con WTP 2.0 o superior
  • Eclipse Ganymede

Existen otras opciones, como crear un servidor J2EE generico y practicar las personalizaciones necesarias, pero aqui se hace con Ganymede.

Descargue Eclipse Ganymede del siguiente vinculo.

Descargar adaptadores adicionales a Eclipse

Inicie Ganymede y acceda al menu File -> New -> Other y seleccione de la lista la opcion "Server". Aparecera la siguiente ventana:


Al presionar el boton "Next", accedera a la siguiente ventana para seleccionar el tipo de servidor y la version:

La configuracion correspondiente a un servidor Glassfish no se incluye en la distribucion de Ganymede, por lo cual es necesario descargarla. Para hacerlo, presione el vinculo "Download additional server adapters". Luego de unos instantes, los adaptadores adicionales estaran descargados y podra seleccionar de la lista el correspondiente a Glassfish:


Apareceran varios adaptadores en la lista. Seleccione el correspondiente a Glassfish. Presione el boton "Next" para acceder a la siguiente ventana:


Aqui debera aceptar los terminos y condiciones para poder continuar. Una vez que haga la seleccion, presione el boton "Finish". Observara entonces la siguiente ventana:


Al parecer, Eclipse requiere decargar algo mas y completar su proceso de configuracion, que solo tiene efecto al reiniciiarlo. Solo que presionar el boton "OK" y esperar que Eclipse complete la configuracion y reinicie:


Crear un nuevo servidor para Glassfish en Eclipse

Una vez reiniciado Eclipse, comience el proceso para la creacion de un nuevo servidor como antes. Acceda al menu File -> New -> Other y seleccione la opcion "Server". Aparecera la siguiente ventana:


En la lista, expanda el item "Glassfish" y selecciones de las opciones el adaptador que corresponda con el servidor de Glassfish que desea controlar desde Eclipse. Modifique el nombre del servidor, de ser necesario, y presione el boton "Next" para continuar a la siguiente ventana:


El adaptador seleccionado permite detectar ciertas artefactos del servidor como el script de inicio, el de parada, etc. Para esto es necesario indicar al adaptador la ruta donde el servidor Glassfish se encuentra instalado. Presione el boton "Browse..." y busque esa ubicacion en el sistema, luego presione el boton "Next" para acceder a la siguiente ventana:


Podra observar los datos de configuracion del servidor. No es necesario que practique cambios, por lo que puede presionar el boton "Finish" para completar la creacion del servidor.

Iniciar el servidor Glassfish

En la solapa "Servers" podra observar que el nuevo servidor agregado es listado. Seleccionelo y presione el boton de ejecucion (play) que se encuentra en el menu principal Run -> Run o en el menu contextual.


Podra observar en la solapa "Console" la salida generada por el inicio de Glassfish:

Starting Domain domain1, please wait.
Sep 7, 2008 5:07:45 PM com.sun.enterprise.admin.servermgmt.launch.ASLauncher buildCommand
INFO: C:/Dev/Java/jre/..\bin\java
-Dcom.sun.aas.instanceRoot=C:/glassfish/domains/domain1
...
Con el navegador de su preferencia, acceda a la siguiente URL: http://localhost:4848/asadmin
Podra verificar que el servidor Glassfish responde con la pagina de autenticacion.

Vinculos:

miércoles, 3 de septiembre de 2008

j2ee: Instalacion de Glassfish

Instalar Glassfish

Ejecuter el instalador de Glassfish en consola, ejecutando el siguiente comando:
$> java -jar glassfish-installer-v2ur2-b04-windows.jar
Si ocurre el siguiente error:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Sera necesario ejecutar el instalador dando al runtime de Java mayor memoria de heap. Hagalo de la siguiente manera:
$> java -Mmx256M -jar glassfish-installer-v2ur2-b04-windows.jar
Aparecera entonces la ventana mostrando la licencia de distribucion que debera leer (o al menos mover la barra de desplazamiento hasta abajo) para poder continuar:


Presione entonces el boton "Accept" para continuar con la instalacion.
En la consola se mostrara el largo listado de archivos contenidos en el jar, siendo la ultima linea, la leyenda "Installation complete". Estos archivos son copiados el directorio glassfish. La ruta completa de acceso a este directorio dependera de donde ejecuto el instalador.

Para completar la ejecucion debera ejecutar, empleando Ant, el archivo setup.xml. Para hacerlo realice los siguientes pasos:
$> cd glassfish
$> ant -f setup.xml
Este proceso completara la configuracion basica y generica requerida por Glassfish. Las ultimas lineas generadas por este proceso que observara en la consola son las siguientes:
...
create.domain:
[exec] Using port 4848 for Admin.
[exec] Using port 8080 for HTTP Instance.
[exec] Using port 7676 for JMS.
[exec] Using port 3700 for IIOP.
[exec] Using port 8181 for HTTP_SSL.
[exec] Using default port 3820 for IIOP_SSL.
[exec] Using default port 3920 for IIOP_MUTUALAUTH.
[exec] Using default port 8686 for JMX_ADMIN.
[exec] Domain being created with profile:developer, as specified by variable AS_ADMIN_PROFILE in configuration file.
[exec] Security Store uses: JKS
[exec] Domain domain1 created.
[exec] Admin login information for host [localhost] and port [4848] is being overwritten with credentials provided. This is because the --savelog
in option was used during create-domain command.
[exec] Login information relevant to admin user name [admin] for this domain [domain1] stored at
[C:\Documents and Settings\sg0203921\.asadminpass] successfully.
[exec] Make sure that this file remains protected.
Information stored in this file will be used by asadmin commands to manage
this domain.
[delete] Deleting: C:\glassfish\passfile

BUILD SUCCESSFUL
Total time: 1 minute 20 seconds
Iniciar el servidor de aplicaciones

Una vez completada la instalacion de Glassfish, sera conveniente verificar que inicia correctamente. Para ejecutarlo debera hacer lo siguiente:
$> cd bin
$> asadmin.bat start-domain
Podra observar en consola la siguiente salida que indica el resultado de la ejecucion del servidor:
Starting Domain domain1, please wait.
Log redirected to C:\glassfish\domains\domain1\logs\server.log.
Redirecting output to C:/glassfish/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 Java System Application Server 9.1_02 (build b04-fcs)] with its configuration and logs at: [C:\glassfish\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://SGNARBA20392101: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.
Mediante un navegador, acceda a la siguiente URL:
http://localhost:4848/asadmin
La pantalla de autenticacion debera aparecer:


Los datos de autentificacion definidos por defectos son:
  • User name: admin
  • Password: adminadmin
Una vez ingresados podra observar la siguiente pantalla:


Finalmente para detener el servidor Glassfish, ejecute los siguiente comandos:
$> asadmin.bat stop-domain
Podra observar en la consola, luego de unos instantes, la siguiente respuesta:
Domain domain1 stopped.
Vinculos:

lunes, 1 de septiembre de 2008

axis2: Ejemplos de la guia de usuario en Eclipse

Preparar los ejemplos

Ver Ejemplos de la guia de usuario

Compilar y ejecutar los ejemplos desde Eclipse

Crear un nuevo proyecto en Eclipse accediendo al menu File -> New -> Java Project. El nombre del proyecto puede ser cualquiera, pero la ruta del codigo fuente a importar es la correspondiente a los ejemplos de la guia de usuario:


Al presionar el boton "Next" accedera a la ventana de "Java Settings". Observe la estructura del proyecto en la siguiente figura:


Seleccione la solapa "Libraries" para agregar las dependencias necesarias para poder compilar los ejemplos. Las librerias requeridas son las que aparecen en la siguiente figura:


Presione el boton "Finish" para concluir con la creacion del proyecto. Ahora es momento de compilar los ejemplos.
En la perspectiva Java, podra encontrar el archivo build.xml en la solapa "Package Explorer". Seleccione este archivo y acceda al menu Run -> Run As. Aparecera la siguiente ventana donde se debe seleccionar la opcion "Ant Build":


En la solapa "Console" podra observar el resultado de la compilacion:
Buildfile: C:\axis2-1.3-samples\samples\userguide\build.xml
compile:
[javac] Compiling 17 source files to
C:\axis2-1.3-samples\samples\userguide\build\classes
[javac] Note: Some input files use or override a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[jar] Building jar:
C:\axis2-1.3-samples\samples\userguide\build\userguide.jar

generate.service:
[jar] Building jar: C:\axis2-1.3-samples\samples\userguide\build\MyService.aar
[copy] Copying 1 file to C:\axis2-1.3-samples\repository\services
[jar] Building jar:
C:\axis2-1.3-samples\samples\userguide\build\MyServiceWithModule.aar
[copy] Copying 1 file to C:\axis2-1.3-samples\repository\services
[jar] Building jar:
C:\axis2-1.3-samples\samples\userguide\build\WsaMappingService.aar
[copy] Copying 1 file to C:\axis2-1.3-samples\repository\services

BUILD SUCCESSFUL
Total time: 1 second
El codigo es empaquetado y almecenado en el directory "Repository". En la siguiente figura se muestran los nuevos paquetes generados:


Ejecutar Axis2 server

Es posible ejecutar el servidor de Axis2 incluido en la distribucion desde Eclipse. Para esto es necesario utilizar la facilidad de Eclipse para ejecutar aplicaciones externas. Acceda al menu Run -> External Tools -> Open External Tools Dialog... y observara la ventana que se muestra en la figura:


En el marco izquierdo, seleccione la opcion "Program" y luego presione el icono "New Launch Configuration". Modifique el nombre de la configuracion y la ubicacion de la aplicacion a ejecutar, en este caso, axis2server. Aparecera un nuevo item bajo la opcion "Program"; seleccionelo y modifique sus datos. Mediante el boton "Browse File System", busque el archivo con el cual se inicia el servidor de Axis2.:


Luego seleccione la solapa "Environment", para agregar una nueva variable de entorno. Presione el boton "New" y agregue la variable AXIS2_HOME, como se muestra en la figura:


Presione el boton "OK" en la ventana "Edit Environment Variable":


Luego presione el boton "Run" en la ventana "External Tools". El resultado sera un error debido a que faltan agregar dependencias para ejecutar el servidor de Axis2 y los ejemplos:

Las siguiente librerias son necesarias:
  • annogen-0.1.0.jar
  • axis2-adb-1.3.jar
  • backport-util-concurrent-2.2.jar
  • commons-codec-1.3.jar
  • commons-fileupload-1.1.1.jar
  • commons-httpclient-3.0.1.jar
  • httpcore-4.0-alpha5.jar
  • mex-impl-1.3.jar
  • wstx-asl-3.2.1.jar
  • XmlSchema-1.3.2.jar
Luego de agregar estar librerias al classpath del proyecto, ejecute nuevamente el servidor de Axis2. En la solapa "Console" podra observar la salida generada:
Using JAVA_HOME    c:\dev\jdk1.5.0_11
Using AXIS2_HOME C:\axis2-1.3-samples
[INFO] [SimpleAxisServer] Starting
[INFO] [SimpleAxisServer] Using the Axis2 RepositoryC:\axis2-1.3-samples\repository
[SimpleAxisServer] Using the Axis2 RepositoryC:\axis2-1.3-samples\repository
[SimpleAxisServer] Using the Axis2 Configuration FileC:\axis2-1.3-samples\conf\axis2.xml
[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: sample-MyService.aar
[INFO] Deploying Web service: sample-WsaMappingService.aar
[INFO] Deploying Web service: version.aar
[INFO] [SimpleAxisServer] Started
[SimpleAxisServer] Started
[INFO] Listening on port 8080
Acceda mediante un navegador a la URL http://localhost:8080/axis2/services/ para ver los web services desplegados:


Vinculos:
  • Axis2

axis2: Ejemplos de la guia de usuario

Preparar los ejemplos

Descargar la distribucion binaria de Axis2 del siguiente vinculo.

Para ejecutar los ejemplos correspondientes a la guia de usuario, se utilizara la mayor parte de la distribucion de Axis2. A continuacion se muestra el contenido de la misma:


Para comenzar, es posible crear un directorio llamado axis2-samples donde se alojaran los siguientes elementos de la distribucion:
  • repository
  • conf
  • bin
  • log4j.properties
  • commons-logging.properties
Puede ver que en la figura anterior estos elementos estan seleccionados.

Del directorio lib solo se agregaran las librerias necesarias para poder compilar y ejecutar los ejemplos correspondientes a la guia de usuario de Axis2, que son:


En el directorio samples es necesario agregar los ejemplos en el sub-directorio userguide. Observe el contenido final del directorio axis2-samples:


Compilacion de los ejemplos

Para compilar los ejemplos inicie una consola, acceda al directorio con los ejemplos y ejecute Ant:
$> cd axis2-samples/samples/userguide
$> ant
A continuacion puede observar el resultado de una compilacion exitosa:


Una vez compilados los servicios y los clientes que los consumen correspondientes a la guia de usuario, es necesario iniciar el servidor de Axis2 incluido en la distribucion, y luego invocar al cliente correspondiente.
Para iniciar el servidor de Axis2, inicie una nueva consola y ejecute el archivo axis2server.bat:
$> cd axis2-samples/bin
$> axis2server.bat
En el caso de un sistema Linux, sera necesario ejecutar el archivo axis2server.sh.
La siguiente figura muestra la salida por consola correspondiente a la ejecucion del servidor:


Ahora es necesario ejecutar alguno de los clientes de web services incluidos en los ejemplos para verificar el funcionamiento de Axis2.
Para ejecutar un cliente es necesario hacer uso de Ant, ya que el archivo build.xml correspondiente a los ejemplos incluye los targets necesarios para compilar y ejecutar los diversos clientes disponibles.

Para ejecutar el cliente ..., inicie una nueva consola, acceda el sub-directorio con los ejemplos y ejecute Ant empleando el target apropiado:
$> cd axis2-samples/samples/userguide
$> ant run.client.blocking
La siguiente figura muestra la salida por consola correspondiente a la ejecucion del cliente:


Este es el mensaje SOAP que se muestra por consola:

Vinculos:

domingo, 31 de agosto de 2008

pgcedit: Eliminar todos los botones de un menu

Para eliminar un menu que contiene varios botones, es necesario utilizar PgcEdit de la siguiente manera:
  • Editar el menu y eliminar los botones que contiene uno por uno
  • Eliminar el pgc correspondiente al menu directamente
La segunda opcion es mas rapida, ya que no requiere eliminar los botones del menu uno por uno, sino que son eliminados todos a la vez.

Tenga en cuenta que un slideshow se compone de varios menues, que se unen unos con otros mediante botones. Para este caso existen botones seguir el siguiente slide o volver al anterior o al menu principal, que suele ser el de "Extras".

Edite el dvd para el cual desea eliminar el menu con PgcEdit. Busque en la lista de pgc el correspondiente al menu a eliminar:


Presione la combinacion de teclas Ctrl+k o habra el menu contextual para el pgc selecionado y elija la opcion "Kill PGC Playback". Aparecera entonces el siguiente mensaje:


Mediante esta advertencia, PgcEdit le informa que la navegabilidad del dvd puede resultar inconsistente. No es conveniente realizar este procedimiento si existe algun camino de navegacion que lleve a este menu. Solo debe hacerce cuando el menu quedo aislado y ya no es posible accederlo, por ejemplo, el menu de "Extras" y el menu principal o raiz que permite acceder a el.

Para continuar, presione el boton "OK" y aperecera la ventana "Menu buttons":


Puede observar los botones remarcados, asi como tambien el boton "Kill playback", que es el que debe presionar. Luego de hacerlo, aparecera el siguiente mensaje:


Luego de completar este procedimiento, el menu ya no puede ser accedido, pero aun se encuentra presente en el dvd, ocupando algo de espacio. Para limpiar el dvd, quitando el menu recien eliminado, debera emplear FixVTS o VobBlanker, como lo indica el mensaje.

Vinculos:
  • PgcEdit

jueves, 28 de agosto de 2008

java: serialVersionUID

Serializacion y el serialVersionUID

El siguiente parrafo corresponde al Javadoc para la interface Serializable:

The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an InvalidClassException. A serializable class can declare its own serialVersionUID explicitly by declaring a field named "serialVersionUID" that must be static, final, and of type long:

 ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassException's during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members.

Uso del serialVersionUID


El uso mas importante que se le da a este dato de una clase es cuando se serializan/deserializan clases en un sistema distrubuido, donde el intercambio de objetos entre componentes remotos del sistema es algo comun. Existen varios motivos por los cuales generar el sUID estaticamente es necesario, aunque depende del caso.

Generacion dinamica del serialVersionUID

Lo esperable es que el contenedor de la aplicacion genere este sUID en caso de no encontrarlo en la clase a serializar. La generacion de este identificador afecta la performance del sistema ya que la clase debe ser inspeccionada.
Otro problema asociado a la generacion dinamica del sUID es que si la clase serializada fue compilada empleando un compilador o version de Java diferente a la usada para la clase que se encuentra en entorno remoto, entonces ocurria un error de compatibilidad. Esto se debe a que el bytecode generado por compiladores diferentes o version de Java diferentes es distinto.

Generacion estatica del serialVersionUID

La generacion estatica del sUID consiste en agregar en el codigo de la clase a serializar un dato static y long identificado con el nombre serialVersionUID. El valor asociado a este dato debe ser consistente con la composicion de la clase. Actualmente, entornos de desarrollo como Eclipse incluyen la funcionalidad necesaria para generar dicho valor.

Cambios en clases serializables

Cambios en la composicion de una clase que implementa la interfaz Serializable pueden o no generar una excepcion del tipo java.io.InvalidClassException.
Los cambios que no generan incompatibilidad para una clase durante el proceso de serializacion/deserializacion son:
  • Agregar un dato (miembro/atributo)
  • Cambiar el modificador de un dato de static a no-static
  • Cambiar el modificador de un dato de transient a no-transient
Los cambios que generar errores de compatibilidad son:
  • Eliminar un dato (miembro/atributo)
  • Cambiar el tipo de un dato primitivo
  • Convertir un dato a static
  • Convertir un dato a transient
  • Modificar la gerarquia de clases
Suprimir alertas

Una forma de evitar el warning por parte del compilador o en un entorno de desarrollo como Eclipse, es utilizar la siguiente anotacion a nivel de clase:
@SuppressWarnings("serial")
de la siguiente manera:
@SuppressWarnings("serial")
public class SomeClass {
...
}
Vinculos:

miércoles, 27 de agosto de 2008

esb: Ejemplo con Apache Synapse

Ejemplo de la Guia Rapida de Apache Synapse

Descargar la distribucion de Apache Synapse desde el siguiente vinculo.

Acceda al directorio donde se encuentra el web service de ejemplo SimpleStockQuoteService, incluido en la distribucion. A continuacion se muestra el contenido del web service:


Para realizar la compilacion, debera ejecutar los siguientes comandos:
$> cd $SYNAPSE_HOME/samples/axis2Server/src/SimpleStockQuoteService
$> ant
La variable de entorno $SYNAPSE_HOME puede estar o no definida, lo importante es tener en cuenta que hace referencia a la ruta de instalacion de Apache Synapse.

El resultado de la compilacion se muestra en la siguiente figura:


Luego de obtener una compilacion exitosa, podra iniciar el servidor de Axis2 que contiene el web service SimpleStockQuoteService. Observe en la siguiente figura el contenido del servidor de Axis2 provisto junto con la distribucion de Apache Synapse:


Para iniciar el servidor de Axis2, ejecute los siguiente comandos:
$> cd $SYNAPSE_HOME/samples/axis2Server
$> axis2server.bat
En caso de tratarse de un sistema Linux, debera ejecutar el script axis2server.sh.
Podra observar en la consola el resultado de la ejecucion del servidor Axis2 como se muestra en la siguiente figura:


La salida generada por el inicio del servidor de Axis2 es la siguiente:
"Starting Sample Axis2 Server ..."
Using AXIS2_HOME: C:\synapse-1.2\samples\axis2Server\
Using JAVA_HOME: c:\dev\jdk1.5.0_11
--> Wrapper Started as Console
Launching a JVM...

2008-08-27 17:26:35,650 [-] [WrapperSimpleAppMain] INFO SampleAxis2ServerManager
[SimpleAxisServer] Starting
[SimpleAxisServer] Using the Axis2 Repository :
C:\synapse-1.2\samples\axis2Server\repository
[SimpleAxisServer] Using the Axis2 Configuration File :
C:\synapse-1.2\samples\axis2Server\repository\conf\axis2.xml
...
2008-08-27 17:26:37,009 [-] [WrapperSimpleAppMain]
WARN MailTransportListener Error configuring the Mail transport for Service
Cannot find parameter : transport.mail.Address for service : SimpleStockQuoteService
...
2008-08-27 17:26:37,009 [-] [WrapperSimpleAppMain]
INFO SampleAxis2ServerManager [SimpleAxisServer] Started
Tambien puede verificar mediante un navegador que el servidor Axis2 se encuentra funcionando y que el web service de ejemplo fue publicado con exito. Acceda a http://localhost:9000/soap para verificarlo:


Ahora es momento de iniciar Synapse. Observe en la siguiente figura el contenido del directorio bin de Apache Synapse, donde se encuentran varios scripts de ejecucion:


Para iniciar Synapse, ejecute los siguientes comandos:
$> cd $SYNAPSE_HOME/bin
$> synapse.bat -sample 0
En caso de tratarse de un sistema Linux, debera ejecutar el script synapse.sh.

Los parametros -sample y 0 le indican a Synapse que utilice el archivo de configuracion de ejemplo llamado synapse_sample_0.xml ubicado en $SYNAPSE_HOME/repository/conf/sample. Este archivo de configuracion especifica logging de los mensajes.

Podra observar en la consola el resultado de la ejecucion de synapse como se muestra en la siguiente figura:


La salida generada por el inicio de Apache Synapse es la siguiente:
"Starting Synapse/Java ..."
Using SYNAPSE_HOME: C:\synapse-1.2\bin\.
Using JAVA_HOME: c:\dev\jdk1.5.0_11
--> Wrapper Started as Console
Launching a JVM...
...
2008-08-27 17:46:42,091 [10.135.117.158-SGNARBA20392101]
[WrapperSimpleAppMain] INFO ServerManager Ready for processing
Con el web service y Synapse ejecutando, es momento de utilizar un cliente de web service para efectuar alguna consulta al web service y verificar el logging del mensaje. A continuacion puede observar el contenido del cliente de Axis2 provisto junto con la distribucion de Apache Synapse:


Para iniciar el cliente de web service, ejecute ant empleando los argumentos que definen el web service a invocar, el metodo y sus parametros:
$> ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dtrpurl=http://localhost:8280 -Dmode=quote -Dsymbol=IBM
Podra observar en la consola donde se ejecuta el cliente la siguiente salida:


Luego, si consulta la consola donde Synapse se esta ejecutando, podra verificar que el mensaje enviado al web service se encuentra en pantalla. El logging a funcionado.


Vinculos:

domingo, 24 de agosto de 2008

maven: Creacion de un repositorio local

Introduccion

Para crear un repositorio local es necesario:
  • Definir una ubicacion donde almacenar las dependencias
  • Agregar a la ubicacion definida las dependencias requeridas por Maven y los proyectos que constuye
  • Alterar la configuracion de Maven para que busque dependencias en el repositorio local
De los tres pasos anteriores, el que presenta la mayor complejidad es el segundo, ya que justamente es Maven el encargado de manejar las dependencias.

El repositorio central de Maven es muy pesado y hacer una descarga completa del mismo no es una buena opcion en tanto y en cuanto no se disponga de un buen enlace y espacio en disco.
Lo que si es posible es hacer una seleccion simple de las dependencias que seran necesarias.

Creando el repositorio local

Para

Vinculos:

maven: Creacion de proyecto Java

Creacion del projecto

Para crear un proyecto que luego sera construido por Maven 2, su sistema debera disponer del entorno Java 2 y la herramienta Maven 2 instalados.

Veamos que ocurre al ejecutar el comando Maven en un directorio arbitrario:



Esto se debe a que Maven no encuentra un proyecto definido en la ubicacion indicada.

Maven emplea arquetipos (archetypes) para determinar cual es la estructura del proyecto a construir y asi poder construirlo. Los proyectos creados mediante Maven se basan en arquetipos provistos por Maven o por el usuario.

Uno de los arquetipos provistos por Maven permite crear proyectos Java genericos. Para hacerlo debera ejecutar el comando mvn pasando como parametro el arquetipo, en otros argumentos. Entonces escriba por consola de comandos lo siguiente:
$ mvn arquetype:create -DgroupId=[gid] -DartifactId=[aid]
Observe en la siguiente figura la respuesta de Maven:


Maven intenta obtener el plugin llamado arquetype pero no lo encuentra en el repositorio de dependencias central, ya que, aparentemente, no puede acceder al sitio remoto definido en la configuracion. Este es el mensaje de error completo:
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] org.apache.maven.plugins: checking for updates from central
[WARNING] repository metadata for: 'org.apache.maven.plugins' could not be retrieved
from repository: central due to an error: Error transferring file
...
[INFO] Repository 'central' will be blacklisted
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] The plugin 'org.apache.maven.plugins:maven-archetype-plugin' does not exist
or no valid version could be found
...

Si no dispone de acceso a repositorio central, debera configurar un mirror que contenga las dependencias que su proyecto requiere.

Configuracion de repositorio



Vinculos:

maven: Instalacion de Maven 2

Verifique que el entorno Java 2 se encuentra instalado en su sistema. Para esto intente por linea de comandos obtener la version de Java:


Ahora debera descargar Maven 2 desde el sitio de Maven. Una vez completada la descarga, extraiga la distribucion en la ruta que le sea mas comoda, por ejemplo C:\. Podra observar entonces los siguiente archivos y directorios:


Configure la variable de entorno "Path" para poder ejecutar Maven desde cualquier ubicacion en el sistema de archivos, accediendo a la ventana "Variable de entorno" a traves de las propiedades del sistema en el Panel de Control:


Seleccione la variable "Path" en el marco "Variables del sistema" y presione el boton "Modificar". En la ventana "Modificar la variable del sistema", agrega al final del valor en el campo "Valor de variable" la ruta al directorio bin de Maven:


Luego presione el boton "Aceptar" en todas las ventanas que abrio para efectuar este cambio.
Verifique que Maven es accesible desde una ubicacion cualquiera del sistema de archivos. Para esto intente por linea de comandos ejecutar Maven:


Maven emplea un directorio oculto en el directorio del usuario que lo ejecuta. Este directorio tiene por nombre .m2 y puede encontrarlo en C:\Documents and Settings\Nombre de Usuario. En particular, Maven buscara en este directorio la configuracion de usuario, que debera ser especificada en el archivo settings.xml.
Si Maven no encuentra un repositorio de dependencias definido, entonces intentara acceder a ibiblio a traves de la red.

Vinculos:

martes, 12 de agosto de 2008

eclipse: Error al ejecutar test de JUnit

Al intentar ejecutar un test de JUnit en Eclipse, aparece el siguiente mensaje de error:


Al revisar el log de Eclipse en el workspace activo, que es el archivo WORKSPACE_PATH/.metadata/.log, encontre la siguiente excepcion:
!ENTRY org.eclipse.debug.core 4 120 2008-08-12 11:57:27.717
!MESSAGE Exception occurred executing command line.
!STACK 0
java.io.IOException: CreateProcess: C:\dev\jdk1.5.0_11\bin\javaw.exe -classpath
"C:\dev\... BLA BLA BLA CLASSPATH LARGISIMOOOO; C:\dev\BLA BLA BLA\ME"
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
at java.lang.Runtime.exec(Runtime.java:591)
at org.eclipse.debug.core.DebugPlugin.exec(DebugPlugin.java:744)
at org.eclipse.jdt.launching.AbstractVMRunner.exec(AbstractVMRunner.java:70)
at org.eclipse.jdt.internal.launching.StandardVMRunner.run(StandardVMRunner.java:241)
at org.eclipse.jdt.internal.junit.launcher.JUnitBaseLaunchConfiguration.launch(JUnitBaseLaunchConfiguration.java:103)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:639)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:565)
at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:754)
at org.eclipse.debug.internal.ui.DebugUIPlugin$6.run(DebugUIPlugin.java:944)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)
El problema radica en que el classpath utilizado para crear el proceso contiene demasiados caracteres.

Para solucionar este problema es necesario "depurar" el classpath utilizado para ejecutar el test de JUnit. Acceda al menu "Run -> Run..." para abrir la ventana de dialogo correspondiente a la ejecucion de clases. En la cuadro de la izquierda busque el item "JUnit" y seleccione de la lista el test de JUnit para el cual va a modificar el classpath de ejecucion:


Luego active la solapa "Classpath" y expanda el item "User entries". Elimine de la lista de referencias aquellas que no sean requeridas por el test de JUnit que va a ejecutar. Finalmente presione el boton "Run" y esta vez el test de JUnit debera correr bien.