1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Vraptor-task com https não está funcionando

A minha aplicação antigamente era apenas HTTP com a porta 8080, mas por uma política interna da empresa, isso precisou ser alterado para HTTPS na porta 8443.

Enfim, eu executo o job desta forma:

@Resource
public class AllLoadsSchedulerController extends LoadsSchedulerControllerTemplate {

    public static final long GROUP = 1L;

    public AllLoadsSchedulerController(LoadStageMarker dao) {
        super(dao);
    }

    @Override
    public long getLoadGroup() {
        return GROUP;
    }

    @Post
    @Scheduled(cron = "0 0 1 ? * 1-7", id = "group1", concurrent = false)
    public void load() {
        super.execute();
    }
}

Por precisar usar DAO e tudo mais, eu precisei fazer dele um controller. Inclusive, por outra definição da empresa, os servidores são reiniciados de noite, logo, eu tenho um @ApplicationScoped que vai fazer sempre uma requisição para o vraptor tasks inicializar. Assim:

@ApplicationScoped
@Scheduled(initialDelay = 60000, fixedRate = 2160000)
public class ApplicationStarter implements Task {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private ApplicationService service;

    public ApplicationStarter(ApplicationService service) {
        this.service = service;
    }

    @Override
    public void execute() {
        String url = service.getProperties("/config/url.properties").getProperty("url");
        try {
            logger.debug("Starting application.");

            // Configure HTTPS connection
            HttpsURLConnection.setDefaultSSLSocketFactory(buildSSLSocketFactory());

            HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
            con.setRequestMethod("GET");

            if (con.getResponseCode() == HttpURLConnection.HTTP_OK)
                logger.debug("Connected to URL '{}'.", url);
            else
                logger.error("Unable to connect to URL '{}'.", url);

        } catch (MalformedURLException e) {
            logger.error("Unable to connect to URL '{}'.", url, e);
        } catch (IOException e) {
            logger.error("Unable to connect to URL '{}'.", url, e);
        }
    }

    public SSLSocketFactory buildSSLSocketFactory() {
        // Imports: javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager
        try {
            // Create a trust manager that does not validate certificate chains
            final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                @Override
                public void checkClientTrusted(final X509Certificate[] chain, final String authType) {
                }

                @Override
                public void checkServerTrusted(final X509Certificate[] chain, final String authType) {
                }

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            } };

            // Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            // Create an ssl socket factory with our all-trusting manager
            return sslContext.getSocketFactory();
        } catch (final Exception e) {
            throw new RuntimeException(e);
        }
    }
}

Por mudarem para HTTPS, eu precise fazer toda essa configuração para escapar a validação do certificado.

Quando isso aconteceu, as conexões estão sendo feitas, mas o job simplesmente não está sendo executado. Não acontece erro algum.

  • os logs estão funcionando pra classe ApplicationStarter? ele fala que conseguiu fazer a requisição? Tentou ver o log de debug do VRaptor e do plugin de tasks?

    Lucas Cavalcanti   19 de mar de 2014
  • Sim, a classe ApplicationStarter está funcionando. Inclusive, o log da requisição é disparado também, ou seja, ele está fazendo. Não habilitei os logs do vraptor e nem do vraptor tasks, vou fazer isso.

    Rafael Guerreiro   19 de mar de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags vraptor https ou faça a sua própria pergunta.