Arquivo de fevereiro \04\-03:00 2011

Meu primeiro bpel

Primeiramente o que é um bpel( Business Process Execution ) é como se fosse uma programação para orquestrar serviços. No bpel podemos fazer chamadas de várias coisas como chamar web services, EJB, acesso a base com um adapter atribuições de variáveis controle de fluxo entre muitas coisas.
Primeiro vamos criar um projeto web com um web service para concatenar um parâmetro com o resto da frase, no JDeveloper selecione no menu Application – New

depois clieque em Next e Finish.
Com o projeto web criado podemos criar nosso serviço para concatenar a frase. Crie um nova classe e coloque as anotações para ser considerada como serviço:

package web;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

@WebService

public class ConcatenaMensagem {

public ConcatenaMensagem() {

super();

}

/**

* Efetua concatenacao

* @param nome

* @return

*/

@WebMethod(operationName = "concatenar")

public String concatenar(@WebParam(name = "nome") String nome){

return nome.concat(", seja bem vindo!");

}

}

 

depois de criar a classe faça deploy do projeto no Weblogic.

Depois de feito o deploy entre no console do weblogic vá em deployment(Implantações em português)

Clique no Serviço ConcatenaMensagemService

Selecione a Aba Teste, expanda o serviço neste ponto você

terá duas opções uma para ver o WSDL dele, e outra para

testar esse serviço, selecione o Test Cliente e obtenha um link parecido

com este http://localhost:7001/MeuPrimeiroBpelWEB-Web-context-root/ConcatenaMensagemPort?WSDL

que nada mais é do que o caminho para o WSDL.

Muito bem agora vamos criar o projeto para o bpel. Clique com o botão direito em Projects vá na opção New, Selecione BPM Tier depois selecione BPM Project e clique em ok

Clique em Finish!

Em seguida abrirá está tela

Dê um nome para o processo bpel, selecione o Template para Synchronous BPEL Process e clique em ok.

O JDeveloper abrirá o composite.xml, dê dois clique no PrimeiroBpel, agora vamos começar a fazer o que enteressa, que é

chamar o serviço a partir do bpel. O nosso bpel por padrão traz uma entrada de dados chamada input que é do tipo string que é o que precisamos, se nós precisássemos de outro tipo teríamos que modificar o xsd do bpel, mais não é este o caso.

Agora vamos colocar nosso web service no bpel, na paleta de componentes selecione BPEL Services depois clique no item Web Service e arraste para a barra Partner Links, assim que você arrastar aparecerá uma tela para ser colocado o WSDL veja na imagem:

Coloque um nome como Concatena_Service deixe o Type como Reference, e no Campo WSDL coloque o caminho do serviço, aquele que ensinei acima como achar. Aperte Tab, automaticamente o JDeveloper colocar o nome do método que criamos no Port Type, feito isso clique em ok.

Aparecerá uma outra tela clique em ok também.

Agora vamos invocar o “método do serviço”, Selecione na paleta de componentes BPEL Constructs e depois selecione invoke e arraste entre o receiveInput e replyOutput. Clique na seta do lado direito do invoke e arraste até o serviço. Aparecerá a seguinte tela

Na aba input temos que criar uma variável do tipo de entrada do serviço, selecione Element e clique na lupa

Depois de selecionar Concatenar clique em ok. agora vamos inicializar ela. Clique na aba Initialize selecione a variável inputVariavel e clique em ok.

Depois selecione a variável que acabou de criar clique em ok.

Depois na aba de Output faça a mesma coisa para a variável de output só que selecione ConcatenarResponse no Element dela

Selecione inputVariable e clique em ok.

na Aba Output, faça a mesma coisa só que selecione outputVariable, depois clique em ok e ok novamente. ficará mais ou menos assim

Agora vamos fazer o deploy para testar nossa aplicação.

No Projeto MeuPrimeiroBpelBPM Clique com o botão direito Deploy e selecione o item que tem os três pontinho no meu caso MeuPrimeiroBpelBPM…

Abrirá uma janela, selecione Deploy to Application Server clique em Next

Clique em Next novamente, selecione o dominio com SOA para instalar um domínio com SOA consulte o blog do Thiago Vespa

Clique em Next

Depois clique em Finish.

Agora vamos testar nossa aplicação no Enterprise Manager para isso acesse http://localhost:7001/em

Depois expanda o item SOA – soa-infra – default, selecione o item MeuPrimeiroBPELBPM, depois do lado direito clique no botão Testar

Clique em Fazer parse de WSDL.

Abrirá a seguinte tela

Agora vá até em Argumentos de Entrada e coloque o parâmetro nome para ser concatenado e depois clique no botão Testar Web Service

Repare que ele concatenou o nome ao seja bem vindo, nós também podemos ver o fluxo de execução clicando no botão Acionar Rastreamento de Fluxo.

download do projeto

Referência

http://soasoabem.blogspot.com/2008/10/o-que-bpel.html

http://www.thiagovespa.com.br/

, , ,

Deixe um comentário

Criando um componente de popup no jsf 2.0 com primefaces para confirmação

Em pouco tempo usando JSF 2.0 gostei muito de um recurso que já havia com o facelets que é a composição de componentes, ou seja com os componentes do JSF você pode construir um outro componente de forma declarativa e simples.
Irei demonstrar abaixo um exemplo de tela de confirmação que tenho botões sendo renderizado conforme os parâmetros do novo componente.
Começamos colocando a seguinte estrutura no WebContent
estrutura

A seguinte estrutura WebContent– resources – comps é obrigatória para organização dos componentes, comps foi um nome que eu dei onde ficaria os componentes porém pode ser outro nome e conter outras pastas com outros componentes também.
Vamos ver agora o conteúdo do componente de confirmacao.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:cc="http://java.sun.com/jsf/composite"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.prime.com.tr/ui">

    <!-- INTERFACE -->
    <cc:interface>
        <cc:attribute name="mensagemDialog" required="true" />
        <cc:attribute name="widgetVar" required="true" />
        <cc:attribute name="simTitulo" required="true" />
        <cc:attribute name="naoTitulo" required="true" />
        <cc:attribute name="simUpdate" required="true" />
        <cc:attribute name="simOnClick" />
        <cc:attribute name="naoOnClick" />
        <cc:attribute name="naoUpdate" />
        <cc:attribute name="scriptOnComplete" />
        <cc:attribute name="simAction"
            method-signature="java.lang.String action()" />
        <cc:attribute name="naoAction"
            method-signature="java.lang.String action()" />
        <cc:attribute name="notAjaxSim" required="false" />
    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>
        <p:confirmDialog modal="true" header="#{cc.attrs.mensagemDialog}"
            message="#{cc.attrs.mensagemDialog}"
            widgetVar="#{cc.attrs.widgetVar}">
            <h:panelGrid columns="2">
                <p:commandButton style="float:left" value="#{cc.attrs.simTitulo}"
                    action="#{cc.attrs.simAction}" update="#{cc.attrs.simUpdate}"
                    rendered="#{not empty cc.attrs.simUpdate}"
                    title="#{cc.attrs.simTitulo}"
                    oncomplete="#{cc.attrs.widgetVar}.hide();#{cc.attrs.scriptOnComplete}"
                    onclick="#{cc.attrs.simOnClick}" ajax="#{!cc.attrs.notAjaxSim}"/>
                <p:commandButton style="float:left" value="#{cc.attrs.simTitulo}"
                    action="#{cc.attrs.simAction}" title="#{cc.attrs.simTitulo}"
                    rendered="#{empty cc.attrs.simUpdate}"
                    onclick="#{cc.attrs.simOnClick}"
                    oncomplete="#{cc.attrs.widgetVar}.hide();#{cc.attrs.scriptOnComplete}" />
                <p:commandButton style="float:right" value="#{cc.attrs.naoTitulo}"
                    rendered="#{not empty cc.attrs.naoUpdate}"
                    title="#{cc.attrs.naoTitulo}" action="#{cc.attrs.naoAction}"
                    update="#{cc.attrs.naoUpdate}" onclick="#{cc.attrs.naoOnClick}"
                    oncomplete="#{cc.attrs.widgetVar}.hide();#{cc.attrs.scriptOnComplete}" />
                <p:commandButton style="float:right" value="#{cc.attrs.naoTitulo}"
                    rendered="#{empty cc.attrs.naoUpdate}"
                    onclick="#{cc.attrs.naoOnClick}" action="#{cc.attrs.naoAction}"
                    title="#{cc.attrs.naoTitulo}"
                    oncomplete="#{cc.attrs.widgetVar}.hide();#{cc.attrs.scriptOnComplete}" />
            </h:panelGrid>
        </p:confirmDialog>
    </cc:implementation>
</ui:composition>

Começamos a declarar nosso componente com <ui:composition> e suas referencias para podermos utilizar na implementação do componente.

Com o <cc:interface> declaramos os atributos que nosso componente terá para ser utilizado na implementação do componente neste lugar indicamos se o atributo será um método,bean ou requerido. No nosso componente teremos vários atributos mais não vou detelhar o que eles fazem porque não é o foco do post.

Na tag <cc:implementation> será o coração do nosso componente aqui, serão colocados os outros componentes que formaram o novo componente para utilizarmos em nossas páginas para o reaproveitamento de código.

Para referenciarmos nosso atributos declarados na interface usamos o #{cc.attrs}, assim conseguimos obter o valor dos atributos. É importante dizer também que os componentes são precedidos de um id gerado automaticamente pelo jsf, que nada mais é que o id do novo componente, mais é possivel também determinar como vai ser esse id.

Agora como utilizar este componente, primeiramente temos que declarar este componente no cabeçalho para utilizarmos veja como é simples:

xmlns:comps="http://java.sun.com/jsf/composite/comps"

Agora veja como declarar o componente para utilização;

<comps:confirmacao
                    mensagemDialog="#{mes['ged.cidades.municipio.msgSalva']}"
                    widgetVar="confirmCid" simTitulo="#{mes.sim}"
                    naoTitulo="#{mes.nao}" simAction="#{cidadeMBean.salvar}"
                    simUpdate="grow,fieldCidade" scriptOnComplete="popCidades.hide()" />

Neste caso que exemplifiquei de como declarar o componente não coloquei o id assim ele irá gerar automaticamente mas eu poderia ter colocado id=”confirma” para não ser gerado automaticamente.Veja a imagem dela sendo executada:

salvando cidade

Agora onde você for utilizar alguma confirmação é só reutilizar o componente, assim economizando tempo e código.

Simples não, é isso ai bons códigos pessoal

Referências

http://www.primefaces.org/

, ,

10 Comentários

%d blogueiros gostam disto: