Produto & UXARTIGO

SCA com Java – Parte 02

Leia o artigo anterior:

SCA com Java – Parte 01

*

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.

DateServiceImpl.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.

UtilitiesService.java

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.

UtilitiesServiceImpl

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.

web.composite

<?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.

é Técnico em Processamento de Dados e graduando em Ciências da Computação(7º sem.) na Ulbra. Já trabalhou com desenvolvimento de software em VB, ASP, .NET e PHP. Atualmente é Arquiteto de Software criando soluções corporativas em Java. Certificado pela SUN com SCJP 5 e SCWD 5. Mantém o blog (diego-pacheco.blogspot.com).

Ver perfil