viernes, 13 de noviembre de 2009

Como levantar propiedades desde un archivo

Pongo una forma rapida y sencilla de poder levantar propiedades de un arhchivo y poder utilizarlas en una aplicaicon java:

Se crea el archivo de propieadades por ej:

prueba.properties:

#Este es un archivo de prueba para cagar propiedades en una aplicacion java

prop.nombre=luciano
prop.apellido=izquierdo
prop.edad=26



Y despues en una clase java se levantan tan siempre como hacer esto:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;


public class Main
{

/**
* @param args
*/
public static void main(String[] args)
{

Properties propiedades = new Properties();
try
{
propiedades.load(new FileInputStream(
"src/prueba.properties"));
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}


System.out.println(propiedades.getProperty("prop.nombre"));
System.out.println(propiedades.getProperty("prop.apellido"));
System.out.println(propiedades.getProperty("prop.edad"));
}

}

jueves, 15 de octubre de 2009

Como cambiar el EndPoint o EPR de AXIS2

Cuando se genera con axis2 un web services, de forma dinamica.. o sea que el WS te cree el WSDL en forma dinamica, el motor de Axis2 tiene un comportamiento, que a mi me trajo algunos problemas.

Es decir, Cuando por ejemplo queremos probar el WS con el cliente de eclipse, uno agarra y pone la direccion del ws.
Ej:

http://IP_PUBLICA/RoboCupWS/services/RoboCupService?wsdl

Luego de esto el cliente de WS nos trae todos los metodos que contiene ese WS y hasta aca todo muy lindo, el problema es que el motor de axis2 genera automaticamente el WSDL y como ENDPOINT pone la ip LOCAL DE LA MAQUINA...
Con lo cual cuando queremos pedir un metodo al ws, se lo estariamos pidiendo a la ip local de esa maquina, la cual para nosotros no existe.... nosotros queriamos que le pida el metodo a la IP PUBLICA.

Bueno la forma de arreglar este problemita es configurando el ENDPOINT en el axis2.

Para hacer esto hacemos lo siguiente:

- Dentro del proyecto del WS , nos vamos a la carpeta WebContent/WEB-INF/conf

Y dentro de esta carpeta vamos a encontrar el archivo de configuracion de axis2, que se llama axis2.xml.

Dentro de este archivo vamos a buscar esto:





y como podemos ver ahi, configurando esto vamos a cambiar el ENDPOINT del ws.

ej:



200.175.45.1-->

o

fenderstratocaster.com-->


De esta manera ya tenmos configrado el ENDPOINT del ws, y no vamos a tenr ningun problema.

IMPORTANTE:

Tener en cuenta que haciendo esto, estamos harcodeando el ENDPI¿OINT, por lo cual esto ya no va a ser dinamico, y si el dia de mañana sacamos el WS de ese server y lo migramos a otro server, vamos a tener que cambiar el dns o ip del ENDPOINT para ese nuevo server.

miércoles, 2 de septiembre de 2009

Como acceder al ServeltContext de un Servicio Web Axis2

Trabajando con Axis2 neceistaba tener un Servelet por afuera del Servicio, que sea un servidorcito UDP, y que parsee una trama UDP, que me llegaba todo el tiempo a ese servlet.

Entonces necesitaba parsear los datos UDP, y poder mandarlos atravez del WS.

Para eso iba a neceistar que mi servicio WS, pudiera agarrar esos datos parseados del Servlet. El metodo de comunicacion entre ese Servlet y mi Servicio del WS de axis2 iba a tener que ser el Contexto de la aplicacion, osea el ServletContext, entonces me puse a buscar la manera de poder acceder desde el servicio de axis2 al servletcontes de la aplicacion, y lo pude hacer gracias a esta data:


If you are using Axis2 Web Archive (WAR) distribution, then you can easily get these information from the messagecontext.

Accessing Remote IP address from the message context: You can get the remote IP address of the client corresponding to the current message as follows:

String remoteAddress = (String)msgCtx.getProperty("REMOTE_ADDR");


----

Accessing ServletContext from the message context: You can obtain the ServletContext
from message context as follows:

ServletContext servletContext = (ServletContext)MessageContext.getProperty
("transport.http.servletContext");

