cap.25_tirando o máximo do javaee6 open source (1)
-
Upload
valeriaramosg -
Category
Documents
-
view
213 -
download
0
Transcript of cap.25_tirando o máximo do javaee6 open source (1)
-
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
1/10
Introduo aos Web-Services via JAX-WS
-Um breve histrico sobre Web-ServicesOOs Web-Services so uma tecnologia popular para apoiar iniciativas de B2B, SOA e computaodistribuda em geral, quando pensamos na Internet. Em sua forma mais clssica, baseada em protocolo
SOAP/XML, prover ou consumir servios pode requerer um grande esforo quando implementadosmanualmente, sem o apoio de um framework e gerador especializados.
Para amenizar este problema, desde o incio do sculo que no faltam frameworks e geradores para Web-Services. Produtos como o Apache Axis e inmeros outros produtos comerciais, porm, davam suasprprias sadas e modificaram o problema original para outro: falta de padro e at de compatibilidadeentre as diversas solues, que introduziam extenses proprietrias aos seus produtos.
Felizmente, para problemas como este que o padro Java EE foi criado. A partir da verso 2.0 da APIJAX-WS, introduzida no Java EE 5, a simplicidade se concretizou (tanto quanto possvel). E estasimplicidade, aliada a um padro de mercado, tornaram o JAX-WS a melhor opo do mundo Java parase prover ou consumir servios Web via SOAP!
- SOAP x RESTNo prximo captulo veremos uma soluo alternativa aos Web-Services "SOAP" abordados nestecaptulo, chamada RESTful Web-Services. Esta alternativa pode ser implementada tambm de formapadro, pela API JAX-RS - e tambm conta com frameworks de apoio produtividade. Na verdade, porser de fato mais simples de se utilizar, dispensando a camada SOAP sobre o protocolo HTTP, o XML eoutras exigncias de Web-Services tradicionais, os RESTful Web-Services j so inclusive mais popularesna Internet. H quem diga inclusive que eles iro sepultar os Web-Services, mas h tambm quemaponte vantagens nicas do padro JAX-WS.
Possivelmente, neste momento e por algum tempo, o desenvolvedor ter que dominar ambos: muitosservios pblicos so expostos em somente uma destas modalidades e ainda h nicho significativo paraambos.
Por este motivo, e como este assunto vasto, deixaremos esta polmica fora de nosso escopo,trabalhando com os dois padres. Do ponto de vista estritamente tcnico, o prprio desenvolvedorpoder tirar suas prprias concluses aps as prticas deste e do prximo captulo.
Provendo um Servio
-Entendendo a demanda de negcio do "provedor"Suponhamos que nosso sistema seja instalado em uma filial multinacional e que a matriz ou outras filiaisqueiram, diretamente de seus sistemas, recuperar dados de um funcionrio. Eles precisam de nome,sexo e data de nascimento, mas possuem o CPF em seu sistema (na falta de um campo mais "neutro"como uma matrcula global).
Do ponto de vista tecnolgico, h tambm a preferncia por expor este servio na forma de um Web-Service tradicional, por questes culturais - os analistas j trabalham h alguns anos com isso e queremmanter o padro.
Vamos ento implementar este servio no padro JAX-WS 2.0 e, o que ainda mais interessante, fora deum continer EJB! O padro JAX-WS opera de forma ainda mais transparente com o uso de um mtodode EJB, mas possvel utiliz-lo no Tomcat, por exemplo, atravs de utilitrios de gerao que veremos.
Captulo
25Provendo e ConsumindoWeb Services com JAX WS
-
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
2/10
Importante: Podemos utilizar EJB 3.x no jCompany, sem problemas, utilizando o jBoss AS, porexemplo, mas como todo o tutorial do livro se baseou no Tomcat, manteremos esta linha.
-Criando a classe de servioO primeiro passo para a criao de um WS*
Vamos implementar a nossa classe de servio na camada de controle, uma vez que no utilizaremosnenhuma lgica de negcios e acesso a banco de dados. Tomamos a iniciativa de simplificar o exemplopara que o foco fique exclusivamente na criao do WS. As classes podem ser vistas na
a definio de uma classe que ser exposta como serviona Web. No nosso exemplo, teremos uma classe "BuscaFuncionarioWS" em que seu mtodo expostorecebe uma String "CPF" e retorna uma entidade "Funcionario".
Figura G25.1 enaFigura G25.2.
Importante: No se esquea que os objetos a serem transmitidos pelo WS devem ser serializveis!
Figura G25.1. Classe "Funcionario".
Figura G25.2. Classe de servio "BuscaFuncionarioWS".
#1. Anotao "@WebService" indica que a classe "BuscaFuncionarioWS" um servio web (WS).#2. Anotao "@WebMethod" indica que esse mtodo ser exposto no WS.#3. Anotao "@WebParam" serve para informar o nome do parmetro do WS.#4. Nesse ponto, pedimos a nossa fachada para recuperar o funcionrio baseado no nosso CPF.
No vamos entrar em detalhe na implementao da camada de modelo para no fugir donosso foco principal.
*Nesta documentao iremos utilizar a sigla WS para indicar Web-Service.
-
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
3/10
Captulo G22
-Configurando dependncias no projeto para gerao dos artefatos de suporte a Web-Services JAX-WS (somente Tomcat)
1. Adicione as dependncias do JAX-WS no arquivo "pom.xml" do projeto onde ser implementado oWS.
Figura G25.3. Configurando o arquivo "pom.xml" com as dependncias do JAX-WS.
2. Adicione o plugin para gerao dos Stubs em tempo de empacotamento. A documentao detalhadado plugin se encontra em:https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/. Vamosadicionar configuraes de profile no arquivo "pom.xml".
Figura G25.4. Adicionando profile do maven no arquivo "pom.xml".
https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/ -
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
4/10
#1. Esta URL indica para o arquivo "pom.xml" o uso da classe de servio do WS.-Configurando o JAX-WS.
Para configurar o JAX-WS, vamos seguir os passos abaixo:
1. Crie o arquivo "sun-jaxws.xml" dentro da pasta WEB-INF do projeto, informando os WEB-SERVICEScriados.
Figura G25.5. Arquivo "sun-jaxws.xml" com as configuraes do WS criado.
2. Mapeie a aplicao para responder ao servio. Essa configurao dever ser feita no arquivo"web.xml".
Figura G25.6. Mapeando o servio no arquivo web.xml.
-Ativando a execuo de deploy-completo e testando.OjCompanydeve ser configurado com uma tarefa de deploy especfica para WS, para isso devemosimplantar a demanda abaixo:
1. Acione o menu Run -> External Tools -> External Tools Configurations....2. Selecione qual tipo de Deploy voc vai utilizar e adicione mais o parmetro "-Dwebservice=S" no
campo "Arguments" e libere a aplicao.
-
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
5/10
Captulo G22
Figura G25.7. Adicionando parmetro do WS na Liberao para Tomcat Completa Desenvolvimento.
3. Verifique a disponibilidade do servio pelo browser atravs daURL:http://localhost:8080/rhtutorial/busca.O servio pode ser visto naFigura G25.8.
Figura G25.8. Tela identificando que o servio est ativo.
Consumindo um Servio
-Entendendo o lado do "consumidor"Como no traz nenhuma restrio proprietria, o servio que criamos no passo anterior est disponvelpara ser consumido por qualquer "cliente" de WS, que pode utilizar qualquer tecnologia para acess-lo.
Mas como nossa tecnologia Java, precisamos fechar o nosso ciclo para tambm entender quais so ospadres JAX-WS para o lado "consumidor".
Como teste, e para evitar a proliferao de aplicaes, vamos definir nossa classe consumidora nomesmo projeto "rhtutorial". Fica sob responsabilidade do desenvolvedor test-la em outra aplicao, sedesejado.
-Configurando dependncias no projeto para gerao dos artefatos de suporte ao JAX-WS (somenteTomcat)Para estabelecer o servio de consumo, ns devemos seguir a demanda abaixo para configurar o JAX-WScomo uma dependncia da classe provedora*
1. Adicione o plugin para gerao dos Stubs em tempo de empacotamento. A documentao detalhadado plugin se encontra em:
.
https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/. Vamosadicionar configuraes de profile no arquivo "pom.xml"
*Por motivos didticos, neste livro a classe provedora e consumidora pertencem ao mesmo projeto. No mundo real isso muito
dificilmente ir acontecer, uma vez que o objetivo de uso dos WS a transmisso de dados entre aplicaes. No contexto de aplicaesdiferentes para o uso do WS a classe consumidora precisaria tambm das dependncias do jCompany Service em seu arquivo"pom.xml".
http://localhost:8080/rhtutorial/buscahttp://localhost:8080/rhtutorial/buscahttp://localhost:8080/rhtutorial/buscahttps://jax-ws-commons.dev.java.net/jaxws-maven-plugin/https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/http://localhost:8080/rhtutorial/busca -
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
6/10
2. Adicione ao arquivo "pom.xml" os parmetros de profile e dependncias mostrados naFigura G25.9.
Figura G25.9. Adicionando profile do maven no arquivo "pom.xml".
#1. Este trecho no tem muitas novidades quanto ao descrito anteriormente, a diferena a tag"goals" que neste caso indica que os artefatos importados pertencem classe provedora.
3. Execute o comando maven "install" com o parmetro "-Dwebservice=S" para gerar os artefatos. Sepreferir execute o script de deploy que configuramos na Figura G25.7. Aps rodar o script, serogerados os artefatos para consumo com os mesmos pacotes da aplicao do servio. Veja FiguraG25.10.
-
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
7/10
Captulo G22
Figura G25.10. Artefatos gerados no consumidor do WS.
Importante: Lembrando que para gerao dos artefatos no consumidor, ao executar o script de deploy,a aplicao provedora do servio deve estar executando.
-Criando a classe de consumoVamos criar um formulrio para entrada dos dados, no nosso caso o CPF e uma classe de controle querecebe esse parmetro da tela e retorna o funcionrio. Para o exemplo vamos utilizar o padro "controlesimples", que um padro que dispensa diversos itens de arquitetura da camada viso e controle.
1. Crie a classe de controle conforme Figura G25.11.
Figura G25.11. Classe de controle para consumir o servio.
2. Crie o arquivo "buscafuncionarioCtl.xhtml" dentro da pasta ".../WEB-INF/fcls/buscafuncionario/".Esse arquivo ser utilizado para entrada e exibio dos dados.
-
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
8/10
Figura G25.12. Arquivo xhtml para entrada e exibio dos dados da classe de controle para consumir o servio.
#1. Tag que cria o campo para o usurio informar o "CPF".#2. Lgica para mostrar o retorno da pesquisa. Se o funcionrio for retornado, seus dados so
mostrados, caso contrrio a mensagem "Funcionrio no encontrado!" exibida.
3. Crie o arquivo "package-info.java" da classe de consumo informando o caminho para o XHTML deconfigurao da tela. AFigura G25.1 mostra o arquivo pronto.
Figura G25.13. Arquivo "package-info.java" com configuraes para utilizao de um caso de uso "ControleSimples".
4. Crie um menu para acessar o nossa classe provedora. Para isso adicione o cdigo da Figura G25.14no arquivo "geralMenu.xhtml" da aplicao.
Figura G25.14. Adicionando um item de menu.
-Testando o novo servio de consumoNeste ponto, nossa aplicao estar pronta para fornecer e consumir o servio estabelecidoanteriormente. D um "Liberao Para Tomcat Completa Desenvolvimento", acione o tomcat e teste oservio gerado pelo WS.
-
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
9/10
Captulo G22
Figura G25.15. Tela com o acesso ao servio de busca de funcionrio por CPF.
-
7/22/2019 cap.25_tirando o mximo do javaee6 open source (1)
10/10
Sumrio
Neste captulo discutimos brevemente sobre Web-Services tradicionais, baseados em SOAP sob oprotocolo HTTP e uso de XML/WSDL.
Criamos um primeiro servio para recuperar os dados principais de um funcionrio a partir de seu CPF.Em seguida, implementamos um exemplo do lado "consumidor", utilizando em ambos os casos o padroJAX-WS sobre o Tomcat.
No prximo captulo, iremos explorar a alternativa RESTful Web-Services, baseada no padro JAX-RS,para viabilizar uma comparao entre os dois modelos, alm de conhecer generalidades do jCompanynesta rea, atravs do jCompany Service.