request.getSession(false) sempre retorna uma sessão
Tive uma situação em um aplicativo que validava se o usuário estava logado pela sessão.
O que acontece é que há página de login cria uma sessão e seta um atributo logado nela:
//Cria a sessão se ainda não existe uma. session = request.getSession(true);
Ao tentar acessar um recurso que necessita do usuário logado, ele verifica se existe uma sessão, caso não exista quer dizer que não esta logado e ele é redirecionado para uma página de erro.
HttpSession session = request.getSession(false);
if (session == null) {
RequestDispatcher rd = context.getRequestDispatcher("/jsp/erro.jsp");
rd.forward(request, response);
}
A página de erro era apresentada ao usuário, mas ao tentar acessar outro recurso o request.getSession(false) retornava uma nova sessão.
Porque isso acontece?
O container (no meu caso WebSphere) acaba criando uma nova sessão ao processar a JSP. Para evitar este comportamento adicione o seguinte código na JSP:
<%@page session="false" %>
Abraços
Erro ao rodar testes com Ruby
Tive um problema ao tentar executar uma classe específica de teste unitário com ruby.
Ao executar o comando:
ruby test/unit/modelo_test.rb
Acontecia o seguinte erro:
... in `require': no such file to load -- test_helper (LoadError) ...
Este erro ocorre porque ao rodar o test individualmente o ruby não conseguiu encontrar a classe test_helper.rb
Existem 2 soluções:
1. Alterar o require do test_helper para o seguinte:
require File.dirname(__FILE__) + "/../test_helper"
2. Rodar o teste incluindo a pasta “teste” no classpath, isso é feito através do argumento -I na chamada da classe:
ruby -Itest test/unit/modelo_test.rb
Eu acho a segunda solução mais elegante.
Abraços
Websphere 6.1 com Java 5 no JSP
Mexendo em um projeto que roda no Websphere 6.1, ao tentar usar generics ou foreach no JSP obtive os erros:
Syntax error, parameterized types are only available if source level is 5.0 .... Syntax error, 'for each' statements are only available if source level is 5.0....
Achei estranho, porque o meu código esta todo compilado para Java 5, então porque o Websphere não estava utilizando Java 5?
Pesquisando no google encontrei a definição de que você pode utilizar código específico de Java 5 nas suas classes sem problemas, mas no JSP o Websphere seta o source level do java para alguma versão abaixo da 1.5.
Neste link uma pessoa postou alguns links explicando como alterar um XML do Websphere para alterar este comportamento de alterar o source level no JSP. Eu não tentei fazer estas configurações porque não sei se seriam válidas no ambiente do cliente(burocracia). Vale a tentativa para quem realmente precisa utilizar o Java 5.
Mais um motivo para eu não gostar do Websphere..
ps: não me atirem pedras por utilizar scripts no JSP, estou sendo obrigado =( haha
Abraços
Testes com Data atual com Timecop
Depois de resolver as configurações de time_zone da aplicação, tive que testar métodos que utilizavam DateTime.now. E ai ficou a dúvida, como vou testar isso?
Ai que o Bruno Azisaka me indicou o uso do Timecop, uma gem que permite definir o valor de now.
O seu uso é bem simples, para instalar é só rodar o comando:
gem install timecop
O Timecop oferece dois modos de definir o valor de now. Eles são o freeze ou travel.
- Timecop.freeze – Com o freeze você define estaticamente o valor de now .
- Timecop.travel – Com o travel você define um valor para now, mas o este não é o valor retornado. O valor retornado é o tempo que passou desde o valor que foi definido. Este método é usado para simular a passagem do tempo.
Para usar o Timecop nas suas classes de teste, inclua o require do Timecop e depois é só fazer a chamada dos métodos freeze ou travel:
require 'test_helper'
require 'timecop'
class TarefaTest < ActiveSupport::TestCase
...
agora = DateTime.strptime("09/01/2011 16:00", "%d/%m/%Y %H:%M").to_time
Timecop.freeze(agora) #ou Timecop.travel(agora)
...
end
Bem simples e fácil, e ajuda bastante ao testar métodos que dependam da data e/ou hora atual.
Até =)
DateTime com Ruby on Rails
Estou trabalhando com DateTime em um projeto, e tive várias confusões na hora de fazer os testes unitários, de listar e na hora que olhava os dados no banco.
O rails salva as datas no banco em formato UTC. Quando é feita a busca de uma data/hora(Datetime) no banco, então o rails pega o time_zone da aplicação e “corrige” a data retornada do banco para a data/hora correta no seu timezone.
Por exemplo, agora são 13h:45min, ao salvar um objeto com a data atual no banco de dados, o resultado do campo DateTime é o seguinte (Porque o meu timezone -Brasil/horário de verão- é 2 horas a menos do horário UTC):
2011-01-06 15:45:00
O que me ocorria era que ao tentar fazer uma busca no banco de dados utilizando um objeto DateTime.now eu não obtinha os resultados esperados. Isto acontecia porque o DateTime.now retorna a Data/Hora de acordo com o timezone da aplicação, que é 2 horas a menos do que o UTC.
A solução destes “problemas” é bem simples…
Na pasta config da sua aplicação configure uma linha no arquivo application.rb(Para quem usa Rails 2.x o arquivo é outro, é o enviroment.rb) com o time_zone que deseja(rake time:zones:all para listar os timezones disponíveis):
#config/application.rb config.time_zone = 'Brasilia'
E nas suas consultas utilize o formato UTC do DateTime.now, para que a formatação da data/hora seja igual a dos pesquisados no banco de dados:
#Tarefas acontecendo agora
Tarefa.where(":agora BETWEEN data_hora_inicio AND data_hora_fim", {:agora => DateTime.now.utc})
O mesmo pode ser feito para comparar somente a parte de data de um DateTime (desconsiderando as horas):
#Tarefas de hoje
Tarefas.where("DATE(data_hora_inicio) = :hoje", {:hoje => DateTime.now.utc.to_date})
É uma configuração bem simples, mas para quem esta começando com rails (como eu), pode dar uma dorzinha de cabeça.
Agradecimentos ao Bruno Azisaka, que me deu várias dicas e me tirou todas as dúvidas possíveis! haha.
Até a próxima
Estudos SCWCD
Seguindo o outro post de como foi minha experiência com a SCJP, vou falar um pouco sobre a SCWCD.
Estudei para ela pelo livro que a maioria do pessoal indica, que é o Use a Cabeça – JSP & Servlets. Ele não é focado na prova, mas cobre todos os assuntos abordados.
Seguindo a metodologia de estudos que falei no post anterior, fiz um resumo sobre cada capítulo do livro.
Os resumos podem ser baixados aqui, mas volto a falar que não fiz os resumos com a intenção de disponibilizar para outras pessoas, então deve ter alguns erros de português por escrever rápido e apenas como resumo (não achem que eu sou burro..haha)
Sobre a prova eu achei ela mais fácil que a SCJP, talvez porque na época eu já tinha uma experiência maior com a parte de desenvolvimento web.
Sobre os simulados, utilizei o TestKiller e foi o suficiente. É só dar uma pesquisada no google sobre TestKiller que da pra encontrar algo.
Espero que os resumos possam ajudar alguém como me ajudaram
Abraça
Estudos SCJP
Aproveitando que a Oracle anunciou a campanha de retake, vou falar um pouco sobre a minha experiência com a SCJP e quem sabe sirva de ajuda para alguém.
A mais de 1 ano quando pensei em tirar a certificação SCJP fiquei na dúvida entre tirar a 5 ou 6, qual material usar, como estudar e etc.
Vamos por partes…
Versão da Prova
Sobre a versão da prova, existem 2 versões disponíveis: SCJP 5 e 6. O conteúdo cobrado nas duas é praticamente o mesmo, a diferença são 2 interfaces e uma classe nova(NavigableSet, NavigableMap e Console) no SCJP 6, isso representa uma ou duas questões específicas sobre SCJP 6.
Mas a maior diferença é o idioma. A versão 5 pode ser feita em português enquanto a versão 6 não.
Se você não tem muita confiança no seu inglês, faça a 5. O mercado não vê muita diferença na versão da certificação (muitas empresas nem ligam para certificações haha). Entretando se você realmente quer seguir na área de TI, mais especificamente programação, o inglês é indispensável portanto trate de correr atrás disso o quanto antes!
Material de Estudo
Sobre o material de estudo….bem, vou dizer o que provavelmente vocês já leram por ai… O livro da Kathy Sierra é o mais indicado, cobre todos os assuntos abordados na prova e é bem fácil de entender. Há muita discussão sobre a versão traduzida do livro, alguns dizem que ela é ruim e prejudica os estudos…bom, eu utilizei da versão em português e, que eu me lembre, não encontrei erros muito graves.
Metodologia de Estudo
Sobre a metodologia de estudo, vou dizer a que eu uso e que deu certo para mim. Tanto é que continuo usando ela para a outra certificação que tirei(SCWCD) e estou usando nos estudos para a SCBCD.
Li o livro inteiro da Kathy, apenas uma vez. Ao final de cada capítulo eu fazia um resumo sobre ele. Fazia também os exercícios sugeridos pelo livro e salvava as respostas em arquivos .txt.
Quando terminei o livro, reli os resumos (por isso os resumos são bons, eu parei de estudar e retomei os estudos somente após um mês, com os resumos eu não precisava reler todo o capítulo para relembrar o conteúdo.) e refiz os exercícios sugeridos em cada capítulo, comparando os resultados com os que eu havia feito na primeira leitura do capítulo. Com isso eu podia ver se eu realmente consegui fixar o conteúdo ou merecia dar uma nova estudada no capítulo.
Ao final desse “ritual” todo, eu fiz 2 simulados. O MasterExam que vem junto com o livro e o TestKiller. O Master Exam é um pouco mais difícil que a prova porque ele não diz quantas alternativas corretas você deve marcar, já o Testkiller é MUITO parecido(questões idênticas a da prova) com a prova. Acho que somente estes dois simulados são o suficiente para pegar o jeito.
Ao fazer os simulados, para coisas que eu errava sempre eu criei um .doc chamado “para não errar mais”, nele eu colocava as coisas que eu estava errando constantemente, ele deve ter ficado com 1 ou 2 páginas de tamanho. No dia da prova imprimi ele e fui lendo no ônibus.
Resumindo…
Este método de estudo funcionou para mim, acho que é legal fazer um resumo a cada capítulo para que depois eu possa reler mais rápido de uma forma resumida no que realmente me importa. De resto é só treinar bastante, fazer uns exercícios e simulados e partir para a prova!
Compartilhei os meus resumos da SCJP e o material sobre os assuntos específicos da SCJP 6 no Google Docs, se quiserem baixa-los fiquem a vontade. (Eu não revisei os resumos, como foram feitos com a intenção de somente eu utilizar devem ter alguns erros de português, mas nada que comprometa muito a leitura…eu acho…haha)
Bom, acho que é isso….até o próximo post e boa sorte na prova!
Abraça