Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > LLAMADA ASINCRONA A WEB SERVICE

Buenos Dias

Estoy programando una consume de un servicio web y los resultados los inserta en una base de datos. Lo estoy haciendo mediante hilos el caso es que me va muy lenta y queria probar a llamar al servicio web de forma asincrona, pero no se como se hace. Os muestro mi codigo , La clase que consume el web service es :

public class WebServiceConsulta
{
private EnviaSIA resultado;
private String user;
private String password;
private URL urlconsulta;


public WebServiceConsulta(){

ResourceBundle props = null;
try {
props = new PropertyResourceBundle(
WebServiceConsulta.class.getResourceAsStream("/webServiceConstant.properties"));
} catch (IOException ioe) {
throw new IllegalStateException("Error al leer propiedades", ioe);
}

// Clave del certificado a usar dentro del KeyStore
user = props.getString("user.consulta");
password = props.getString("password.consulta");
String consultaEndPoint=props.getString("endpoint.consulta");
urlconsulta= null;

try {
urlconsulta = new URL(consultaEndPoint);

} catch (MalformedURLException e1) {
e1.printStackTrace();
e1.getMessage();
}
}

public EnviaSIA webservice (int año, String sia)
{

/** Añadimos los parametros de entrada del servicio **/
ParamSIA parametros = new ParamSIA();


parametros.setUser(user);
parametros.setPassword(password);
Filtro filtro= new ParamSIA.Filtro();
filtro.setAnioVolTramitaciones(String.valueOf(año));
filtro.setCodigoActuacion(sia);
filtro.setMostrarOtrosDatos("S");
filtro.setObtenerBajas("S");
parametros.setFiltro(filtro);

try
{
WsSIAConsultarActuacionesIdentificacion_Service servicio= new WsSIAConsultarActuacionesIdentificacion_Service(urlconsulta);
resultado=servicio.getWsSIAConsultarActuacionesIdentificacionSOAP().consultarSIAV30(parametros);

}catch (Exception e){
e.getMessage();
return resultado;
}

return resultado;
}


}

Mientras que desde la clase principal del hilo hago una llamada a insertar Procedimiento que es el que consume el web service . de la siguiente manera.
public void run() {
try {

log.debug("F_ run() " + this.getName() + " " + this.procedimientoAuxiliar.getAccionRunEjecutar());

if (session != null){
session.close();
}
if (session == null)
{
log.debug("Se abre la sesion de bbdd");
session = sessionFactory.openSession();
}

log.debug("Se activa el metodo flush()");
session.setFlushMode(FlushMode.ALWAYS);

log.debug("Antes de entrar a insertar procedimiento");
//Llamamos al web service de consulta pasandole el año y el numero sia como parámetros de entrada
insertaProcedimiento(wscons.webservice(año, sia), año, procedimientoAuxiliar, session, tx);

log.debug("Se mata el hilo");
stop(Thread.currentThread());


} catch (Exception e) {
// TODO Auto-generated catch block
log.error("Se ha producido un error en el metodo Run de los hilos" + e.getMessage());
}finally{

//cerramos la sesion
log.debug("Se cierra la sesion de bbdd");
if (session !=null)
{
session.close();
}
//Liberamos el semáforo se produzca o no excepción
log.debug("Se libera el semáforo");
this.semaforo.release();
}

}

ALGUNA IDEA PARA LLAMAR AL WEB SERVICE DE FORMA ASINCRONA???????. Agradezco toda la informacion posible gracias

marzo 3, 2017 | Unregistered CommenterBeatriz