Mostrando postagens com marcador Java. Mostrar todas as postagens
Mostrando postagens com marcador Java. Mostrar todas as postagens

terça-feira, 9 de setembro de 2014

Debugando Apache Tomcat no Eclipse

Vá atá o diretório onde o tomcat está instalado e crie o arquivo debug.sh com o seguinte conteúdo:

!/bin/sh
./catalina.sh jpda start

Dê permissão de execução e inicialize o tomcat executando este script:

$chmod +x debug.sh
$./debug.sh

Após inicializado teste se a porta 8080 está em atendimento com nmap localhost ou acessando http://localhost:8080.

No eclipse vá até o item Debug -> Debug configurations para configurar a depuração no projeto.
Dê duplo clique no item Remote Java Application;
Nas configurações adicione o seu projeto e dê um nome ao processo de depuração (ex: proj_debug)
Clique em Apply;
Clique em debug;

Feito ... :)  Basta colocar seus breakpoints e o eclipse irá pausar na marcação.

Até a próxima


quinta-feira, 27 de fevereiro de 2014

Utilizando cartão Banrisul Ubuntu 64

Buenas pessoal,

Da série desktop a utilização do cartão do Banrisul utilizando leitores de cartão VASCO continua muito simples.
Além da instalação do JAVA é necessária a instalação dos pacotes pcscd, pcsc-tools, libpcsclite1 e libccid

$sudo apt-get install pcscd pcsc-tools libpcsclite1 libccid

criação do link simbólico:

$sudo ln -s /lib/x86_64-linux-gnu/libpcsclite.so.1 /usr/lib/libpcsclite.so

Pronto para continuar suas transações bancárias sem problemas. ;)

Esta dica foi dada pelo mestre do conhecimento javazistico (e meu vizinho) Carlos Vaz.

Até a próxima.


quinta-feira, 15 de setembro de 2011

SoapUI 4.0 travando no no Ubuntu 11.04

Recentemente atualizei meu Ubuntu para 11.04 e hoje tive problemas ao tentar usar o SoapUI para consultar um Webservice. O problema foi que, mesmo abrindo a interface do software, ele não respondia a nenhum clique, como se estivesse congelado.

O erro acontece quando ao tentar executar o aplicativo, a seguinte exceção Java é lançada:

$ ./soapui.sh 
================================
=
= SOAPUI_HOME = /opt/soapUI-4.0.0
=
================================
Configuring log4j from [/opt/soapUI-4.0.0/bin/soapui-log4j.xml]
14:15:51,617 INFO  [DefaultSoapUICore] initialized soapui-settings from [/home/cesar-melchior/soapui-settings.xml]
14:15:52,770 INFO  [SoapUI] Used java version: 1.6.0_25
Exception in thread "XpcMessageLoop" java.lang.RuntimeException: java.io.FileNotFoundException: Library libgthread-2.0 not found at any known locations !
at com.jniwrapper.linux.utils.LinuxLibraryLoader.(LinuxLibraryLoader.java:90)
at com.jniwrapper.gdk.GdkMultithreading.(GdkMultithreading.java:48)
at com.jniwrapper.gdk.GdkMultithreading.getInstance(GdkMultithreading.java:35)
at com.jniwrapper.gtk.GTK.initialize(GTK.java:97)
at com.teamdev.xpcom.a.b.a.a.(Unknown Source)
at com.teamdev.xpcom.XpcMessageLoop.(Unknown Source)
at com.teamdev.xpcom.XpcMessageLoop.getInstance(Unknown Source)
at com.teamdev.xpcom.b$a.run(Unknown Source)
Caused by: java.io.FileNotFoundException: Library libgthread-2.0 not found at any known locations !

Procurando na internet encontrei algumas soluções, e dentre elas a mais simples:


SOLUÇÃO:
Edite o arquivo soapui.sh
Procure por esta linha no arquivo:


#JAVA_OPTS="$JAVA_OPTS -Dsoapui.jxbrowser.disable=true"


Descomente essa linha (retirando o sustenido da primeira coluna) e pronto. Tudo 100% funcional.
Até a próxima.

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

Instalar J2EESDK 1.4 no Ubuntu

Problemas de libstdc podem acontecer na instalação de binários da sun.
Erro comum:
"./j2eesdk-1_4_03-linux.bin: error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory"

Solução:
O pacote necessário não faz parte do repositório do Ubuntu, então baixe o pacote libstdc++2.10-glibc2.2_2.95.4-24_i386.deb e instale o binário manualmente.

Como root digite:

dpkg -i libstdc++2.10-glibc2.2_2.95.4-24_i386.deb

Agora seu Ubuntu poderá rodar o instalador sem problemas.

Até a próxima

