Skip to content

Instantly share code, notes, and snippets.

@jeffbicca
Created April 11, 2012 18:09
Show Gist options
  • Save jeffbicca/2361046 to your computer and use it in GitHub Desktop.
Save jeffbicca/2361046 to your computer and use it in GitHub Desktop.
Migração Demoiselle 1 para Demoiselle 2
Eis aqui as experiências que tive até o momento, ao migrar algumas funcionalidades de um sistema, desenvolvido usando
Demoiselle 1 com JSF 1.2, RichFaces 3.3, JPA para Demoiselle 2, JSF 2, RichFaces 4 e J2EE 6.
*** XHTML:
- Mudar xmlns do a4j para xmlns:a4j="http://richfaces.org/a4j"
- Mudar tag "<body>" para "<h:body>".
- Mudar tag "<head> para "<h:head>".
- Retirar o prefixo "on" dos eventos atribuidos na propriedade "event" das tags ajax.
Ex.: JSF1: "<a4j:support event="onchange">", JSF2: "<a4j:ajax event="change">"
*** XHTML (específico RichFaces):
- Chamadas JS para RichFaces foram modificadas. Modificar para tentar usar sempre EL
"(#{rich:component('idComponente')}).nomeDoMetodo()"
Ex.: modal: "#{rich:component('loadingModal')}.show()"
- No caso de modais, ainda é possível exibir/ocultar diretamente por JS:
"RichFaces.ui.PopupPanel.showPopupPanel('loadingModal')" / "RichFaces.ui.PopupPanel.hidePopupPanel('loadingModal')"
- Mudar tag "<a4j:form>" para "<h:form>" padrão JSF.
- Mudar tag "<rich:modalPanel>" para "<rich:popupPanel modal="true">" equivalente.
- Mudar tag "<a4j:support>" para "<a4j:ajax>" ou "<f:ajax>":
-- Mudar propriedade "ajaxSingle" para "execute="@this"".
-- Mudar propriedade "reRender" para "render".
- Cuidado: referências a this nas chamadas para oncomplete (por exemplo), não passa mais a referência ao objeto que
completou, mas sim ao objeto Window! Como alternativa, passar event OU event.source.
*** ManagedBeans
- Retirar "extends AbstractManagedBean" , "extends SuperCrudMB", "implements IFacade"
- Anotar classes como "@ViewController"
- Classe "implements Serializable" (verificar necessidade).
- Remover referências no faces-config.xml!!! :)
*** BusinessControllers
- Anotar classes como "@BusinessController".
- Classe "implements Serializable" (verificar necessidade).
- Referências ao método "findById" do DAO devem ser trocadas para "load" equivalente.
*** DAOs
- Classes que "extends SuperCrudDAO" agora "extends JPACrud"
- Anotar classes como "@PersistenceController".
- DICA: em métodos que controlam a transaction fazendo commit ou rollback diretamente pelo entityManager ou session,
podem ser decorados agora com a annotation "@Transactional"
*** Entities JPA
- Retirar "implements IPojo". Colocar "implements Serializable" (obrigatório).
*** Configuration
- Anotar classe com annotation "@Configuration".
- Remover as annotations "@ConfigKey" e tentar utilizar a convenção já estabelecida pelo Demoiselle. Caso isto não seja
possível, utilizar a annotation "@Name".
*** Scheduler
- Até o momento, o Demoiselle 2 não dispõe de um componente ou extensão equivalente ao que se tem disponível no
Demoiselle 1. O que mais chega perto é o uso do Scheduler padrão do EJB. Caso não queira se utilizar EJBs no projeto,
a alternativa é utilizar um scheduler independente, como o Quartz Scheduler.
*** Geral
- Trocar as annotations "@Injection" por "@Inject", padrões do CDI!!! :)
- Remover as interfaces que só estão sendo utilizadas para funcionar as antigas "@Injection"!!! :)
- Classe ManagedBeanUtil não existe mais:
-- Nos casos do uso do método addMessage: Fazer a injeção de referência ao MessageContext e utilizar o método add.
Ex.: messageContext.add("mensagem").
- Instância de FacesContext, que normalmente era capturado utilizando métodos static, agora podem ser injetados
diretamente com @Inject FacesContext facesContext.
- ManagedBeans declarados com escopo de sessão no faces-config.xml, agora passam a receber a annotation
"@SessionScoped", padrão do CDI. :)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment