Hilos en JAVA

Hola!!
Buen dia soy nueva en esto y estoy desarrollando un sistema algo complicado estoy usando un ejemplo que se me proporciona por medio de UPS sobre los numeros de seguimiento (Tracking Number ) .

OK
- Lo que se quiere hacer es que este sistema sea automatizado
- Este ejemplo hace :
envia un tracking number a la url de UPS y me devuelve un fichero con los datos de este numero de seguimeinto ,solo si envio uno.

-lo que yo necesito es enviar varios Tracking Number que son jalados de mi base de datos y enviarlos al servidor y obtener el fichero con los datos coprrespondientes ,mismas que se descarguen una por una con un nombre diferente.

es algo complicado me pueden ayudar !!! Aqui les pongo el ejemplo
se los agradeceria si me orientaran un poco.

Gracias !!!

package com.ups.xolt.codesamples;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Properties;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import com.ups.xolt.codesamples.accessrequest.jaxb.AccessRequest;
import com.ups.xolt.codesamples.request.jaxb.Request;
import com.ups.xolt.codesamples.request.jaxb.TrackRequest;
import com.ups.xolt.codesamples.response.jaxb.TrackResponse;

public class PODPTM {

private static final String LICENSE_NUMBER = "accesskey";
        private static final String USER_NAME = "username";
        private static final String PASSWORD = "password";
        private static final String ENDPOINT_URL="url";
        private static final String OUT_FILE_LOCATION  = "out_file_location";
        private static Properties props =null;
       
private static String description = null ;
    static {
        props = new Properties();
       
    try{
                props.load(new FileInputStream("./build.properties"));
      }catch (Exception e) {
                        description = e.toString();
                       
                updateResultsToFile(description);
                e.printStackTrace();
                }      
    }
   
   

public void run( ) {
 
StringWriter strWriter = null;

   
        try {          
                        //Create JAXBContext and marshaller for AccessRequest object                           
                        JAXBContext accessRequestJAXBC = JAXBContext.newInstance(AccessRequest.class.getPackage().getName() );             
                        Marshaller accessRequestMarshaller = accessRequestJAXBC.createMarshaller();
                        com.ups.xolt.codesamples.accessrequest.jaxb.ObjectFactory accessRequestObjectFactory = new com.ups.xolt.codesamples.accessrequest.jaxb.ObjectFactory();
                        AccessRequest accessRequest = accessRequestObjectFactory.createAccessRequest();
                        populateAccessRequest(accessRequest);
                        //Create JAXBContext and marshaller for TrackRequest object
                        JAXBContext trackRequestJAXBC = JAXBContext.newInstance(TrackRequest.class.getPackage().getName() );               
                        Marshaller trackRequestMarshaller = trackRequestJAXBC.createMarshaller();
                        com.ups.xolt.codesamples.request.jaxb.ObjectFactory requestObjectFactory = new com.ups.xolt.codesamples.request.jaxb.ObjectFactory();
                        TrackRequest trackRequest = requestObjectFactory.createTrackRequest();
                        populateTrackRequest(trackRequest);
                        //Get String out of access request and track request objects
                       
                        strWriter = new StringWriter();  
                        accessRequestMarshaller.marshal(accessRequest, strWriter);
                        trackRequestMarshaller.marshal(trackRequest, strWriter);
                        strWriter.flush();
                        strWriter.close();
                   
                        System.out.println("Request: " + strWriter.getBuffer().toString());
                        String strResults =contactService(strWriter.getBuffer().toString());///****revisar
                     
                        //Parse response object
                        JAXBContext trackResponseJAXBC = JAXBContext.newInstance(TrackResponse.class.getPackage().getName());
                        Unmarshaller trackUnmarshaller = trackResponseJAXBC.createUnmarshaller();
                        ByteArrayInputStream input = new ByteArrayInputStream(strResults.getBytes());
                        Object objResponse = trackUnmarshaller.unmarshal(input);
                        TrackResponse trackResponse = (TrackResponse)objResponse;
                        System.out.println("Response Status: " + trackResponse.getResponse().getResponseStatusCode());
                        System.out.println("Response Status Description:" + trackResponse.getResponse().getResponseStatusDescription());
                        System.out.println("Inquiry Number: " + trackResponse.getShipment().get(0).getInquiryNumber().getValue());
                        System.out.println("Current Status Code: " + trackResponse.getShipment().get(0).getCurrentStatus().getCode());
                        System.out.println("Current Status Description: " + trackResponse.getShipment().get(0).getCurrentStatus().getDescription());
   
                        updateResultsToFile(strResults);                   
        } catch (Exception e) {
       
           
                updateResultsToFile(description);
                        e.printStackTrace();
                } finally{
                        try{
                     
                        if(strWriter !=null){
                                        strWriter.close();
                                        strWriter = null;
                                }
                        }catch (Exception e) {
                                e.printStackTrace();
                        }
                       
     }
}

