sexta-feira, 27 de dezembro de 2013
domingo, 15 de dezembro de 2013
domingo, 20 de janeiro de 2013
[JPA] Conceitos Importantes
Fonte: http://tomee.apache.org/jpa-concepts.html
Se tem uma coisa que você precisa entender para usar com sucesso a JPA (Java Persistence API), é o conceito de Cache. Infelizmente o cache é uma estrutura interna, não exposta pela JPA via código.
O que você tem que ter em mente sobre o cache da JPA:
Com <persistence-unit transaction-type="JTA"> o container irá cuidar da criação e do rastreamento do EntityManager para você, e neste caso:
É isso aí! Mais informações e exemplos veja em http://tomee.apache.org/jpa-concepts.html
Se tem uma coisa que você precisa entender para usar com sucesso a JPA (Java Persistence API), é o conceito de Cache. Infelizmente o cache é uma estrutura interna, não exposta pela JPA via código.
O que você tem que ter em mente sobre o cache da JPA:
- Um Cache é uma cópia de dados, uma cópia desconectada do banco de dados.
- Flushing é o ato de levar as modificações feitas em cache para o banco de dados.
- Um PersistenceContext é, essencialmente, um Cache.
- Um EntityManager represetne um PersistenceContext (logo, um cache).
- Um EntityManagerFactory cria um EntityManager (e todavia um PersistenceContext/Cache).
Comparando os contextos de persistência RESOURCE_LOCAL e JTA.
Com <persistence-unit transaction-type="RESOURCE_LOCAL"> você é que se responsabiliza por criar e rastrear o EntityManager (PersistenceContext/Cache).- Você precisa usar o EntityManagerFactory para obter um EntityManager.
- A instância do EntityManager obtida é um PersistenceContext/Cache.
- Um EntityManagerFactory pode ser injetado com a anotação @PersistenceUnit apenas (sem @Persistence Context).
- Não é permitido usar @PersistenceContext para se referir a uma unit do tipo RESOURCE_LOCAL.
- Você deve usar EntityTransaction API para iniciar/comitar todas as chamadas para seu ENtityManager.
- Chamar ENtityManagerFactory.createEntityManager() duas vezes resulta em duas instâncias separadas de EntityManager e, é claro, dois PersistenceContext/Caches separados.
- Não é uma boa idéia ter mais de uma instânciade um EntityManager em uso (não crie um segundo EntityManager antes de destruir o primeiro).
Com <persistence-unit transaction-type="JTA"> o container irá cuidar da criação e do rastreamento do EntityManager para você, e neste caso:
- Você não pode usar o EntityManagerFactory para obter um EntityManager.
- Você só pode ter o EntityManager que é fornecido pelo container.
- Um EntityManager pode ser injetado pela anotação @PersistenceContext, somente (sem @PersistenceUnit).
- Você não pode usar @PersistenceUnit para fazer referência a uma unit do tipo JTA.
- O EntityManager fornecido pelo container é uma referência ao PersistenceContext/Cache associado a transação JTA.
- Se não há transações JTA em progresso, o EntityManager não pode ser usado porque não há PersistenceContext/Cache.
- Qualquer um com uma referência para a mesma unit na mesma transação irá automaticamente ter uma referência para o mesmo PersistenceContext/Cache.
- O PersistenceContext/Cache é flushed e limpo a cada commit JTA.
É isso aí! Mais informações e exemplos veja em http://tomee.apache.org/jpa-concepts.html
domingo, 13 de janeiro de 2013
[JSF] Enviar requisição com Ajax
Referência: The Java EE 6 Tutorial Sending an Ajax Request.
Como prometido no post anterior Usando Ajax com JSF vou continuar nos estudos do The Java EE 6 Tutorial, agora mostrando como enviar requisições com Ajax.
O Java EE 6 Tutorial mostra quatro formas para enviar requisições Ajax, são elas:
Se um valor não for especificado para este atributo, ele irá assumir o evento default do componente pai da tag f:ajax correspondente.
Componentes ActionSource, como commandButton, commandLink e inputText tem o valor do atributo action como alvo de seus eventos default.
Exemplo:
Note que estes eventos JSF, apesar de serem baseados em JavaScript, são diferentes dos eventos do DOM que possuem o prefixo "on".
Ao ser executado, o componente participa de todas as fases do ciclo de vida da requisição, exceto da fase Render Response.
O valor do atributo execute também pode ser uma palavra chave como @all, @none, @this e @form, explicados no post anterior Usando Ajax com JSF, referindo-se ao componente com que a tag f:ajax está aninhada.
A seguir, um exemplo mostrando como especificar que um inputText de id userNo seja executado no click de um commandButton de forma assíncrona:
Beleza?!
Agora você já pode sofisticar as interações com usuário em sua camada de apresentação JSF.
No próximo post vamos falar de CDI. Até lá!
Como prometido no post anterior Usando Ajax com JSF vou continuar nos estudos do The Java EE 6 Tutorial, agora mostrando como enviar requisições com Ajax.
O Java EE 6 Tutorial mostra quatro formas para enviar requisições Ajax, são elas:
Usando o atributo event da tag f:ajax
O atributo event define que evento d o DOM irá disparar a ação ajax. Alguns valores possíveis são click, keyup, mouseover, focus e blur.Se um valor não for especificado para este atributo, ele irá assumir o evento default do componente pai da tag f:ajax correspondente.
Componentes ActionSource, como commandButton, commandLink e inputText tem o valor do atributo action como alvo de seus eventos default.
Exemplo:
<h:commandButton id="submit" value="Submit">
<f:ajax event="click" />
</h:commandButton>
<h:outputText id="result" value="#{userNumberBean.response}" />
Note que estes eventos JSF, apesar de serem baseados em JavaScript, são diferentes dos eventos do DOM que possuem o prefixo "on".
Usando o atributo execute da tag f:ajax
Define o componente ou componentes que serão executados no servidor. O componente é identificado pelo seu atributo id e você pode especificar mais de um componente executável, separando-os com um espaço em branco.Ao ser executado, o componente participa de todas as fases do ciclo de vida da requisição, exceto da fase Render Response.
O valor do atributo execute também pode ser uma palavra chave como @all, @none, @this e @form, explicados no post anterior Usando Ajax com JSF, referindo-se ao componente com que a tag f:ajax está aninhada.
A seguir, um exemplo mostrando como especificar que um inputText de id userNo seja executado no click de um commandButton de forma assíncrona:
<h:inputText id="userNo"
title="Type a number from 0 to 10:"
value="#{userNumberBean.userNumber}">
...
</h:inputText>
<h:commandButton id="submit" value="Submit">
<f:ajax event="click" execute="userNo" />
</h:commandButton>
Usando o atributo immediate
Se seu valor estiver configurado para true, seus eventos serão propagados durante a fase Apply Request Values. O valor default é false. Conheça o ciclo de vida JSF para complementar entendimentos.Usando o atributo listener
Utilizado para referenciar um método do lado do servidor a ser executado por uma ação Ajax do lado do cliente. No seguinte exemplo o atributo listener da tag f:ajax chama um método em um bean quando o evento correspondente é disparado, observe:<f:ajax listener="#{mybean.someaction}" render="somecomponent" />
Beleza?!
Agora você já pode sofisticar as interações com usuário em sua camada de apresentação JSF.
No próximo post vamos falar de CDI. Até lá!
Marcadores:
Ajax,
carga e execução de javascript,
facelets,
Faces,
front end,
java,
Java Server Faces,
JavaScript,
JSF,
jsf 2.0,
mauricio da silva marinho,
programação
quinta-feira, 3 de janeiro de 2013
[JSF] Usando Ajax com JSF.
The Java EE 6 Tutorial, Part II The Web Tier, Cap. 11 Using Ajax with JavaServer Faces Technology.
Visão Geral sobre Ajax.
Ajax refere-se a JavaScript e XML, tecnologias que são amplamento usadas para criar conteúdo web dinâmico e assíncrono. O foco deste tutorial está em usar JavaScript em funcionalidades baseadas em Ajax em aplicações web JSF.
JavaScript é uma linguagem orientada a objetos que permite adicionar funcionalidades à camada de apresentação para interações assíncronas com o cliente, onde é originalmente executada (também há JavaScript Side Server).
Quando uma função JavaScript envia uma requisição assíncrona para o servidor, o servidor envia de volta uma resposta usada para atualizar o DOM (Document Object Model) da página.
A resposta do servidor não precisa ser, necessariamente, em XML, também pode ser em JSON (formato de dados JavaScript).
Ajax permite atualização assíncrona e parcial da camada de apresentação, ou seja, funcionalidades Ajax podem trocar informações com o servidor sem a necessidade de submeter ou atualizar a página inteira (refresh).
Usando Ajax com JSF.
Funcionalidades Ajax podem ser adicionadas a aplicações JSF de uma das duas maneiras seguintes:
A tag JSF específica para Ajax é f:ajax e seus atributos serão explicados a seguir.
Exemplo de uso da tag f:ajax
<h:inputText value="">
<f:ajax />
</h:inputText>
Note que quando você usa a tag f:ajax em uma página Facelets, a biblioteca JavaScript que suporta Ajax que já vem no J2EE 6 é carregada implicitamente. Este recurso também pode ser carregado explicitamente, veja mais detalhes em Loading JavaScript as a Resource no The Java EE 6 Tutorial.
No próximo post veremos como enviar uma requisição Ajax e receber uma resposta. Até lá.
Visão Geral sobre Ajax.
Ajax refere-se a JavaScript e XML, tecnologias que são amplamento usadas para criar conteúdo web dinâmico e assíncrono. O foco deste tutorial está em usar JavaScript em funcionalidades baseadas em Ajax em aplicações web JSF.
JavaScript é uma linguagem orientada a objetos que permite adicionar funcionalidades à camada de apresentação para interações assíncronas com o cliente, onde é originalmente executada (também há JavaScript Side Server).
Quando uma função JavaScript envia uma requisição assíncrona para o servidor, o servidor envia de volta uma resposta usada para atualizar o DOM (Document Object Model) da página.
A resposta do servidor não precisa ser, necessariamente, em XML, também pode ser em JSON (formato de dados JavaScript).
Ajax permite atualização assíncrona e parcial da camada de apresentação, ou seja, funcionalidades Ajax podem trocar informações com o servidor sem a necessidade de submeter ou atualizar a página inteira (refresh).
Usando Ajax com JSF.
Funcionalidades Ajax podem ser adicionadas a aplicações JSF de uma das duas maneiras seguintes:
- Programando a funcionaliade Ajax em JavaScript diretamente na página.
- Usando uma biblioteca com funcionalidades Ajax embutidas.
A tag JSF específica para Ajax é f:ajax e seus atributos serão explicados a seguir.
Atributo | Tipo | Descrição |
---|---|---|
disabled | javax.el.ValueExpression retorna um Boolean | Se true o comportamento Ajax não deve ser renderizado, se false, o comportamento Ajax deve ser renderizado, o default é false. |
event | javax.el.ValueExpression retorna uma String | Uma String que identifica o tipo de evento em que a ação Ajax será aplicada. Se especificado, deve ser um dos eventos suportados pelo componente. Se não especificado, o evento default (o evento que dispara a requisição Ajax) é determinado para o componente. O evento dafult é action para componentes ActionSource e valueChange para componentes EditableValueHolder. |
execute | javax.el.ValueExpression retorna um Object | Uma Collection que identifica uma lista de componentes para ser executada no servidor. Se uma literal é especificada, deve ser uma String delimitada por espaços de identificadores de componentes e/ou uma das palavras chave. Se uma ValueExpression é especificada, deve referenciar uma propriedade que retorna uma Collection de String objetos. Se não especificada, o valor default é @this. |
immediate | javax.el.ValueExpression retorna um Boolean | Um Boolean que indica se a entrada é para ser processada antes do ciclo de vida. |
listener | javax.el.MethodExpression | O nome do método listener que será chamado quando um AjaxBehaviorEvent for disparado. |
onevent | javax.el.ValueExpression retorna uma String | O nome da função JavaScript que irá manipular os UI events. |
onerror | javax.el.ValueExpression retorna uma String | O nome da função JavaScript que irá manipular os erros. |
render | javax.el.ValueExpression retorna um Object | Uma Collection que identifica uma lista de componentes a serem renderizados. Se uma literal é especificada deve ser uma String delimitada por espaços de identificadores de componentes e/ou de palavras-chave. Se uma ValueExpression é especificada, deve referenciar uma propriedade que retorna uma Collection de objetos String. Se não especificada, o valor default é @none. |
Palavra-chave | Descrição |
---|---|
@all | Todos os componentes identificados |
@form | Os componentes do formulário |
@none | Nenhum componentes identificado |
@this | O elemento que disparou a requisição |
Exemplo de uso da tag f:ajax
<h:inputText value="">
<f:ajax />
</h:inputText>
Note que quando você usa a tag f:ajax em uma página Facelets, a biblioteca JavaScript que suporta Ajax que já vem no J2EE 6 é carregada implicitamente. Este recurso também pode ser carregado explicitamente, veja mais detalhes em Loading JavaScript as a Resource no The Java EE 6 Tutorial.
No próximo post veremos como enviar uma requisição Ajax e receber uma resposta. Até lá.
Assinar:
Postagens (Atom)