Foros del Web » Programación para mayores de 30 ;) » Java »

conexion servlet

Estas en el tema de conexion servlet en el foro de Java en Foros del Web. Hola, tengo un problema con una aplicacion J2ME que estoy realizando. Tengo una midlet que conecta via HttpConnection a un servlet. separe la conexion de ...
  #1 (permalink)  
Antiguo 19/03/2007, 06:39
 
Fecha de Ingreso: febrero-2007
Mensajes: 23
Antigüedad: 17 años, 3 meses
Puntos: 0
Pregunta conexion servlet

Hola,
tengo un problema con una aplicacion J2ME que estoy realizando.
Tengo una midlet que conecta via HttpConnection a un servlet. separe la conexion de la midlet porque necesitaba dos threads distintos sino se bloqueaba. Es decir,...

MIDLET:

public class HelloMidlet extends MIDlet implements CommandListener {

/** Creates a new instance of HelloMidlet */
public HelloMidlet() {
}
private Conexion con; //en la midlet hay un objeto conexion
...
public void commandAction(...)
{
...
con= new Conexion();
con.start();
con.enviarMensaje("hola");
con.leerRespuesta();
con.cerrarConexion();
}
...
}

CONEXION

public class Conexion implements Runnable {
private HttpConnection c;
static final String URLProxy ="...";

public void run(){
try{
c = (HttpConnection)Connector.open(URLProxy);
c.setRequestMethod(HttpConnection.POST);
c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
c.setRequestProperty("Connection", "close");
}catch(IOException e){}
}
public void enviarMensaje(String msg)throws IOException{...}
public void leerRespuesta(){...}
public void cerrarConexion() throws IOException{...}
}


El problema es que en la midlet cuando llama al metodo "con.enviarMensaje("hola");" me da una nullpointerexception. en cambio si hago el "enviarMensaje" dentro del start() si me funciona. Se pierde el objeto Conexion al pasar a la midlet despues del start()???????
  #2 (permalink)  
Antiguo 19/03/2007, 06:56
 
Fecha de Ingreso: febrero-2007
Mensajes: 23
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: conexion servlet

podria ser problema de los Streams?
es decir, el stream de escritura lo abro en el metodo d escribir y
el stream de lectura lo abro en el metodo de leer.
quizas tenga q abrirlos en el start() justo despues de la conexion y que sean streams globales en vez d locales.
  #3 (permalink)  
Antiguo 19/03/2007, 17:35
 
Fecha de Ingreso: marzo-2006
Mensajes: 54
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: conexion servlet

el problema no me parece q este en los Streams sino en la sincronía de las acciones q estas tratando de ejecutar, déjame explicarme...

cuando en el hilo del midlet ejecutas un
con.start();
se va a ejecutar el método run() de la clase Conexion en otro hilo y es ese método el q va a tratar de establecer la comunicación con el servlet.
pero la llamada a start() retorna el control casi inmediatamente al hilo del midlet, así q mientras por un hilo se esta ejecutando el método run() y se esta tratando de establecer la conexión, en el hilo del midlet haces de repente esta llamada:
con.enviarMensaje("hola");
es decir, estas forzando a la conexión a que envíe un mensaje, pero ni siquiera sabes si la conexión se pudo efectuar, puede q al hacer esta llamada todavía este ejecutándose el método run() del Conexion, que no se haya obtenido el objeto HttpConnection , que este todavía conectándose o incluso q haya ocurrido un error en la conexión ( error del q no te enteras debido al catch vacío en el método run() )

esto explicaria el porque al poner la llamada
enviarMensaje("hola")
dentro del método run() si funciona, es debido a que se ejecutan esas acciones en el mismo hilo, la llamada a enviarMensaje() se ejecuta solo después de ser establecida la conexión.

creo q puedes solucionar esto de 2 formas:
1- teniendo en el objeto Conexion una lista de los mensajes q aun no se han podido enviar, en este caso enviarMensaje() adicionaría el mensaje a esa lista si ve q todavía no se ha podido establecer la conexión con el servlet.

2- haciendo q el método enviarMensaje() espere a que se efectúe la conexión, puede q tengas q hacer uso de los métodos wait() y notify()


saludos;
da_fr.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:16.