ServletContext servletContext = (ServletContext)MessageContext.getCurrentMessageContext().getProperty("transport.http.servletContext");


----

Accessing HttpServletRequest from the message context: You can obtain the
HttpServletRequest from message context as follows:

HttpServletRequest httpServletRequest = (HttpServletRequest)MessageContext.getProperty
("transport.http.servletRequest");


Esta ultima es la que utilice para acceder al contexto.







lunes, 27 de julio de 2009

Aca voy a poner varios ejemplos de como recorrer vectores, arrays, o colecciones de datos como list, etc etc.....

Como recorrer un HashTable:

Hashtable a = getHashTable();

Enumeration e = a.keys();
Object obj;
while (e.hasMoreElements()) {
obj = e.nextElement();
System.out.println("clave "+ obj +": " + a.get(obj));
}


------------------------------------------------------------------------------------------

Como recorrer un MAP:


Map hm = new HashMap();
hm.put("1","Luis");
hm.put("2","Amaya");
hm.put("3","Julio");
Iterator it = hm.entrySet().iterator();
while (it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
System.out.println(e.getKey() + " " + e.getValue());

Como leer del puerto serie

Trabajando con J2ME tras un modem java de siemens, tenemos que leer por el puerto seria la inforamcion que nos mandaba un instrumento electrico, esta fue la manera que encontramos para poder leer efectivamente del puerto serie:

sbResult=new StringBuffer();

comando = desp.getNextCommand();

out.write(comando.getQuery("31").getBytes());
out.flush();

int inputChar;

do
{
inputChar= is.read();
if (inputChar!=-1)
sbResult.append((char) inputChar);
//miLog.INFO("de a uno:" + inputChar);
if(inputChar==3)
break;
}while (is.available()>0);

miLog.INFO( serviceName + " RESPUESTA : " + sbResult.toString());


Este metodo no me funciono del todo bien , ya que aveces se me corrian las lecturas, es por eso que haciendo pruebas lo cambie por el siguiente codigo.

do
{
inputChar= is.read();
if (inputChar!=-1)
sbResult.append((char) inputChar);
if(inputChar==3)
break;
// }while (is.available()>0);
}while (true);

miLog.INFO( serviceName + " RESPUESTA : " + sbResult.toString());


Despues de varias pruebas, tampoco pudimos hacer andar esta forma, finalmente encontramos esta forma que realmente no es muy linda, pero bueno ya estamos muy jugados con el tiempo, se probo y anda asi que asi quedo:



do
{

do
{
inputChar= is.read();
if (inputChar!=-1)
sbResult.append((char) inputChar);
if(inputChar==3)
break;
}while (is.available()>0);
if(inputChar==3)
break;
}while (true);

miLog.INFO( serviceName + " RESPUESTA DUCATI: " + sbResult.toString());

domingo, 5 de julio de 2009

Como instalar el entorno de GWT en eclipse.

Bueno en este caso voy a mostrar como instalar el enterno de GWT Standar en la pc y el plugin de eclipse.

Antes que nada una breve introduccion a que es GWT:

Gwt es un framework de google que sirve para hacer aplicaciones WEB con la tecnologia AJAX.
Basicamente la potencia y la gracia de gwt para la comunidad java es que, que todo el framework esta compuesto de librerias java (JAR) que sirven para programar aplicaicones web AJAX en codigo java, que luego va a ser compilado por el compilador de GWT a javascript.
Se programa bajo el entorno java, se debuggea en java y se hace todo lo que te imagines que se pueda hacer en java (obviamnete siempre programando con las librerias de GWT) y luego todo ese codigo java, se compila a un o varioas archivos .JS .HTML etc.... compilando todo codigo java a javascript en vez de a bytecode.
Es por eso que esta tecnologia se combina de una manera sorprendente y perfecta con el lenguaje java.

Basicamente eso es lo que es GWT bueno y cualquier cosa para mas info http://code.google.com/intl/es-AR/webtoolkit/

Bueno una vez echa la pequeña introduccion voy a pasar a explicar como se instala el framework GWT Standar de google.

Bueno la cosa es asi:

1 - En esta URL :
http://dl.google.com/eclipse/plugin/3.4

2 - Con ese url nos vamos al eclipse( por las dudas comento que estoy usando
el eclipse 3.4 ganymede), vamos al menu help->software updates y seleccionamos la
opcion Avaiable software y ahi en add site ponemelos el url que die en el punto 1.

3- Bueno ahi nos va a buscar todas las cosas para instalar via eclipse, y nos van a aparecer 3 cosas.
El jdk de google, el app engine de google, y el plugin para eclipse, bueno le damos click a todo y instalamos todos.
Una vez que esta todo instalado reinciamos el eclipse para que los cambios tomen efecto.

Bueno con eso ya estaria todo listo como para empezar a programar en GWT,
Fijate que para ver que todo este correctamente instalado en la barra de eclipse de arriba te tendrian que aparecer tres iconitos nuevos con los logos de google.

La proxima voy a poner como hacer una pequeña aplicacion con gwt standar.

NOTA IMPORTANTE: Si intentan istalar todas las herramientas en el nuevo eclipse galileo, no van a poder porque todavia la gente de goolge no adapto los plugins a esta nueva release de eclipse, asi que no se gasten en instalarla.

miércoles, 29 de abril de 2009

TIMEZONE en java

Bueno voy a explicar.. o a comentar masomenos la experiencia que tuve yo a la hora de encontrarme con el tema de los timezone y lo que yo entiendo por los timezone.

En primer lugar cabe destacar que el mundo tiene diferentes usos horarios.. todo parte del GMT-00 y luego se va moviendo para la derecha o para la izquierda restando o incremetando horas.
Es decir el GMT-00 que si no me equivoco seria londres, tiene una determinada hora supongamos en con las 6 pm.
en caso de movernos para el Oeste osea para Argentina por ejemplo ese gmt se va a ir restando es decir...
Argentina tiene un GMT-03 osea que se restarian 3 horas a el gmt-00 por lo cual si en el gmt-00 son las 6 pm, en argentina serian las 3 pm.

Llendo a lo relativo a JAVA.

la maquina virtual de java tiene seteada tambien una hora con su respectivo uso horario, que siempre toma la del sistema.

Osea si tenemos seteado el windows o linux, en argentina con una determinada hora y el huso horario america/buenos aires, vamos a tener seteada por defecto a la maquina virtual en gmt-03.

Entonces que pasa si estoy trabajando con una aplicacion, con la cual yo necesito manejarme con un uso horario distinto?
Por ejemplo quiero guardar en la BD siempre en GMT-0, porque se que despues esa BD va a ser accedida de distntos paises, que luego van a hacer las conversiones necesarias para pasar ese horario a su GMT correspondiente segun el pais.

Bueno en ese caso, entra en juego la clase de java TIMEZONE.
Que se usa de la siguiente manera.

//vamos a crear el timezone que queramos, en este caso queremos un timezone 00
TimeZone tz = TimeZone.getTimeZone("GMT-00");

//Voy a crear un objeto Calendar para poder manejar las fechas con un calendario y a este
//calendar en particular le voy a setear el timezone creado antes con gmt-0
Calendar cal = Calendar.getInstance(tz);

Bien hata aca todo barbaro, pero lo que nos fataria ahora seria formatear o representar
el horario de nuestra hora en gmt-00

Para eso hacemos lo siguiente.

// Obtengo un objeto DateFormat y le seteo tambien el gmt-0
DateFormat formater = DateFormat.getDateTimeInstance();
formater.setTimeZone(TimeZone.getTimeZone("GMT-0"));

Ya etamos en condiciones de imprimir la hora y fecha en gmt-0 o guardarla en la BD:

Imprimir:

System.out.println(formater.format( cal.getTime() );

Guardarlo en la BD

guardar(new Date( formater.format( cal.getTime())));


Una vez tuve un problema para guardar en la BD con el :
guardar(new Date( formater.format( cal.getTime())));

No se si sera porque el new Date esta deprecated o que, pero por las dudas para solucionar eso, se puede crear otro formater, y decirle en que formato se quiere la fecha ej:

SimpleDateFormat formater2 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

y despues en vez de poner esta linea:

guardar(new Date( formater.format( cal.getTime())));

utilizo esta:

guardar(formater2.parse( formater.format( cal.getTime())));





Bueno espero que se haya entendido!