Pages



Hoje um dos paradigmas mais utilizados para integração de sistemas é a arquitetura orientada a serviços SOA, e  para entender e aplicar esse novo conceito é necessário o conhecimento de uma série de ferramentas e outros paradigmas, entre eles BPM( Bussiness Process Modeling), Linguagem BPEL, Documentos XML como o WSDL (Web Service Description Language), XSDs.

No meu trabalho final de curso, estou desenvolvendo a implementação de SOA em buscadores de Imagem, e uma boa parte do trabalho já está implementado. Quem tiver interesse de pesquisar e conhecer mais sobre o assunto pode entrar em contato direto comigo. Abaixo estou colocando o link para minha revisão bibliográfica, onde tem uma descrição detalhada de todas linguagens e conceitos que citei acima, e nos próximos posts pretendo falar um pouco mais desse assunto.

Download
A Arquitetura Orientada à Serviços (SOA), é um dos assuntos mais discutidos entre os programadores, e tem seus diversos benefícios, entre eles a interoperabilidade, que é a capacidade de rodar seus serviços em qualquer plataforma ou linguagem.

Hoje vou mostrar como montar um serviço (Web Service) em Asp.Net, e cosumir o mesmo através da Linguagem Java.

Web Service Asp.Net

Primeiro criamos um projeto no Visual Studio, no meu caso utilizo o VS2010, vá em File->New->Project , na janela Wizard que abrir procure pela aba WEB e selecione ASP.NET Web Service Application:

Após a tela o wizard do Visual Studio vai gerar um serviço HelloWorld, no meu caso alterei para um Serviço que irá devolver um Objeto Livro, implementei a classe Livro dentro da própria classe do Web Service, como segue o código abaixo:

namespace MeuServico
{
    /// 
    /// Summary description for Service1
    /// 
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        public class Livro
        {
            public int Id { get; set; }
            public string Nome { get; set; }
            public string Autor { get; set; }
            public string AnoDePublicacao { get; set; }
            public string Editora { get; set; }
            public int NumeroDePaginas { get; set; }

            public bool ColocarNaEstante(Livro livro)
            {
                try
                {
                    return true;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }
       
        
        [WebMethod]
        public Livro getLivro(int Id)
        {
            Livro livro = new Livro()
            {
                Id = 1,
                Nome = "Quimica Geral",
                Autor = "Cat Stevens",
                AnoDePublicacao = "2006",
                Editora = "Novembro",
                NumeroDePaginas = 343
            };

            return livro;
        }
    }
}

Feito isso é só rodar a aplicação que vamos ter nosso serviço rodando.

Cliente Java


Já temos o serviço rodando no Visual Studio agora vamos implementar um cliente Java para consumir esse serviço, para isso abra o NetBeans IDE, e contrua um projeto Java Application com o Nome ClientJava, na aba Projects clique com o botão direito, vá em New->Others e procure por Web Service Client, uma janela similar a esta se abrirá:
Pegue o endereço de EndPoint do serviço Asp.Net e coloque no campo WSDL URL, no meu caso esse endereço é http://localhost:6566/Service1.asmx (O endereço que aparece no Browser quando você roda o serviço no Visual Studio), selecione o package no qual será implementado o client e então clique em Finish, na classe Main do projeto, clique com o botão direito na definição da função main e procuro por  Web Service Client Resources-> Call Web Service Operation, a tela abaixo se abrirá:
Selecione o método getLivro e clique em OKo código gerado será semelhante a este:

Agora rode o projeto Java e seu serviço am Asp.Net, já está sendo consumido em Java. Essa interoperabilidade é incrivel não é?.

Olá Pessoal, hoje vou falar um pouco sobre Programação Orientada a Teste ou TDD, essa é uma das técnicas que vem sendo muito utilizadas dentro dos ambientes de desenvolvimento e que também está dentro da filosofia agile e XP(Extreme Programming) e sua utilização vem crescendo cada vez mais. 
Essa filosofia de desenvolvimento traz muitos benefícios, entre eles estão o desenvolvimento de um produto final melhor, uma boa organização de código, e um dos pontos mais importantes é que quando houver uma grande mudança no sistema você pode rastrear quais são os efeitos destas mudanças por meio dos teste feitos anteriormente.

Para dar uma introdução de como funciona o TD vou dar um exemplo de como desenvolver um Placar de Futebol.

Primeiro Cliclo

O TDD é desenvolvido em ciclos. Em primeiro lugar desenvolvemos o a Interface do placar. Essa interface pode ser vista como o projeto do Placar, onde vão ser definidas as funções e variáveis.
Para isso vamos criar um projeto Class Library no VS2010, com o nome de Placar, vamos criar uma Interface IPlacar  uma classe Placar que vai implementar a interface criada, o projeto e os códigos devem ficar semelhantes as figuras abaixo:

namespace Placar
{
    public interface IPlacar
    {
        int jogador1 { get; }
        int jogador2 { get; }
        string getPlacarAtual();
        void addJogador1();
        void addJogador2();
        void clearPlacar();
    }
}
namespace Placar
{
    class Placar: IPlacar
    {
        public int jogador1 { get; set; }
        public int jogador2 { get; set; }