Encoding do Eclipse

Provavelmente os novos usuários de Ubuntu irão se deparar com um problema de encoding, visualização dos caracteres extendidos susbstituídos por pontos de interrogação.
Para acertar a codificação, são dois pequenos passos:
No menu Window -> Preferences
Digite: "encod" na tela de pesquisa conforme abaixo e vá atá a opção General -> Workspace
Em text file encoding coloque em other: ISO-8859-1 conforme a figura abaixo.

Depois edite o arquivo eclipse.ini e adicione a linha:
-Dfile.encoding=ISO-8859-1

Prontinho e até a próxima.

segunda-feira, 22 de dezembro de 2008

Jikes - Compilador Java de Alta Performance

O Jikes é um compilador java que reúne as seguintes características:
- Alta performance para compilação de código java.
- Análise de dependência.
- Código aberto.

Se você deseja acelerar o processo de build, experimente o jikes.

Conheça o projeto em : http://jikes.sourceforge.net/

Você pode ainda configurar o ant para utilizar o jikes como compilador, como no exemplo abaixo, onde utilizamos o jikes como compilador de um projeto Java 1.4 :

<javac srcdir="${dir_src}" destdir="${dir_build_classes}" classpathref="id_classpath" depend="yes" compiler="jikes" nowarn="true" target="1.4" optimize="true" debug="yes">


Até a próxima.

terça-feira, 25 de novembro de 2008

Firebug - Complemento do Firefox para Desenvolvedor WEB

Qual desenvolvedor WEB consegue sobreviver sem o firebug???? Para os que não o conhecem eis que vos apresento, advertindo-o que depois de conhecê-lo, desenvolver sem ele se tornará uma tarefa quase impossível.
O Firebug é uma extensão do Firefox instalado a partir do menu Ferramentas ->Complementos. Procure por firebug na na guia adicionar.

Dentre suas principais ferramentas está a de debug de javascript e a inspeção dinâmica.
Na inspeção dinâmica você pode navegar como numa árvore XML por sua página, visualizando todos os componentes, frames, imagens, etc.


Recomendo fortemente aos desenvolvedores WEB a terem esta ferramenta indispensável.
Até a próxima.

terça-feira, 21 de outubro de 2008

Iniciando aplicações Java com diferentes versões de JVM

As vezes é necessário ter mais de uma versão de Java (JVM - Java Virtual Machine) no sistema operacional, porém, por padrão, a aplicação usará a ultima versão de JVM instalada em seu computador. Então como chamar diferentes aplicações com diferentes versões do java?
Simples. No exemplo abaixo eu vou chamar a aplicação SquirrelSQL com o java 5 e o java6. Basta criar um script setando a jvm (variável de ambiente JAVA) e alterando o path:

#!/bin/sh
export JAVA=/opt/jdk6
export PATH=$PATH:/opt/jdk6/bin
cd /opt/squirrel2/
./squirrel-sql.sh

ou

#!/bin/sh
export JAVA=/opt/jdk14
export PATH=$PATH:/opt/jdk14/bin
cd /opt/squirrel2/
./squirrel-sql.sh


Notem que minhas jdks estão todas instaladas no diretório /opt.

Até apróxima. ;)

segunda-feira, 22 de setembro de 2008

Pool de conexões cancelando consulta

Consultas pesadas e extremamente lentas podem fazer com que o pool de conexões aborte a query antes do banco enviar a resposta, causando uma exceção como esta:

java.sql.SQLException: ORA-01013: user requested cancel of current operation

Para resolver isto algumas soluções simples.
1º - Otimize sua consulta para que o banco possa ter o resultado de forma mais rápida.
2º - Implemente índices.
3 º - Aumente o timeout do pool de conexões em seu servidor de aplicação.

... e até a próxima. ;-)

sexta-feira, 12 de setembro de 2008

Comparando no Eclipse

Para quem usa CVS e eclipe sabe que é muito xarope quando vamos comparar um arquivo com outro no compare editor e o eclipse mostra todas as diferenças, inclusive os espaços em brancos ou novas linhas.
Felizmente é muito fácil evitar este transtorno. Basta abrir Windows -> Preferences e pesquisar por compare ou patch no campo de busca. (item 1 da figur abaixo).

Selecione Compare/Path e marque o check Ignore white space (item 2 fig acima).
Prontinho... faça suas comparações e ele irá ignorar novas linhas e espaços em branco.
Até a próxima.

sexta-feira, 5 de setembro de 2008

Bug Estouro de Memória - Cursores no Oracle com Java

