sexta-feira, 27 de março de 2009

Ajuste de Data/Hora do Java no RedHat Linux

Executando um sistema Java Web no sistema RedHat Enterprise 3, percebi que a hora atual que o Java me retornava era em torno de 5 horas atrasada com relação ao horário do sistema, ou seja, o horário do comando date. Tudo leva a crer que o sistema não está configurado para ler um locale que usa como separador o caractere _ (underscore).

Uma forma de contornar o problema é criar um link simbólico da localidade, no meu caso de America/Sao_Paulo, para America/Sao Paulo, e em seguida setar como a localidade padrão do sistema e reiniciar o relógio. Abaixo um exemplo de programa em java simples para exibir a data/hora atual do sistema, para testar as modificações:


public class TesteHorario {

/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new Date());
}
}



Para criar um link simbólico para a localidade e setar como padrão do sistema, basta executar:


ln -s /usr/share/zoneinfo/America/Sao_Paulo /usr/share/zoneinfo/America/Sao\ Paulo
ln -sf /usr/share/zoneinfo/America/Sao\ Paulo /etc/localtime


Ou então no caso de existir uma variável de ambiente setada:


ln -s $JRE_HOME/lib/zi/America/Sao_Paulo $JRE_HOME/lib/zi/America/Sao\ Paulo
ln -sf $JRE_HOME/lib/zi/America/Sao\ Paulo /etc/localtime


Para atualizar a data e hora do sistema após a modificação (se necessário):
Exemplo: modificar a data atual para 31 de julho, 11:16, basta digitar no console (perceba que a hora é informada no formato de 24h)


date 07312316


Para atualizar o hardware clock com a data/hora obtidas com o comando date, basta executar:


/sbin/hwclock --systohc


Essas alterações foram suficientes para que o JAVA passasse a exibir a mesma data/hora do sistema operacional (RedHat Enterprise 3)

quarta-feira, 18 de março de 2009

Transferência de arquivos remotos com SCP

Quando se trabalha com linux, geralmente utiliza-se o prompt de comandos (shell).
Uma forma fácil de transferir arquivos entre máquinas remotas, no shell do linux, é utilizando o comando scp.

O scp (secure copy - remote file copy program) copia arquivos entre máquina em uma rede. Utiliza o ssh para transferência de dados, e utiliza a mesmo sistema de segurança utilizado pelo ssh. Esse comando requisita o nome do usuário e senha na máquina remota.

Exemplos de utilização:

Transferência de um arquivo local para uma máquina remota e vice-versa:


scp arquivo_local.txt seu_login@host_remoto:/diretorio/arquivo_remoto.txt

scp seu_login@host_remoto:/diretorio/arquivo_remoto.txt arquivo_local.txt


Esse utilitário é muito útil para transferir arquivos remotamente de forma segura.

terça-feira, 10 de março de 2009

Java: Ler Arquivo Texto

Essa dica é bastante trivial, porém é um código que sempre necessito consultar diversas vezes.
Resolvi publicar aqui no blog, quem sabe facilita para mais alguém.

A dica é simplesmente ler um arquivo de texto linha-a-linha.
Vamos ao código:



try {
BufferedReader in = new BufferedReader(new FileReader("infilename"));
String str;
while ((str = in.readLine()) != null) {
process(str);
}
in.close();
} catch (IOException e) {
}


Esse trecho de código, lê uma linha do arquivo por vez, foi retirado originalmente do The Java Developers Almanac 1.4. Essa é a forma mais simples que encontrei para ler arquivos de texto puro.

No meu caso, o arquivo de texto é composto por valores separados por vírgula, onde, o primeiro campo se refere ao número de identificação do usuário e o segundo seu nome. Por exemplo:

112344316, José da Silva
098987626, Marcia de Mello
981122154, Fabiane de Andrade



/**
* Carrega lista de telefones válidos para processamento
*/
private void loadTextFile()
{
String filePath = "/tmp/usersList.txt";

try {

BufferedReader in = new BufferedReader(new FileReader(filePath));
String str;
while ((str = in.readLine()) != null) {
String data[] = str.split(",");
System.out.println("Nome: " + data[1] + " CPF.:" + data[0]);
}

in.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("Erro ao ler arquivo de texto " + e.toString());
}
}



Esse código simples mostrou como ler e processar um arquivo de texto linha por linha.

domingo, 8 de março de 2009

vmstat: Relatório virtual e estatística do computador

O vmstat é um utilitário interessante quando se necessita saber informações sobre o consumo dos recursos do computador.

O vmstat relata informações sobre processos, memória, paginação, bloqueios de IO e atividade da CPU. O primeiro relatório produzido informa uma média desde a ultima vez que o computador foi reiniciado.

Abra um prompt de comando e digite vmstat, o utilitário será executando exibindo um relatório similar a esse:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 518208 579328 878984 0 0 59 51 50 931 4 1 94 1

Significado dos parâmetros:

r - número de processos executáveis (runnable process)
b - número de processos bloqueados
in - número de interrupções geradas
cs - número de mudanças de contexto
us - tempo gasto pela CPU enquanto executava um código de usuário
sy - tempo gasto pela CPU enquanto executava um código do kernel
id - duração do tempo em que a CPU estava em estava idle
wa - tempo em que a CPU estava esperando por I/O

Com esse utilitário é possível de forma simples monitorar o consumo de memória, processamento entre outros parâmetros do computador.

Referências:
http://ibgwww.colorado.edu/~lessem/psyc5112/usail/man/linux/vmstat.8.html