Dicas rápidas

Compilando objetos inválidos do Oracle de maneira fácil

Quando se compila um objeto que é referenciado por vários outros objetos, estes ficam inválidos até que sejam recompilados novamente, coisa que o Oracle deveria fazer e, de alguma maneira, as vezes não faz.

Então aqui vai uma dica para quem tem de compilar várias packages, procedures e/ou functions inválidas diariamente devido à esta falha do Oracle.

Existe um comando que força o banco a compilar todos os objetos inválidos sob um determinado usuário, o comando é:

exec dbms_ultility.compile_schema(<USUARIO>);

Substitua por user onde está <USUARIO> se os objetos estiverem sob o usuário que está conectado, ou pelo nome de usuário correspondente.

O comando demora um pouco para ser executado e não compila todos os objetos que estão inválidos por erro de codificação, para descobrir quais objetos estão inválidos, você pode executar a seguinte query:

select object_name
from all_objects
where status = 'INVALID'

Será listado os objetos que estão inválidos na base.


A importância de File.separator e File.pathSeparator

Quase todos os programadores Java conhecem os métodos citados no título, mas muito poucos se preocupam em utiliza-los.

Estes dois métodos servem para que o programador não precise “adivinhar” qual é o separador de arquivos e qual é o separador de caminhos em cada sistema operacional.

No Linux/Unix, os métodos File.separator e File.pathSeparator retornam “/” e “.” respectivamente, enquanto que, no Windows, estes mesmos métodos retornam “\” (ou “\\” – escape) e “;”.

Passei por um caso recente, onde o código abaixo lançava a exception FileNotFoundException no Linux, mas funcionava perfeitamente no Windows:

String caminhoAp = ctx.getRealPath();
String caminhoArq = caminhoAp + "\\" + "WEB-INF/classes/pacotes/da/minha/aplicacao/";

File arquivo = new File(caminhoArq, "relatorio.pdf");
OutputStream out = new FileOutputStream(arquivo);
...

Então passou a funcionar nos dois sistemas operacionais após substituir “\\” por File.separator na linha 2, desta forma:

String caminhoAp = ctx.getRealPath();
String caminhoArq = caminhoAp + File.separator + "WEB-INF/classes/pacotes/da/minha/aplicacao/";

File arquivo = new File(caminhoArq, "relatorio.pdf");
OutputStream out = new FileOutputStream(arquivo);
...

A utilização destes métodos, além de ser uma boa prática, é muito útil quando se tem a mesma versão de um sistema feito em Java rodando de diferentes sistemas operacionais.


Corrigindo o erro “Allowed memory size of…” do WordPress

Acabei de atualizar meu WordPress para a versão 3.2, ao terminar a atualização o servidor retornada a página de erro 500. Vasculhando o arquivo de log do WP descubri que estava dando o erro Fatal error: Allowed memory size of 33554432 bytes exhausted, aliás, vários erros assim.

Para descobrir se este é o seu problema, acesse o arquivo error_log que está no diretório wp-admin do WordPress e cheque as últimas linhas.

O procedimento abaixo resolveu o problema, mas, dependendo do servidor de hospedagem, talvez as configurações do PHP não permita o redimensionamento de memória em tempo de execução.

Edite o arquivo wp-settings.php que está na raiz do WordPress e adicione a linha abaixo após “<?php”

define('WP_MEMORY_LIMIT', '64M');

Aqui eu aloquei 64MB para o PHP, mas como saber quanto de espaço foi e deve ser alocado?

Na mensagem de erro ele mostra a quantidade que está sendo alocada, é o número comprido da mensagem “Fatal error: Allowed memory size of 33554432…”. Aqui ele diz que foi alocado 32MB (para converter bytes em megabytes faça o cálculo 33554432 / (1024^2) = 32).

Dependendo do resultado do cálculo, indique um valor superior.


Instalando aplicativos .apk no emulador do Android SDK

Algumas vezes dependemos de aplicações de terceiros para testar se nossa aplicação está funcionando corretamente ou, simplesmente, acessar recursos do emulador que não estão disponíveis nas ferramentas que o acompanham.

Nos diretórios de instalação do SDK, geralmente em platform-tools, existe um executável chamado adb, através dele instalaremos aplicações de terceiros.

Antes de mais nada, você precisará do pacote de instalação do aplicativo (.apk). Para isso, procure em sites de busca ou faça backup através de seu aparelho Android usando aplicativos com o AppSaver.

- Inicie o emulador, podendo ser pelo SDK Manager ou pelo plugin do Android no Eclipse.

- Através do prompt do DOS (Windows) ou de um terminal (Linux), acesse o diretório platform-tools, e execute a linha de comando:

$ adb install <caminho do arquivo .apk>

Você verá a mensagem:

$ adb install Aplicativo.apk
125 KB/s (1091937 bytes in 8.474s)
        pkg: /data/local/tmp/Aplicativo.apk
Success

Agora o aplicativo estará disponível no menu do emulador, como se estivesse instalado no seu smartphone. ;)


Configurando acesso à internet via proxy em aplicações Java

Hoje tive um problema no meu trabalho onde um client, que roda via prompt de comando (Prompt do DOS), não conseguia acessar o servidor hospedado na internet, isso porque a empresa onde trabalho utiliza proxy.

Depois de algumas tentativas acabei achando duas soluções para resolver o problema de acesso: a primeira foi passar como parâmetros Java as configurações do proxy.

$ java -Dhttp.proxyHost=serv -Dhttp.proxyPort=porta -Dhttp.proxyUser=usu -Dhttp.proxyPassword=senha ClasseJava

-Dhttp.proxyHost = IP ou nome do servidor proxy
-Dhttp.proxyPort = Porta do proxy
-Dhttp.proxyUser = Usuário
-Dhttp.proxyPassword = Senha

Desta forma a classe ClasseJava terá acesso à internet através do proxy.

A outra forma foi inserir as configurações na própria classe:

public static void main(String[] args){
...
System.getProperties().put("proxySet", "true");
System.getProperties().put("http.proxyHost", "serv");
System.getProperties().put("http.proxyPort", "porta");
System.getProperties().put("http.proxyUser", "usuario");
System.getProperties().put("http.proxyPassword", "senha");
...
}

proxySet = Define se passará ou não por um servidor proxy
http.proxyHost = IP ou nome do servidor proxy
http.proxyPortt = Porta do proxy
http.proxyUse = Usuário
http.proxyPassword = Senha

Usando um destes recursos você poderá configurar sua aplicação para acessar à internet através de um proxy.

Espero ter ajudado. Até +! ;)


  • AdSense

  • Copyright © 1996-2010 André L. S.. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress