Posts Marcados Java

Redimensionar imagem com java e obter o array de bytes

Desta vez irei postar algo que precisei a alguns dias, para redimensionar imagens e guardar essas imagens,
em uma pasta do S.O. Porém quando eu estava tentando guardar seu array de Leia o resto deste post »

, , , , , ,

6 Comentários

Insert complexo com relacionamento no ADF BC 11g

Olá a todos, este post surgiu de uma necessidade minha para uma inserção em mais de uma tabela, existem outras formas de fazer. Agradeço ao meu amigo Caio Gallo por ter me explicado como realizar esse tipo de inserção. O meu exemplo vai ser uma inserção por relacionamento, algo extremamente simples como Autor e seus livros, imagine se você quisesse inserir o autor do livro pelo relacionamento do livro com o autor.
Bom vamos começar com a parte que interessa, primeiramente crie um projeto FusionDeveloper  no JDevelper veja a estrutura:

Após isso vamos criar nosso Application Module e o EO’s e VO’s de nossa aplicação. Para isso clique com o botão direito no Model e depois em New. Na tela selecione Adf Busines Components e depois selecione Business Components from Tables

Clique em ok. Depois selecione a conexão com o banco e clique em ok

Depois disso clique no botão query e selecione as duas tabelas, como na imagem abaixo

feito isso clique em Next, selecione as duas tabelas também para cria os Updatable View Objects das nossas tabelas, este lugar é onde vamos realizar nossas operações de inserts.

clique em Next novamente e crie os Read-Only View Objects como feito nos Updatable View Objects. Na próxima tela dê um nome para nosso Application Moduel.

clique em Next, se você quiser na próxima tela poderá pedir para o JDeveloper criar o diagram, clique em Next novamente e depois em Finsh.
Veja a estrutura do projeto como ficou até agora

Agora selecione o VO, LivroView clique em java, depois clique no lápis em Java Classes selecione

  • Generate View Objec Class e
  • Generate View Row Class

Após isso clique em ok.

no VO AutorView Faça a mesma coisa.

O próximo passo é criar a classe Java do AppModule, abra o AppModule vá em Java e em Java Classes clique no lápis,
e selecione o item Generate Application Module Class e clique em ok.
Outra coisa a se fazer no nosso application module é colocar o nossos VO para ser utilizados, para isso clique na opção Data Model, em Available View Objects selecione LivroView e AutorView e coloque no lado direito DataModel.

Por padrão quando criamos nossos VOs ele já adiciona no AppModule porém, se criarmos outro VO teremos que fazer isso da forma descrita acima.

Agora Abra o LivroViewImpl.java e crie um método no meu caso vou o método vai se chamar inserindoLivro. Vou colocar a inserção como HardCode mesmo só para o exemplo do post, veja o código como ficou.

Para executarmos o nosso exemplo vou fazer de forma bem simples apenas colocar um botão em uma página e fazer a chamada do método pelos bindings do ADF. Mais antes disso é preciso que possa aparecer nosso método na interface do binding. Para isso abra o LivroView vá em Java em Client Interface clique no lápis, aparecerá uma tela com o nosso método, selecione ele e clique na seta para direita e depois clique em ok, veja na imagem abaixo.

Pronto, Agora vamos na aba de Data Controls clicamos no refresh e nosso método aparecerá veja

Clique no inserindoLivro e arraste para a jsp. E selecione a opção de Adf Button.
Depois é só executar a aplicação e testar

Download do Código e Base

, , ,

2 Comentários

Resolvendo o problema do immediate true no JSF

Este post trata-se de um “problema” que nos afeta quando precisamos do immediate=true e também precisamos capturar o valor de algum campo do formulário. Existe uma forma de obter o valor do componente desejado, que vou demonstrar.
Crie um projeto JSf . Depois crie uma página para e coloque um componente input com as opções required=true e faça um binding com o ManagedBean.
Inclua um botão coloque um ActionListener e a opção immediate=true.

nomeInput.processUpdates(FacesContext.getCurrentInstance());
System.out.println(“NOME “+nomeInput.getSubmittedValue());

nomeInput.setValue(nomeInput.getSubmittedValue());

o nomeInput.process(…), irá realizar a atualização do valor do componente, o getSubmittedValue irá pegar o valor que foi submetido
e assim temos o valor que foi digitado no campo. Abaixo o exemplo da implementação

download

até a próxima.

, ,

Deixe um comentário

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: