@Override
 public void run() {
   /*
    * Create the client call
    */
   while (true) {
     try {
       client = new DefaultHttpClient();
       client.setCredentialsProvider(credentialProvider);
       HttpGet get = new HttpGet(STREAMING_API_URL + track);
       HttpResponse response;
       try {
         // Execute
         response = client.execute(get);
         StatusLine status = response.getStatusLine();
         if (status.getStatusCode() == 200) {
           InputStream inputStream = response.getEntity().getContent();
           BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
           String in;
           // Read line by line
           while ((in = reader.readLine()) != null) {
             // Parse and emit
             Tweet tweet = parseTweet(in);
             tweets.add(tweet);
           }
         }
       } catch (IOException e) {
         LOG.error("Error in communication with twitter api [" + get.getURI().toString() + "]");
         try {
           Thread.sleep(10000);
         } catch (InterruptedException e1) {
         }
       }
     } catch (Throwable e) {
       LOG.error(e);
     }
     LOG.error("An error ocurs, all runnable thread will be restarted");
     try {
       Thread.sleep(1000);
     } catch (Exception e) {
     }
   }
 }
  /**
   * Prepares objects for HTTP communications with the Gatekeeper servlet.
   *
   * @return
   */
  private HttpClient initHttpConnection() {
    // Set client parameters.
    HttpParams params = RestUtils.createDefaultHttpParams();
    HttpProtocolParams.setUserAgent(
        params, ServiceUtils.getUserAgentDescription(userAgentDescription));

    // Set connection parameters.
    HttpConnectionParams.setConnectionTimeout(params, connectionTimeout);
    HttpConnectionParams.setSoTimeout(params, connectionTimeout);
    HttpConnectionParams.setStaleCheckingEnabled(params, false);

    DefaultHttpClient httpClient = new DefaultHttpClient(params);
    // Replace default error retry handler.
    httpClient.setHttpRequestRetryHandler(new RestUtils.JetS3tRetryHandler(maxRetryCount, null));

    // httpClient.getParams().setAuthenticationPreemptive(true);
    httpClient.setCredentialsProvider(credentialsProvider);

    return httpClient;
  }
  private DefaultHttpClient createConnection(String user, String password) {
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpParams params = httpClient.getParams();
    SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory();
    sslSocketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));
    ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);

    UsernamePasswordCredentials bCred = new UsernamePasswordCredentials(user, password);
    BasicCredentialsProvider cProvider = new BasicCredentialsProvider();
    cProvider.setCredentials(AuthScope.ANY, bCred);

    params.setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
    httpClient.setParams(params);

    DefaultHttpClient nHttpClient = new DefaultHttpClient(cm, params);
    nHttpClient.setCredentialsProvider(cProvider);
    return nHttpClient;
  }