Java Management Extensions (JMX) é uma tecnologia Java que permite monitorar e gerenciar aplicações Java. É muito comum utilizar este recurso em soluções corporativas escritas em Java. Neste post vou mostrar como expor um bean do Spring como um MBean do JMX.
Vamos criar um job no Quartz que de tempos em tempos chama um bean do Spring, com os recursos de JMX do Spring vamos parar este serviço no Quartz de fora da aplicação. Esta aplicação vai estar rodando no ORACLE Weblogic 10.3 e o deploy sera realizado através do maven 2.
Um pouco mais sobre JMX
JMX é baseado em uma arquitetura de 3 camadas. As camadas são as seguintes:
JMX é suportado por todos os principais container do mercado. Existe um console genérico chamado de JConsole que vem na pasta bin do JDK do java, mais adiante neste post vou mostrar como utilizar o JConsole com o Weblogic 10.3.
Quartz Framework
É uma solução open source de agendamento e execução de tarefas. Estas tarefas são chamadas de jobs no Quartz. A solução prove a possibilidade de realizar agendamentos complexos usando expressões chamadas de Cron Expressions que são semelhantes as expressões do sistema operacional Linux.
O Quartz pode ser usando em cluster e em transações usando distribuídas com JTA. A lista completa das funcionalidades você pode conferir aqui. O Spring também prove facilidades na utilização do Quartz.
Agora vamos ao projeto que criei para mostrar como podemos expor os serviços de uma aplicação com o Spring estes serviços vão ser consumidos pelo Quartz em um job via JConsole vamos poder parar e iniciar esta aplicação. Vamos lá então.
DateService
Bom essa é a interface do serviço. Eu sempre uso esse serviço pela simplicidade e facilidade para o entendimento da solução. Na prática poderia ser qualquer contrato de serviço :).
DateServiceImpl
A implementação do serviço é simples, só retorna um data. Agora vamos ver mais algumas coisas da aplicação como esta outra interface que segue a baixo.
ControlBean
Esta interface defini os métodos para que um serviço exposto via JMX possa ser parado e iniciado novamente. Vamos ver como seria esta implementação.
ControledBridgeDateService
O Serviço a cima implementa o pattern Bridge do GOF para a interface DateService. Este serviço também implementa ControlBean, logo ele pode ser parado. Este controle é feito por uma variável booleana que se chama 'doit' que por padrão é true.
Quando alguem invocar o método stop esta variável fica como o valor false e ao invocarem o método start esta variável volta ao valor true. A variável 'doit' é levada em considerações no método getDate() que delega para o método getDate da implementação de DateService caso contrário é levantada uma exception indicando que a aplicação foi parada e não poder ser executada.
Vamos a configuração do Spring, vamos expor estes serviços como MBeans do JMX, confira o xml a baixo:
A exposição é realizada pelo MBeanExporter do Spring.A estratégia que estou usando vai expor todos os métodos públicos dos beans que forem informados ao MBeanExporter. Existem outras estratégias e outras formas de expor seus serviços como MBeans para isto confira na documentação oficial do spring.
Agora vamos a parte do Quartz, aqui existe uma pegadinha. Por que o Spring instância os jobs do quartz de forma diferente que ele instância seus beans. Logo a injeção de dependências não vai funcionar para resolver este problema criei uma classe utilitária que se chama ApplicationContextHolder.
Esta classe helper nada mais faz do que implementar ApplicationContextAware e expor o ApplicationContext do Spring através de um método getter.
Esta classe é passado ao Quartz via um Map e você pode recupera-la de dentro do seu Job é isto que vou mostrar agora na classe a baixo.
DateJob
Este job do quartz usa o serviço de datas através da interface DateService. Ele obtém este bean com o bean utilitário que falei acima no método getDateService(). No final das contas o service que esta sendo utilziado por este job não é o DateServiceImpl que foca apenas na implementação do contrato e na lógica de negócio. O bean utilizado aqui é o ControledBridgeDateService que além de chamar o serviço de datas real implementa o contrato para parar e iniciar este serviço.
Sempre é uma boa prática de design seprar este tipo de código do código de negócio eu fiz isto usando a classe ControledBridgeDateService através do pattern bridge do GOF.
Agora vamos ver a configuração do Spring, confira o XML a baixo:
JobDetailBean é uma classe utilitária do Spring para criarmos jobs do Quartz. Você indica o job a ser criado pela propriedade jobClass. Depois é configurado um CronTriggerBean que agenda a sexecução de um JobDetailBean com um cron expression. Por fim configuramos um SchedulerFactoryBean informado o CronTrigger configurado anteriormente e através do atributo schedulerContextAsMap passamos detalhes para o contexto do job do quartz, neste caso apénas é passado o applicationContextHolder que é a classe utiliária para obter o contexto do Spring de dentro de job do quartz.
OK. Agora é só fazer o deploy da aplicação no Weblogic. Para isso usei maven conforme a configuração do POM que segue a baixo.
Eu criei dois projeto do maven são eles:
Agora basta rodar: mvn clean install nestes dois projetos e pronto. Apénas coisa para que o Weblogic ja esteja no ar quando você rodar o clean install do projeto spring-jmx-weblogic-ear.
Agora abra o JConsole. Você faza isso executando o jconsole.exe que fica na pasta bin da instalação do seu JDK. Conecte no processo local chamado de weblogic.Server. Va na sessão dos MBeans e procure por bean, lá você vai ver os beans expotos pelo Spring.
Você pode testar indo em ControledBridgeDateService e operations, que na prática são os métodos que foram expostos via Spring. Primeiro clique em stop e verifique se a aplicação mudou a mensagem no log do Weblogic e depois clique em start a mensagem deve mudar de novo.
Spring sempre prove facilidades para integração do seu modelo de desenvolvimento de serviços com as tecnologias java como JMX e soluções abertas como o Quartz, você pode usar essa solução para diversos aspectos de sua aplicação em termos de monitoramento e gerenciamento.
Se você quiser pode obter os fontes completos da aplicação no meu repositório do Subversion nos seguintes endereços:
Até a próxima, abraços.
|
2
|
JMX e Quartz com Spring no ORACLE Weblogic 10.3 |
|
2
|
Analise de Impacto no Enterprise Architect |
analiseDeImpacto, EA, Enterprise Architect, projeto, requisitos, UML, UseCase | 12/07/2009
Quando estamos falando de mudanças em um projeto de desenvolvimento de software existe uma grande necessidade de saber no que essa mudança irá impactar. Esse impacto pode ser encarados de várias formas.
Você precisa saber o impacto da mudança em termos de requisitos, design e até código. É importante ter esse conhecimento para poder dimensionar a mudança e ver a forma certa de lidar com a mesma. Todas essas questões tem impacto direto na gestão do projeto, por que dependendo da mudança vai demandar mais recursos, tempo e complexidade.
Uma ferramenta de requisitos deve tratar com essas questões. Muitas ferramentas analisam o impacto somente a nível de requisitos, de facto isso não é o suficiente por que na pratica vai demandar toda uma analise manual de um projetista ou analista.
Neste post vou mostrar como podemos fazer analise de impacto em dois níveis com a ferramenta Enterprise Architect ou famoso EA. No primeiro nível vou mostrar o impacto entre Requisitos funcionais e casos de uso e em segundo nível mostrarei o impacto dos casos de uso para o código fonte.
Análise de Impacto sempre tem um custo
Esta é uma verdade universal. Você sempre terá um custo com a analise de impacto, ou seja, ela nunca vem de graça. Para poder consultar a ferramenta(EA) e saber o impacto você tem que manter o diagrama de impacto atualizado, isso tem um custo e é mais uma coisa a se preocupar.
Se você não realizar essa tarefa não hora da mudança terá o custo de atualizar a ferramenta, isso pode ser tão custoso que não se pague fazer essa tarefa e você pode acabar tendo que fazer a analise na mão.
Não fazer analise de impacto é um risco, você pode se surpreender com a mudança. Em projetos pequenos não é necessário o uso desta prática, mas em projeto de médio e grande porte onde a complexidade começa a aumentar essa prática mostra ter muito valor.
Exemplo prático no EA
Irei mostrar isso de forma muito simples. Não liguem para a veracidade dos dados. O objetivo aqui é mostrar na prática como usar este recurso, então vamos a estrutura do projeto. No projeto de exemplo EA-Matriz-Impacto, existem as seguintes visões top level:
Requisitos é aonde estão os requisitos funcionais e bem com os casos de uso, lembrando que casos de uso são requisitos, mais conhecidos como requisitos do usuário.
Código é aonde estão os fontes de aplicação, não tive o trabalho de definir métodos e atributos nas classes, você podem perceber que eu coloquei em uma estrutura que é padrão do maven 2. Isso foi de propósito.
Neste exemplo apesar da estrutura do maven, poderia ser construído com qualquer linguagem como por exemplo PHP, .NET, Python essas são linguagens que assim como Java o EA faz engenharia reversa e pode sincronizar os fontes com os seus diagramas.
Matriz Impacto é aonde está a matriz que liga os requisitos aos fontes. Como esse é um exemplo usei um único diagrama para isto. Somente em projetos pequenos isso é viável. Em projetos maiores você terá que ter diversos diagramas para mapear a realização dos seus requisitos para o código.
Os Requisitos
Requisitos do sistema de Exemplo
A Codificação
Ciente destes requisitos imagine que o desenvolvedor codifica a solução para atender estes requisitos, não cheguei a especificar os casos de uso, por que o foco aqui é na matriz de impacto e não na qualidade dos requisitos. Mas essa é uma questão que sempre deve estar em sua mente, é essencial a qualidade de bons requisitos.
Dado esses requisitos vamos a implementação, para isso confira o seguinte diagrama de classes que segue a baixo:
Diagrama de classes do exemplo
Mapeando a realização de requisitos
Agora você precisa dizer ao EA como as classes da solução servem os requisitos da mesma. Para isso vamos criar um diagrama "custom" na aba "extended". Com esse diagrama vamos mapear os requisitos para os fontes.
Criar o diagrama é simples, manter nem sempre. Para criar o diagrama você tem que arrastar os requisitos funcionais e os casos de uso da visão do projeto para o diagrama, faça o mesmo com as classes e faça as ligações.
O Diagrama pode parecer confuso, por que quando você puxa uma classe o EA também traz as suas dependências, você pode esconder isso clicando com o botão direito do mouse sobre a dependência e depois em "Set Visibility" e depois em "Hide Connector".
Confira como fica o diagrama.
Diagrama que mapeia Requisitos com Fontes
Criando a matriz de impacto
Para criar a matriz de impacto clique no menu"View" e depois em "Relationship Matrix" e agora ira abrir a visão de impacto do EA, vamos criar duas visões desta matriz, isso é possível graças a capacidade de lidar com profiles do EA.
Vamos primeiro mostrar o impacto dos Requisitos funcionais com os casos de uso. Para isso selecione os seguintes valores, primeiro source de depois target.
* Source:
* Target:
Isso deve produzir o seguinte resultado.
Matriz de Impacto de RF com UC
* Source:
* Target:
Isso deve produzir o seguinte resultado.
Matriz de Impacto de UC com Fontes
Agora você pode analisar o impacto sempre que necessário, esta é uma pratica importante que está totalmente ligada a gestão de mudanças. Apesar de paga o EA é uma excelente solução de modelagem e quebra o galho legal com os requisitos.
Se você quiser pode baixar este projeto de exemplos que criei aqui.
Abraços e até a próxima.
|
3
|
Você desenvolve Requisitos, certo? |
elicitação, praticas, projeto, requisitos | 05/07/2009
Os requisitos não vieram de hoje, a sua necessidade já foi confirmada a muito tempo, mas ainda é comum ver empresas que falam aos 4 ventos que trabalham com requisitos e na verdade não sabem diferenciar um requisito de uma Constraint.
Neste post vou falar mais de requisitos, dizendo o que são e o que não são requisitos, bem como qual a relação deles com as Constraints, pretendo falar um pouco mais dos tipos de requisitos e quanto tempo devemos gastar com requisitos.
O Que é um Requisito?
Um requisito tem que atender a duas premissas básicas, se você não atender a essas duas premissas, logo você não tem um requisito. Vamos então:
- Condição ou capacidade necessitada pelo usuário para realizar algum objetivo ou resolver algum problema. E o mais importante Desejado.
- O usuário tem que poder perceber, ou seja, Observado Externamente.
Os Requisitos não estão na sua cara...
Levantar requisitos não significa ouvir o usuário, não é simples assim. Na verdade você tem que descobrir o que o usuário deseja de verdade e isso não é fácil. Existem algumas técnicas para você fazer isso, pretendo fazer isso em outros posts.
Muitas vezes o cliente não tem tempo para fornecer as informações necessárias ao analista de Requisitos, isso acontece mais ainda quando a sua empresa é de TI e o seu cliente não é de TI, em empresas onde existe um equipe de TI interna é mais fácil obter informações dos usuário.
Não é fácil levantar requisitos e um requisito mal levantando gera muita dor de cabeça e custos adicionais no futuro, neste caso se você trabalha em um equipe de TI interna isso gera mais stress, agora se você esta em um empresa TI e o seu cliente não é de TI e você está em escopo fechado em termos de custo não é um problema para sua empresa, mas para o cliente sim, isso ocorrendo com muita freqüência pode levar ao fracasso do projeto.
E não adianta ficar só reclamando do cliente, ele pode não colaborar 100% e ajudar na elicitação, logo seus requisitos seriam bem vagos, mas seu software tera que ser especifico e detalhado, logo é bom gastar o tempo suficiente nesta tarefa mesmo que isso signifique educar o cliente.
O Analista não tem que ser Técnico...
O Caramba!!! É comum ver por ai o pensamento de que só quem é desenvolvedor tem que ser técnico, como se o o gerente e analistas não precisam ser técnicos. O Gerente tem que ser técnico em gestão e bem como o analista de Requisitos tem que ser técnico em Requisitos.
Ser técnico nestes dois casos significa conhecer práticas, técnicas, métodos, padrões, etc... Isso tudo não vem só com a prática, você precisa de estudo, só estudando que você obtém essas coisas, mas só com a prática que você aprende a usar da forma correta.
Requisitos não são a Solução
Você não usa requisitos para definir a solução, ou seja, vai ser em Java, vou usar MVC básico e tudo vai rodar no JBoss 5. Se existem essas questões que falei agora elas são tratadas como restrições e não requisitos, logo elas devem ser mapeadas como Constraints. Para poder lidar bem com essas questões junto com os requisitos, falando de gestão de requisitos é necessário uma boa ferramenta de requisitos.
Requisitos como Centro de Tudo
Métodos de desenvolvimento de software como RUP e OpenUP são focados em requisitos através de Casos de uso. Utilizam casos de uso por que casos de uso são bons para representar a perspectiva do usuário e favorecem um contexto muito bom. O TOGAF que é um método de Arquitetura Corporativa também é focado em requisitos, tanto para o TOGAF como para o RUP/OpenUP a Arquitetura é construída a partir do Requisitos.
Arquitetura de Software que é construída sem requisitos não é arquitetura, em projetos pequenos essa abordagem errante pode funcionar em alguns casos, mas em outros casos de projetos mais complexos pode gerar o muitos problemas e até mesmo o fracasso do projeto.
Telas são importantes, bem como boas amigas aliada as técnicas de prototipação para ajudar a validar e considerar informações com o usuário, mas telas e botões são solução e não são requisitos.
Requisitos nunca são perfeitos e não existe um tempo certo pre determinado para ser gasto com isso, se você trabalha de forma iterativa incremental essa questão não é um problema, agora em um projeto de escopo fechado com tempo e recursos fechados isso pode ser um problema.
Tipos de Requisitos
Existem os dois tipos clássicos de requisitos que são os Funcionais e os Não-Funcionais. Os Requisitos funcionais são específicos dos produto, ou seja, se referem a o que o sistema deve fazer em termos de funcionalidades para o negocio do seu cliente. Já os requisitos não Funcionais são as qualidades que o seu produto deve ter, ou seja, quanto tempo é aceitável para dar retorno ao usuário em uma consulta, qual a disponibilidade mínima do sistema, entre outras questões.
Outro tipo de requisito é o Requisito candidato, este tipo pode ser utilizado no processo de elicitação de requisitos, você pode tratar primeiramente todos os seus requisitos como candidatos e tempos da validação e aceite do cliente ele vira um requisito de facto.
Requisitos de Usabilidade, quase ninguém usa ou sabe o que são. Assim como a preocupação com usabilidade é quase nula nos sistemas que existem por ai. Existem vários outros tipos, inclusive existem diversos padrões de requisitos como por exemplo: Estrutura de Dados, Aprovação, Avaliabilidade, Relatórios, etc... Se você quiser saber mais sobre esses padrões, pode conferir este livro: Software Requirement Patterns.
Fechando...
Analise, Desenvolvimento e Gestão de Requisitos é uma necessidade nas empresas que querem ter sucesso, isso é valido independente da tecnologia e metodologia de sua empresa. Requisitos não significam burocracia ou página de MS Word sem valor, mas sim o que o sistema deve fazer e o que o cliente precisa.
Para isso é necessário analistas de requisitos com capacitação para o mesmo, essa capacitação não vem só com a prática, logo precisamos aliar os estudos a prática. Levantar requisitos não é fácil e não se aprende a fazer isso apénas ouvindo o usuário, tem que se perguntar os porques das coisas.
Abraços e até a próxima.
Leia Mais…
|
0
|
Qualidade e Produtividade com MVC em PHP |
desenvolvimento, MVC, patterns, PHP, web | 04/07/2009
Como Arquiteto de Software não posso deixar de olhar para as outras solução que estão fora do mundo Java. Desenvolver um sistema em Java pode trazer diversas vantagens mas também pode trazer complexidade e custo desnecessário.
Aplicações para empresas de pequenas e médio tamanho consideram o uso de PHP com solução para seus sistemas web, dependendo das características e dos requisitos do sistema eu considero o PHP como uma ótima solução. A evolução dos frameworks MVC em PHP foi muito boa nestes últimos anos.
O que é MVC mesmo?
É um padrão de arquitetura de software largamente utilizado em soluções para Web. Sua principal vantagem é a separação das telas(view) da camada de negócio(model). Você pode usar MVC em um sistema desktop, dependendo do sistema será uma boa escolha.
Neste post vou mostrar como pode ser fácil e rápido construir uma solução usando MVC com PHP, neste caso vou usar o framework CodeIgniter.
Por que não Java?
Por que dependendo do sistema seria só adicionar mais complexidade e custo, desenvolver um sistema em Java é mais caro, isso não significa que devemos fazer todos os sistemas em PHP, mas sempre temos que balancear e a escolha da tecnologia tem que sempre que levar a complexidade do sistema em conta.
Code Igniter...
Com esse framework em PHP você verá como que é fácil e simples de desenvolver um sistema MVC de qualidade com pouca configuração. Vou mostrar um exemplo simples, mas será o suficiente para que o leitor veja as facilidades e a qualidade da solução.
Requisitos
Não entrarei nos detalhes de como instalar e configurar o PHP no Apache com suporte a Mysql. Para instalar o Code Igniter basta extrair o framework dentro da sua pasta onde você esta listando as paginas no Apache.
Vamos mexer na pasta application que fica no caminho CodeIgniter_1.7.1\system\application. Primeiro criarei o Controller. Para criar um model basta ir na pasta models e criar uma página PHP. Confira o código a baixo:
test_model.php
Existem algumas formas de nomear uma classe model, a classe model é responsável pela regras de negócio e acesso ao banco de dados. Repare que o nome da classe é igual o nome do arquivo(test_model.php) só que com a primeira letra em maiúscula.
Os atributos com "var $" são referentes aos atributos que existem no banco de dados, neste exemplo existe o método get_last_ten que retorna os últimos registros da tabela pessoa do banco de dados.
Criei um banco de dados no mysql com 1 tabelinha. Segue o script do banco:
Agora que temos o model e o banco vamos ao Controller que controla tudo, para isso basta criar outra página PHP no diretório CodeIgniter_1.7.1\system\application na parte de controllers.
Confira o código do controller a baixo:
test.php
Algumas explicações, o método index é executado por padrão, cada método desta classe poderá ser acessível quando você acessa pelo browser
http://localhost/CodeIgniter_1.7.1/index.php/nomeDoController/nomeDoMetodo/parametros
Logo digitando http://localhost/CodeIgniter_1.7.1/index.php/test você entra na aplicação acessando o método padrão chamado index. No método index estou criando uma variável chama de data que é um array e dentro desse array estou passando dois parâmetros. Também estou mandando carregar a view chamada de test.
Vamos ao código da View... Confira o código a baixo:
test.php
A página deve estar dentro de CodeIgniter_1.7.1\system\application views. Como pode ver é uma página html com blocos de código PHP, e usuário clicar em listar o framework ira chamar o controller no método listar que ira chamar o model pegando os registros da tabela pessoa e voltando ao controler que repassa isso a view pela variável $query.
Para que toda essa aplicação funcione você deve configurar o acesso ao banco de dados e carregar as bibliotecas para isso entre na pasta config e edite o arquivo autoload.php e procure pela linha $autoload['libraries'] = array(); e substitua e mesma por: $autoload['libraries'] = array('database'); Assim estamos carregando o módulo de banco de dados.
Agora só falta configurar o acesso ao banco, abra o arquivo database.php também na pasta config, neste caso como é um exemplo estou com a instalação default sem senha do root, mas isso não é aconselhável para sua aplicação.
E pronto agora temos uma mini aplicação MVC com o Code Igniter o bom é que isso pode ser feito em menos de 5 mim e com uma excelente qualidade; Estou desenvolvendo uma aplicação com esse framework e mais para frente mostro outras facilidades.
Abraços.
Leia Mais…
|
2
|
Serviços em SOA |
Quando falamos de SOA é inevitável falar de Serviços. Eles são a base de SOA, na indústria de software existe grande confusão e discórdia sobre esse assunto. Neste post vou falar qual é a minha perspectiva sobre o assunto, vou comentar o que eu considero um serviço e o que eu não considero um serviço.
Também vou falar sobre os tipos de serviços e como podemos implementar cada um deles, neste ponto existe bastante confusão e o pior existe uma forte junção disto ferramental e soluções prioritárias, comentarei isso mais para frente.
O Que é um Serviço?
Tentando Desenvolver um Serviço?
Segundo as minhas crenças um serviço não precisa ser necessariamente reaproveitável, pois você pode ter várias funcionalidades de negócio que só servem a um sistema, quanto mais reaproveitável melhor, nisso que SOA esta fundada no reaproveitamento, porem não é um regra.
Outra questão relativa a serviços é a quando ao acesso, no meu ponto de vista o serviço tem que ser acessível por outro sistema, não interessa se isso será feito por um webservice, EJB, RMI, Sockets, HTTP ou até mesmo por um arquivo texto. Por que a partir do que o serviço expõe vamos ter um contrato, esse contrato pode ser estabelecido até por um método Java, o importante é que isso possa ser acessível por outros sistemas, se você não consegue reutilizar o que escreveu, não tem serviços.
Novamente quero deixar bem claro o fato de que isso vai de situação a situação, em SOA você terá sistemas comuns que podem não ter serviço e isso não é necessariamente errado, você tem que lidar com componentes e rotinas de nível mais baixo, um serviço é um abstração de alto nível e nem sempre é um para um.
Serviços um para um ?
Imagine que você vai desenvolver os serviços de um sistema em Java, não pense que necessariamente uma classe java vai ser um serviço. Em alguns casos isso pode ser verdade na maioria não será, por que em SOA é quase impossível lidarmos com a homogeneidade, os sistemas são heterogêneos, por que envolvem diversas linguagens, fornecedores, plataformas, sos, etc.
Esse assunto acaba levando a outro assunto que é os tipos de serviços, existem alguns tipos de serviços, nesse ponto vou falar da relação disso com BPEL. Podemos classificar os serviços de acordo com a sua empresa e os seus sistemas, mas falando de um modo geral podemos falar de 3 tipos de serviços são eles:
Serviços básicos ou serviços simples são os serviços que atendem/conseguem realizar o seu propósito sozinhos, ou seja, sem utilizar outros serviços.
Serviços compostos usam outros serviços para atender/conseguir fazer o seu propósito, é comum ter um mix destes dois tipos de serviços.
Serviços de Processos aqui o bicho pega. Na verdade serviços de processos podem ser implementados em Java ou em qualquer linguagem de programação. Mas existe uma vertente em SOA que insiste que isso deve ser feito com BPEL, você pode fazer isso, des de que saiba o custo e o que vai acontecer se você utilizar BPEL, quando você para pode ter gastado muito esforço e recursos em BPEL para um ganho muito pequeno e pior ainda pode ter sérios problemas de performance.
Serviços de processos podem usar serviços básicos e serviços compostos, normalmente o serviços de processo estão em nível mais alto do que os outros dois tipos e bem como disse podem ou não ser implementados com BPEL.
E os Componentes?
Existe outra vertente forte que é a favor do SCA e outros são contra, alguns confundem JBI com SCA mas uma coisa não tem nada a ver com a outra. SCA é um modelo de componentes que serve para definir a relação de serviços e componentes e para muitos isso feri a definição de SOA.
Você pode usar SCA, mas a portabilidade também não é garantida, na prática tudo o que você faria com SCA pode fazer com Spring, muito mais fácil e simples. Mas você tem que ter componentes e ter rotinas reaproveitáveis os famosos úteis. Os serviços podem utilizar esses componentes mas cuidado para não chamar isso de serviço.
Lembrando que o serviço tem que ser visível ao negócio, você tem que tomar cuidado para não confundir um componente com um serviço. De um modo geral pense em negócio quando falamos de serviços e pense em infra e arquitetura quando falamos de componentes.
Chamar componentes de infra de serviços pode gerar muita confusão com o pessoal do negócio e complicar a sua adoção de SOA, então procure diferenciar o que é infra-estrutura do que é negócio.
Separando Infra do Negócio
Ainda pensando que vamos implementar os serviços em java, como poderíamos fazer essa separação. A resposta é simples, interfaces. Você deve usar interfaces em Java como contratos, que por sinal podem ser usadas em Webservices. Mas o mais importante e o que eu nunca vi ninguém no mercado fazer: Design de jars.
Você tem que modelar os módulos da sua aplicação em componentes, separando os módulos por responsabilidades o apache maven 2 ajuda muito nisso, mas tudo pode ser feito com diagramas da UML o problema é que ninguém faz esse tipo de design, logo as coisas começam a ficar acopladas, misturadas, bagunçadas e ai serviços acabam por se misturar por código de arquitetura e infra e ai a bagunça está feita.
Onde Ficam os Serviços?
Essa é uma questão hilariante, muitos gerentes falam de SOA hoje em dia, porem poucos falam a onde os serviços vão ficar, acho que o pessoal pensa que os serviços vão ficar no limbo e que essa questão não importa tanto, a questão aqui é simples.
Serviços não ficam no limbo, eles vão estar dentro de uma aplicação, dentro de um container JEE, dentro de um contexto do Spring publicado em uma aplicação JSE, etc. Isso é importante por que você tem que saber que serviços tem, tem que se preocupar com transação e principalmente com segurança.
Essa questão é deixada de lado por que existem muitos arquitetos que ao falar de SOA vem WS na cabeça deles como única forma de implementação e ai eles pensam a eu todo tudo no UDDI e deu já eras isso. Esse é um erro comum e que vai dar dor de cabeça quando se percebe-se que nem tudo pode ser feito com Webservices por que não compensa ou por que não se paga o custo ou por que o sistema é muito velho e não tem esse recurso.
E a Transação...
Sou obrigado a falar de transação com Serviços, vamos por partes transação local no mesmo sistema pode ser utilizada sem problemas por que a principio não será um gargalo mas como disse antes depende muito do sistema.
Agora o problema é que ainda vejo arquitetos falando de transação distribuída com SOA e isso é um grande problema. O Comite de duas fases é um inimigo da performance, sistemas distribuídos tem problemas para escalar com transações distribuídas e tem mais nem sempre você pode ter isso por que nem todos os recursos são transacionados, o pessoal esquece disso :)
Transação distribuída em ambientes heterogêneos envolvendo várias linguagens e plataformas, hahahahahaha que piada. :)
Em SOA a abordagem padrão para isso é a Compensação eu já utilizei essa abordagem com BPEL sem problemas, então basicamente pode se fazer dois tipos de compensação.
No primeiro tipo o sistema chamador tem que dar um jeito de corrigir os dados inconsistentes no outro sistema, isso pode ser feito pela invocação de rotinas, componentes genéricos que apagam dados no sistema com inconsistências.
No segundo tipo o usuário corrige essas inconsistências, teve um sistema que fiz onde de uma lado existia um sistema Java com Spring e Hibernante que falava através de uma fila JMS e do outro lado um sistema clipper que falava através de arquivos texto, com BPEL foi gerado uma Human Task para apresentar os problemas ao usuário para ele corrigir.
Por default não sou contra a transação distribuída, mas o cenário para sua utilização tem que ser olhado com muita cautela. Os serviços podem utilizar transação local como falei antes, pode ser usando até um TransactionManager do Spring.
Abraços e até a próxima.
|
0
|
Consumindo Webservices em Groovy com GroovyWS |
groovy, SOA, SOAP, web-services, WSDL | 15/06/2009
No post anterior mostrei como criar um Webservice wsdl de forma fácil usando Spring Framework, Apache CXF, Anotações e tudo isso rodando no servidor da ORACLE o Weblogic. Nesse post vou mostrar como é simples de consumir o mesmo Webservice do exemplo anterior usando Groovy.
Para isso vamos precisar do module do Groovy chamado de GroovyWS, você precisa baixar a solução aqui. Vou usar o mesmo Webservice construído no post anterior que esta aqui: http://localhost:7001/spring-cxf-pojo/DateService?wsdl eu instalei direto no diretório $GROOVY_HOME/lib e colei o jar groovyws-standalone-0.5.0.jar.
Agora basta executar o seguinte código, eu fiz isso pelo groovyConsole mesmo, tente você também:
Por isso que adoro Groovy é simples, muito produtivo, adoro Groovy. Bom nesse código eu instancio a classe WSClient passando a localização do WSDL do Webservice que quero consumir e o classloader. Depois mando inicializar o proxy, por fim executo o método que eu quero do Webservice, no caso o método tem que existir no Webservice, usei único método que é o getDate(). Ainda mostrei o resultado no console.
Em outro post eu mostro como construir Webservices com Groovy, até a próxima.
Abraços.
|
0
|
WebServices Fácil com Apache CXF, Spring e Anotações no ORACLE Weblogic 10.3 |
apache-CXF, desenvolvimento, java, SOA, SOAP, spring, web-services, WSDL | 13/06/2009
WebServices é um padrão aberto que é muito utilizado, porem fazer um WebService escrevendo a WSDL pode ser uma tarefa pesada, usar ferramentas pode ser uma boa, mas isso pode gerar uma dependência com seu fornecedor de ferramentas. Vou mostrar como pode ser fácil e simples criar um Webservice com WSDL, sem você ter que criar uma linha de WSDL, como?
Usando duas excelentes soluções de mercado, Apache CXF veio do bom e velho XFire,Tempos passado eu fiz um poste sobre Spring e XFire, para dar mais facilidade, produtividade, simplicidade e outros tantos recursos vamos usar isso tudo em conjunto com o Spring Framework. Vamos fazer tudo isso usando anotações, no final você vai ver que com 6 arquivos, vamos fazer uma solução muito simples.
Não se preocupe para cada Webservice você não precisara criar 6 arquivos, por que 2 desses arquivos são o pom.xml do maven de dois projetos e um arquivo é o web.xml. Outro arquivo é um xml de beans do spring que pode ser reutilizado na criação de outros serviços des de que você vá adicionado mais definições dele.
Nesse exemplo além de usar Spring 2.5, Apache CXF 2.2 vou usar Maven 2 com o plugin do Cargo para fazer o deploy no ORACLE Weblogic 10.3, o servidor foi escolhido por que é muito robusto é fácil de fazer o deploy com maven.
Por fim vamos testar o Webservice de duas formas, a primeira dela escrevendo um client em Java usando o Apache CXF, Spring e Maven. Na segunda forma vou usar a ferramenta SoapUI que é excelente ferramenta para testes com WebServices.
Vamos ao código então, primeiro vamos a interface java que será exposta como Webservice, o legal do apache CXF é que ele vai gerar quase todo o mapeamento para o WSDL de forma automática, você ainda pode parametrizar informações via anotações se preferir ou tiver essa necessidade, no meu exemplo vou fazer o uso mais simples dessa solução.
DateService.java
Aqui é uma interface java normal com uma anotação do JAX-WS que indica o uso de Webservices, vamos a implementação do serviço e do Webservice por conseqüência. Como o leitor pode perceber eu adoro criar serviços de datas, não são serviços propriamente ditos se estivermos falando de SOA por exemplo, nos meus exemplos faço isso para simplificar as coisas só por isso :)
DateServiceImpl.java
Essa é a implementação do serviço de datas, como você pode reparar ele retorna a data/hora corrente do servidor aonde o Webservice esta publicado, isso será interessante para os testes, por que sempre tem que vir um valor diferente a cada chamada.
Nesta classe foi utilizada novamente um anotação padrão do JAX-WS para indicar qual a interface que esse serviço está implementado. Agora vamos a configuração do Spring juntamente com a configuração do Apache CXF.
spring-cxf-beans.xml
Preciso explicar apenas 3 coisas nesse XML. A primeira é 'context:component-scan', com isso o spring registra os beans automaticamente des de que eles estejam devidamente anotados com as anotações do Spring Framework, ainda estou adicionado um filtro para ele pegar os beans com anotações do JAX-WS também. Se eu tivesse outros beans ou esses mesmos que fiz com anotações @Service ou @Component o spring ira registra-los também.
Esse é um recurso muito bom do Spring Framework que aumenta consideravelmente a produtividade, em contra partida perdemos um pouco a extensibilidade, pois para modificar os beans vamos ter que mexer no código :(
O Segundo ponto que vou explicar são os 3 imports de recursos que estão no jar do apache CXF, são necessários para o funcionamento da solução, antes esse tipo de configuração era feito na mão criando esses 3 arquivos com as configurações, com a evolução das coisas chegamos a essa solução que é prática e fácil.
Por fim o terceiro ponto que devo explicações a vocês é o 'jaxws' aonde são passadas algumas configurações para o Webservice como a implementação e o mais importante o atributo 'address' que sera utilizado no endpoint do WS para ser acessado pelos clientes.
Para expor esse Webservice no ORACLE Weblogic vamos ter que empacotar esses fontes em um war, no final do post eu dou o link para o meu repositório do Subversion onde vocês podem pegar os fontes completos com os códigos do maven para empacotamento do WAR e deploy do EAR no ORACLE Weblogic.
Vamos ver como fica o Web.xml desse projeto war aonde estão os serviços que serão expostos como Webservice, confira o arquivo a baixo:
web.xml
Nesse arquivo foi configurado o Listener do Spring que carrega o contexto do Spring quando a aplicação é iniciada no container da ORACLE Weblogic, também é configurado o servlet do Apache CXF. Essa configuração é padrão não se preocupe muito com isso.
Uma vez que você faça o deploy do EAR com o maven no Weblogic agora basta consumir o seu Webservice, vou mostrar isso de duas formas a primeira com a ferramenta de testes para Webservices chamada SoapUI.
Abra a ferramenta SoapUI e crie um projeto novo com qualquer nome e informa a localização do WSDL, você pode pegar o WSDL nesse endereço: http://localhost:7001/spring-cxf-pojo/DateService?wsdl certifique-se de que o servidor esta no ar.
Vá no método getDate() e execute o request, se der tudo certo vocÊ receberá um retorno semelhante a esse da figura a baixo:
Teste com SoapUI
Vamos ao segundo teste, agora com uma classe do Spring, antes disso precisamos configurar o contexto do spring em outra aplicação que será o cliente Webservice, confira a configuração do Spring a baixo:
spring-cxf-wsclient-beans.xml
Aqui estou usando o 'jaxws' e estou dizendo qual é a interface Java que eu uso para segurar esse bean, e por fim qual é o endereço endpoint desse webservice. Depois disso ele é tratado como um bean normal do spring, logo você pode injeta-lo em outros beans através do seu id que se chama de 'dateService'.
Agora basta subir o contexto do Spring usado esse bean, veja isso na classe de testes do JUnit que segue a baixo:
Como você pode ver o bean foi usado normalmente como qualquer outro bean ordinário do Spring Framework por esse tipo de coisas que o Spring se solidificou como um modelo definitivo de desenvolvimento Java onde a simplicidade toma o lugar da complexidade da JEE.
Dessa forma podemos criar Webservices com WSDL de forma produtiva e sem se amarrar em ferramental. Se você quiser os fontes da aplicação completa pode pegar no meu repositório do SVN nos links a baixo:
Se você tiver algumas dúvida ou deseja contribuir com algo poste um cometário, comentários são sempre bem vindos :), se você queiser ler mais sobre Webservices confira outros posts relacionados ao assunto:
Abraços e até a próxima.
|
2
|
Novo Recurso de Plugins no Firefox |
O Firefox continua a inovar com plugins. Recentemente eles lançaram as coleções, que são conjuntos de add-ons(plugins), já existem alguns prontos e você pode verificar isso no site oficial aqui.
Além disso agora você pode criar a sua coleção, para isso você tem que criar uma conta de usuário, isso é bom por que além de você não perder mais seus plugins pode deixar eles abertos para que as outras pessoas vejam a sua lista.
Eu criei a minha coleção de plugin já :) Vocês podem acessar a minha coleção neste link. Você pode saber mais sobre o assunto no blog da mozilla. Para criar a sua coleção você precisa do plugin gerenciador de coleções que pode ser instalado no firefox por aqui.
Aproveito para indicar 3 plugins para vocês, foram os 3 últimos que eu instalei :) São eles:
Por essas e outras que o Firefox continua sendo o melhor browser do mercado. Bom era isso pessoal até a próxima. Leia Mais…
|
11
|
BPM com BizAgi Process Modeler |
Faz alguns meses que um amigo(Cássio Dias) meu me indicou a solução de BPM do BizAgi, neste post vou falar um pouco mais dessa solução e da ferramenta free que eles possuem de modelagem de processos de negócio.
BizAgi tem uma solução de BPM, ou seja, um BPMS, essa solução completa é paga. O que é gratuito é a primeira parte do ciclo deles que é a modelagem, o BizAgi Process Modeler, que é 100% compatível com BPMN 1.1.
A Solução deles é completa, com simulação, BAM e tudo mais, nesse post não vou falar da solução completa de BPMS mas sim da ferramenta de Modelagem.
BizAgi Process Modeler
Com essa solução você pode fazer a identificação e design de processos que existem ou vão ser criados. O editor é muito parecido com o Office da Microsoft. Isso é bom por que aproveita o modelo mental dos usuário e faz com que o uso da ferramenta seja facilitado.

