| Últimas 20 atualizações de EDUARDO OLIVEIRA SPÍNOLA |
|
|
Desenvolvendo Web Services utilizando JAX-WS
Java API para Serviços Web XML (JAX-WS) 2.0, JSR 224, é uma parte importante da plataforma Java EE 5. Uma continuação liberada de Java API para XML-based RPC 1.1 (JAX-RPC), JAX-WS simplifica a tarefa de desenvolver serviços web utilizando tecnologia Java. Encaminha alguns dos resultados em JAX-RCP 1.1 providenciando suporte para protocolos múltiplos assim como SOAP 1.1, SOAP 1.2, XML e suprindo uma facilidade de manutenção para protocolos adicionais junto com HTTP. JAX-WS utiliza JAXB 2.0 para ligação de dados e suportes habituais para controlar serviços gerados em interfaces endpoint. Com seu apoio para anotações, JAX-WS simplifica o desenvolvimento de serviços web e diminui o tamanho do tempo de execução dos arquivos Jar.
Um exemplo acompanha este artigo. Este exemplo demonstra um serviço web simples que é acessado utilizando JAX-WS 2.0 através de uma aplicação Java externa. O exemplo é baseado em um recurso aberto de implementação do Java EE 5 SDK chamado GlassFish. O pacote do exemplo inclui o código fonte para o exemplo, scripts de configuração e um arquivo de configuração ant.
Comecemos por fazer algumas instalações iniciais. Se você ainda não fez, baixe o GlassFish da página de Downloads GlassFish. (Este artigo foi testada com o Build 29 do GlassFish.) Depois prepare as seguintes variáveis de ambiente:
· GLASSFISH_HOME. Deve indicar onde você instalou o GlassFish (por exemplo C:\Sun\AppServer)
· ANT_HOME. Isto indicara onde foi instalado o ant. Ant está incluído no pacote do GlassFish que você baixou. (No Windows, está no subdiretório lib\ant.) Você também pode baixar o Ant da página do Projeto Apache Ant. O exemplo requer do Apache Ant 1.6.5.
· JAVA_HOME. Isto indicará a localização do JDK 5.0 no seu sistema.
Adicione também a localização do Ant na sua variável do ambiente PATH.
Em seguida baixe o pacote do exemplo e extraia o conteúdo dele. O diretório principal para está dica é jaxws-techtip.
Configurando o Web Service Com as configurações iniciais feitas, podemos começar a configurar o serviço web. Neste exemplo, o web service é desenvolvido a partir de uma classe Java. Para configurar o web service:
· Escreva uma classe de implementação endpoint.
· Compile a classe de implementação endpoint.
· Opcionalmente gere artefatos portáteis necessários para execução do web service.
· Empacote o web service num arquivo WAR e intale-o.
Escreva uma classe de implementação endpoint.
Se você navegar através da estrutura do diretório \techtip, você encontrará um diretório endpoint. Neste diretório, você achara uma classe chamada Calculator. A classe é uma implementação endpoint de um serviço simples que adiciona dois inteiros:
|
package endpoint;
import javax.jws.WebService;
import javax.jws.WebMethod;
@WebService(
name="Calculator",
serviceName="CalculatorService",
targetNamespace="http://techtip.com/jaxws/sample"
)
public class Calculator {
public Calculator() {}
@WebMethod(operationName="add", action="urn:Add")
public int add(int i, int j) {
int k = i +j ;
System.out.println(i + "+" + j +" = " + k);
return k;
}
}
| ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Desmistificando o AJAX – Parte VI
Raphael Paiva
raphael@sena.com.br
Conclusão
No nosso caso, demonstramos um exemplo bem simples, porém
capaz de apresentar a ‘ponta do iceberg‘ do desenvolvimento Web com AJAX.
A popularização do AJAX ajudou e muito no nascimento de
novos termos, como a Web 2.0 [ra
funcionalidade p[ontes estç(http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html),
uma quase renascença da Internet, desta vez, liderada pelo Google; e foi
justamente o Google onde tivemos a primeira aplicação com alta popularidade que
utilizou o AJAX, o GMail.
O mais interessante é que AJAX não é novo! Já era
utilizado por inúmeros desenvolvedores mundo afora, porém, com a criação do
acrônimo para referenciá-lo a Javascript, XML e chamadas
assíncronas, popularizou-se em poucas semanas; o artigo que “batizou” a “velha”
tecnologia não muito difundida foi escrito por Jesse James Garret no site da Adaptive Path (http://www.adaptivepath.com/publications/essays/archives/000385.php),
onde me serviu de primeira base de estudos (e onde “colei” as duas figuras
sobre o modelo assíncrono e a arquitetura do AJAX).
Após a leitura do artigo, me interessei e fui atrás de
novas fontes, principalmente com exemplos, e onde eu fiz meu primeiro test-drive foi no catálogo de BluePrints do Java.net (https://bpcatalog.dev.java.net/nonav/ajax/). A partir daí, e
até hoje, estou pesquisando mais sobre o assunto aos poucos. A
maior e melhor fonte que posso indicar é a wikipedia
(http://en.wikipedia.org/wiki/AJAX) com inúmeros artigos, frameworks,
exemplos, scripts e histórico sobre o tema.
Pessoalmente ainda não utilizo nenhum framework que implemente AJAX, pois normalmente estes são voltados para a
camada visual da aplicação, e ainda não tive oportunidade (ou necessidade) de
utilizar algo semelhante, porém, acho que um dia eu chegue a utilizar algum;
caso se interesse por algum framework, listei alguns que li no início do
capítulo 6, vale a pena escolher algum para estudar e usar. Pretendo que meu
próximo artigo/tutorial sobre AJAX seja um comparativo entre estes frameworks
ou algo semelhante a isto (qualquer idéia, pode entrar
em contato comigo J).
Durante o tutorial não cheguei a comentar em detalhes os
métodos do objeto XMLHttpRequest
para que ficasse algo mais direto à prática, já que falei razoavelmente sobre a
teoria por detrás; assim, no apêndice a seguir, organizei os principais métodos
e suas funções.
Apêndice
">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Desmistificando o AJAX – Parte V
Raphael Paiva
raphael@sena.com.br
Mãos na massa
ServletAjax que
receberá as requisições das páginas e retornará um XML como resposta
1.import javax.servlet.*;
2.import javax.servlet.http.*;
3.public class ServletAjax extends HttpServlet {
4. protected void service(HttpServletRequest request,
HttpServletResponse response)
5.
throws ServletException,
IOException {
6. String uf =
request.getParameter("uf");
7. String retorno =
"<?xml version='1.0' ?><root>";
8. if(uf.equalsIgnoreCase("CE")){
9. retorno += "<estado>"+
10. "<cidade
nome='Caucaia'>"+
11.
"<javaneses>15</javaneses>"+
12. "</cidade>"+
13. "<cidade
nome='Fortaleza>"+
14.
"<javaneses>400</javaneses>"+
15. "</cidade>"+
16. "<cidade
nome='Sobral'>"+
17.
"<javaneses>1</javaneses>"+
18. "</cidade>"+
19. "</estado>";
20. }else
if(uf.equalsIgnoreCase("PB")){
21. retorno
+= "<estado>"+
22. "<cidade nome='João
Pessoa'>"+
23.
"<javaneses>200</javaneses>"+
24. "</cidade>"+
25. "</estado>";
26. }else if(uf.equalsIgnoreCase("PE")){
27. retorno += "<estado>"+
28. "<cidade nome='Recife'>"+
29. "<javaneses>550</javaneses>"+
30. "</cidade>"+
31. "<cidade
nome='Olinda'>"+ 32. "<javaneses>30</javaneses>"+
33. "</cidade>"+
34. "</estado>";
35. }
36. retorno += "</root>";
37. response.setContentType("text/xml;charset=UTF-8");
38. response.setHeader("Cache-Control",
"no-cache");
39. response.getWriter().write(retorno);
40. }
41.}
O código do SerletAjax acima espera receber como parâmetro
(como visto na linha 6) a UF desejada pelo usuário, através dela faz-se uma
pequena lógica para retornar o XML resultante.
Perceba que a linha 37 é MUITO importante, sem ela, frases
com caracteres com acento, por exemplo, não seriam reconhecidas; no nosso caso,
João Pessoa iria para o browser como Jo?o Pessoa.
Logo abaixo, veremos como ficará a tela do nosso jsp:

E adiante, o fonte completo
da jsp. Note que o javascript, a chamada ao AJAX e o HTML estão na mesma página
apenas para fins didáticos:
JSP da página de
escolha de cidades
1.<html>
2.<head>
3.<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
4.<script type="text/JavaScript">
5.var req;
6.var isIE;
7.function initRequest(url) {
8. if (window.XMLHttpRequest)
{
9. req = new XMLHttpRequest();
10. } else if
(window.ActiveXObject)
{
11. isIE = true;
12. req = new ActiveXObject("Microsoft.XMLHTTP");
13. }
14.}
15.function atualizaCidades(uf){
16. if(uf != ''){
17. var url = "ajax?uf="+escape(uf);
18. initRequest(url);
19. req.onreadystatechange = processRequest;
20. req.open("GET", url, true);
21. req.send(null);
22. }else{
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Desmistificando o AJAX – Parte IV
Raphael Paiva
raphael@sena.com.br
Utilizando no dia-a-dia: Um exemplo real
No exemplo anterior, tínhamos a tarefa apenas de enviar um
dado ao servidor e retorná-lo ao cliente e conseguimos executá-la com sucesso,
ela já serve para algumas implementações simples de
pedido de retorno de um dado simples para o usuário, porém, AJAX pode fazer bem
mais! Não retornando apenas um dado, mas uma lista destes, podendo inclusive
trabalhar com folhas-de-estilo(CSS) para melhor
visualização do usuário.
Já existem uma série de
frameworks que trabalham com AJAX, e estes podem ser incorporados a qualquer aplicação web, com a
utilização de qualquer framework
MVC, ou seja.. não ache que você está preso ao
framework ou ao AJAX, você pode adicioná-lo e retirá-lo de onde quiser e quando
quiser.
Alguns exemplos de framework AJAX do mercado:
Framework e APIs de AJAX mais utilizadas na atualidade:
·
DWR
- http://getahead.ltd.uk/dwr/
·
AjaxAnywhere - http://ajaxanywhere.sourceforge.net/
·
SaJax
- http://www.modernmethod.com/sajax/
·
Rico - http://openrico.org/rico/home.page
·
BackBase - http://www.backbase.com
·
AjaxTags
- http://ajaxtags.sourceforge.net/
Todos estes
frameworks acima são bastante utilizados no mercado mundial, têm grande suporte
e uma série de funcionalidades visuais, como drag´n drop de componentes,
preenchimento de grids em tempo real, sugestão de
escrita(como no google suggest),
etc.
O exemplo que
iremos dar neste tutorial não utilizará de nenhum desses frameworks, iremos implementar o AJAX de forma pura, dessa vez retornando do
servidor um XML com todos os valores (ao invés de apenas um texto, como no
exemplo anterior) e iremos preencher um uma lista de valores.
Requisitos do exemplo
O que iremos implementar para
este exemplo é preenchimento de um combobox com uma pequena lista de cidades de acordo com o estado
selecionado em outra combo, e após a seleção da
cidade, nos será mostrado a quantidade de fãs do Java.
Abaixo, a lista de cidades de acordo com o estado:
">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Desmistificando o AJAX – Parte III
Raphael Paiva
raphael@sena.com.br
Primeiros passos: Explicando um exemplo simples
Como dito no início, o AJAX na verdade se resume a um
único objeto javascript chamado XMLHttpRequest, que possibilita chamadas ao servidor
sem a necessidade de refresh.
Temos duas implementações deste objeto, uma seguida pelo
Internet Explorer e outra seguida pelo Mozilla (a maioria dos outros browsers do mercado seguem a implementação do Mozilla)
e podemos instanciar da seguinte forma:
Criando
um objeto XMLHttpRequest
1. function chamaAjax(){
2. var req;
3. var isIE;
4. if
(window.XMLHttpRequest) {
5. req = new XMLHttpRequest();
6. }else
if (window.ActiveXObject) {
7. isIE = true;
8. req = new ActiveXObject("Microsoft.XMLHTTP");
9. }
Com o código acima, teremos nossa variável ‘req’ instanciada com um objeto XMLHttpRequest para qualquer browser.
OBS: em algumas
versões antigas do IE, deve ser instanciado o objeto “Msxml2.XMLHTTP”
ao invés de “Microsoft.XMLHTTP”. Um exemplo de código mais detalhado para todos
os casos será demonstrado no decorrer do tutorial.
Utilizando o XMLHttpRequest
para transportar dados para o servidor
10. var
url = "ajax?nome=raphael&tecnologia=java;
12. req.onreadystatechange = processRequest;
13. req.open("GET", url, true);
14. req.send(null);
15. }
O código acima faz
a tarefa de passar ao servidor, através do método http GET, os parâmetros para processamento. Após a
linha 14 ser executada, a requisição é transmitida.
">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Desmistificando o AJAX – Parte II
Raphael Paiva
raphael@sena.com.br
A arquitetura do AJAX
AJAX(Asynchronous Javascript And XML) modifica um pouco a
arquitetura das aplicações atuais.
Enquanto as aplicações clássicas tinham seqüência de troca
de informações totalmente síncrona, AJAX, por default tem uma seqüência assíncrona, porém esta pode ser
configurada para ser síncrona como será explicado depois.

Figura 1. Comparativo
entre a arquitetura clássica e a AJAX
">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Desmistificando o AJAX – Parte I
Raphael Paiva
raphael@sena.com.br
O que é AJAX
Antes de explicar o que é AJAX, deve-se explicar o que ele
não é; AJAX não é um framework, uma API nem uma tecnologia em si, é uma
funcionalidade implementada por um conjunto de objetos de JavaScript, sendo o mais importante chamado XMLHttpRequest.
Este objeto, que trata uma requisição ou resposta de
servidor com um documento XML DOM, contém uma série de métodos que possibilita
que o browser possa realizar requisições e receber respostas do servidor sem
que este tenha que atualizar(refresh) a tela.
A finalidade do AJAX
O principal problema resolvido com AJAX é a substituição
da conhecida tela escondida ou “hidden frame”, que
era implementado como única solução para a realização
de uma requisição sem refresh da página principal.
Com hidden frame tínhamos vários problemas:
Problemas com Hidden Frame:
·
Páginas com vários quadros
·
Quando ocorriam erros na página escondida, estes
não eram rastreados com facilidade.
·
Dificuldade de manutenção.
·
O desenvolvedor, ao ver uma já implementada, tinha bastante receio em adicionar ou
modificar alguma funcionalidade dela, pois poderiam ocorrer erros em outros
locais.
·
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
1
Desenvolvendo sistemas em PalmOS utilizando POO
Moacir Alves Pereira
Consultor de Sistemas de Mobilidade da RUNNING
Sabemos o quanto é trabalhoso desenvolver sistemas para
tecnologia PalmOS, utilizando C++. Quem já não ficou horas e horas tratando de
eventos do pequeno conjunto de objetos que compõem uma tela de cadastro e toda
gama de API do PalmOS? Foi pensando nisso que esse artigo foi desenvolvido.
Nele estarei abordando os primeiros passos para construção de uma simples tela
de cadastro utilizando a ferramenta IDE CodeWarrior 9.0 e tecnologia POO, com o objetivo de gerar uma
maior afinidade com as ferramentas em questão. Na próxima edição tratarei de
assuntos um pouco mais complexos como a implementação de bancos de dados nessa
plataforma de desenvolvimento. Por enquanto vamos nos prender ao básico dessa
aplicação, levando em consideração os seguintes tópicos explicativos na
seqüência:
·
Iniciando a construção do projeto
·
Desenhando a tela de cadastro
·
Implementando as funcionalidades do cadastro
Iniciando a construção do projeto
Vamos iniciar a construção do projeto utilizando o
assistente “Object Library for Palm OS Application Wizard”, como ilustrado na
figura 1, informando o nome do nosso projeto e, em seguida, clicando no botão
OK.

Figura 1
Feito isso, o assistente informa o nome do aplicativo que
está sendo criado (figura 2). Aceitamos a sugestão e clicamos em “Avançar” nas
demais telas até finalizar. Em seguida clique em “Concluir” para que o
assistente crie a base da aplicação.

">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
JRuby – Java, Ruby,
Eclipse e RDT – Parte V
Instalação
e configuração de um ambiente e os primeiros passos para desenvolvimento com JRuby
Marcelo Henrique da Silva e Marcos Alberto Lopes da Silva
Executando scripts em um arquivo Ruby
dentro do código Java através da JSR 2.2.3
Utilizaremos o código da Listagem
5: Chamando arquivos de script Ruby no código Java: TesteRuby2.java, para mostrar como chamar um arquivo Ruby.
import javax.script.*;
import java.io.*;
public class TesteRuby2 {
public void testeScriptArquivo()
{
ScriptEngineManager engineMgr = new ScriptEngineManager();
ScriptEngine engine
= engineMgr.getEngineByName("jruby");
InputStream is =
this.getClass().getResourceAsStream("/ruby_arquivo.rb");
try {
Reader reader = new InputStreamReader(is);
engine.eval(reader);
} catch (ScriptException
ex) {
ex.printStackTrace();
}
}
public static void main(String args[])
{
TesteRuby2 tr2 = new TesteRuby2();
tr2.testeScriptArquivo();
}
}
Listagem 5.
Chamando arquivos de script Ruby no código Java: TesteRuby2.java
As linhas InputStream is = this.getClass().getResourceAsStream("/ruby_arquivo.rb") e
Reader reader = new InputStreamReader(is) criam um Reader do arquivo de script a ser executado. Este objeto Reader é passado
como parâmetro para o método eval da classe ScriptEngine. O
procedimento é semelhante ao da Listagem 4: Utilizando
scripts Ruby em códigos Java através da JSR 2.2.3, a única diferença é que neste caso o parâmetro
passado no método eval não é uma string contendo o script a
ser executado, mas sim um arquivo (objeto Reader) a ser lido e executado.
Não entrarei em detalhes aqui, mas há várias possibilidades ao utilizar
arquivos desta forma. Por exemplo, podemos chamar funções definidas nos
arquivos de scripts.
Utilizando scripts Ruby em
código Java através do Bean Scripting
Framework (BSF)
A segunda forma de chamar scripts Ruby
dentro de código Java é at ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
JRuby
– Java, Ruby, Eclipse e RDT – Parte IV
Instalação
e configuração de um ambiente e os primeiros passos para desenvolvimento com
JRuby
Marcelo Henrique da Silva e Marcos Alberto Lopes da Silva
Utilizando classes Java em scripts Ruby
Agora que temos tudo instalado e funcionando vamos
explorar um pouco das possibilidades do JRuby. Como mencionado anteriormente,
um dos pontos interessantes do JRuby é a possibilidade de utilizar classes Java
dentro de scripts Ruby. Nosso primeiro exemplo ilustra esta possibilidade. Para
que seja possível a chamada de classes Java a partir do JRuby há duas
alternativas descritas a seguir:
1 - Configurar o caminho das classes no Classpath ou
2 - Colocar o jar das classes a serem utilizadas na pasta lib dentro do diretório de instalação do
JRuby. No nosso exemplo a pasta seria c:\jruby\lib.
Utilizaremos a primeira opção para seguir nosso exemplo.
No projeto Rails criado anteriormente crie uma nova pasta com nome “java” (conforme ilustrado Erro!
Fonte de referência não encontrada.), onde serão salvos nossos
pacotes e classes Java.

Figura 6.
Utilizando classes java
Coloque este diretório no Classpath do sistema utilizando
o mesmo procedimento para configuração de variáveis citado na instalação do ambiente. Em variáveis de
ambiente localize e edite a variável Classpath adicionando o caminho da pasta,
que depende do workspace do eclipse que está sendo utilizado no projeto. Por
exemplo, em minha máquina configurei o workspace na pasta c:\workspaces\jruby. Então o valor a ser adicionado no classpath
seria c:\workspaces\jruby\teste\java.
É necessário reinicializar o Eclipse após a configuração do classpath. Para
maior facilidade utilizarei um pacote que eu já havia criado anteriormente e
que será apenas copiado para a pasta java
do projeto. Você pode criar um projeto Java para criar o pacote e a classe
Pessoa e depois colar o pacote no projeto do Rails. A estrutura do pacote é
mhs.unitri.javapos e possui somente a classe Pessoa conforme descrita na Listagem 2: Classe Java Pessoa: mhs.unitri.javapos.Pessoa.java.
package mhs.unitri.javapos;
public class Pessoa {
private String nome;
public Pessoa(String nome) { this.nome = nome; }
public Pessoa() { this(“”); }
public String
getNome() { return nome; }
public void
setNome(String nome) { this.nome = nome; }
}
Listagem 2.
Classe Java Pessoa: mhs.unitri.javapos.Pessoa.java
Com a classe criada e compilada crie o arquivo Ruby de
nome teste_java.rb como descrito na Listagem 3: Chamando Java no
JRuby: teste_java.rb
require 'java'
# instrução
para utilizarmos classes java
include_class
'mhs.unitri.javapos.Pessoa'
# qual classe queremos utilizar
pessoa =
Pessoa.new("Fulano de Tal") # instancia um objeto ruby a partir da classe
java
puts
pessoa.getNome(); # imprime o nome da pessoa
Listagem ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
JRuby
– Java, Ruby, Eclipse e RDT – Parte III
Instalação
e configuração de um ambiente e os primeiros passos para desenvolvimento com
JRuby
Marcelo Henrique da Silva e Marcos Alberto Lopes da Silva
Instalando o plugin RDT (Ruby Development Tools) do
Eclipse
Baixe e instale a última versão do eclipse no site http://www.eclipse.org/downloads/.
Com o Eclipse instalado vamos agora instalar o plugin RDT. Abra o Eclipse e acesse o menu Help|Software Updates>Find and Install.
Selecione a opção “Search for new features to install” e clique em “Next”. Clique em “New Remote Site” e preencha os campos “Name” e “URL” com Ruby
Development Tools e http://updatesite.rubypeople.org/release
respectivamente. Clique em “Finish” e
depois basta ir seguindo as telas para concluir a instalação.
Configurando o plugin RDT no Eclipse
Após instalar o plugin RDT é preciso configurá-lo. Acesse
o menu Window|Preferences. Localize a
opção Ruby>Installed Interpreters e
clique em “add”. Na tela que surgir
(Add RubyVM) preencha os campos “Name”
e “RubyVM home directory” com JRuby e
c:\jruby\bin respectivamente. Conforme
ilustrado na Figura
4: Configurando o JRuby no Eclipse. Clique em “OK”
para salvar as alterações nas telas. Com isso temos o RDT configurado no
eclipse. Mas para utilizar os recursos do Rails ainda temos que fazer algumas
configurações, pois o RDT ainda não suporta estes recursos.

Figura 4. Configurando o JRuby no Eclipse
Configurando os scripts do Rails para utilização no
Eclipse
Estas configurações estão ligadas ao workspace atual. Se o
workspace for alterado será necessário configurar tudo novamente. Para utilizar
os scripts do Rails vamos configurar algumas ferramentas externas. No total
criaremos 5 configurações:
1 – Gerar Estrutura:
Para gerar toda a estrutura do projeto.
2 – Gerar Modelo:
Para criar um Modelo.
3 – Gerar
Controlador: Para criar um Controlador.
4 – Gerar Scaffold:
Para criar automaticamente as funcionalidades de cadastro, remoção, alteração e
listagem de itens do banco de dados.
5 – Iniciar WEBrick:
Para iniciar o servidor WEBrick
Para acesso às configurações, no Eclipse clique em Run|External Tools>External Tools. Na
tela que surgir (Create, manage and run
configurations) clique em “program”.
Para adicionar uma configuração clique no botão “new”.
Para criar a configuração 1 siga os passos:
1 – Preencha o campo “Name”
com “Gerar Estrutura”.
2 - Na aba “Main” preencha os campos:
2.1 – Location com c:\jruby\bin\jruby.bat
2.2 - Working directory com: ${project_loc}
2.3 - Arguments com: ../${project_name}
3 – Na aba
“Refresh” marque a opção “Refresh resources upon completion”.
4 – Na
aba Common, localize a área “ ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
JRuby
– Java, Ruby, Eclipse e RDT – Parte II
Instalação
e configuração de um ambiente e os primeiros passos para desenvolvimento com
JRuby
Marcelo Henrique da Silva e Marcos Alberto Lopes da Silva
Testando a instalação
Para verificar se as configurações estão corretas, no
prompt de comando é só executar os seguintes comandos:
·
Para testar a configuração do Java: javac –version
·
Para testar a configuração do JRuby: jruby –v
Cada comando deve exibir informações sobre a versão
instalada do Java e do JRuby respectivamente. Caso isto não aconteça, revise os
procedimentos de instalação e configuração descritos anteriormente. Lembrando
que se você já estava com o prompt aberto antes de configurar as variáveis de
ambiente é necessário fechá-lo e abri-lo novamente.
Vamos demonstrar o funcionamento do JRuby criando um
script Ruby bem simples que demonstra uma de suas principais características: tudo
em Ruby é um objeto. O script (teste_instalacao.rb) possui apenas duas linhas,
como pode ser visto abaixo:
variavel_inteira = 10
puts variavel_inteira.methods
A primeira linha apenas atribui o valor inteiro “10”
na variável “variavel_inteira”. A
segunda linha utiliza o método puts
para imprimir o resultado da chamada ao método “methods” do objeto inteiro referenciado pela variável “variavel_inteira”. Neste exemplo o
método “methods” retorna todos os
métodos da classe int. Pode parecer estranho quando comparado a outras
linguagens, em que int é um tipo primitivo, mas em Ruby tudo é objeto.
Para executar o script, na pasta onde ele foi salvo, basta
executar o comando jruby
teste_instalacao.rb. A Figura 1:
Tudo em Ruby é objeto, mostra o exemplo de execução pelo JRuby do script teste_instacao.rb (considerando que este
tenha sido salvo na pasta c:\teste_jruby).
A mesma figura mostra uma parte do resultado gerado pelo script, ou seja,
alguns dos métodos da classe int tais como id2name,
abs, etc.

Figura 1. Tudo em Ruby é objeto
Instalando o JRuby on Rails
A instalação do JRuby on Rails é semelhante à instalação
do Rails para Ruby. Utilizaremos o RubyGem para realizar esta tarefa. RubyGem é
uma ferramenta que já vem junto com o pacote do Ruby/JRuby para instalação e
atualização de bibliotecas. É algo semelhante ao apt-get do Kurumin. O
comando utiliza a conexão de internet para buscar e instalar os componentes. Para
instalar o Rails, basta executar o comando a seguir:
">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
JRuby – Java, Ruby,
Eclipse e RDT – Parte I
Instalação
e configuração de um ambiente e os primeiros passos para desenvolvimento com JRuby
Marcelo Henrique da Silva e Marcos Alberto Lopes da Silva
Seria impossível falar de JRuby sem antes falar de Ruby.
Para quem nunca ouviu falar, Ruby é uma linguagem de
script 100% orientada a objetos criada por Yukihiro
Matsumoto baseada em Perl, Smalltalk, Eiffel, Ada e Lisp. Desde o lançamento de sua versão para o público em
1995 seu uso e popularidade vêm aumentando devido a sua simplicidade, elegância
e praticidade tudo isso resultando em produtividade.
Diferentemente de outras linguagens, Ruby
foi projetada com foco nas necessidades de pessoas e não de máquinas. Com isso
é possível que o programador tenha produtividade e diversão (isso mesmo,
diversão!) seguindo o princípio da menor surpresa (principle of least surprise - POLS). Segundo tal princípio, é comum que
mesmo programadores experientes fiquem surpresos com o comportamento dos
programas que eles escrevem enquanto isso não deveria acontecer. Por exemplo,
quem já programou em C e já se viu controlando ponteiros
alguma vez, sabe do que se trata. O programa aparentemente está certo,
mas não se encontra o erro. Outro exemplo é quando um código é escrito hoje e
daqui a 3 meses é necessária alguma manutenção que se
torna difícil devido à sua complexidade e dos detalhes de implementação. Ruby segue a filosofia POLS para que o programador consiga
fazer facilmente o que tem em mente sem ter que fazer malabarismos.
Hoje em dia, por melhor que a linguagem seja é necessária a
utilização de ferramentas para simplificar as tarefas rotineiras de
desenvolvimento. Pensando nisso, em julho de 2004 foi lançado o Rails, mais conhecido como Ruby on Rails (RoR). Este é um framework para desenvolvimento de
aplicações web que tem como princípios o reuso de código e convenções ao invés
de configurações. O Rails também tem sua versão de
implementação em Java, o JRuby
on Rails.
Finalmente, agora podemos falar sobre o JRuby, que nada mais é do que a
implementação totalmente em Java da linguagem Ruby
para rodar na JVM. Ele foi desenvolvido para permitir que scripts em Ruby possam ser codificados em qualquer aplicação Java. O
interessante é que qualquer classe Java também pode ser utilizada através do JRuby. Essa integração permite a
utilização do que há de melhor nestes dois ambientes.
Mas nem tudo é perfeito. Na atual versão do JRuby, é nítida a diferença de
tempo entre um script ruby executado diretamente em
um ambiente Ruby do que o mesmo script executado no
ambiente JRuby. No JRuby leva-se mais tempo para rodar o script. No
decorrer deste artigo é possível notar que alguns comando levam um certo tempo para terminar. Mas a previsão da equipe que
desenvolve o JRuby é que em
breve os scripts serão executados mais rapidamente do que no próprio ambiente Ruby.
Pré-requisitos
Para utilizar o JRuby
é necessário ter instalado o JDK 1.4 ou superior. No entanto, alguns exemplos
de utilização do JRuby disponíveis
na internet só rodam com o JDK 6. Ou seja, para garantir que não haja problemas
com relação a versões de JDK é melhor ter instalado o JDK 6
para utilizar o JRuby.
Instalação e configuração do ambiente
Vamos instalar e configurar o ambiente para
desenvolvimento JRuby< ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
jBPM - Sincronização entre Processos e Aplicativos – Parte
IV
Crie e modifique aplicações a partir dos diagramas de
processos de negócios da empresa utilizando um framework Java
Cristiano Terra Palazzo
Estudo de
caso
Neste nosso estudo de caso, foi elaborada uma aplicação na
qual um usuário preenche uma requisição de produto, informando o que deseja e para
quando.
No segundo passo do processo, outro usuário poderá
solicitar mais informações da solicitação (caso não tenha tido clareza no
pedido) e desta forma o primeiro usuário precisará completar o pedido. Depois
de compreendido o pedido, o próximo passo será a aceitação ou recusa do pedido.
Para a primeira opção será informada a data da entrega e para a segunda opção
será informado o motivo da recusa.
Diagrama de fluxo
de processo

Figura 12.
Diagrama do Estudo de Caso
Implementação
Apresentarei como serão preenchidas as configurações de
dois objetos, o objeto Pedidos (um estado de início) e o objeto Conferência
(uma tarefa).
Pedidos:
Acesse a aba Outline.
Clique com o botão direito sobre o icone do Pedidos e escolha a opção Add Task. Agora acesses as propriedades
da tarefa que foi criada.
Na tela “Properties for task” que surge, no item General informe o nome da tarefa
(Preencher Requerimento). No item Assignment
escolha uma Swimlane selecione a swimlane que foi criada para o projeto.
Veja no XML listado abaixo a Etapa 1.
No item Controller
deverão ser criados os campos que serão preenchidos pelo usuário nesta tarefa.
No nosso exemplo criaremos os campos Descrição e Data para Entrega (ambos do
tipo read e write, sendo a Descrição também do tipo required). Finalize clicando no botão OK.
Agora configuraremos o nó Conferência. Na aba Outline localize o objeto, clique
novamente com o botão direito sobre ele e escolha a opção Add Task. Acesse a propriedade desta tarefa e preencha o General com o nome da tarefa (Vefiricar
Pedido), o Assignment com a mesma Swimlane do Pedidos e no Controller crie os mesmos campos
(Descrição e Data para Entrega) do objeto Pedidos, porém marque apenas as
opções read e write. Os campos dever ser escritos com os mesmos nomes. Isto fará
com que o que for preenchido na tarefa anterior seja exibido nesta, e não
poderá ser alterado. Veja no XML listado abaixo a Etapa 2.
Como as transições já estão desenhadas, não é necessário
fazer nenhuma configuração adicional.
Na Figura 13 podemos
ver como a tarefa de início (Pedidos) será exibida. Como a tarefa segue para
apenas outra, o botão para conclusão é o “Save
and Close Task”.

Figura 13.
Tarefa de início (Pedidos)
E abaixo (Figura 14)
temos a imagem da tarefa Conferência. Como o usuário terá a opção de pedir mais
informações sobre o pedido, ou encaminhá-lo para aprovação, nesta tarefa tem
dois botões: “Solicitar Complemento” ou “Solicitar Aprovação”.

Figura 14.
Tarefa Conferência
Segue abaixo o código XML gerado pelo framework, a partir
do diagrama desenhado acima. O xml é bidirecionalmente sincronizado com o
diagrama (ao fazer alteração em um deles instantaneamente a mudança é refletida
no outro).
Listagem 1. XML
da definição de processos
<?xml version="1.0"
encoding="UTF-8"?>
<process-definition
xmlns="urn:jbpm.org:jpdl-3.1" name="Requisicoes">
<swimlane name="Inicio">
<assignment expression=""></assignment>
</swimlane>
<start-state name="Pedidos">
<task name="Preencher requerimento" swimlane="Inicio">
<controller>
<variable name="Descrição" access="read,write,required"></variable>
<variable name="Data para entrega"></variable>
</controller>
</task>
<transition name="Conferir" to="Conferência">
</transition>
</start-state>
<task-node name="Conferência">
<task name="Verificar Pedido" swimlane="Inicio">
<controller>
<variable name="Descrição" access="read"></variable>
<variable name="Data para entrega" access="read"></variable>
</controller>
</task>
<transition name="Solicitar Aprovação" to= ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
jBPM - Sincronização entre Processos e Aplicativos – Parte
III
Crie e modifique aplicações a partir dos diagramas de
processos de negócios da empresa utilizando um framework Java
Cristiano Terra Palazzo
jBPM
O que é?
O jBPM é um framework da JBoss que permite a criação de
soluções empresariais baseados em processos de negócio usando notações gráficas
e programação orientada a grafos. É uma engine
de Workflow e BPM.
As empresas podem criar e automatizar os processos de
negócios que coordena entre pessoas, aplicações e serviços. O jBPM reduz o
tempo de desenvolvimento para automatizar e integrar os processos de negócio.
Permite representar os diagramas de um BPM e relacioná-los
com um sistema automatizado com os referidos processos, fazendo com que o
sistema reflita completamente o fluxo que foi desenhado no diagrama, possibilitando
que o aplicativo seja alterado a partir de mudanças no próprio diagrama.
Download e
instalação
O download do framework pode ser realizado no site
labs.jboss.com/jbossjbpm/downloads. Para a realização dos testes deste arquivo
foi utilizada a jBoss JBPM jPDL Suite (jbpm-starters-kit-3.1.3) que
contém a jBoss JBPM jPDL juntamente com o framework gráfico para desenho dos
processos.
A instalação é simples, bastando descompactar o arquivo em
algum local do disco rígido do computador. Porém, não pode esquecer-se de
configurar a variável do sistema JBPM_HOME.
Principais
artefatos iniciais
Os objetos e artefatos do jBPM não ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
jBPM - Sincronização entre Processos e Aplicativos – Parte
II
Crie e modifique aplicações a partir dos diagramas de
processos de negócios da empresa utilizando um framework Java
Cristiano Terra Palazzo
Adotando BPM
As organizações começam frequentemente um projeto ou programa
de BPM com o objetivo de otimizar uma área que foi identificada como uma área
para a melhoria. A prática atual é começar mapeando um processo de negócio (ou modelagem
do processo de negócio) usando uma técnica/notação tal como BPMN.
BPMN
A BPMN (Business Process Modeling Notation) é uma notação
gráfica padronizada para desenhar processos de negócios em um workflow. Foi desenvolvida pelo BPMI
(Business Process Management Initiative) e agora está sendo mantido pelo Object
Management Group (OMG) desde que as duas organizações se uniram em 2005.
A modelagem na BPMN é feita por diagramas simples com um
pequeno conjunto de elementos gráficos. Torna simples para os usuários de
negócios e para os desenvolvedores entenderem o fluxo e o processo. As quatro
categorias de elementos básicos são:
Objetos de fluxo:
·
Evento (Event): é representado com um
círculo e é algo que acontece. Pode ser inicial (Start), intermediário
(Intermediate) ou final (End). O elemento é uma trigger ou um resultado.

Figura 1. Eventos
·
Atividade (Activitie): é representada por
um retângulo com bordas arredondadas e nos mostra o tipo de trabalho que deve
ser feito. Pode ser uma tarefa ou um sub-processo. Um sub-processo também tem
um sinal de adição (+) na última linha do retângulo.

Figura 2.
Atividades
·
Passage ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
jBPM - Sincronização
entre Processos e Aplicativos – Parte I
Crie e modifique aplicações a partir dos diagramas de
processos de negócios da empresa utilizando um framework Java
Cristiano Terra Palazzo
Business Process Management
O Business Process Management,
ou simplesmente BPM, é uma área do conhecimento que une a gestão de negócios
com tecnologia da informação. Pode ser livremente traduzido como Gerenciamento
de Processos do Negócio.
O BPM foi criado com o objetivo de melhorar os processos
de negócio das organizações utilizando métodos, técnicas e ferramentas que
permitam modelar, publicar, controlar e analisar os processos operacionais onde
há o envolvimento de seres humanos, de sistemas automatizados, documentos e
outras fontes de informação.
Atividades do BPM
As atividades que constituem o BPM podem ser divididas em
três grupos: modelagem, execução e monitoramento.
a) Modelagem
O processo de modelagem é o levantamento e análise dos
processos existentes bem como a simulação de novos processos que possam vir a
existir.
Os softwares utilizados para esta tarefa incluem editores
gráficos que documentam os processos, repositórios que armazenam os modelos de
processos e ferramentas para simulação de processos de negócios para executar
um processo por um grande número de vezes para poder mensurar
parâmetros de desempenho como tempo médio e custo.
Uma boa modelagem reduz o número de problemas durante o
ciclo de vida de u ">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
NetBeans 6.0 – Swing Application Framework – Parte II
Crie aplicações desktop Java em poucos minutos usando o novo Swing Aplication Framework com o Netbeans 6.0
Antonio Peixoto da Cunha Junior e Marcos Alberto Lopes da Silva
Por trás dos bastidores
O Netbeans 6.0 utiliza JPA (Java Persistence API) que é a especificação padrão para o gerenciamento de persistência e mapeamento objeto relacional, que vem para e simplificar o desenvolvimento de aplicações que utilizam persistência de dados. Um dos principais conceitos relacionados à API JPA é o de entidade. É bom lembrar que, uma entidade corresponde a um objeto que pode ser gravado na base de dados a partir de um mecanismo de persistência. O Netbeans 6.0 gera um arquivo “Persistence.xml”, responsável por fazer a conexão com o banco, criando assim uma camada de abstração entre o JDBC e o código. O uso dessa solução é bastante recomendada devido a sua estabilidade, boa documentação e facilidade de uso.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="samplePU" transaction-type="RESOURCE_LOCAL">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<class>ppessoa.Pessoa</class>
<properties>
<property name="toplink.jdbc.url" value="jdbc:derby://localhost:1527/sample"/>
<property name="toplink.jdbc.user" value="app"/>
<property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="toplink.jdbc.password" value="app"/>
</properties>
</persistence-unit>
</persistence>
Listagem 2. Arquivo XML gerado no Netbeans 6.0
Nesta aplicação o framework gera uma classe persistente “Pessoa.java”. Tal persistência permite que um objeto continue a existir mesmo após a destruição do processo que o criou. Na verdade, o que continua a existir é seu estado, já que pode ser armazenado em disco. Além disso, são geradas várias Queries de consultas.
@Entity
@Table(name = "PESSOA")
@NamedQueries( {@NamedQuery(name = "Pessoa.findByCodigo", query = "SELECT p FROM Pessoa p WHERE p.codigo = :codigo"),
@NamedQuery(name = "Pessoa.findByNome", query = "SELECT p FROM Pessoa p WHERE p.nome = :nome"),
@NamedQuery(name = "Pessoa.findByDataNascimento", query = "SELECT p FROM Pessoa p WHERE p.dataNascimento = :dataNascimento"),
@NamedQuery(name = "Pessoa.findBySexo", query = "SELECT p FROM Pessoa p WHERE p.sexo = :sexo")})
public class Pessoa implements Serializable {
@Transient
<">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
NetBeans 6.0 – Swing Application Framework – Parte I
Crie aplicações desktop Java em poucos minutos usando o novo Swing Aplication Framework com o Netbeans 6.0
Antonio Peixoto da Cunha Junior e Marcos Alberto Lopes da Silva
Tradicionalmente um dos maiores entraves para se desenvolver aplicações JAVA com vínculo a banco de dados é sem dúvida o tempo gasto. Para se criar formulários e fazer conexões com bancos é necessário criar códigos e alterá-los sempre que precisar alterar alguma tabela no banco. Todo este processo pode gerar insatisfação quanto ao uso da ferramenta propriamente dita, bem como este tempo gasto poderia estar sendo utilizado para outros fins. Além disso, é necessário que o desenvolvedor esteja familiarizado com a utilização de plugins.
Em face destes “obstáculos” é que se propõe a utilização de uma ferramenta que facilite a vida do desenvolvedor proporcionando maior rapidez e conforto quanto ao desenvolvimento de aplicações desktop Java. O novo SWING APLICATION FRAMEWORK com o NETBEANS 6.0 surge como alternativa para evitar esta perda de tempo.
Configurando o ambiente
O NetBeans é uma IDE, ou seja, é um ambiente integrado de desenvolvimento que possibilita ao programador criar programas utilizando recursos gráficos.
Para utilizar o Netbeans é necessário já ter instalado o Java JDK na máquina, preferencialmente uma versão igual ou superior a J2SDK 5.0.
Para instalar o JDK basta acessar o seguinte endereço: http://java.sun.com/, escolher a versão desejada e fazer o download.
O Netbeans 6.0 pode ser baixado do endereço: www.netbeans.org, onde pode-se optar por três versões: Basic, Standard e Full. Para a confecção deste artigo está sendo usada a versão Standard, visto que esta já vem com um Banco (Derby) integrado. Porém a ferramenta suporta qualquer banco, bastando ao programador fornecer o driver do banco com o qual se deseja trabalhar.
O Swing Aplication Framework vem como uma ferramenta integrada ao NetBeans 6.0, e é especificado pela JSR 296 (Java Specification Request), prevista para ser integrada a próxima versão do Java (Java 7 Dolphin).
Criando uma aplicação Java com acesso a Banco de Dados
Ao iniciar o Netbeans 6.0 o primeiro passo é escolher o banco com o qual se deseja trabalhar. A ferramenta já vem com um banco integrado (Der">
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Android, a nova plataforma móvel – Parte V
Google lança a plataforma que pretende acabar com a segmentação no mundo móvel
Neto Marin (netomarin@gmail.com) Formado em Análise de Sistemas na PUC-Campinas, trabalha com Java desde 2002 (programador certificado desde 2006) e com Java ME desde 2005, se especializou no desenvolvimento de aplicações móveis. Responsável pela pesquisa e criação de produtos na área de mobilidade. Mantém blog na Mobile and Embedded Community e foi palestrante sobre Java ME no JustJava 2007.
Editando o código
O próprio plugin criou automaticamente a classe HelloAndroid no pacote que foi indicado. É preciso então alterar o código para que seja exibida uma mensagem na tela do “dispositivo”. A listagem 1 mostra como o código dessa classe deve ficar:
1 public class HelloAndroid extends Activity {
2 /** Called when the activity is first created. */
3 @Override
4 public void onCreate(Bundle icicle) {
5 super.onCreate(icicle);
6 TextView tv = new TextView(this);
7 tv.setText("Hello Android @ JavaMagazine!");
8 setContentView(tv);
9 }
10}
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
| |
|