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;
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 {
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
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