        public string getPlacarAtual()
        {
            throw new NotImplementedException();
        }

        public void addJogador1()
        {
            throw new NotImplementedException();
        }

        public void addJogador2()
        {
            throw new NotImplementedException();
        }

        public void clearPlacar()
        {
            throw new NotImplementedException();
        }
    }
}

Após montado o projeto básico, vamos começar a montar nosso primeiro teste, para isso vamos criar um novo projeto Class Library chamado Placar.Test, que é onde vamos testar nosso placar, para realizar os teste eu utilizo o NUnit que pode ser baichado aqui. para que o Nunit possa achar nossos teste adicione na referência do projeto a DLL do NUnit (nunit.framework) que está na pasta da instalação do NUnit. Criamos a classe de teste, com os primeiros teste:

namespace Placar.Teste
{
    [TestFixture]
    public class PlacarTest
    {
        [Test]
        public void PlacarZerado()
        {
            IPlacar placar = new Placar();

            Assert.AreEqual("0", placar.jogador1);
            Assert.AreEqual("0", placar.jogador2);
            Assert.AreEqual("0x0", placar.getPlacarAtual());
        }
    }
}
Com isso pronto podemos começar a testar. Abra o NUnit na aba file click em Open Project e procure pela DLL do Placar.Test, click em Run e terá o resultado do teste:
O primeiro teste falhou, pois ainda não foi implementada a função getPlacarAtual e as variaveis não estão com o valor "0".

Segundo Cliclo

O segundo ciclo consiste em implementar as falhas do primeiro teste e rodar o teste novamente, após feita a implementação temos o código abaixo:

namespace Placar
{
    public class Placar: IPlacar
    {
       public int jogador1 { get; set; }
       public int jogador2 { get; set; }
   
        public Placar()
        {
            jogador1 = 0;
            jogador2 = 0;
        }

        public string getPlacarAtual()
        {
            return jogador1.ToString() + "x" + jogador2.ToString();
        }

        public void addJogador1()
        {
            throw new NotImplementedException();
        }

        public void addJogador2()
        {
            throw new NotImplementedException();
        }

        public void clearPlacar()
        {
            throw new NotImplementedException();
        }
    }
}

Fazendo o teste novamente vemos que occorre tudo como o esperado:

Terceiro Ciclo

Agora montamos o segundo deste, onde adicionamos pontos a jogador1 e ao jogador2 também zeramos o placar:

namespace Placar.Teste
{
    [TestFixture]
    public class PlacarTest
    {
        [Test]
        public void PlacarZerado()
        {
            IPlacar placar = new Placar();

            Assert.AreEqual(0, placar.jogador1);
            Assert.AreEqual(0, placar.jogador2);
            Assert.AreEqual("0x0", placar.getPlacarAtual());
        }

        [Test]
        public void PontuaJogadores()
        {
            IPlacar placar = new Placar();

            placar.addJogador1();
            placar.addJogador2();

            Assert.AreEqual("1x1", placar.getPlacarAtual());

            placar.clearPlacar();

            Assert.AreEqual("0x0", placar.getPlacarAtual());
        }
    }
}

Executando o teste temos o resultado:

Da mesma forma fazemos a implementação do Placar e aplicamos o teste novamente:

namespace Placar
{
    public class Placar: IPlacar
    {
       public int jogador1 { get; set; }
       public int jogador2 { get; set; }
   
        public Placar()
        {
            jogador1 = 0;
            jogador2 = 0;
        }

        public string getPlacarAtual()
        {
            return jogador1.ToString() + "x" + jogador2.ToString();
        }

        public void addJogador1()
        {
            jogador1++;
        }

        public void addJogador2()
        {
            jogador2++;
        }

        public void clearPlacar()
        {
            jogador1 = 0;
            jogador2 = 0;
        }
    }
}


Esse post foi apenas uma introdução, de como fazer um desenvolvimento orientado a testes. No começo pode ser um pouco trabalhoso, mas com o andamento do desenvolvimento esse processo pode até facilitar, pois tudo que foi desenvolvido até um dado ponto foi bem testado, e a cada mudança que você faz no programa os testes anteriores checam se houve alguma alteração no comportamento geral do sistema.
Por hoje é só, no próximo post vou aprofundar um pouco mais no NUnit e suas funções.Abraço.
Olá Pessoal, este é o primeiro post no Blog, e finalmente depois de algumas tentativas de encontrar um nome, ele simplesmente apareceu, estava no adesivo da janela do quarto, nunca tinha reparado, mas muito legal, ele tem um desenho meio psicodélico, e no centro o escrito “Groover”, depois posto a foto aqui, e para começar um blog nada melhor que um bom nome “Programming On Groove”.

Bem, o objetivo é mostrar um pouco do mundo da programação, de maneira objetiva e descontraída, e também de compartilhar minha caminhada de aprendizagem. Espero que gostem, e comentem. Um abraço a todos e Aproveitem.