OpenJDK[1] é uma nova JVM que surge a partir dos fontes do JVM Java liberado pela SUN, entretanto para algumas atividades ele não funciona – ainda que pareça estar funcionando – e o jeito é apelar para o tradicional
Histórico (pule isso se quiser)
Após um período curto de férias no mês passado, voltei com entusiasmo e esperando um aumento gordo na minha conta bancária, por isso após fazer algumas atualizações no meu Ubuntu e tentar entrar no site do meu banco eu percebi algo estranho, o teclado virtual que é um applet Java, era exibido e mostrava-se 100% funcional, mas ao digitar a senha o sistema bancário não validava. O curioso era que ao invés de reclamar que a senha estava incorreta, a mensagem informava que eu devia inserir a senha – mas eu a tinha digitado, ou melhor, clicado, já que isso devia ser pelo teclado virtual.
Achando que tivesse bloqueado minha senha – já que tentei várias vezes – liguei para o suporte, expliquei o ocorrido, informei que usava Linux, Firefox etc etc e… legal o atendente estava me entendendo, parecia que estava conversando com um colega de trabalho, mas ele não conseguiu resolver e registrou o chamado para análise.
Eu ainda estava com problema e precisava saciar minha curiosidade de ver se o “bolão” estava na minha conta, mas nada de entrar no homebanking. Vasculhei tudo: A máquina Java estava corretamente instalada (tanto que o teclado virtual abria), a versão 6 do Java era a mesma que estava usando antes de sair de férias, o Firefox 3 funcionava na boa como sempre.
Era o típico cenário em que os métodos estão certos mas os resultados estão errados. Após um bom tempo procurando e uma consulta na página de configurações do Firefox (basta digitar about:plugins na barra de endereços) percebi um detalhe importantíssimo. A seção Java dizia que estava usando o arquivo “gcjwebplugin.so” o que me pareceu estranho e também chamou a minha atenção para o fato de estar usando o OpenJDK ao invés do SUN Java – embora ambos estivessem instalados.
Neste momento lembrei do bom e velho tempo em que usava o Conectiva Linux 6 e o Java precisava ser innstalado “na unha” para funcionar e parti para a caça do plugin perdido.
Caçando o plugin Java correto
Os plugins do Firefox ficam em uma pasta chamada plugins, em algum lugar no nosso disco. No caso das distribuições baseadas no Debian, como Ubuntu, Kurumin etc o caminho é /usr/lib/firefox/plugins como pode ver abaixo:
$ ls -l /usr/lib/firefox/plugins/
total 0 lrwxrwxrwx 1 root root 37 2008-07-14 22:22 flashplugin-alternative.so -> /etc/alternatives/firefox-flashplugin lrwxrwxrwx 1 root root 39 2008-06-23 12:32 libjavaplugin.so -> /etc/alternatives/firefox-gcjwebplugin.so
Observe entretanto que no Ubuntu este plugin é na realidade um link para o arquivo real que está na pasta /etc/alternatives. Então vamos dar uma olhada neste outro diretório para ver o que temos:
wbraga@info1054:~$ ls -l /etc/alternatives/*javaplugin*
lrwxrwxrwx 1 root root 64 2008-08-08 09:06 /etc/alternatives/firefox-javaplugin.so -> /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so lrwxrwxrwx 1 root root 56 2008-08-08 08:53 /etc/alternatives/iceape-javaplugin.so -> /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so lrwxrwxrwx 1 root root 56 2008-08-08 08:53 /etc/alternatives/iceweasel-javaplugin.so -> /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so lrwxrwxrwx 1 root root 56 2008-08-08 08:53 /etc/alternatives/midbrowser-javaplugin.so -> /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so lrwxrwxrwx 1 root root 64 2008-08-08 09:06 /etc/alternatives/mozilla-javaplugin.so -> /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so lrwxrwxrwx 1 root root 64 2008-08-08 09:06 /etc/alternatives/xulrunner-1.9-javaplugin.so -> /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so lrwxrwxrwx 1 root root 64 2008-08-08 09:06 /etc/alternatives/xulrunner-javaplugin.so -> /usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so
Eis ai o problema, conforme já tinha constatado antes. Todos os aplicativos que usam o plugin java estão apontando para aquela “coisa” bugada. A solução então era óbvia, procurar o plugin da SUN e aponta os links para o arquivo certo. A seguinte procura com o comando “find” revelou-me o que precisava:
$ find /usr/lib/jvm -name “*plugin*.so”
/usr/lib/jvm/java-6-openjdk/jre/lib/i386/gcjwebplugin.so /usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/i386/libjavaplugin_nscp.so /usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/i386/libjavaplugin_nscp_gcc29.so /usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/i386/libjavaplugin_jni.so /usr/lib/jvm/java-6-sun-1.6.0.07/jre/plugin/i386/ns7/libjavaplugin_oji.so <-- esse é o cara /usr/lib/jvm/java-6-sun-1.6.0.07/jre/plugin/i386/ns7-gcc29/libjavaplugin_oji.so
Resolvendo o problema
Na realidade só o que nos interessa é o penúltimo arquivo então bastava criar um atalho para este arquivo na pasta de plugins do Firefox e foi o que fiz
$ sudo su (você precisará digitar sua senha)
$ cd /etc/alternatives
# ln -sf /usr/lib/jvm/java-6-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so firefox-javaplugin.so
# ln -sf /usr/lib/jvm/java-6-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so mozilla-javaplugin.so
# ln -sf /usr/lib/jvm/java-6-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so xulrunner-1.9-javaplugin.so
# ln -sf /usr/lib/jvm/java-6-sun/jre/plugin/i386/ns7/libjavaplugin_oji.so xulrunner-javaplugin.so
Observe que para simplificar eu só criei os quatro links principais (Firefox, Mozilla e XULRunner) os demais – pelo menos no meu caso não foram necessários porque não uso os aplicativos a qual eles se referem (IceWeasel e IceApe), se você precisar faça os links para eles.
Java 64 bits
Este é um detalhe importante e por isso faço questão de destacar para os desavisados não agonizem como eu pela falta de informação. Embora a máquina virtual Java da SUN possua uma versão para a arquitetura 64 bits, o plugin para o Firefox não foi portado ainda – o que pode ser comprovado lendo o aviso na página de download deles[2]. A sugestão que está lá em letras minúsculas diz para usar a versão 32bits do plugin, mas isso não ficou muito claro pra mim se devo instalar o Java 64 + plugin 32bits, ou Java 32 + plugin 32.
Como em casa eu instalei o Ubuntu 64 bits[3] para testes no meu computador AMD64 e ainda não tive tempo para este teste especifico. Para poder acessar o banco, então, eu uso outro computador com a versão 32bits do Ubuntu, mas para quem não puder uma alternativa seria manter ambas as versões (32bits e 64 bits) em dual boot, ou ainda instalar uma máquina virtual (usando o VirtualBox, VMWare etc) para isso.
Concluindo
Agora é só fechar o Firefox e tentar novamente. Ao entrar na página about:plugins outra vez pude constatar que o arquivo do plugin que era o gcjwebplugin.so passou a ser o libjavaplugin_oji.so o que indicava que o problema estava resolvido.
Ao tentar entrar novamente no site do banco e informar a senha no teclado virtual… bingo! Era este o problema, o site abriu com perfeição. Só o que me deixou triste foi não ver o meu aumento na conta 🙁
Links
[1] http://openjdk.java.net/
[2] http://www.java.com/en/download/manual.jsp
[3] http://www.ubuntu.com/getubuntu/download
Muito obrigado! Extremamente útil. Já vinha com esse problema há um tempo.
Ótima explicação! Foi muito útil, parabéns!
Mais um “cliente” satisfeito 😉
Você pode resumir tudo isto aí com um simples comando:
#update-alternatives –config java
aí basta selecionar qual (java ou jdk) quer usar, este utilitário no debian serve justamente para fazer estes atalhos. Mas mesmo assim parabéns. Ótimo blog.
Legal @Denis Rodrigues Ferreira ,
Na minha próxima atualização vou testar este comando. Com certeza é bem mais prático do que criar os links na munheca.
Abraço.
Bem , acho que consegui fazer o Java SUN pegar no tranco :)… é o seguinte, basicamente os tutoriais estão certos,,, incluir os repositorios partner , , instalar os javas da sun,, usar o comando , sudo update -alternatives –config java ,,, deixar indicado o java sun como opção,,, etc ,, o segredo (que faltou dizer para mim foi, fechar o firefox atual (3.6.3) remover qquqer resto da versão antiga do firefox 3.5, remover completamente o icedtea plugins e o java-sun plugin intalados anteriormente , e com o firefox sem nenhum plugin java anterior, instalar novamente o javapluin da SUN ,,,, ai foi só alegria de reiniciar o firefox e confirmar o novo plugin com about:plugins 🙂 …. e a vida continua …:) , é isso ai espero ter ajudado 🙂 Boa Sorte
Fabio
eu passei um problemão também com esse negócio do java64 não rodar no firefox.. o que eu faço é baixar os dois, o 64 e o 32bits e descompacto o 64 e depois o 32 na mesma pasta, e crio o link simbólico na pasta do firefox.. daí funciona.