Problemas com Captcha no servidor [RESOLVIDO]

Ola Galera!!!

Passando por um problema bem chato e sem saber direito o que fazer.

Fazendo uma aplicação web com captcha mas infelizmente nao funciona no servidor…

o log de erro é este abaixo:

SEVERE: Servlet.service() for servlet Captcha threw exception
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(HeadlessGraphicsEnvironment.java:64)
at nl.captcha.text.imp.DefaultWordRenderer.renderWord(Unknown Source)
at nl.captcha.servlet.DefaultCaptchaIml.createImage(Unknown Source)
at nl.captcha.servlet.CaptchaServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)

vi algo de inicializar com um tal de " -Djava.awt.headless=true " mas nao sei onde inicializar isto e nem se é isso o problema e se for o problema por favor alguem pode me explicar o que isto faz???

Obrigado a todos!

Abraxxxxxxxxxxx

-Djava.awt.headless=true é um parâmetro que deve ser posto na inicialização da JVM ( ou seja, do /usr/bin/java ) do servidor, quando ele não tem acesso a uma tela gráfica (o que é comum se você rodar o servidor em uma máquina Unix ou Linux como um “daemon”).

Procure como é que você altera as opções de inicialização do Tomcat (deve ser algo no arquivo catalina.sh ou coisa parecida.)

O tomcat faz uso da variavel de ambiente JAVA_OPTS
Basta denifi-la no /etc/profile (no caso do Ubuntu, não sei em outras distros)

Segue como esta o meu arquivo profile:

.
.
.
# JAVA PATH
JAVA_HOME=/usr/lib/jvm/java
export JAVA_HOME
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME


export JAVA_OPTS="-Xms20m \
-Xmx1400m \
-XX:MaxPermSize=256M \
-XX:+UseSerialGC \
-server \
-Djava.awt.headless=true \
-Duser.timezone=America/Sao_Paulo \
-Duser.language=pt \
-Duser.country=BR"

.
.
.

Quando vc reiniciar o tomcat, ele vai considerar todos os parametros passados acima.

Ola galeraaa,

…hehehe

então mas porque na minha maquina funciona e no servidor nao…sendo que em nenhum momento eu habilitei este parametro na minha JVM??

Obrigado novamente!

Sua máquina é Windows, ou então você nunca testou como “daemon” no servidor.

O Seu servidor roda interface grafica? Gnome, KDE, etc?
Ou não tem?

Acredito que não, senão não aconteceria aquele erro.

Na sua maquina funciona pq você tem uma interface grafica.

[color=red]Ola thingol[/color]

Desculpe a ignorância mas como assim “daemom”???

é isso: http://www.vivaolinux.com.br/artigo/Entendendo-um-pouco-sobre-os-daemons/

Posso dizer então que o windows ja tem “daemom” incorporado nele???

[color=red]Ola danielsb2,[/color]

Bem estou no windows e deve ser por isso que roda neh? como disse nosso amigo thingol…

Abrax e novamente obrigado!

“Daemon” incorporado ?

Um “Windows Service” é um “daemon” no Unix, ou seja, um programa que roda em “background” fazendo algo (como servir bancos de dados, páginas web etc.)

Sei lá se é “incorporado” ou se você precisa exorcizá-lo … Talvez você precise de algum exorcista famoso para remover todos os “daemons” que povoam o Windows.

Ok, desculpe-me…

lendo um pouco mais sobre o assunto descobri que do mesmo modo que o windows tem processos o linux tem daemoms…hehe…foi isso que li no forum do under-linux… mas outros dizem que eh soh a carinha bonitinha de um processo, por exemplo o firefox fika sendo executado quando vc minimiza ele mas o daemom faz a perfumaria dele que nao eh necessario fazer quando minimizado…

é isso??

abraxxxxxxxxxx

Um programa com interface gráfica minimizado não é um daemon. Isso porque se você se deslogar, o firefox que você deixou minimizado será assassinado.
Um daemon, no Unix, é algo que sobrevive a um login/logoff etc. porque não roda sob uma sessão de usuário.

Perfeito!!!

Entendi, muito obrigado pela paciencia thingol!!

Abraxxx

Ola galera…

por ser um ambiente compartilhado o cara flw que nao ia instalar a interface grafica no servidor linux dele…

Tem como rodar o captcha sem utilizar a lib X11 do servidor ou posso coloca-la dentro de minha aplicacao para ser utilizada.

o que eu posso fazer???

Abraxxxx

O tal parâmetro “headless” indica ao Java (versão 1.4 ou superior) que ele não precisa usar uma biblioteca X para criar gráficos. Portanto, você tem de acertar as opções de execução do seu Tomcat.

putz cara…desculpe…
nao entendi…
nao eh soh colocar a biblioteca na minha aplicacao para ele funcionar e chama-la pelo meu captcha?
Obrigado!

Basicamente é assim: existe um local na configuração do seu Tomcat (olhe a documentação, depende da versão!) que indica onde você pode usar esse parâmetro -Djava.awt.headless=true. É no mesmo lugar em que se altera a quantidade de memória máxima para o Tomcat (-Xmx256m se quiser que o Tomcat use 256m, por exemplo). Você tem de editar o tal arquivo, e então reiniciar o Tomcat. Aí você pode experimentar para ver se a biblioteca passa a funcionar.

Acho que o seu Java não é tão velho que tal parâmetro não funcione; se você estivesse usando o Websphere 5.0 aí você estaria usando o Java 1.3 (argh) que não tem o tal parâmetro disponível, e aí você estaria em apuros.

Obrigado thingol,

resolvi criando uma aplicacao com outra lib de captcha…que nao necessita de inicializacao da lib X11 de interface…

na verdade achu q ela ateh utilizava essa lib (X11) mas ouvi falar que sao apenas 3 linhas de codigo q nao sao utilizadas que fazem este erro (Handless…) acontecer…aih era soh comenta-las que tudo fika tranquilo!!!

se quiser posto aqui o código e a lib q usei…

Abrax brother e otima semana!!