Quando falamos de SOA, umas das primeiras coisas que nos vêm a cabeça é a palavra reuso. Isso porque um dos objetivos de se aplicar SOA é possibilitar e aplicar reuso de componentes, serviços e processos dentro de uma organização ou projeto. O reuso é importante porque é ele que promove maior agilidade na criação de novos serviços ou processos, uma vez que pode-se contar com um conjunto de "pedaços" previamente construídos e testados. Quanto maior for seu leque de serviços de base (Service Portfolio) maior será as chances de você ter reuso de facto.Entretanto, deve-se atentar que existem vários tipos de reuso. No âmbito de SOA, isso se torna ainda mais importante, pois cada pessoa estará interessada em um tipo de reuso particular. A justificativa para se ter vários tipos de reuso são o reflexo dos tipos de serviços que podem ser construídos. Quando falamos em serviços de SOA, geralmente nos referimos aqueles serviços compostos por outros serviços, que representam aplicações para um dominio particular.
Um exemplo deste serviço seria um serviço de reserva de passagens aéreas. Para fazer uma reserva de passagem, várias etapas precisam ser executadas, entre elas:
- A verificação da disponibilidade de um vôo para uma dada data
- A checagem de crédito de um cartão de credito do cliente
- A reserva de uma passagem propriamente dita
- Porventura, a checagem de um serviço de taxi para o cliente
Os passos citados anteriormente formam o que chamamos de Business Services. Business Services ou serviços de negócio são serviços que fazem coisas pequenas e coesas relacionadas ao negócio de uma organização ou a um domínio particular (ex: Aluguel de Carros). A maior característica dos serviços de negócio é que eles possuem um alto grau de reusabilidade, pois seu nível de interesse numa aplicação particular é baixo. Isso significa que ao projetar serviços de negócio, deve-se primar pelo reuso funcional de funcionalidade, e não, a resolução de um problema particular.
Em experiência de projetos anteriores, vejo que o maior erro de quem projeta serviços é querer "andar com os burros na frente da carroça", ou seja, querer focar apenas na resolução de um problema particular (Ex: uma aplicação de tarifação de mensagens) e esquecer de focar no reuso funcional dos serviços do negócio. A consequência disso é que quando se cria os tais serviços compostos, o reuso dos mesmos se torna mais complicado, tendo em vista que o reuso da função não fora previsto.
Serviços aplicados a um problema ou especificos de uma aplicação devem ser compostos. Eles são chamados de Application Services ou serviços de aplicação, pois eles são serviços criados para aplicá-los em um contexto particular, normalmente, o contexto de uma aplicação. Por isso, sua maior característica é que seu nível de reuso é baixissímo, tendendo a zero. É comum estes tipos de serviços serem conhecidos também como Composite Services, para ressaltar o fato de que eles são baseados na orquestração de vários serviços menores (Business Services).
Por quê esta discussão sobre tipos de serviços e níveis de reuso? A idéia é fomentar ao caro leitor uma reflexão sobre o que é de fato a tecnologia WSRP, foco primário deste post. Em tese, um outro tipo de especial de serviço são os Presentation Services. Estes tipos de serviços são criados para serem reutilizados em engines de portais ou frameworks de agregação de UI. Neste caso, a preocupação com o projetista deste tipo de serviço deve ser muito mais do reuso funcional da interface com o usuário do que com o negócio ou aplicação que está por trás deste tipo de serviço.
Presentation Services são usados para representar serviços de interação com os usuários, e por isso, algumas arquiteturas de referência SOA mencionam este tipo especial de serviço como Interaction Services, como é o caso do IBM SOA Reference Architecture. Na arquitetura de referência da JBoss e BEA/Oracle, eles são conhecidos como Presentation Services mesmo.
Neste post, irei mostrar como criar serviços de apresentação no JBoss Portal, como configura-los de forma que fiquem acessíveis via WSRP (promovendo o reuso da UI) e como configurar o JBoss Portal para consumir serviços remotos de Portlets. Com base nos passos mostrados aqui, você poderá ter uma idéia concreta do que é a tecnologia de WSRP (Web Services for Remote Portlets) como se dá o reuso funcional de serviços de apresentação.
1) Crie um portlet simples usando a API de Portlets
2) Configure esse portlet para ser remoto no JBoss Portal
No JBoss Portal, para que um portlet possa ser acessado remotamente, você deve marca-lo como "remotable". Para fazer isso, basta editar o arquivo jboss-portlet.xml que deve se situar na pasta WEB-INF junto com o arquivo de configuração da sua aplicação de portlet. Edite-o como mostrado abaixo:
3) Faça o deploy do portlet numa instância do JBoss Portal
Para colocar seu portlet no JBoss Portal, basta criar um módulo WAR da sua aplicação e fazer o deploy normalmente na pasta "deploy" como se fosse uma aplicação web qualquer. Para verificar se o portlet foi corretamente implantado, entre na página principal do seu JBoss Portal (http://localhost:8080/portal) e você deverá ver uma página chamada "OneSimplePortal". Clicando nesta página, você será apresentado a seguinte janela:
4) Recupere o WSDL de publicação dos Portlets remotos
Para recuperar o WSDL de publicação dos seus portlets, acesse o seguinte endereço:
http://localhost:8080/portal-wsrp/MarkupService?wsdl
O WSDL apresentado deverá parecer como o seguinte:
5) Inicie outra instância do JBoss Portal
Para fazer um bom teste de outro JBoss Portal consumindo um portlet remoto, você deverá iniciar outro JBoss Portal fazendo um binding em outro endereço IP. Se você usa o Red Hat linux, você pode criar um IP virtual usando a seguinte instrução:
ifconfig eth0:1 192.168.0.1
Para que o comando funcione, você deverá estar como root via "sudo" ou "su". Feito isso, inicie outra instância do JBoss Portal da seguinte forma:
Para que o comando funcione, você deverá estar como root via "sudo" ou "su". Feito isso, inicie outra instância do JBoss Portal da seguinte forma:
sh $JBOSS_HOME/bin/run.sh -c default -b 192.168.0.1
6) Registre o portlet remoto e crie uma instância deste no JBoss Portal
Depois que seu JBoss Portal iniciar, entre na página de administração, notadamente, a página /portal/auth/portal/admin. Feito isso, clique na aba cujo nome é "WSRP". Você será apresentado a interface de configuração de produtores e consumidores de portlets remotos. Nesta janela, digite "wsrpTest" na caixa cujo nome é "Create a consumer named" e clique no botão "Create Consumer".
Na janela que é mostrada, você deverá entrar com o endereço do WSDL recuperado anteriormente. É interessante também configurar o campo "Cache Expiration" que fala de quanto em quanto tempo, o portlet remoto será mantido em cache no Portal consumidor. Isso é interessante para efeitos de desempenho, mas ruim se o portlet muda com frequência. Feito isso, clique no botão "Refresh and Save".
7) Configure seu dashboard para apresentar o portlet remoto
A partir deste ponto, seu portlet remoto ja está registrado na base de dados do JBoss Portal. O que você precisa fazer agora, é criar uma instância deste portlet (como se fosse um portlet local) e configura-lo no dashboard de algum usuário para apresentação. Para fazer isso, volte a interface de administração do JBoss Portal, e clique na aba "Portlet Definitions".
O JBoss Portal irá listar todos os portlets da sua configuração local. Para mostrar os portlets remotos lidos de outro portal, altere o combobox "View portlets provided by the portlet provider named" para apontar para o esquema "wsrpTest" e em seguida, clique no botão "View Portlets". Você deverá ser capaz de visualizar o porltlet "OneSimplePortlet". Clique no link "Create Instance" situado na linha que apresenta os detalhes do portlet.
Na janela que se abre, você deverá dar um nome para a instância que será criada. Digite "OneSimplePortletInstance" e clique no botão "Create Instance". A instância deste portlet será criada e poderá ser usada em qualquer dashboard de qualquer usuário do portal.
Vamos então fazer a parte mais interessante do post: Configurar um portlet remoto no JBoss Portal. Para isso, entre na configuração do seu dashboard, e associe a instância do portlet criado a uma das suas regiões de sua janela. Feito isso, acesse o seu dashboard. Bingo! Vocẽ deverá ver o portlet remoto na sua janela.
Na janela que se abre, você deverá dar um nome para a instância que será criada. Digite "OneSimplePortletInstance" e clique no botão "Create Instance". A instância deste portlet será criada e poderá ser usada em qualquer dashboard de qualquer usuário do portal.
Vamos então fazer a parte mais interessante do post: Configurar um portlet remoto no JBoss Portal. Para isso, entre na configuração do seu dashboard, e associe a instância do portlet criado a uma das suas regiões de sua janela. Feito isso, acesse o seu dashboard. Bingo! Vocẽ deverá ver o portlet remoto na sua janela.
Simples Assim ;-)