 public static String contactService(String xmlInputString) throws Exception{  
      String outputStr = null;
                OutputStream outputStream = null;
   
                try {
                        URL url = new URL(props.getProperty(ENDPOINT_URL));
                       
                        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                        System.out.println("Client established connection with :" + url.toString());
                        // Setup HTTP POST parameters
                        connection.setDoOutput(true);
                        connection.setDoInput(true);
                        connection.setUseCaches(false);
                       
                        outputStream = connection.getOutputStream();           
                        outputStream.write(xmlInputString.getBytes());
                        outputStream.flush();
                        outputStream.close();
                        System.out.println("Http status = " + connection.getResponseCode() + " " + connection.getResponseMessage());
                       
                        outputStr = readURLConnection(connection);             
                        connection.disconnect();
                } catch (Exception e) {
                        System.out.println("Error sending data to server");
                        e.printStackTrace();
                        throw e;
                } finally {                                            
                        if(outputStream != null){
                                outputStream.close();
                                outputStream = null;
                        }
                }              
                return outputStr;
        }
   
        /**
         * This method read all of the data from a URL connection to a String
         */

        public static String readURLConnection(URLConnection uc) throws Exception {
             
            StringBuffer buffer = new StringBuffer();
           
                BufferedReader reader = null;
                try {
                    //Thread.sleep(30);
                        reader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
                        int letter =10;
                       
                        while ((letter = reader.read())!=-1){
                        buffer.append((char) letter);
                        }
                        reader.close();
                } catch (Exception e) {
                        System.out.println("Could not read from URL: " + e.toString());
                        throw e;
                } finally {
                        if(reader != null){
                           
                                reader.close();
                                reader = null;
                        }
                }
                return buffer.toString();
        }
 /**
     * Populates the access request object.
     * @param
     */

       
    public  static void populateAccessRequest(AccessRequest accessRequest){
        accessRequest.setAccessLicenseNumber(props.getProperty(LICENSE_NUMBER));
        accessRequest.setUserId(props.getProperty(USER_NAME));
    accessRequest.setPassword(props.getProperty(PASSWORD));
    }
 
    /**
     * Populate TrackRequest object
     * @param trackRequest
     */
 
 public  static void populateTrackRequest(TrackRequest trackRequest ){
     
        Request request = new Request();
        List<String> optoinsList = request.getRequestOption();
       
     
            while (true){
               
             }
        }
        request.setRequestAction("Track");
        trackRequest.setRequest(request);   //If the request option here is of 2 ~ 15, then Signature tracking must validate the rights to signature tracking.
        trackRequest.setTrackingNumber("1Z6X73190340842853");
        trackRequest.setIncludeFreight("01");
    }
  /*
     * This method updates the XOLTResult.xml file with the received status and description
     * @param statusCode
     * @param description
     */

 
    public  static void updateResultsToFile(String response)  {
   BufferedWriter bw = null;
   
      try{             
                File outFile = new File(props.getProperty(OUT_FILE_LOCATION));
             System.out.println("Output file deletion status: " +outFile.delete());
                outFile.createNewFile();
                 System.out.println("Output file location: " + outFile.getCanonicalPath());  
                bw = new BufferedWriter(new FileWriter(outFile));
                bw.write(response);
                bw.close();                            
        }catch (Exception e) {
                        e.printStackTrace();
                }finally{
                        try{
                                if (bw != null){
                                        bw.close();
                                        bw = null;
                                }
                        }catch (Exception e) {
                                e.printStackTrace();
                        }                      
                }
   
    }
}

Este es el ejemplo y estos son datos que jale de mi base de datos;

ESTO SOLO ALGUNOS !!!
1Z6X7319034225830
1Z6X7319034110596
1Z6X7319034197562
1Z6X7319034185658

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Pues al parecer ya tienes

Pues al parecer ya tienes algo que te funciona. Puedes empezar por convertir tus métodos de clase a métodos de instancia ( básicamente elimina el modificador static de tu código )

Tu código ya es un hilo (hereda de java.lang.Thread), aunque no necesariamente quieres ejecutarlo en varios hilos, pareciera que ejecutarlo varias veces sería suficiente.

Crea un programa que lea tus guias de la base de datos, ponlas en una colección y luego crea una instancia de esta clase con la guía y ya, lo único que tienes que agregar son los parametros de tracking number y el archivo de salida:

public class TuProgramaAqui {
     .....
     public void algunMetodoEnAlgunLado() {
          List<String> trackingNumbers = leerTrackingNumbersDeLaBaseDeDatos();
         for ( String t : trackingNumbers ) {
              PODPTM p = new PODPTM(); // Que significa PODPTM? no hay un number mejor? como FetchTrackingInformation ?
              p.trackingNumber = t;
              p.outputFile = .....
              t.run(); // o t.start(); si realmente necesitas hilos distintos
         }
        /// cerrar cosas
    }
    // proft
}

Antes de hacerlo multihilo intenta hacerlo en batch.

Suerte

Imagen de Rocio Velasco

Gracias !!!

Muchas Gracias

intentare realizarlo ....
soy nueva en esto y me hace falta mucha practica :(