terça-feira, 20 de setembro de 2011

Paginação no Oracle

Retirei o trecho de código de http://www.mhavila.com.br/topicos/bd/ora_rownum.html

Este código serve para realizar paginação de consulta, mas também serve para recuperar uma determinada linha se existir.

select *
from
(select topn.*, ROWNUM rnum
from
(select *
from tabela
order by criterio, ROWID )
topn
where ROWNUM <= :LINHA_FINAL )
where rnum > :LINHA_INICIAL

terça-feira, 26 de julho de 2011

JSF carregando um ManagedBean de um arquivo JAR

Em algumas situações, onde agente possui ManagedBeans que são utilizados por mais de um projeto, é válido empacotá-los em jar para reutilização de código.

Para que o JSF faça o carregamento (load) desses ManagedBeans é preciso inserir um arquivo faces-config.xml na pasta META-INF do jar.

O faces-config.xml só precisa ter mesmo o cabeçalho padrão do JSF:





Em um projeto Maven a pasta META-INF fica dentro de src/main/resources

sexta-feira, 22 de julho de 2011

Deploy de projeto Maven diretamente no Eclipse

Fazer um deploy de um projeto diretamente na IDE poupa bastante esforço.

Usando o Eclipse, você pode criar um "Dynamic Web Project" já apontando para o seu server, que fica tudo certo para fazer o deploy.

Mas no caso do Maven, as configurações não vem preparadas para isso. E você pode fazer os seguintes ajustes para resolver isso:

1. Configurar o "Project Facets' para Dynamic Web Module (Figura 1).

Figura 1 - Configuração de Facets do projeto no Eclipse

2. E montar as configurações em Deployment Assembly (Figura 2).

Figura 2 - Deployment Assembly do projeto

O projeto deste exemplo segue a estrutura de um maven-archetype-webapp, ou seja, com o seguinte padrão de organização (Figura 3):

Figura 3 - Visão do projeto no Eclipse

Observação:
. Para o deploy do projeto usei o Tomcat versão 7.0.

segunda-feira, 6 de junho de 2011

Aumentar memória do Tomcat

Ao fazer deploy no Tocmat 7, percebi que muitos erros de alocação de memória começaram a aparecer.

A mensagem de erro que aparece no console é algo parecido com:

Exception in thread ""http-bio-8080"-exec-4" java.lang.OutOfMemoryError: PermGen space

Para resolver isso no Eclipse, coloquei os comandos em VM Arguments:


-Xms512M -Xmx768M -XX:PermSize=256M

terça-feira, 31 de maio de 2011

Configuração do JDK para o Maven no Eclipse

Ao instalar o plugin do Maven para o Eclipse é solicitado que o Eclipse esteja configurado para trabalhar com JDK. Quando isso não acontece, é exibida uma mensagem semelhante a:


Como a própria mensagem sugere, é preciso realizar duas alterações: uma em Installed JREs e outra em eclipse.ini.

Portanto, cria uma nova entrada em Installed JREs, definindo uma JDK como default do Eclipse.

E em eclipse.ini coloque as linhas da seguinte forma:
-vm
C:\desenvolvimento\java\jdk1.6.0_24\bin\javaw.exe

quinta-feira, 12 de maio de 2011

Execução de comandos de forma síncrona

"Esse post é escrito com a colaboração de "@ed_sobrinho".

O Ed enfrentou uma situação onde ele precisava executar uma exportação de uma base de dados Oracle para um arquivo. Para saber o resultado da exportação (sucesso/erro), seria necessário ler um arquivo de log gerado pela própria rotina de exportação.

A primeira tentativa foi feita com a classe Runtime do Java:

public static void main(String[] args) {
String command = "cmd.exe /c EXP <usuario>/<senha>@<instancia> file=<caminho_do_arquivo_do_dump>.dmp log=<caminho_do_arquivo_do_log>_log.log owner=<owner> STATISTICS=NONE";
try {
Runtime.getRuntime().exec(command);
} catch (IOException e) {
e.printStackTrace();
}
}

Essa implementação não supriu a necessidade porque era preciso tratar como chamada síncrona, ou seja, era necessário aguardar a conclusão da exportação para ler o arquivo de Log. O que não estava acontecendo.

Então, através da biblioteca da Apache Commons Exec, o Ed obteve esse sucesso. O código ficou assim:

public static void main(String[] args) {
String command = "cmd.exe /c EXP <usuario>/<senha>@<instancia> file=<caminho_do_arquivo_do_dump>.dmp log=<caminho_do_arquivo_do_log>_log.log owner=<owner> STATISTICS=NONE";
CommandLine cmdLine = CommandLine.parse(command);
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(1);

try {
executor.execute(cmdLine);
} catch (Exception e) {
e.printStackTrace();
}
}

sexta-feira, 11 de março de 2011

Jenkins - Configuração de uma tarefa


Neste post, vamos ver como configurar uma tarefa simples no Jenkins. Para este exemplo, temos:
  • SVN como repositório de código
  • Maven na versão 2.2.1
  • Projeto web construído com maven-archetype-webapp
  • Notificação via email
  • Build periódico
  • Servidor Tomcat versão 6.0.32

Vamos, então, explorar estes tópicos:

Configuração do SVN
Basicamente, você deve inserir a URL do repositório na seção 'Gerenciamento de Código Fonte':
Na versão do Jenkins que usei para este post, precisei instalar Subversion Plugin para poder configurar o SVN na tarefa. Isto é feito no Plugin Manager do Jenkins.
Programação de build
Na seção 'Disparadores de Construção', marque as opções de consulta periódica ao SVN e de build do projeto. E defina a periodicidade da tarefa de acordo com a sintaxe do cron:
Configuração do build pelo Maven
Você deve especificar a versão no Maven que será utilizada no build, assim como o caminho do pom e o goal do ciclo de vida do Maven:
Notificação do resultado do build por email
Você pode especificar vários destinatários do resultado do build:
Deploy do arquivo do projeto no Tomcat
No pacote da integração contínua, está a automatização do deploy de sua aplicação. Neste exemplo, temos um war enviado para o Tomcat:
Lembre-se de configurar os usuários no arquivo tomcat-users.xml:

<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin,manager"/>
</tomcat-users>