May 26th, 2008 by rafaelliu
1 comment »
This one is for all of you who (like me) keeps wasting time using commands such as find, jar and grep each time you get a classpath error:
#!/bin/bash
if [ "$1" = "" ]; then
echo "Usage: jarfind REGEXP";
exit;
fi
for d in `find . -name '*.jar'` ; do
FILES=`unzip -l $d | cut -c 29- | egrep ''$1''`;
if [ "$FILES" != "" ]; then
echo "$d";
for f in $FILES ; do
echo " - $f"
done
fi
done
I’ve chose to use unzip instead of jar since it’s far more commonly seem. Move it to /usr/local/bin/jarfind (well, that’s a little personal) and chmod it to +x.
I works searching all jars under the current directory for a regular expression, most commonly a simple class name. It returns the jar’s names and all corresponding class matches.
I’m not a bash programmer, so it may not look that pretty to experienced bash programmers, but it looks beautiful to me, as it saves me a lot of time =). Feel free to make any comments.
EDIT:
first known bug: doesn’t escape special characters in paths =/
May 8th, 2008 by rafaelliu
10 comments »
Tive recentemente que fazer uma prova de conceito, usando web services. Criei uma aplicação usando JAX-WS no JBoss 4.2.2 rodando na JDK 6 da Sun e me deparei um a seguinte exceção:
java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage
at javax.xml.soap.SOAPMessage.setProperty(SOAPMessage.java:424)
at org.jboss.ws.core.soap.SOAPMessageImpl.<init>(SOAPMessageImpl.java:83)
at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:161)
Pesquisando um pouco achei vários relatos similares e até uma entrada no JIRA. A classe SOAPMessage é da biblioteca SAAJ, e o problema é entre o JBoss e a JDK 6. Até a versão 6, essa biblioteca era distruida separadamente, mas na nova versão ela já vem integrada. O problema é que o JBoss já possui uma implementação própria dessa biblioteca e ao se carregar o SOAPMessage a biblioteca da Sun é utilizada, a qual está implementada de forma lançar um UnsupportedOperationException.
Uma solução é usar o esquema de endorsed da JVM. Bibliotecas endorsed são carregadas antes, tendo prioridade então sobre quaisquer outras bibliotecas. Assim, basta adicionarmos o jboss-saaj.jar (em <CONFIG_HOME>/lib) ao <JBOSS_HOME>/lib/endorsed. O script run.sh define a variável JBOSS_ENDORSED_DIRS=”$JBOSS_HOME/lib/endorsed” e cuida de setar esse diretório na propriedade java.endorsed.dirs da JVM.
Mas eu estou rodando o JBoss para JDK 6! (EDIT)
Existe uma “peculiaridade” se você estiver rodando o JBoss 5 para JDK 6 no WTP do Eclipse. O JBoss 5 usa o $JBOSS_HOME/lib/endorsed como o java.endorsed.dirs, setando esse parâmetro quando executamos o $JBOSS_HOME/bin/run.sh. O problema quando executamos via WTP é que o eclipse não usar o run.sh, portanto não seta o diretório endorsed e caímos no mesmo problema do JBoss 4.
Para resolver o problema basta clicar no “launch configuration” do servidor e adicionar o seguinte parâmetro no “VM arguments”:
-Djava.endorsed.dirs=../lib/endorsed
IMPORTANTE: O JBoss não é oficialmente suportado na JDK 6 e outros imprevistos podem vir a ocorrer. Recomenda-se utilizar a JDK 5, ao invés.
April 6th, 2008 by rafaelliu
No comments »
Fiz quinta passada a prova de SCJP 6. Foram 72 questões e passei com 86%. Como já tinha experiência com Java, deixei para estudar apenas quando terminasse a prova da IBM.
Como fonte de estudo usei o livro da Katherine Sierra, já consagrado entre todos os test takers do SCJP. Usei também o Sun Academic Initiative do qual fiz apenas os simulados, mas me pareceu ter um bom material para estudo. Dei umas clicadas também no Scjp Faq do JavaRanch, que tem um material talvez até extenso demais.
A prova foi tranquila e deu para acabar faltando ainda 1:30 de prova. Tive um susto durante a prova: o programa deu um erro, travou e fechou. Nisso eu estava no meio da revisão da prova, agora imaginem a minha reação… Depois do técnico reiniciar o computador (é Windows), o programa da Prometric me mostrou a prova de onde havia parado. Foi um alívio.
Acostumado com as interfaces dos mocks, tive uma agradável surpresa ao ver a interface do programa da Prometric. Os códigos maiores eram postos em janelas a parte de forma que dava para organizar a melhor a vizualização, os drag and drops, também foram bem feitos e a única coisa de que não gostei é que não se podia revisar as questões de drag and drop sem que se perdesse as respostas dadas.
March 25th, 2008 by rafaelliu
5 comments »
Bom, como deve ser aparente, estive ausente por um tempo. Estive bastante ocupado. Tive que fazer a prova SOA Fundamentals, para tirar a IBM Certified SOA Associate para a empresa. Nesse um mês que tive para me preparar precisei ir a Curitiba prestar serviços SOA e BPM lá, e continuar com outros projetos da empresa enquanto estudava.
Hoje foi a prova, foram 54 questões, passei com 72%. O score não foi tão folgado, mas fiquei satisfeito.
Os materiais que usei para estudar para a prova foram:
Como não tive tempo hábil, li apenas as algumas partes de cada e não consegui ler o material dos cursos SW717, SW718 e SW719 (recomendado pelo pessoal que faz a prova). Preferi me guiar pela página de preparação para o teste, de onde tirei a maioria dos títulos acima. Usei também vários artigos da IBM sobre SOA, sempre olhando a página de objetivos para não perder o foco.
Descrobri também o grupo IBM SOA CERTIFICATION, que embora esteja praticamente reduzido a spams, possui uma ótima sessão de arquivos. Cuidado para não confundir o teste 664 com o 665! O grupo possui bastante material para o 665 pois é voltado para SOA em geral.
February 11th, 2008 by rafaelliu
No comments »
Há pouco tempo enviei um email com recomendações para o pessoal de desenvolvimento da minha empresa, transcrevi muito do email aqui e alterei algumas coisa:
Tenho visto muito problema para fazer deploy de aplicações no que diz respeito à portabilidade das aplicações. Em minha empresa desenvolvemos em Windows mas no cliente usamos servidores Linux. Aqui vão algumas recomendações para evitar esses problemas:
- Evitem sempre que possível classes do pacote com.sun.*, nem sempre o cliente usa a JVM da sun (no meu caso era mais simples copiar o rt.jar da JVM da Sun para o lib/ext, mas é um tanto gambiarra.. além do mais esse jar tem mais de 40mb);
- Quando chamarem comandos externos no Ant chamem pelo nome em minúsculo, há diferenças de case senssitiveness entre OS’s, e os comandos em geral são em minúsculo em OS’s Unix-like. E antes de fazer qualquer dessas chamadas, procurem se já não existe uma task para isso, o script fica muito mais limpo e utiliza-se a portabilidade do Java corretamente;
- Tomem cuidado também com o nome que vocês dão às pastas e arquivos. Estabeleçam um nome e sigam ele, não misturem “InfraEstrutura.txt” com “infraestrutura.txt”;
- Quando forem compilar qualquer coisa para distribuição usem o parâmetro encoding do javac, iso-8859-1 no caso de se usar Windows e os arquivos estarem salvos no encoding padrão. Na verdade, creio que o mais correto seria desenvolver em utf-8, mas…
- Evitem caminhos absolutos! Nem todo OS tem c:\!
Mais alguns toques para scripts Ant de distribuição: habilitem o nowarn, os warnings dão impressão de má qualidade e sujam o log; tentem fazer um script que possa ser robotizado (sem nenhum input), muitas vezes é interessante criar cron jobs para ele.
February 9th, 2008 by rafaelliu
No comments »
Depois de tanto enrolar finalmente abri um blog para assuntos computeiros. Pretendo compartilhar experiências interessantes e críticas sobre informática, especialmente Java e Linux.
Pensei em escrever um brief sobre mim mas farei isso com mais atenção depois, na página Sobre. Enquanto não sai o primeiro post vou personalizando o blog. Boa leitura!