1. 1
Applets – O Retorno
A nova geração dos Plug-ins Java
Aprenda sobre o novo Java Plug-in com exemplos práticos em Java e JavaFX
SERGE REHEM E ULISSES TELEMACO
Resumo:
Meio “esquecidas” em meio a tantas novidades no mundo RIA (Adobe Flash/Flex/Air, Microsoft
Silverlight, JavaFX, ...), a nova Arquitetura de Plug-ins pode colocar novamente as Applets como
opção a ser considerada. Elas podem ser utilizadas para o desenvolvimento desde pequenos
componentes a serem embutidos em páginas web tradicionais (como botões “estilizados”,
animações ou gráficos) até aplicações mais completas (como o preenchimento de um cadastro ou
questionário) similares a uma aplicação Desktop. A arquitetura atual oferece suporte a praticamente
as mesmas vantagens destinadas às aplicações Java WebStart.
Iniciaremos relembrando a forma tradicional de construir Applets e mostrando um overview dessa
tecnologia. Em seguida apresentaremos as principais novidades da nova arquitetura do Java Plug-in,
mostrando exemplos práticos com Java e JavaFX testados em Windows, Linux e Mac OS. Veremos
como o uso de JNLP - o mesmo formato destinado às aplicações Java WebStart - permite a
customização de uma série de propriedades como, por exemplo, a seleção da JVM específica a ser
utilizada, o uso de um espaço próprio de endereçamento pra cada Applets, a possibilidade de
fornecer parâmetros individuais para a JVM, a opção de mudar a imagem de fundo padrão do Java
apresentada no momento de carga, entre outras. Uma das grandes novidades é a funcionalidade de
“arrastar-soltar” que permite que uma Applet para seja arrastada “fora do navegador” fazendo-a
executar de forma independente. Ao final, são apresentadas sugestões de leituras adicionais para
aqueles que desejem maior aprofundamento no tema.
Quando nasceu o Java, há mais de 10 anos, os "mini-aplicativos" Java que rodavam no navegador
eram seu "grande barato". Na época era comum a discussão "quem é melhor? Applets Java ou
ActiveX da Microsoft?". Passado tanto tempo, até então praticamente nenhuma evolução
tecnológica significativa aconteceu com as Applets (bom, quanto aos ActiveX, melhor nem falar...).
O Java 1.6 update 10 veio para mudar radicalmente esse cenário, apresentando a nova geração dos
plug-ins Java. Este artigo cobrirá as principais mudanças na arquitetura de plug-ins, mostrando com
exemplos práticos que as Applets definitivamente estão de volta.
Relembrando
Uma Applet é um tipo especial de programa Java, embutido em uma página HTML, que é
executado no contexto de um navegador habilitado para uso da tecnologia Java. Na prática, é uma
subclasse de java.applet.Applet (ou javax.swing.JApplet), que fornece uma interface
entre o programa e o ambiente do navegador. Embora aprofundar todos conceitos da tecnologia
Applet não seja o objetivo principal desse artigo, vamos relembrar a seguir os principais. Para isso,
iremos construir uma Applet tradicional, depois introduziremos gradativamente a nova arquitetura
de Plug-ins Java.
O código a seguir cria uma Applet simples que exibe na tela a mensagem "Olá Java Bahia!".
import javax.swing.JApplet;
import javax.swing.JLabel;
2. 2
public class OlaJavaBahia extends JApplet {
@Override
public void start() {
getContentPane().add(new JLabel("Olá " + getParameter("nome") + "!"));
}
}
Para executá-lo em um navegador será necessário criar uma página HTML e utilizar a tag
<applet>1. Exemplo:
<html>
<body>
<h1>Minha primeira Applet</h1>
<applet code="OlaJavaBahia.class" width="200" height="50">
<param name="nome" VALUE="JavaBahia"/>
Seu navegador não suporta Applets!
</applet>
</body>
</html>
E o resultado seria:
Figura 1. Applet Tradicional
Limitações conhecidas
As tradicionais Applets possuem várias limitações. Algumas delas decorre do fato de a JRE e o
navegador executarem no mesmo espaço de endereçamento:
• O navegador "congela" quando o JRE é iniciado pela primeira vez;
• Um travamento no JRE trava também o navegador;
• Apenas uma versão de JRE pode ser usada por vez;
• O desenvolvedor não tem o controle sobre qual versão de JRE está sendo utilizada, nem
pode passar parâmetros para a JVM (para, por exemplo, configurar memória);
1
A tag <applet> é recomendada para ambientes onde a portabilidade de navegador
é um requisito importante (a Internet por exemplo). Em ambientes mais controlados,
como as Intranets, é possível também usar as tags <object>, que funcionará apenas
no Internet Explorer, e <embed>, para a família de navegadores Mozilla.
3. 3
Outras limitações estão associadas às restrições (necessárias) de segurança:
• As Applets não tem acesso ao Sistema de Arquivos e portanto não podem ler ou escrever
arquivos na máquina do cliente.
• As Applets não se estabelecer conexões com outras máquinas, exceto com o servidor de
origem da Applet.
• As Applet não conseguem iniciar ou finalizar um programa na máquina do cliente.
Nova Geração do Java Plug-in
A nova geração do Java Plug-in traz uma arquitetura totalmente redesenhada e resolve vários
problemas conhecidos da geração anterior. Dentre as principais vantagens dessa nova arquitetura,
destacamos o fato de a JVM ser executada em um contexto independente do navegador. Assim,
caso ocorra algum erro de execução em uma Applet específica, o novo Java Plug-in consegue tratar
o problema sem afetar o funcionamento do navegador. O Quadro 1 resume as principais vantagens.
Quadro 1 – Vantagens da Nova Arquitetura do Java Plug-in
Maior Confiabilidade A Applet pode ser configurada para utilizar uma JVM independente do navegador.
Nesse caso, o Java Plug-in detecta e trata os problemas sem que o navegador seja
afetado.
Suporte a JNLP O novo Java Plug-in oferece as mesmas facilidades destinadas a aplicações Java
WebStart, permitindo carregar Applets diretamente a partir de arquivos JNLP (Java
Network Launching Protocol). É possível inclusive acessar as APIs JNLP para
persistência, acesso ao sistema de arquivos e outras funcionalidades.
Argumentos de linha de Pode-se especificar parâmetros para a JVM (semelhante aos parâmetros passados por
comando por Applet linha de comando) por Applet. Dessa forma, é possível configurar, por exemplo, o
tamanho do heap de memória ou funcionalidades de aceleração de hardware 2D.
Suporte a múltiplas Agora é possível explicitar qual versão de JRE deve ser utilizada pela Applet. Cada
versões de JRE instância individual de um Applet pode exigir executar uma versão específica de JRE
Melhor comunicação Houve uma considerável melhora na comunicação entre JavaScript e Java Applet com
Java/JavaScript compatibilidade entre os navegadores garantida. A API JavaScript pode ser usada para:
detectar JRE, instalar/atualizar JRE, executar Applets, acionar programas Java
WebStart, etc.
Melhor controle do ciclo de O comportamento das chamadas aos métodos de controle do ciclo de vida da API
vida de uma Applet Applet (init, start, stop e destroy) agora estão mais determinísticos e a portabilidade
entre os navegadores aperfeiçoada.
Melhor configuração do A quantidade máxima de memória que podia ser configurada para uma Applet era
espaço de memória limitada na versão anterior do Java Plug-in. Essa limitação foi retirada da nova versão e
as Applets podem ser configuradas para utilizar a mesma quantidade de memória das
aplicações de linha de comando.
Melhor experiência do Melhora de responsividade do navegador fazendo o carregamento de Applets em
usuário segundo plano. As Applets são carregadas em background, então o navegador continua
respondendo normalmente. A Applet aparece na página web apenas quando estiver
totalmente pronta para ser executada.
Suporte melhorado para Assinando as Applets, é possível que neste ambiente elas possuam os mesmo
Windows Vista privilégios que aplicações comuns.
Applets com JNLP
O Java Network Launch Protocol, JNLP, é a forma padrão de realizar a distribuição e instalação
de aplicações Java WebStart. A nova arquitetura de plug-ins do Java permite a utilização do mesmo
descritor JNLP, o que fará com que a Applet se comporte como uma aplicação convencional
acionada via WebStart. Retomando o exemplo anterior, poderíamos reescrever a tag <applet>
da seguinte forma:
4. 4
<applet code="javabahia.javaplugin.OlaJavaBahia" width="200" height="50">
<param name="nome" value="JavaBahia">
<param name="jnlp_href" value="olajavabahia.jnlp">
</applet>
Nesse segundo exemplo pressupomos que a classe OlaJavaBahia pertence ao pacote
javabahia.javaplugin e que é compilada em novojavaplugin.jar. Observe que o
parâmetro jnlp_href aponta para o arquivo JNLP da listagem abaixo. Vamos analisá-lo com mais
detalhe.
1. <?xml version="1.0" encoding="UTF-8"?>
2. <jnlp href="olajavabahia.jnlp">
3. <information>
4. <title>Olá JavaBahia Applet</title>
5. <vendor>JavaBahia.org</vendor>
6. </information>
7. <resources>
8. <j2se version="1.4+" href="http://java.sun.com/products/autodl/j2se" />
9. <jar href="novojavaplugin.jar" main="true" />
10. </resources>
11. <applet-desc name="Olá JavaBahia Applet"
12. main-class="javabahia.javaplugin.OlaJavaBahia"
13. width="1"
14. height="1" />
15. </jnlp>
O elemento <information> (linhas 3 a 6) é requerido e contém informações sobre o autor e
vendedor da Applet. As linhas 7 a 10 (tag <resources>) apresentam novidades interessantes:
A tag <j2se version="1.4+">2 informa a versão mínima da JVM3 aceita para executar a
Applet. A tag <jar> aponta para o arquivo do tipo JAR que contém o código executável da
Applet. A tag <applet-desc> (linhas 11 a 14) informa o nome da Applet (atributo name) e
indica o nome da classe principal (atributo main-class> e pode sobrecarregar alguns parâmetros
da tag <applet> do arquivo HTML. Neste exemplo, apesar de fornecidos, os atributos width e
height do JNLP são desconsiderados, prevalecendo as propriedades definidas na tag <applet>.
Isso ocorre porque pressupõe-se que o navegador sabe melhor como acomodar a Applet na página
web, e apenas ele pode suportar altura e largura relativos à pagina (ex: width=“40%”). Consulte a
página oficial do novo Java Plug-in para saber detalhes sobre todos os parâmetros suportados e as
formas de resolver outros tipo de conflito.
Parâmetros de Configuração da JVM
Além da opção de disponibilizar uma Applet a partir de um arquivo JNPL, é possível utilizar a tag
<applet> associada a uma série de parâmetros (tag <param>) específicos da JVM. Veremos
a partir de agora os três principais tipos de configuração para JVM: separate_jvm,
java_version e java_arguments. Veja o exemplo abaixo:
<applet code="javabahia.javaplugin.OlaJavaBahia" width="200" height="50">
...
2
A tag <j2se> também suporta argumentos de linha de comando a serem passados
para a JVM, como propriedades do sistema ou o tamanho máximo do heap, Caso
nenhuma JVM ativa atenda o desejado, uma nova instância será lançada. Consulte as
referências ao final do artigo para mais detalhes.
3
Uma vez que o suporte a JNLP no Java Plug-in só está disponível a partir da versão
1.6update10, especificações tipo “1.4+” basicamente não tem serventia.
Especificações de versão farão mais sentido quando pudermos usar por exemplo
“1.7+” (a partir da versão 1.7), “1.7*” (qualquer update da família 1.7) ou “1.6.0_13”
(apenas na verão 1.6 udpate 13).
5. 5
<param name="separate_jvm" value="true" />
<param name="java_version" value="1.5+" />
<param name="java_arguments" value="-Xmx128m" />
</applet>
Através do primeiro parâmetro (separate_jvm) uma Applet pode ser executada em uma
instância própria da JVM, separada de todas as outras Applets. Isso pode ser útil ao migrar certos
tipos de aplicações Desktop para uso direto no browser. O segundo parâmetro (java_version)
permite especificar a versão mínima da JVM necessária para executar a Applet. Já o terceiro
parâmetro (java_arguments) foi usado para configurar o total máximo de memória que a
Applet pode utilizar em tempo de execução.
Funcionalidade “Arrastar-Soltar”
Uma das novidades interessantes da nova arquitetura do Java Plug-in é a possibilidade de arrastar
uma Applet e soltá-la na área de trabalho. No entanto, vale ressaltar que essa é uma funcionalidade
experimental e que não há garantias que ela continuará sendo suportada nas próximas versões do
Java Plug-in. Para habilitar essa funcionalidade basta acrescentar o parâmetro <param
name=“draggable” value=“true” /> dentro da tag <applet>. Para testar, utilize a
combinação (tecla Alt + botão esquerdo do mouse) e arraste a Applet para a sua área de trabalho.
Você irá observar um pequeno botão de fechar no canto superior direito. A API Applet permite
ainda customizar o gesto do “arrastar”, o botão fechar e a imagem de carregamento (substituindo a
tradicional xícara de café do Java).
Enquanto a página de onde veio a Applet estiver aberta, ela poderá retornar ao seu lugar de
origem. Se a página for fechada, recarregada ou navegada para uma outra, a Applet é desconectada
do navegador e passa a executar de forma independente.
Em algumas plataformas Linux essa combinação (tecla Alt + botão esquerdo
do mouse) é normalmente usada para mover janelas, então é preciso alterar o
comportamento dessa combinação no gerenciador de janelas desse Sistema
Operacional. Opcionalmente, pode-se customizar a combinação no Applet. Para
isso implemente na Applet um método público com a interface public
boolean isAppletDragStart(MouseEvent e);
Integração com JavaScript
A especificação LiveConnect, usada para integração entre JavaScript e Java Applet, foi totalmente
reimplementada. A nova arquitetura garante maior confiabilidade, compatibilidade entre
navegadores e performance, tanto para Javascript chamando Applets quanto para Applets chamando
métodos Javascript.
Veja um exemplo de Javascript invocando método de um Applet.
import javax.swing.JApplet;
import javax.swing.JLabel;
public class OlaJavaBahia extends JApplet {
@Override
public void start() {
getContentPane().add(new JLabel("Olá " + getParameter("nome") + "!"));
}
public String upperCase(String s){
6. 6
return s.toUpperCase();
}
}
A chamada ao método upperCase é feita de forma transparente:
<html>
<body>
<h1>Minha primeira Applet</h1>
<applet id="app" code="OlaJavaBahia.class" archive="OlaJavaBahiaApplet.jar"
width="200" height="50">
<param name="nome" VALUE="Java Bahia"/>
Seu navegador não suporta Applets!
</applet>
<script language="javascript">
var msg = app.upperCase("Olá Java Bahia!!!");
document.write(msg);
</script>
</body>
</html>
E o resultado pode ser visto na Figura 2 abaixo:
Figura 2. Integração entre JavaScript e Applet
Evitando tornar o artigo muito longo, não vamos detalhar aqui a integração com JavaScript. Para
maiores informações (como por exemplo como chamar um método JavaScript dentro de um
Applet), favor consultar a documentação do LiveConnect indicada no final desse artigo.
Preparando o navegador
O novo Java Plug-In foi projeto para funcionar no Internet Explorer 6 e 7, no Windows XP e
Vista, e no Firefox 3, no Windows XP ou Vista, Solaris e Linux.
A configuração do Internet Explorer deve ser feita pelo Painel de Controle Java (Java Control
Panel), acessível pelo Painel de Controle do Windows XP ou Vista, habilitando a nova geração do
Java Plug-In na guia Avançado (Advanced), como na Figura 3.
7. 7
Figura 3. Habilitando o novo Java Plug-in no Windows
No Linux ou Solaris a configuração Firefox 3 é um pouquinho mais complicada. É necessário criar
manualmente um link simbólico (symlink) para a novo Java Plug-in. Para isso, abra um terminal e
vá para a pasta plugins em seu diretório de instalação do Firefox (por exemplo: /etc/lib/firefox-
3.0.10/plugins) e crie execute o comando ln -s apontando para sua pasta <JRE_HOME |
JDK_HOME>/jre/lib/{i386,sparc}/libnpjp2.so. Por exemplo:
cd /opt/firefox/plugins
ln -s /usr/jvm/lib/sun-java6/jre/lib/i386/libnpjp2.so
8. 8
Applets JavaFX com NetBeans
Explorando ainda mais as possibilidades do novo Java Plug-in, veremos agora como criar uma
Applet com JavaFX, uma plataforma de software multimídia para a criação e disponibilização de
Internet Rica, que pode ser executada em vários dispositivos diferentes. Totalmente baseada em
Java, JavaFx permite criar aplicações de altíssima qualidade visual e interatividade para rodar em
desktop, browser, telefone celulares, video-games, Blu-rays e até na TV Digital. Entrar em detalhes
foge do escopo do artigo, então recomendamos uma visita ao http://javafx.com para quem deseja
conhecer um pouco mais.
Usando o NetBeans 6.8 (a versão mais recente, até a escrita deste artigo, da única IDE com suporte
a JavaFX), crie um novo projeto da Categoria JavaFX e escolha JavaFX Script Application.
Preencha as informações como na Figura 4.
Figura 4. Criação de um projeto JavaFX no NetBeans 6.8
Depois de criar o projeto OlaJavaBahiaJavaFX, clique com o botão direito em seu nome e escolha
a opção Properties (Propriedades). Na categoria Run (Executar), crie uma nova Configuração
clicando em New (Novo) e digite Applet. Selecione a opção Run in Browser (Executar no
Navegador). Sua tela deverá estar como na Figura 5.
9. 9
Figura 5: Configuração do projeto JavaFX no Netbeans 6.8
Em seguida, ainda na janela de Propriedades, escolha a categoria Application (Aplicação) e
preencha como na Figura 6. Observe que a opção Draggable Applet deve estar marcada.
Figura 6. Alterando preferências do projeto
O código gerado automaticamente pelo NetBeans já pode ser executado. Será aberta uma página
no navegador mostrando uma página HTML contendo código JavaFX Script exibindo o texto
“Application Content” abaixo do título OlaJavaBahiaJavaFX em negrito. No subdiretório dist do
seu projeto, observe que, além dos arquivos do tipojar, foram criados um arquivo HTML e dois
JNLP (um para execução no navegador como Applet, outro como aplicativo Java WebStart).
10. 10
Figura 7. Arquivos gerados automaticamente no build do NetBeans
Na listagem a seguir é mostrado o código Java FX Script do arquivo Main.fx. As linhas destacadas
em negrito foram alteradas ou acrescentadas para dar um melhor comportamento visual à Applet,
alterando as cores de frente e fundo e adicionando um efeito chamado reflexão.
Main.fx
1. package olajavabahiajavafx;
2.
3. import javafx.stage.Stage;
4. import javafx.scene.Scene;
5. import javafx.scene.text.Text;
6. import javafx.scene.text.Font;
7. import javafx.scene.effect.Reflection;
8. import javafx.scene.shape.Rectangle;
9. import javafx.scene.paint.Color;
10.
11. Stage {
12. title: "Olá JavaBahia JavaFX"
13. scene: Scene {
14. width: 250
15. height: 80
16. content: [
17. Rectangle {
18. x: 0, y: 0
19. width: 200, height: 80
20. fill: Color.BLACK
21. }
22. Text {
23. font: Font {
24. size: 16
25. }
26. x: 10
27. y: 30
28. content: "Olá JavaBahia"
29. fill: Color.WHITE
30. effect: Reflection {fraction: 0.9 topOpacity: 0.9 topOffset: 0.1};
31. }
32. ]
33. }
34. }
O arquivo OlaJavaBahiaJavaFX_browser.jnlp, mostrado em seguida, traz várias tags que não
foram discutidas até aqui. Não vamos explicá-las porque consideramos que elas são bastante auto-
explicativas. Caso o leitor tenha alguma dúvida sobre essas tags, sugerimos a leitura das referências
indicadas no final desse artigo.
11. 11
1. <?xml version="1.0" encoding="UTF-8"?>
2. <jnlp spec="1.0+" codebase="file:/home/serge/NetBeansProjects/OlaJavaBahiaJavaFX/dist/"
3. href="OlaJavaBahiaJavaFX_browser.jnlp">
4. <information>
5. <title>OlaJavaBahiaJavaFX</title>
6. <vendor>JavaBahia</vendor>
7. <homepage href=""/>
8. <description>OlaJavaBahiaJavaFX</description>
9. <offline-allowed/>
10. <shortcut>
11. <desktop/>
12. </shortcut>
13. </information>
14. <security>
15. <all-permissions/>
16. </security>
17. <resources>
18. <j2se version="1.5+"/>
19. <property name="jnlp.packEnabled" value="true"/>
20. <property name="jnlp.versionEnabled" value="true"/>
21. <extension name="JavaFX Runtime" href="http://dl.javafx.com/1.2/javafx-rt.jnlp"/>
22. <jar href="OlaJavaBahiaJavaFX.jar" main="true"/>
23. </resources>
24. <applet-desc name="OlaJavaBahiaJavaFX" main-class="com.sun.javafx.runtime.adapter.Applet"
25. width="200" height="200">
26. <param name="MainJavaFXScript" value="olajavabahiajavafx.Main">
27. </applet-desc>
28. <update check="background">
29. </jnlp>
O código do arquivo OlaJavaBahiaJavaFX.html, contudo, será alterado para os fins didáticos.
Observe que as linhas de 14 a 26 foram comentadas, pois o NetBeans não gera o código usando a
tag <applet> que estamos estudando aqui. Em seu lugar, é usada a tag <script> e dentro
dele, o código JavaFX que carrega o script Main.fx no browser. No lugar desse trecho, pusemos
uma chamada padrão usando a tag <applet> e fornecendo o parâmetro draggable=“true”.
1. <html>
2. <head>
3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
4. <title>OlaJavaBahiaJavaFX</title>
5. </head>
6. <body>
7. <h1>OlaJavaBahiaJavaFX</h1>
8. <applet code="OlaJavaBahiaJavaFX" archive="OlaJavaBahiaJavaFX.jar" width="200"
9. height="60">
10. <param name="jnlp_href" value="OlaJavaBahiaJavaFX_browser.jnlp"/>
11. <param name="draggable" value="true"/>
12. </applet>
13. <!--
14. <script src="http://dl.javafx.com/1.2/dtfx.js"></script>
15. <script>
16. javafx(
17. {
18. archive: "OlaJavaBahiaJavaFX.jar",
19. draggable: true,
20. width: 200,
21. height: 200,
22. code: "olajavabahiajavafx.Main",
23. name: "OlaJavaBahiaJavaFX"
24. }
25. );
26. </script>
27. -->
28. </body>
29. </html>
12. 12
Por fim, o resultado final o resultado final da nossa “AppletFX” pode ser conferido na Figura 8.
Figura 8. Visualização da Applet feita em JavaFX
Conclusão
Este artigo procurou relembrar as tradicionais Applets, apresentando as novas possibilidades
disponíveis para Java e JavaFX a partir da Java SE 1.6 update 10 com o novo Java Plug-In. Depois
de muito tempo “estagnadas”, o leitor deve ter percebido que a Sun correu atrás do prejuízo e
apresenta agora opções bem interessantes para que o desenvolvedor possa voltar a considerar o uso
Applets em suas aplicações e páginas Web.
Links
http://java.sun.com/docs/books/tutorial/deployment/applet/index.html
Applet Tutorial
http://java.sun.com/j2se/1.4.2/docs/guide/misc/applet.html
Sintaxe completa da tag Applet
http://java.sun.com/javase/6/docs/technotes/guides/plugin/developer_guide/contents.html
Guia do Java Plugin, antes do Jdk1.6u10
http://java.sun.com/javase/6/docs/technotes/guides/jweb/index.html
Applets e Aplicações Java WebStart para o Jdk1.6u10
http://java.sun.com/developer/technicalArticles/javase/6u10_applets
A nova feature Draggable Applet no Java SE 6 Update 10 Plug-In
https://jdk6.dev.java.net/plugin2
Notas de versão da Nova Geração do Java Plug-In
http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-6290.pdf
Apresentação no JavaOne 2008 sobre sobre o novo Java Plug-in
https://jdk6.dev.java.net/plugin2/jnlp/
Suporte a JNLP no novo Java Plug-in
https://jdk6.dev.java.net/plugin2/version-selection/
Seleção de versão da JVM com o novo Java Plug-in
https://jdk6.dev.java.net/plugin2/liveconnect/
Integração entre Java Applet e Javascript
https://scenegraph-demos.dev.java.net/demo-applets.html
Demonstrações de Applets usando o novo Java Plug-in
13. Serge Rehem (serge.rehem@gmail.com) é PMP, MBA em Administração pela Unifacs, especialista em
Sistemas Distribuídos pela UFBA. Analista do Serpro/Salvador desde 1997, atualmente coordena a equipe
técnica do Framework Demoiselle, na projeção da Coordenação Estratégica de Tecnologia (Cetec) na
regional Salvador. É líder do JavaBahia e mantém o blog bazedral.blogspot.com, sobre trabalho
colaborativo nas empresas.
Ulisses Telemaco (ulisses@jeebrasil.com.br) é idealizador, fundador e mantenedor do projeto JEEBrasil.
Formado em Ciência da Computação pela UFRN. Mestrando em Mecatrônica pela UFBA. Palestrante em
vários eventos Java como JustJava, Abaporu, Natal Java Day, Salvador Java Day, Maratona 4 Java, entre
outros. Participou ativamente da organização dos JUGs JavaBahia e JavaRN. Atualmente trabalha como
Arquiteto de Software na OWSE Informática no Rio de Janeiro. Reforça o time do SouJava na terra
maravilhosa.