Leia o artigo anterior:
*
No artigo anterior, falei um pouco sobre SCA
e como esse padrão funciona. Hoje vou mostrar um exemplo de
como implementar um composite SCA feito em Java utilizando o Fabric3. Neste exemplo você vai precisar de:
Neste
exemplo, vou criar um serviço composto de utilidades que será composto
pelo serviço de data. O serviço de data nada mais faz do que informar a
data atual no servidor. Sem mais delongas vamos ao código dos serviços.
Cada serviço tem a sua interface de negócio (contrato) e a sua
implementação em Java.
DateService.java
package com.blogspot.diegopacheco.sca.services;<br /><br />/**<br /> * Interface do servico de datas<br /> *<br /> * @author Diego Pacheco<br /> * @version 1.0<br /> * @since 17/05/2009<br /> *<br /> */<br />public interface DateService {<br /> String getDate();<br />}Agora vamos à implementação Java.
package com.blogspot.diegopacheco.sca.services;<br /><br />import java.util.Date;<br /><br />/**<br /> * Implementação do servico de datas.<br /> *<br /> * @author Diego Pacheco<br /> * @version 1.0<br /> * @since 17/05/2009<br /> *<br /> */<br />public class DateServiceImpl implements DateService{<br /><br /> @Override<br /> public String getDate() {<br /> return new Date().toString();<br /> }<br /><br />}Agora vamos à implementação do serviço (Composite) que utiliza outro
serviço. Primeiro vamos ver a sua interface de negócio e depois a sua
implementação de fato.
package com.blogspot.diegopacheco.sca.services;<br /><br />/**<br /> * Interface do servico de Utilidades<br /> *<br /> * @author Diego Pacheco<br /> * @version 1.0<br /> * @since 17/05/2009<br /> *<br /> */<br />public interface UtilitiesService {<br /> String getDate();<br />}Agora vamos ver a sua implementação em Java.
package com.blogspot.diegopacheco.sca.services;<br /><br />import org.oasisopen.sca.annotation.Reference;<br /><br />/**<br /> * Implementação do servico de Utilidades com SCA.<br /> * Essa classe recebe a injecao de referencia de servicos via SCA<br /> * e prove funcionalidades de utilidades simples como saber a data atual.<br /> *<br /> * @author Diego Pacheco<br /> * @version 1.0<br /> * @since 17/05/2009<br /> *<br /> */<br />public class UtilitiesServiceImpl implements UtilitiesService{<br /><br /> private DateService dateService;<br /><br /> public UtilitiesServiceImpl(@Reference(name = "dateService")DateService dateService) {<br /> this.dateService = dateService;<br /> }<br /><br /> @Override<br /> public String getDate() {<br /> return dateService.getDate();<br /> } <br /><br />}Nessa classe aparece o uso da anotação @Reference, que utiliza outro
serviço o Serviço de Datas. A configuração de composição vem abaixo.
<?xml version="1.0" encoding="UTF-8"?><br /><composite xmlns="http://www.osoa.org/xmlns/sca/1.0" name="Scatest" targetnamespace="urn:com.blogspot.diegopacheco:scatest"><br /><br /> <component name="utilities"><br /> <implementation.web/><br /> <reference name="us" target="UtilitiesService"><br /> </component><br /><br /> <component name="UtilitiesService"><br /> <implementation.java class="com.blogspot.diegopacheco.sca.services.UtilitiesServiceImpl"><br /> <reference name="dateService" target="DateService"> <br /> </component><br /><br /> <component name="DateService"><br /> <implementation.java class="com.blogspot.diegopacheco.sca.services.DateServiceImpl"><br /> </component><br /><br /></composite>O Arquivo acima também é conhecido como SCDL, que é o descritor do
composite SCA. Aqui estão a definição da implementação dos componentes
e a composição. Perceba que existe uma composição com implementação Web
que é a descrição do Servlet que irá consumir o composite do serviço de
utilidades.Vamos ao servlet que consome o serviço.
package com.blogspot.diegopacheco.sca.ui.servlet;<br /><br />import java.io.IOException;<br />import java.io.Writer;<br /><br />import javax.servlet.ServletException;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br /><br />import org.oasisopen.sca.annotation.Reference;<br /><br />import com.blogspot.diegopacheco.sca.services.UtilitiesService;<br /><br />/**<br /> * Servlet para teste de SCA<br /> *<br /> * @author Diego Pacheco<br /> * @version 1.0<br /> * @since 17/05/2009<br /> *<br /> */<br />public class UtilitiesServlet extends HttpServlet {<br /> private static final long serialVersionUID = 1L;<br /><br /> @Reference<br /> protected UtilitiesService us;<br /><br /> protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br /> Writer out = response.getWriter();<br /> out.write("<html><head><title>Fabric3 SCA Test</title></head><body>");<br /> out.write("<h2>Utilities Service Result</h2>");<br /> out.write("<br /> A Data eh:" + us.getDate());<br /> out.write("</body></html>");<br /> out.flush();<br /> out.close();<br /> }<br /><br />}Perceba que ele recebe a injeção de um outro serviço que é o
Serviço de utilidades. Agora você precisa gerar o war dessa aplicação,
isso é feito sem complexidade com o maven e fazer o deploy no Fabric3.
Configurando o Fabric3
Basta baixar a versão standalone e instalar o perfil web na pasta
extensions, isso é feito extraindo os arquivos da extensão web na
pasta extensions. Você pode instalar outras extensões como JMS, Hessian
e outras.
Agora você precisa copiar o war do maven para dentro da pasta
deploy do fabric3 server e subir o servidor, que pode ser feito com o
comando: java -jar server.jar.
Agora você pode acessar a aplicação web para testar o uso de SCA
deste exemplo. Para isso, acesse no seu browser:
http://127.0.0.1:8181/utilities/
Se você quiser, pode obter as fontes completas com as configurações
do maven e bem como todos os arquivos para aplicação web no meu
repositório do SVN neste link.
Abraços e até a próxima.