É muito fácil de desenhar um processo com essa solução, por que quando você clica em qualquer componente ele já dá as opções de continuação do fluxo no próprio componente deixando assim o desenho do fluxo muito fácil e muito ágil.
A Ferramenta conta diversas opções de exportação sendo elas: Imagem, Word, PDF, Visio e XPDL e melhor de tudo é portável, eu fiz o teste, funciona, o XPDL que ela gera é a última versão, no momento(09/06/2009) que é XPDL 2.1.
Ainda é possível validar se o seu fluxo está correto em termos de bpmn, ele mostra de maneira amigável onde estão os problemas fazendo assim como que os usuário especialistas de negócio consigam usar a solução de maneira fácil.
Já testei algumas solução de modelagem com BPMN sendo que eu acho a solução muito mais leve, fácil de usar, amigável e funcional do que as soluções de grandes players como IBM(Modeler), ORACLE(BPM Studio, Aris), Intalio(Studio). Outra noticia boa essa ferramenta está em português.
Neste post não estou avaliando a solução inteira de BPMS mas sim só a parte de modelagem e nesse ponto acredito que o editor da BizAgi é o melhor. Você pode fazer download do produto aqui.
Um Exemplo
Fiz um processo de exemplo fictício sem comprometimento com a realidade só para mostrar a solução. Veja o diagrama a baixo:
Processo de ExemploVocê pode ver esse XPDL em uma solução open source feita em Java, que é o together workflow editor. Ele importa todo o processo 100%, alguns elementos aparecem meio estranhos, por que o foco é XPDL e não BPMN, mas o fluxo de negócio esta lá certinho :).
Por que esses erros? Simples por que a ferramenta open source de XPDL é em cima de XPDL 1.0 e conforme dito antes o BizAgi gera o XPDL 2.1, isso também mostra que não existe uma boa compatibilidade para traz do XPDL, isso só comprova o post anterior no qual falei dos problemas de compatibilidade.
Outro detalhe que eu não falei, as soluções de modelagem de BPM não costumam ter bons facets nos projetos. Sim Facets, vou explicar o que é isso. Bom no eclipse que é um IDE de desenvolvimento Java os projetos tem factes, por exemplo existe um facets para EJB então posso escolher entre as versões 2.0, 2.1 e 3. A ferramentas de modelagem de BPM não tem essa opção logo é aquela versão de BPMN e de XPDL, infelizmente isso se o BizAgi também.
A Solução da ORACLE o BPM Studio só importa XPDL 1.0 ou 2.0, logo o do BizAgi não entra lá e nem do IBM Modeler, por sinal a IBM adora ficar com versões, alpha, beta, draft, etc... Mas o BPM Studio da ORACLE também não gera um XPDL 100% on rails, por que ele gera um XPDL2.0alpha. O mesmo que não importa no BizAgi.
Se vocês quiserem baixar os recursos deste post, diagrama bpmn, imagem e XPDL confiram nesse url. Em outros posts mais pra frente vou falar um pouco mais de BPM e outras formas de fazer mapeamento de negócio.
Para fechar com o BizAgi que como disse antes para mim é a melhor solução de modelagem, pensando só em modelagem, é uma abordagem válida para empresas que querem começar a mapear os seus processos para ajudar no desenvolvimento e para melhorar o funcionamento da empresa, para aplicação de uma solução de BPMS completa precisamos ter mais critérios, mas ai já é história para outro post.
Abraços e até a próxima.
|
4
|
BPM sem BPEL Parte 2 |
BPEL, BPM, BPMN, desenvolvimento, it, mercado, projeto, SOA, ti, web-services | 08/06/2009
No post anterior, escrevi um pouco sobre BPM e bem como andam os padrões que seguem esse modelo, neste post pretendo falar sobre a ligação de BPEL com BPM. Vou citar outras referencias que confiram a minha visão de que BPM e BPEL talvez não seja o casamento perfeito.
Quando falamos de BPMN, BPMS, simulação, estamos falando obrigatoriamente de BPM. Se falarmos de WS-BPEL, WebServices, WSDL podemos estar falando de SOA, mas nem sempre, usar WS-BPEL, WebServices, WSDL não significa ter SOA. Se você quiser saber mais sobre SOA pode ler esses posts:
- SOA: Cuidado com o Lock-In
- SOA sem BPMN e WebServices
- O papel do ESB em uma solução SOA
- SCA com Java Parte 1
- SCA com Java Parte 2
- A Diferença de EA e Arquitetura de Software
Nos posts anterior sobre BPEL falei dos pontos positivos e neste post vou mostrar os pontos negativos do uso de BPEL em conjunto com BPM. Não digo que é de todo o mal a abordagem mas o mercado já salienta diversos problemas os quais alguns vi na prática.
O Casamento de SOA com BPM
BPM é negócio, é o fluxo da sua empresa, é gestão de processos, SOA é arquitetura corporativa, ou pelo menos uma parte dela, focada em serviços, serviços estão relacionados a processos, então BPM e SOA são feitos um para o outro? Em alguns casos essa abordagem pode ser muito produtiva, implantar os dois do zero pode ser um grande risco. Por que SOA vai mexer muito com a TI e BPM vai mexer muito com o negócio.
Você pode realizar uma implantação parcial e primeiro colocar BPM e depois disso ir para SOA, para mim é o melhor cenário, não digo que seja impossível colocar os dois ao mesmo tempo mas aos meus olhos acredito que só aumenta a complexidade e os riscos de se ter sucesso e ROI em curto prazo.
Mas como juntar BPM e SOA?
Na verdade é simples, essa cola pode existir apénas em tempo de análise/design, tudo tem inicio do processo da empresa, do fluxo, desse fluxo se derivam, aplicações, serviços, sistemas legados, sistemas de terceiros, tarefas manuais do negócio, tarefas manuais da TI, etc...
Tudo isso pode ser controlado com uma boa ferramenta de metadados. Um exemplo é o ORACLE Design que não deixa de ser uma ferramenta de metadados para o banco ORACLE, você pode fazer esse sistema com meia dúzia de cadastros, ainda é possível usar algum sistema de gestão de assets.
Porem essa não é a única abordagem, existe outra vertente que é até defendida por grandes players como IBM e ORACLE a idéia de gerar o BPEL a partir de um diagrama de processo do BPM.
Esse casamento pode dar divorcio ou até mesmo...
Mas com o Problema dessa abordagem?
Se existisse só um problema eu não estava falando disso :). São vários os problemas, primeiro é que um processo BPM pode não ser 100% mapeavel do BPM para o BPEL. Se vocês tem suas dúvidas confiram esses outros posts/artigos:
- Why BPEL is not the holy grail for BPM
- Eu odeio BPEL
- BPMN-BPEL round-tripping
- BPEL não é BPM e Vice-Versa!
- BPEL: Who Needs It Anyway?
- WS-BPEL FAQ
- What is the relationship between BPMN and WS-BPEL2.0?
- There is no direct relationship between BPMN and WS-BPEL 2.0. WS-BPEL is a standard from OASIS and the BPMN specification is currently an OMG standard for visual representation of Business processes.
Eles querem fazer o bom e velho lock-in e prender vocês ao ferramental deles, por sinal o IBM Modeler 6.0 nem implementar BPMN implementa, voltando a falar de BPEL, existem outros problemas sérios no uso de BPEL:
- Tudo é WebService, WDSL, XML, XPATH pra todo o lado
- Desenvolvimento pesado e complexo
- Problemas de performance e dimensionamento de máquinas
- Impossibilidade de forma portável de acessos mais leves
E o Pega Gerente?
Esse é o problema. Todo esse papo furado de gerar o BPEL pelo BPM é algo que os gerentes adoram, ou seja, uma solução mágica que com ferramentas vai eliminar, erros, descuidos, dar flexibilidade e até tirar o peso da responsabilidade das pessoas. É um mundo mágico que infelizmente não existe. Existe apoio dos gerentes por que as grandes empresas estão jogando nisso, mas o mercado não está comprando, a prova disso é esse gráfico:
Alternativas ao WS-BPEL
Muitas vezes uma alternativa viável e simples é ao invés de fazer orquestração fazer roteamento de serviços, não resolve 100% dos casos, mas em alguns casos da no mesmo, isso pode ser feito com um bom ESB como o Apache Service Mix usando o Camel da Apache por exemplo.
Uma idéia que me agrada muito é, fazer orquestração de forma padronizada assim como no BPEL mas usando formas mais leves como interfaces java, ejbs, beans do Spring, apis REST, mas tudo isso de forma padronizada por alguma especificação. Mas nada indica que esse caminho ira surgir fora das extensões.
BPEL em DSL?
Essa seria uma coisa ótima, usar BPEL com schema XSD, xml e WSDL é algo muito ruim, muito pesado, que cria uma dependência muito forte com um ferramental se não é impossível faer algo que preste com o mínimo de produtividade.
Ouvi falar do SimPEL que seria um BPEL simplificado em forma de DSL, espero que isso vá para frente, confiram isso neste link: http://www.nabble.com/SimPEL-early-feedback-td19380187.html.
O SimPEL é muito novo, é do final de 2008, não sei se evoluiu muito, apareceu na lista de discussão de desenvolvimento do Apache ODE e está em passos de bebe, mas achei muito interessante e gostaria muito de ver as coisas evoluindo para esse lado, o SimPEL é algo tipo isso:
Como disse antes não sei se a iniciativa foi para frente, mas é algo muito legal. Mesmo com isso ainda não temos a tão sonhada cola do BPM com o BPEL e não vamos ter isso com ferramental nenhum, certas coisas ainda devem ser feitas da maneira antiga, com ferramentas sim, com pessoas e o bom e velho processo.
Abraços a até a próxima.
Leia Mais…
|
8
|
BPM sem BPEL Parte 1 |
Com a crise econômica mundial, que tal reduzir 20% dos custos de sua empresa? Bom né? Pelo menos é isso que promete o Gartner se você usar BPM. Segundo ele seguirem a adoção de BPM podem ter esse lucro nos primeiros 12 meses, eu não duvido. 3. Model portability. Most people simply take it for granted that the first goal of any standard like BPMN is portability or interoperability between tools. You should be able to create a BPMN model in tool X and open it in tool Y. That takes more than a schema. It also requires the spec to enumerate the elements expected to be portable between tools, i.e. that all tools must support and understand. In an execution language like BPEL, this enumeration is the entire set. But for BPMN, currently used as a diagramming notation rather than a complete execution language, no tool with a runtime supports every last bit of it, and that probably won’t change with BPMN 2.0. The team should have followed XPDL’s lead and defined multiple working sets – a hierarchy of portability levels – from a simple basic palette supported by essentially all tools, up to the full set, with portability conformance requirements spelled out for each level. I drafted language to that effect, but it didn’t get off the ground, either. Instead, the modeling conformance language is so vague as to be meaningless. My interpretation of the reason is that team members were uncertain how much of the BPMN palette their own tools would support in their first “2.0-compliant” release. So don’t expect much portability when BPMN 2.0 tools first come out.
70% das empresas que usam BPM dizem que essa é a sua salvação, a idéia não é nova, com crise ou sem crise os preços tendem a ser ditados pelo mercado, então uma boa forma das empresas irem para frente é melhorar a qualidade dos seus processos internos e diminuir custos.
O que é Business Process Management?
Esse é um modelo gestão baseado em processos, a idéia é mapear e modelar os processos da empresa para ter um conhecimento maior de como as coisas funcionam e poder otimizar o processo. Tal tarefa de mapeamento pode ser feita com qualquer ferramenta estilo fluxograma.
Para mapear um processo não importa se a sua ferramenta é o MS Visio, IBM Modeler, BizAgi ou até mesmo o MS Excel. Quando falo em mapear não falo só no mapeamento, que é um tarefa de engenharia reversa, mas falo também de modelagem de processos, para a modelagem de um processo novo por exemplo.
Com o processo modelado e mapeado é possível aplicar SLA e através de simulações e até mesmo o uso empírico do processo ver pontos de melhoria e de simples descarte. Para simulações já vamos precisar de uma ferramenta mais própria para BPM como o Modeler ou o Intalio, o excel fica devendo :)
Infelizmente a simulação que é um recurso muito bom ainda é deixado como uma funcionalidade meio que de brinde sem muito foco ainda pelos grandes players, possível que depois da bpmn 2.0 isso mude, vou falar mais sobre bpmn neste post depois.
O Ciclo do BPM
Ciclo do BPM
Modelagem: Quando as coisas começam a se tornar tangíveis, nesse ponto você irá se preocupar com detalhes mais práticos dos que você viu na fase de design. Preocupações como o custo e materiais, pessoas, etc sempre aparecem aqui.
Execução: Aqui é aonde o trabalho acontece, seja ele feito por pessoas, por máquinas ou por sistemas, você pode aumentar cada vez mais seu nível de automatização, mas isso nunca será 100%, logo vai ter que existir interação com pessoas e tarefas manuais. Pode ser difícil de documentar como as coisas funcionam mas isso é mais uma questão de cultura e de hábitos do que de complexidade propriamente dita.
Monitoramento: Nessa fase você ira acompanhar os seus processos em execução, seja ela por meu de sistemas da TI ou por tarefas feitas na mão por pessoas, você deve ter estatísticas de performance do seu processo. Você pode usar ferramentas de BAM nesse ponto, a solução de BAM pode ajudar a detectar problemas para que você possa corrigir esses problemas ou melhorar a performance dos seus serviços.
Otimização: Depois de fazer o design, modelar, executar e monitorar, você tem a chance de aplicar otimizações nos processos de sua empresa. Nesse ponto que você pode remover gargalos e retirar passos e custos não necessários ao seu negócio.
Business Process Modeling Notation
É uma forma padronizada de fazer mapeamento de processo de negócio, a bpmn é uma notação visual, pelo menos até a versão 1.1. Na versão 2.0 vai existir um schema para validar a notação, isso será bom tanto em termos de ferramentas como em termos de padronização e portabilidade.
Hoje em dia a portabilidade de bpmn praticamente não existe, por que visualmente se existe um " + " em um gateway e uma ferramenta como o IBM Modeler 6.0 não tem esse sinal ela não é aderente a bpmn. Até a versão 1.1 teoricamente a portabilidade aconteceria com o XPDL, mas nem todas as ferramentas trabalham com o XPDL e mesmo que trabalhem existe sérios problemas de portabilidades como por exemplo do BPM Studio da ORACLE para o IBM Modeler e vice versa.
Padrões são bons, mas nesse ponto de bpmn 1.1 isso tudo serve apénas de convenção, na versão 2.0 do bpmn que é quando se pretende fazer a bpmn executável pode ser que as coisas mudem mas até que isso chegue não vai ser da noite para o dia. Nesse tempo você vai querer usar BPM, use a vontade com bpmn ou não, agora saiba que você estará preso a uma ferramenta, não caia na trova fiada da portabilidade.
XPDL ?
É um padrão de representação de fluxos baseado em XML, esse padrão é mantido pela Workflow Management Coalition (WfMC), já o bpmn é mantido pela OMG. O problema é que como dito antes poucas é que nem todas as soluções de BPMN seguem a última versão de XPDL que hoje(06/06/2009) esta na versão 2.1. Muitas ferramentas usam XPDL mas não existe portabilidade, você cria o processo com bpmn na ferramenta e não hora de importar em outra ferramenta ou não importa ou importa com erros.
BPMS
É um software para BPM, proprietário. O problema é que todas os processos de um BPMS devem ser executáveis e na verdade muita coisa não é executável, para muitos essa é outra tentativa sem sucesso de automatizar o que não deve ser automatizado e trocar pessoas por sistemas.
A Evolução dos padrões
Confira a evoluções desses padrões no diagrama de linha do tempo a baixo. Perceba a diferença de evolução do XPDL e do BPMN que mudou de dono no meio do caminho, perceba a velocidade de evolução dos padrões também.
Se você tem dúvidas quanto a portabilidade, leia esse trecho retirado do blog de um dos caras de BPM o Bruce Silver:
Bom acho que ele foi bem claro quanto a o que estou dizendo :)
Na versão 2.0 do BPMN que a idéia é ser executável, será nitidamente a saída do BPEL, que muitas vezes era utilizado como solução por limitações de distinção de informações de modelagem e informações de design da bpmn 1.0.
A Questão da simulação também pode vir a ficar melhor pela entrada dela na especificação de BPMN 2.0, mas isso tudo é para depois de 2010.
Fechando essa parte...
BPM é um modelo de gestão baseado em processos, não é tudo e não substitui a gestão tradicional, agrega novos conceitos, mas ainda precisamos do básico que existe em administração e gestão de projetos. BPM não é TI necessariamente é mais negócio que TI, pode ter e deve ter a ajuda da TI, mas é mais para área de negócios e a sua implantação é na empresa toda e não só no setor de TI.
No próximo post vou falar da relação de BPM com BPEL e se isso é possível ou não. Existe uma discussão muito grande sobre esse tema, no próximo post falarei das possíveis vantagens e desvantagens e bem como os mitos e patotas dessa questão.
Abraços e até a próxima.
|
0
|
FDD: Um Método Ágil e Eficiente |
agile, desenvolvimento, FDD, metodologia, processo, Scrum, ti | 01/06/2009
Neste post vim falar um pouco mais de FDD, que além de ser um método ágil tem uma grande eficiência e aderência a requisitos. Vou dar uma visão geral de como o método funciona e como podemos mixar o método com outro método ágil chamado de Scrum.
Se você quiser saber mais sobre Scrum, pode ler outros posts que tenho sobre o assunto a baixo:
- Scrum
- O que faz a diferença usando XP, Rup, Scrum ?
- Scrum não substitui gerenciamento de projetos
- Estimando com Scrum
- Gerenciamento de Níveis com Scrum e RUP parte 1
- Gerenciamento de Níveis com Scrum e RUP parte 2
- O Melhor do Scrum
O FDD foi criado por Jeff De Lucca em 1997. FDD é um método que prega a visibilidade do estado projeto de forma consistente e honesta. Você consegue saber quantas funcionalidades já foram desenvolvidas e quantas faltam ser desenvolvidas por que tudo é orientado as funcionalidade.
O FDD ajuda muito a você organizar as suas entregas, o FDD funciona muito bem por que ajuda usando as boas práticas de gerência de configuração como plano de release, plano de deploy e outras práticas ágeis como build continuo e foco em testes.
Visão Geral
Visão Geral do FDDNa fase concepção acontece a triagem de requisitos, você ainda pode usar as técnicas tradicionais da Engenharia de Requisitos mas focando em funcionalidades, é perfeitamente viável essa abordagem. De inicio você tem que desenvolver um modelo abrangente isso é legal por que nesse ponto começar a se mixar o FDD com as práticas de OOAD e UML em Cores.
No modelo abrangente o foco está mais na forma do que no conteúdo, isso é bom por vários motivos, primeiro que é um incentivo para que você não faça um big design up to front e também não comece a querer fazer toda a arquitetura de uma vez só, esse é um bom ponto de interação do design com a arquitetura também.
Com isso você tem insumos para a geração da lista de features, que pode ser o seu backlog que você usa Scrum, logo você pode manter isso em uma boa planilha excel. Esse trabalho permite que você faça um planejamento por features que pode ocorrer em uma reunião de planejamento do Scrum, com as práticas do Scrum logo você consegue saber quantas funcionalidades por sprint você é capaz de desenvolver.
Na fase de construção existe um detalhamento por funcionalidade, nesse ponto que você vai especificar mais o que deve ser feito, acho plausível se você sentir necessidade, usar estórias do usuário do XP.
Neste ponto você constrói por funcionalidade, e o progresso é medido por funcionalidade, a cada funcionalidade feia se você quiser pode coloca-la em produção, eu recomendo, o Flckr por exemplo tem deploys em produção diariamente, deploy mais freqüentes são melhores para o negócio, quanto mais melhor.
Nota: Quando falo de deploy freqüente ou diário em produção, me refiro a quando isso é possível, não estou dizendo para você pular testes nem bypassar seu SQA. Mas se você puder fazer um deploy todo o dia melhor, isso será bom para todo mundo.
Medindo Progresso com o FDD
Essa medição se dá através de um cartão que representa a funcionalidade, você pode fazer isso com um post-it semelhante ao da figura a baixo, essa não é um funcionalidade pura e já fiz uma mix com o Scrum:
Tracking de Funcionalidades com o FDDNa figura a cima existem as funcionalidades tradicionais do FDD, mas existe um mix que fiz com o Scrum também. Vamos por parte primeira ao FDD e as modificações que fiz. A cor amarela significa que a Feature está em andamento, em verde significa que já foi concluída e rosa significa que a funcionalidade está atrasada. Usei essas cores por que são as cores básicas dos post-its em se quiser você fazer tudo isso com post-its.
Outro mix válido é mixar o FDD com o Kanban, assim as atividades de planejamento, revisão, design, revisão, construção, revisão e deploy do FDD podem ser colocadas em um pipeline. Para facilitar a sua vida com post-it você pode deixar só para desenhar a barra de progresso ou então considere que a funcionalidade é o item do scrum e continuar quebrando a feature em tarefas, mas vá movendo o progresso só da feature e use o Tasks/W.I.P/Done do Scrum Tradicional.
Os números dos cartões de funcionalidades são o seguinte, vou explicar da esquerda para a direita de cima para baixo. O primeiro número é o identificador único da funcionalidade, esse pode ser o mesmo número que você tem no backlog do Scrum ou até mesmo o número de um ticket da sua ferramenta de tracking.
O número do meio é a pontuação do Scrum, onde está pontuado a complexidade de desenvolver essa funcionalidade. E o terceiro número bem a direita é a prioridade da feature que é dada pelo dono do produto. Você pode jogar o post-it fora para mudar a cor ou pode pintá-lo,outra abordagem para quem não usa um dashboard seria fazer isso em uma planilha excel, é uma boa mas eu prefiro as coisas feitas a mão por que elas favorecem a colaboração.
Quando atualizar o progresso?
As Revisões
O FDD enfatiza a prática de revisão tanto de código como de projeto, isso é muito bom e contribui para a evolução da qualidade do produto. Aqui o FDD pode se juntar com diversas práticas da Garantia da Qualidade de Software.
O FDD é um método que prove muitas cosias legais em torno de funcionalidades, mas isso não elimina outras necessidades, em um projeto é muito saudável misturar FDD com outros métodos como Scrum, XP, RUP e OpenUP. Misturas com Kanban também são bem vindas e podem melhorar mais ainda a visibilidade e facilitar a visualização do status do projeto.
Se vocês quiserem mais informações sobre o FDD confiram neste site aqui, aqui e aqui.
Abraços e até a próxima.
Leia Mais…
|
1
|
Arquitetura Corporativa com o TOGAF |
arquitetura, arquitetura corporativa, desenvolvimento, EA, ti, TOGAF | 31/05/2009
Nos post anterior eu comecei a falar um pouco mais de arquitetura corporativa. Nesse post vou continuar no assunto, agora falando mais de TOGAF. TOGAF é um framework para a construção de uma arquitetura corporativa(EA) criado pelo The Open Group. Hoje(31/05/2009) ele esta na versão 9.
Os Tipos de Arquitetura
No TOGAF os tipos ou níveis de arquitetura são bem separados, o TOGAF aceita 4 tipos de arquitetura como subtipos de sua Arquitetura Corporativa, são os tipos:
- Arquitetura de Negócio
- Arquitetura de Dados ou de Informação
- Arquitetura de Sistemas
- Arquitetura de TI
TOGAF é ideal para construção de um Arquitetura Corporativa para sistemas de missão Critica, esses sistemas são fundamentais para o sucesso da organização. Mesmo que você não tenha muitos sistemas de missão critica, dependendo do cenário pode ser uma boa adotar o TOGAF.
O método ADM
O TOGAF tem no seu cerne o ADM, que é um método para criação da arquitetura de TI que consiga atender as necessidades do negócio. Para tal feito é perfeitamente possível usar outros padrões de mercado como a UML, BPM, SOA e todos esses bons anos de evolução da Engenharia de Software.
O método TOGAF se divide em duas partes, são elas:
- O método ADM para construção de um arquitetura de TI que atenda os requisitos e por conseqüência as necessidades do negócio.
- Arquitetura do TOGAF: Que é um conjunto de serviços e funções arquiteturais para construção de software, nesse ponto podemos utilizar SOA.
No Framework do TOGAF os Requisitos estão no centro de tudo, as decisões são dirigidas pelos requisitos, veja isso pela figura a baixo:
Requisitos o Centro de Tudo !!!As Fases
Vou comentar por cima como funciona cada fase e o que se deve fazer, se você quiser mais detalhes pode comprar o TOGAF aqui. Eu ainda não estou ganhando nada pela propaganda :(
Se você quiser uma referência razoável mas não tão completa pode acessar esse site que tem a versão 7 do TOGAF.
A: Initiation and Framework
O Objetivo dessa fase é especificar os requisitos de negócio, que se aplicam a evolução da arquitetura, leia-se, não são todos, digo isso por que se não alguém já pode pensar que o método é cascata e ele não é.
Esses requisitos servem para nortear a arquitetura com princípios, Metas de Negócio e Decisões Estratégicas da organização. Com isso será possível nesta mesma fase se produzir uma Visão Arquitetural.
Nesta fase serão identificados e documentados e pontuados(rank) os principais problemas que afetam o projeto. Além de identificar e documentar os objetivos de negócio. Aqui existe o mapeamento de papeis e sistemas e bem como suas funções e medidas que indiquem o que seria o certo e esperado para todas as entradas e saídas macro.
O que existe de muito válido nessa fase é a constante preocupação em saber se os problemas foram realmente entendidos e a arquitetura proposta não vai de encontro oposto aos objetivos do negócio.
No final dessa fase você terá a primeira versão da sua arquitetura de negócio.
B: Baseline Description
Aqui é feito a definição de alto nível dos sistemas. O grande objetivo dessa fase é descobrir ativos que posam ser reutilizados, nesse ponto é crucial que você armazene essas informações de forma concisa se possível em uma sistema de gestão de Assets.
Neste ponto é necessário levantar todos os pontos em que você não tem interoperabilidade, ou seja, problemas de comunicação e trocas de informações entre sistemas. Não é necessário que você refaça tudo do zero, se você tem uma material de valor e atualizado utilize o mesmo.
Essa sessão ira gerar mais um incremento na sua arquitetura de negócio, com isso você poderia ir para outra fase.
C: Target Architecture
O objetivo dessa fase é identificar a arquitetura que será base para o seu desenvolvimento e implementação de serviços e funções de negócio. Confira a figura a baixo:
Essa fase tem 8 passos, que vão desde a representação da arquitetura segunda o óptica do TOGAF, Criar modelos de arquitetura, confirmar necessidades e requisitos de negócios, até ver problemas de análise como por exemplos serviços e funções que negócio que podem estar faltando.
Nessa fase que vai nascer a primeira versão da arquitetura técnica, então já vamos ter dois tipos de arquitetura documentadas a de negócio e a técnica. :)
D: Opportunities and Solutions
Um dos objetivos dessa fase é intenficiar pontos de mudanças, ou sejá que sistemas ou serviços que já existem será mudandos para aruitetura alvo. De novo nesta fase serão vistos as possíveis omições ou esquecimentos de análise de serviços e funções e bem como será maturado os requisitos técnicos sobre a perspectiva funcional.
Aqui deve ser utilizada a gestão de riscos e custo tradicional do Pmbok por exemplo, pois não podemos perder muito tempo na busca da arquitetura perfeita, então será prudente setar algun deadline de tempo ou dinheiro.
O trabalho realizado nesta fase vai gerar um lista de impacto no projeto.
E: Migration Planning
Aqui acontece algo muito importante que é a tarefa de priorização de projetos e necessidades. Nesse ponto é preparado um plano apartir de diversas discusões sobre:
- Dependências dos projetos e atividades
- Que componentes vão ter que ser desenvolvidos
- Temos recurso para esses desenvolvimentos?
- Sobre que padrões os componentes e serviços vão ser construidos
- Quando vão estar dispoíveis
- Qual o custo de reteinar os usuários?
- Qual o impacto cultural e se pode ser controlado?
- A Migração é viável?
F: Implementation
Aqui o objetivo é levantar as recomendações para cada projeto de implementação. Aqui devem ser estipulados os contratos tanto em nível de sistema como de SLA para prover uma futura governança em cima disto tudo.
Nesse ponto eixste a junção da Arquitetura com o desenvolvimento, podemos aplicar essa junção com método de desenvolvimentos tradicionais como RUP, OpenUP, Scrum, XP, FDD e outros.
Essa fase é crucial, nela que surgem os primeiros imputs para a tão sonhada governança de TI.
G: Architecture Maintenance
Seu objetivo é estabelecer procedimentos e padrões de manutenção. Aqui será feito outra baseline em cima dos projetos que já estão rodando na arquitetura alvo. Aqui aplicaremos um monitoramento continuo no que deverá ser desenvolvido por conta de nudanças no negócio ou novas necessidades.
Aqui é atualizada a arquitetura técnica e é possível que se gera uma nova demanda de arquitetura corporativa nesse ponto o ciclo começa de novo e volta para a fase A.
Como você podem ver o TOGAF tem um método simples e consico para construção de uma arquitetura corporativa, na medida do possível fui faznedo os links com os métodos de desenvolvimento de software tradicionais aonde acredito que eles tenham junção com o TOGAF.
Abraços e até a próxima.
Leia Mais…
|
0
|
A Diferença de EA e Arquitetura de Software |
arquitetura, desenvolvimento, EA, projeto, SOA, ti | 28/05/2009
Neste posta venho falar de arquitetura, falando de software existem vários níveis de arquitetura, hoje venho escrever um pouco mais sobre isso. Vou ficar com dois níveis ou tipos de arquiteturas que são a Arquitetura de Sistema e a Arquitetura Corporativa. Ainda pretendo traçar uma pequena relação do tema como SOA.
A Complexidade
A Arquitetura de sistemas além de servir como suporte para o desenvolvimento, isso não significa fazer tudo para o desenvolvedor, mas significa pegar as maiores pedras, ou seja, as coisas mais complexas.
Investir na arquitetura de um sistema é sempre um bom negócio, a arquitetura não será a solução para todos os problemas e nem será feita de uma solução única, soluções homogêneas são cada vez mais difíceis. Principalmente falando de grandes empresas com a necessidade de ter cada vez mais flexibilidade e reaproveitamento, este é um cenário para a utilização de SOA, logo prepare-se para ter que lidar com sistemas legados, diversos tipos de tecnologias e vendors, e tudo isso só aumenta mais e mais a complexidade.
A Arquitetura de um sistema já pode ter a sua parcela de complexidade mas quando falamos no envolvimento de vários sistemas a complexidade aumenta e muito, sendo SOA ou não você irá precisar investir na arquitetura corporativa.
Enterprise Architecture
Também conhecida como Arquitetura Corporativa, de facto esta a um nível superior da arquitetura de sistemas. Quando você mais de um sistemas em uma empresa e o funcionamento do seu negócio precisa usar esses sistemas em conjunto você precisará de um outro nível de arquitetura, que seria a Arquitetura Corporativa ou Arquitetura das Arquiteturas.
A Arquitetura Corporativa é considerada também como uma forma de representação e padronização dos sistemas que servem ao negócio da empresa em questão. Falando de SOA, que são princípios para a construção de uma arquitetura voltada a serviços que por natureza vai ter que ser aplicada a mais de um sistema, está mais para EA do que para arquitetura de um sistema.
SOA é EA ?
Existem vários discursos e pontos divergentes nessa questão. Mas SOA são princípios, não existe nada mais especifico que ficam mais ao nível do "O Que fazer" do que especificamente "Como Fazer". Alguns acham que isso é apénas uma questão de maturidade e que logo SOA iria evoluir ao ponto de chegar a se tornar algo mais completo perto até de um certo nível de governança.
Se isso vai acontecer eu já não sei. Mas o que afirmo é que existe muita pressão dos grandes vendors em cima disso, com certeza SOA está no Hype, apesar do ciclo ter caido muito. Os grandes players estão vendendo SOA como se fosse uma tecnologia ou um ferramental, por isso que a adoção de SOA vem caido e o pessoal de TI não está conseguindo provar o valor de SOA para o negocio.
SOA deve ser implementado com bons conhecimentos de engenharia e desenvolvimento, um excelente expertise de processo e de Design, o ferramental e a tecnologia são menos importantes, mas ao mesmo tempo que as empresas ficarem focando mais em tecnologia e ferramentas do que no expertise na construção de sistemas distribuídos nada vai evoluir.
O Troca Troca de Tecnologia
Você que está na TI pode ver um fenômeno que a cada ano que passa fica maior. Cada vez mais é mais difícil construir um sistema do Zero, cada vez mais é comum a construção de um sistema para migrar de tecnologia, algo que foi feito em clipper que será migrado para Java ou .NET.
Independente da linguagem tem sistemas que devem ter sido migrados de tecnologia umas 3 vezes, tudo isso por que? É por que a tecnologia ficou obsoleta, não é só por isso. Eu não tenho dúvidas que Java é melhor que clipper, mas qual é o problema?
O problema é que são estamos trocando de tecnologia e mudando o problema de lugar, ainda cometemos erros básicos de acoplamento e coesão, erro básicos de design, erros de análise de requisitos e de gestão, logo ao trocar de tecnologia não estamos resolvendo esses problemas.
Quando falo de fazer Arquitetura de Sistemas e Arquitetura Corporativa, não falo de tecnologia, falo de padrões, falo de boas práticas, falo de design, falo de baixo acoplamento e alta coesão, isso pode ser feito com qualquer linguagem de programação.
Soluções de Arquiteturas Corporativas
Existem algumas soluções de arquitetura corporativa(EA), uma delas é o framework do Zachman que prove um meio formal para definir a sua arquitetura corporativa. O Framework é muito completo e cobre quase tudo o problema é o alto grau de formalismo e o preço da solução.
Uma solução mais barata é o TOGAF. É um padrão da Open Group que foi desenvolvido no meio dos anos 90. Essa solução ajuda a você lidar com sistemas complexos que por natureza temo seu nível de independência e em certo ponto acabam se sobrepondo.
Toda solução de arquitetura corporativa tem indiferentemente de sua abordagem o principio de aproximar a TI do negócio através do planejamento estratégico. A Arquitetura corporativa tem que ser dinâmica e flexível. Muitas vezes a arquitetura corporativa se completa quando adicionamos a governança de TI. Mais ai já é assunto para outro post. Em outros posts pretendo falar mais sobre o TOGAF.
Abraços e até a próxima.
|
6
|
Como vamos de BPEL Parte 2 - ODE |
arquitetura, BPEL, desenvolvimento, java, ODE, SOA, ti, web-services | 24/05/2009
No post anterior escrevi um pouco sobre BPEL. Neste post vou continuar no assunto mas falando de uma implementação de BPEL que é o ODE. O Apache ODE é uma implementação open source 100% aderente a WS-BPEL 2.0 e compatível com BPEL4WS 1.1.
Orchestration Director Engine é uma implementação muito leve de BPEL, não só pelo fato do ODE rodar em Apache Tomcat ou Jetty que são soluções leves para Java.
A solução de BPEL da Apache conta com uma brilhante solução de arquitetura chamada de JACOB. Essa solução compila o BPEL através de um recurso que pode ser executado em linha de comando para verificar a syntax e a validade do BPEL produzido, esse recurso se chama bpelc.
Desta forma a solução da Apache em tempo de runtime pode executar um processo totalmente em memória, que faz como que a performance seja muito boa, ou utilizar a persistência em banco de dados. Por default o ODE usa o banco de dados Derby mas você pode mudar essa configuração para utilizar outro banco.
Você pode acessar WebService REST com o ODE através de uma extensão, esse recurso é bom mas isso mata a portabilidade do BPEL. A Figura a baixo retirada do site da apache ilustra o desenho geral da boa arquitetura do ODE. 
Arquitetura Geral do ODE
O ODE por dafault roda os processo de maneira Statefull, isso esse statefull é o mesmo statefull do EJB, mas o ODE não usa EJB para fazer isso, ele mantém os estados e cuida da tolerância a falhas com adaptadores de acesso a um Banco de Dados.
No seu cerne está o JACOB que utilizando as técnicas de Closures e Canais consegue ter auto desempenho em paralelismo e nos abstrair desse tipo de complexidade. O Acesso aos WebService se dá ao sua camada de integração utilizando outro produto da Apache o Axis2.
Uma Ferramenta para Design de BPEL
O Pessoal do ODE recomenda o uso do BPEL Designer que é um plugin do eclipse que apesar de alguns bugs é funcional. Esse projeto ainda se encontra na embarcadoura da eclipse. Mas em resumo você pode usar qualquer editor de XML por que o ODE como dito antes é aderente aos padrões de BPEL.
Você pode fazer o deploy de um processo apénas zipando o processo junto do seu descritor que é um arquivo xml chamado obrigatoriamente de deploy.xml. Como dito no outro post esse é um ponto que a especificação de WS-BPEL 2.0 não cobre e nos deixa na mão. Pois falando da solução da ORACLE esse mesmo arquivo se chama bpel.xml e tem outra estrutura.
ODE Embarcado?
Você pode usar o ODE em outros servidor como o Weblogic, Websphere ou até mesmo o JBOSS com o mínimo de configurações. Se preferir pode distribuir o mesmo no Tomcat ou Jetty, isso vai depender da sua estratégia e preocupação com manutenção e gerência de configuração.
Em termos de desenvolvimento é interessante deixar o ODE no Jetty pois ai com o uso de Maven pode automatizar o processo de deploy e start/stop do servidor com o ODE.
Está nos planos do pessoal do ODE em realizar uma integração com SCA usando outro projeto da Apache o Tuscany.
No próximo post pretendo postar "códigos" de exemplo do uso de ODE e com uma aplicação cliente que inicia o processo do ODE e obtém o resultado do processo. Nesse exemplo vou usar o BPEL Designer do eclipse para fazer o BPEL.
Abraços e até a próxima.