Caros visitantes.
Não costumo publicar posts longos, porque o objetivo deste BLOG é de "DICAS RÁPIDAS"... Mas desta vez vou abrir uma exceção. Como devem ter notado, no último mês não houve postagem de conteúdo algum. A verdade é que tive sérios problemas com uma aplicação em Java 1.4, rodando num ambiente Oracle IAS com driver classes12.jar que reiniciava a cada meia hora por causa de um estouro de memória como este:

Exception in thread "CompilerThread1" java.lang.OutOfMemoryError: requested xxxx bytes for ChunkPool::allocate. Out of swap space?

Estivemos as voltas todo este tempo tentando descobrir o que estava ocupando toda memória, porque logicamente temos swap e memória suficiente na máquina que hospeda esta aplicação.
Nosso maior problema foi que ao monitorar a aplicação, observamos que a memória HEAP não passava de 100Mb (com alto stress da aplicação), porém o processo no Sistema Operacional exibia a utilização de mais de 2Gb de RAM. Passamos um mês procurando agulha no palheiro, abrindo cada coleção em memória e cada objeto suspeito para ver se poderia estar provocando um leak.

Nossa primeira desconfiança foi a de que muitos objetos estavam saindo da aŕea de memória HEAP para a NON-HEAP por algum motivo, - provavelmente objetos estáticos-. Mas para nossa frustração, todos os objetos notadamente estáticos que poderiam estar em memória apareciam na HEAP. Então o que poderia estar causando essa utilização vertiginosa de memória???

Foi quando -depois de centenas de tentativas de correção - graças a uma casualidade tivemos uma exception diferente.... uma exception de banco do tipo ORA-100. (Muitos cursores abertos). Tudo bem, encontramos um bug no sistema, uma de nossas consultas ao banco não estava fechando Resultsets e Statements, embora fechando corretamente a conexão. Fixamos o bug e tal foi nossa surpresa que a memória voltou a o normal,... aqueles 150Mb que víamos nas ferramentas de monitoria era muito próximo ao exibido no Sistema Operacional.

Concluímos então que de alguma forma, mesmo fechando a conexão, e mesmo não utilizando cursores em nosso sistema, o driver ou o IAS de alguma forma alocam memória física local para utilização de RecordSets e PrepareStatements que não ficam nunca disponíveis ao GarbageColector, visto que não observamos sequer um destes objetos na monitoria da memória.

Fica a dica, quando um problema de memória for detectado, e as monitorias apontarem que a JVM está utilizando muito menos memória HEAP e NON-HEAP do qua a apresentada pelo Sistema Operacional, verifique os cursores de sua aplicação. Um único método é capaz de acabar com sua aplicação inteira.... e sua tranquilidade também. ;-)

Até a próxima.

quarta-feira, 23 de julho de 2008

Ordenando Array de objetos com Comparable no Java

Ontem precisei fazer uma ordenação rápida de uma coleção de objetos no Java. Gostaria agora de compartilhar a facilidade de se fazer esta ordenação no Java.

Em primeiro lugar precisamos escolher qual o critério de ordenação da classe que estará na coleção. No meu exemplo utilizarei esta classe:
Nesta classe temos duas possibilidades. Ordenar pelo atributo idMinhaClasseDto ou valorClasse. Vamos ordenar por valor Classe.
A ordenação exige que esta classe implemente a interface Comparable. Ao implementar, a compilação irá exigir a implementação do método public int compareTo(Object o) .
Este método será responsável pela ordenação. Ao chamar o método sort da sua coleção, será utilizado este método para a ordenação.
Como ele fará isto?
Se o valor retornado for -1 indicará que o objeto ao ser comparado é menor. Se for 0 é igual, e se for 1 é maior, desta forma, o método sort saberá se o objeto que está comparando ficará antes ou depois na coleção.
Como na classe que sugeri queremos ordenar pelo atributo objeto BigDecimal, implementei a classe da seguinte forma:

public int compareTo(Object o) {
return this.getValorClasse().compareTo(((MinhaClasseDto)o).getValorClasse());
}

Vejam que comparei o valor utilizando os métodos da classe. Sendo criativo, podemos fazer que esta ordenação obedeça diversos parâmetros.

Depois disto basta chamar o método sort de sua coleção, como :

MinhaClasseDto[] objeto = {new MinhaClasseDto(),new MinhaClasseDto(),
new MinhaClasseDto(),new MinhaClasseDto()};

objeto[0].setValorClasse(new BigDecimal(0));
objeto[1].setValorClasse(new BigDecimal(45));
objeto[2].setValorClasse(new BigDecimal(2));
objeto[3].setValorClasse(new BigDecimal(-3));
Arrays.sort(objeto);
for(int i=0;i‹bids.length;i++){
System.out.println(bids[i].getIdBid() + " + " + bids[i].getVlBid());
}

Até a proxima. ;-)