You are on page 1of 19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

we have science
Um blog sobre Java e computao. ;)
P OS T E DB Y G A B R I E L P OS T E DON J UNE1 4 , 2 0 1 3 P OS T E DUND E R A P I S , C D I , E J B3 , J A V A , J A V A+ MY S QL , J B OS S , J S F , P R I ME F A C E S C OMME NT S 8 C OMME NT S

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7

i 1 Vote Faz tempo que no crio uma aplicao completa por aqui, at porque no gosto muito, acho mais produtivo modularizar os tutoriais, mas, de vez em nunca vou estar postando um desses, at porque atinge um pblico maior. Voc ir precisar do JBoss integrado no seu Eclipse, para isso siga os passos deste tutorial (http://wehavescience.com/2013/03/16/instalando-o-jboss-as-7-1-no-eclipse/), e tambm voc ir precisar configurar o Data Source da sua aplicao no JBoss AS 7 (http://wehavescience.com/2013/05/11/configurando-um-data-source-no-jboss-7/), porm vamos deixar isso para mais tarde.
wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/ 1/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

O JBoss AS 7 contm todos os jars que iremos precisar, como por exemplo, JSF 2, Weld (implementao do CDI), Hibernate, etc. Fora isso, voc tambm ir precisar do jar do PrimeFaces, que voc pode achar neste link (http://primefaces.org/downloads.html). Voc dever criar uma base de dados no MySQL ou no banco que voc preferir, porm, nesse tutorial estou utilizando o MySQL como exemplo.

O link para o download desta aplicao se encontra no final do artigo.

Antes de tudo, vamos criar nosso projeto.

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

2/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

(http://wehavescience.files.wordpress.com/2013/06/ejbcdi3.png)

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

3/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

(http://wehavescience.files.wordpress.com/2013/06/ejbcdi4.png)

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

4/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

(http://wehavescience.files.wordpress.com/2013/06/ejbcdi5.png) Coloque o jar do PrimeFaces na pasta lib da sua aplicao. Agora, vamos comear com as classes. Comeando pela nica entidade a ser criada: 1 2 3 4 5 p a c k a g ec o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e n t i t i e s ; i m p o r tj a v a x . p e r s i s t e n c e . E n t i t y ; i m p o r tj a v a x . p e r s i s t e n c e . G e n e r a t e d V a l u e ; i m p o r tj a v a x . p e r s i s t e n c e . I d ;
5/19

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8

i m p o r tj a v a x . p e r s i s t e n c e . T a b l e ; @ E n t i t y @ T a b l e ( n a m e = " c l i e n t e s " ) p u b l i cc l a s sC l i e n t e{ @ I d @ G e n e r a t e d V a l u e p r i v a t eL o n gi d ; p r i v a t eS t r i n gn o m e ; p r i v a t eL o n gi d a d e ; p r i v a t eS t r i n gp r o f i s s a o ; p r i v a t eS t r i n gt e l e f o n e ; p u b l i cL o n gg e t I d ( ){ r e t u r ni d ; } p u b l i cv o i ds e t I d ( L o n gi d ){ t h i s . i d=i d ; } p u b l i cS t r i n gg e t N o m e ( ){ r e t u r nn o m e ; } p u b l i cv o i ds e t N o m e ( S t r i n gn o m e ){ t h i s . n o m e=n o m e ; } p u b l i cL o n gg e t I d a d e ( ){ r e t u r ni d a d e ; } p u b l i cv o i ds e t I d a d e ( L o n gi d a d e ){ t h i s . i d a d e=i d a d e ; } p u b l i cS t r i n gg e t P r o f i s s a o ( ){ r e t u r np r o f i s s a o ; } p u b l i cv o i ds e t P r o f i s s a o ( S t r i n gp r o f i s s a o ){ t h i s . p r o f i s s a o=p r o f i s s a o ; } p u b l i cS t r i n gg e t T e l e f o n e ( ){ r e t u r nt e l e f o n e ; } p u b l i cv o i ds e t T e l e f o n e ( S t r i n gt e l e f o n e ){ t h i s . t e l e f o n e=t e l e f o n e ; }

Nossas duas interfaces do DAO. GenericDAO:


wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/ 6/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1

p a c k a g ec o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . d a o ; i m p o r tj a v a . u t i l . C o l l e c t i o n ; i m p o r tj a v a x . p e r s i s t e n c e . Q u e r y ; p u b l i ci n t e r f a c eG e n e r i c D A O < T ,P K >{ v o i dp e r s i s t ( Te n t i t y ) ; v o i dm e r g e ( Te n t i t y ) ; v o i dr e m o v e ( Te n t i t y ) ; v o i dr e m o v e B y I d ( P Ki d ) ; Tg e t B y I d ( P Ki d ) ; C o l l e c t i o n < T >f i n d A l l ( ) ; } Q u e r yc r e a t e Q u e r y ( S t r i n gq u e r y ,O b j e c t . . .p a r a m e t e r s ) ;

E ClienteDAO: 1 2 3 4 5 6 7 p a c k a g ec o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . d a o ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e n t i t i e s . C l i e n t e ; p u b l i ci n t e r f a c eC l i e n t e D A Oe x t e n d sG e n e r i c D A O < C l i e n t e ,L o n g > { }

E as implementaes. GenericDAOImpl: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 p a c k a g ec o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . d a o . i m p l ; i m p o r tj a v a . l a n g . r e f l e c t . P a r a m e t e r i z e d T y p e ; i m p o r tj a v a . u t i l . C o l l e c t i o n ; i m p o r tj a v a x . p e r s i s t e n c e . E n t i t y M a n a g e r ; i m p o r tj a v a x . p e r s i s t e n c e . P e r s i s t e n c e C o n t e x t ; i m p o r tj a v a x . p e r s i s t e n c e . Q u e r y ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . d a o . G e n e r i c D A O ; @ S u p p r e s s W a r n i n g s ( " u n c h e c k e d " ) p u b l i cc l a s sG e n e r i c D A O I m p l < T ,P K >i m p l e m e n t sG e n e r i c D A O < T ,P K >{ @ P e r s i s t e n c e C o n t e x t ( u n i t N a m e = " W e H a v e S c i e n c e P U " ) p r o t e c t e dE n t i t y M a n a g e re n t i t y M a n a g e r ; p u b l i cv o i dp e r s i s t ( Te n t i t y ){ e n t i t y M a n a g e r . p e r s i s t ( e n t i t y ) ; } p u b l i cv o i dm e r g e ( Te n t i t y ){
7/19

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7

e n t i t y M a n a g e r . m e r g e ( e n t i t y ) ;

p u b l i cv o i dr e m o v e ( Te n t i t y ){ e n t i t y M a n a g e r . r e m o v e ( e n t i t y ) ; } p u b l i cv o i dr e m o v e B y I d ( P Ki d ){ Te n t i t y=g e t B y I d ( i d ) ; e n t i t y M a n a g e r . r e m o v e ( e n t i t y ) ; } p u b l i cTg e t B y I d ( P Ki d ){ r e t u r ne n t i t y M a n a g e r . f i n d ( g e t T y p e C l a s s ( ) ,i d ) ; }

p u b l i cC o l l e c t i o n < T >f i n d A l l ( ){ r e t u r ne n t i t y M a n a g e r . c r e a t e Q u e r y ( " F R O M"+g e t T y p e C l a s s ( ) . g e t N a m e . g e t R e s u l t L i s t ( ) ; } p u b l i cQ u e r yc r e a t e Q u e r y ( S t r i n gq u e r y ,O b j e c t . . .p a r a m e t e r s ){ Q u e r yq=e n t i t y M a n a g e r . c r e a t e Q u e r y ( q u e r y ) ; f o r( i n ti=1 ;i< =p a r a m e t e r s . l e n g t h ;i + + ){ q . s e t P a r a m e t e r ( i ,p a r a m e t e r s [ i ] ) ; } } r e t u r nq ;

p r i v a t eC l a s s < T >g e t T y p e C l a s s ( ){ r e t u r n( C l a s s < T > )( ( P a r a m e t e r i z e d T y p e )g e t C l a s s ( ) . g e t G e n e r i c S u p e r c l a s s ( ) ) . g e t A c t u a l T y p e A r g u m e n t s ( ) [ 0 ] ; }

E ClienteDAOImpl: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 p a c k a g ec o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . d a o . i m p l ; i m p o r tj a v a . i o . S e r i a l i z a b l e ; i m p o r tj a v a x . e j b . S t a t e l e s s ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . d a o . C l i e n t e D A O ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e n t i t i e s . C l i e n t e ;

@ S t a t e l e s s p u b l i cc l a s sC l i e n t e D A O I m p le x t e n d sG e n e r i c D A O I m p l < C l i e n t e ,L o n g >i m p l e m e S e r i a l i z a b l e ,C l i e n t e D A O{ p r i v a t es t a t i cf i n a ll o n gs e r i a l V e r s i o n U I D=2 4 0 4 3 6 0 4 5 7 2 4 6 3 8 8 2 8 0 L ; }

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

OBS.: Por mais que tenha sido meio que intil criar um GenericDAO para uma aplicao que s

8/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

OBS.: Por mais que tenha sido meio que intil criar um GenericDAO para uma aplicao que s ter um DAO, interessante pensar sempre que a aplicao pode crescer e voc vai poder estar adicionando novos DAOs, sendo assim, economizando muito cdigo apenas herdando de GenericDAO. Vamos criar outro EJB, que ser um bean de sesso sem estado, no qual far as operaes e validaes necessrias para inserir/alterar/retornar dados do DAO. Antes, a interface Local: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 p a c k a g ec o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e j b s ; i m p o r tj a v a . u t i l . C o l l e c t i o n ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e n t i t i e s . C l i e n t e ; p u b l i ci n t e r f a c eC l i e n t e L o c a l{ v o i dp e r s i s t ( C l i e n t ec l i e n t e ) ; v o i dm e r g e ( C l i e n t ec l i e n t e ) ; v o i dr e m o v e ( C l i e n t ec l i e n t e ) ; C o l l e c t i o n < C l i e n t e >f i n d A l l ( ) ; } C l i e n t eg e t B y I d ( L o n gi d ) ;

E a implementao: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 p a c k a g ec o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e j b s . i m p l ; i m p o r tj a v a . i o . S e r i a l i z a b l e ; i m p o r tj a v a . u t i l . C o l l e c t i o n ; i m p o r tj a v a x . e j b . S t a t e l e s s ; i m p o r tj a v a x . e j b . T r a n s a c t i o n M a n a g e m e n t ; i m p o r tj a v a x . i n j e c t . I n j e c t ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . d a o . C l i e n t e D A O ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e j b s . C l i e n t e L o c a l ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e n t i t i e s . C l i e n t e ; @ S t a t e l e s s p u b l i cc l a s sC l i e n t e B e a ni m p l e m e n t sS e r i a l i z a b l e ,C l i e n t e L o c a l{ p r i v a t es t a t i cf i n a ll o n gs e r i a l V e r s i o n U I D=1 6 4 2 6 5 6 6 1 6 6 4 2 6 5 4 0 5 6 L ; @ I n j e c t p r i v a t eC l i e n t e D A Od a o ; p u b l i cv o i dp e r s i s t ( C l i e n t ec l i e n t e ){ v a l i d a r C l i e n t e ( c l i e n t e ) ; d a o . p e r s i s t ( c l i e n t e ) ; } p u b l i cv o i dm e r g e ( C l i e n t ec l i e n t e ){
9/19

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1

v a l i d a r C l i e n t e ( c l i e n t e ) ; d a o . m e r g e ( c l i e n t e ) ;

p u b l i cv o i dr e m o v e ( C l i e n t ec l i e n t e ){ i f( c l i e n t e . g e t I d ( )= =0| |c l i e n t e . g e t I d ( )= =n u l l ){ t h r o wn e wI l l e g a l A r g u m e n t E x c e p t i o n ( " C a m p oi dn op o d es e rn u l oo uv a z i o " ) ; } } d a o . r e m o v e B y I d ( c l i e n t e . g e t I d ( ) ) ;

p u b l i cC o l l e c t i o n < C l i e n t e >f i n d A l l ( ){ r e t u r nd a o . f i n d A l l ( ) ; } p u b l i cC l i e n t eg e t B y I d ( L o n gi d ){ i f( i d= =0| |i d= =n u l l ){ t h r o wn e wI l l e g a l A r g u m e n t E x c e p t i o n ( " C a m p oi dn op o d es e rn u l oo uv a z i o " ) ; } } r e t u r nd a o . g e t B y I d ( i d ) ;

p r i v a t ev o i dv a l i d a r C l i e n t e ( C l i e n t ec l i e n t e ){ i f( " " . e q u a l s ( c l i e n t e . g e t N o m e ( ) )| |c l i e n t e . g e t N o m e ( )= =n u l l t h r o wn e wI l l e g a l A r g u m e n t E x c e p t i o n ( " C a m p on o m en op o d es e rn u l oo uv a z i o " ) ; } i f( " " . e q u a l s ( c l i e n t e . g e t P r o f i s s a o ( ) )| |c l i e n t e . g e t P r o f i s s a o ( )= t h r o wn e wI l l e g a l A r g u m e n t E x c e p t i o n ( " C a m p op r o f i s s on op o d es e rn u l oo uv a z i o " ) ; } i f( " " . e q u a l s ( c l i e n t e . g e t T e l e f o n e ( ) )| |c l i e n t e . g e t T e l e f o n e ( )= = t h r o wn e wI l l e g a l A r g u m e n t E x c e p t i o n ( " C a m p ot e l e f o n en op o d es e rn u l oo uv a z i o " ) ; } i f( c l i e n t e . g e t I d a d e ( ) . e q u a l s ( 0 )| |c l i e n t e . g e t I d a d e ( )= =n u l l t h r o wn e wI l l e g a l A r g u m e n t E x c e p t i o n ( " C a m p oi d a d en op o d es e rn u l oo uv a z i o " ) ; } }

O @Inject faz com que voc injete o objeto dentro do outro objeto. Por ltimo, nosso ManagedBean: 1 2 3 4 5 6 p a c k a g ec o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . m a n a g e d b e a n s ; i m p o r tj a v a . i o . S e r i a l i z a b l e ; i m p o r tj a v a . u t i l . L i s t ; i m p o r tj a v a x . a n n o t a t i o n . P o s t C o n s t r u c t ;
10/19

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3

i m p o r tj a v a x . e n t e r p r i s e . c o n t e x t . R e q u e s t S c o p e d ; i m p o r tj a v a x . f a c e s . a p p l i c a t i o n . F a c e s M e s s a g e ; i m p o r tj a v a x . f a c e s . c o n t e x t . F a c e s C o n t e x t ; i m p o r tj a v a x . i n j e c t . I n j e c t ; i m p o r tj a v a x . i n j e c t . N a m e d ; i m p o r to r g . p r i m e f a c e s . e v e n t . R o w E d i t E v e n t ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e j b s . C l i e n t e L o c a l ; i m p o r tc o m . w e h a v e s c i e n c e . c a d a s t r o c l i e n t e s . e n t i t i e s . C l i e n t e ; @ N a m e d @ R e q u e s t S c o p e d p u b l i cc l a s sG e r e n c i a m e n t o C l i e n t e s M Bi m p l e m e n t sS e r i a l i z a b l e{ p r i v a t es t a t i cf i n a ll o n gs e r i a l V e r s i o n U I D=1 8 8 0 9 3 5 3 1 5 5 4 8 3 3 6 0 3 7 L ; @ I n j e c t p r i v a t eC l i e n t e L o c a lb e a n ; p r i v a t eC l i e n t ec l i e n t e ; p r i v a t eL i s t < C l i e n t e >c l i e n t e s ; @ P o s t C o n s t r u c t p r i v a t ev o i di n i t ( ){ c l i e n t e s=( L i s t < C l i e n t e > )b e a n . f i n d A l l ( ) ; c l i e n t e=n e wC l i e n t e ( ) ; } p u b l i cS t r i n gc a d a s t r a r ( ){ t r y{ b e a n . p e r s i s t ( c l i e n t e ) ; c l i e n t e s=( L i s t < C l i e n t e > )b e a n . f i n d A l l ( ) ; }c a t c h( E x c e p t i o ne ){ a d d M e s s a g e ( e . g e t M e s s a g e ( ) ) ; } } r e t u r n" " ;

p u b l i cS t r i n ga t u a l i z a r ( ){ t r y{ b e a n . m e r g e ( c l i e n t e ) ; }c a t c h( E x c e p t i o ne ){ a d d M e s s a g e ( e . g e t M e s s a g e ( ) ) ; } } r e t u r n" " ;

p u b l i cv o i de x c l u i r ( ){ t r y{ b e a n . r e m o v e ( c l i e n t e ) ; c l i e n t e s=( L i s t < C l i e n t e > )b e a n . f i n d A l l ( ) ; }c a t c h( E x c e p t i o ne ){ a d d M e s s a g e ( e . g e t M e s s a g e ( ) ) ; }


11/19

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 9 0 9 1 9 2

} p u b l i cv o i do n E d i t ( R o w E d i t E v e n te v e n t ){ c l i e n t e=( C l i e n t e )e v e n t . g e t O b j e c t ( ) ; a t u a l i z a r ( ) ; a d d M e s s a g e ( " C l i e n t e"+c l i e n t e . g e t N o m e ( )+"a t u a l i z a d o ! " ) ; } p r i v a t ev o i da d d M e s s a g e ( S t r i n gm e s s a g e ){ F a c e s M e s s a g em s g=n e wF a c e s M e s s a g e ( m e s s a g e ) ; F a c e s C o n t e x t . g e t C u r r e n t I n s t a n c e ( ) . a d d M e s s a g e ( n u l l ,m s g ) ; } p u b l i cC l i e n t eg e t C l i e n t e ( ){ r e t u r nc l i e n t e ; } p u b l i cv o i ds e t C l i e n t e ( C l i e n t ec l i e n t e ){ t h i s . c l i e n t e=c l i e n t e ; } p u b l i cL i s t < C l i e n t e >g e t C l i e n t e s ( ){ r e t u r nc l i e n t e s ; } p u b l i cv o i ds e t C l i e n t e s ( L i s t < C l i e n t e >c l i e n t e s ){ t h i s . c l i e n t e s=c l i e n t e s ; }

OBS.: Note que quando uso CDI ao invs do @ManagedBean, eu tenho que utilizar a classe javax.enterprise.context.RequestScoped ao invs de javax.faces.bean.RequestScoped. Agora, vamos configurar o Data Source, veja como neste link (http://wehavescience.com/2013/05/11/configurando-um-data-source-no-jboss-7/). Aps configurar o Data Source com as informaes do banco dentro do standalone.xml do seu JBoss, vamos adicionar nosso persistence.xml dentro do src/META-INF/ 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6

< ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " U T F 8 "? > < p e r s i s t e n c ex m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a i n s t a n c e( h t t p : / x s i : s c h e m a L o c a t i o n = " h t t p : / / j a v a . s u n . c o m / x m l / n s / p e r s i s t e n c e( h t t p : / / j a v e r s i o n = " 2 . 0 "x m l n s = " h t t p : / / j a v a . s u n . c o m / x m l / n s / p e r s i s t e n c e( h t t p : / / j < p e r s i s t e n c e u n i tn a m e = " W e H a v e S c i e n c e P U "t r a n s a c t i o n t y p e = " J T A " > < p r o v i d e r > o r g . h i b e r n a t e . e j b . H i b e r n a t e P e r s i s t e n c e < / p r o v i d e r > < j t a d a t a s o u r c e > j a v a : j b o s s / d a t a s o u r c e s / M y S q l D S < / j t a d a t a s o u r c e > < p r o p e r t i e s > < p r o p e r t yn a m e = " h i b e r n a t e . s h o w _ s q l "v a l u e = " t r u e "/ > < p r o p e r t yn a m e = " h i b e r n a t e . f o r m a t _ s q l "v a l u e = " f a l s e "/ > < p r o p e r t yn a m e = " h i b e r n a t e . u s e _ s q l _ c o m m e n t s "v a l u e = " f a l s e " < p r o p e r t yn a m e = " h i b e r n a t e . j d b c . w r a p _ r e s u l t _ s e t s "v a l u e = " f a l s e < p r o p e r t yn a m e = " h i b e r n a t e . h i b e r n a t e . c a c h e . u s e _ q u e r y _ c a c h e " < p r o p e r t yn a m e = " h i b e r n a t e . h b m 2 d d l . a u t o "v a l u e = " c r e a t e d r o p " < / p r o p e r t i e s > < / p e r s i s t e n c e u n i t >
12/19

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

1 7

< / p e r s i s t e n c e >

Nessa linha: () 1 < j t a d a t a s o u r c e > j a v a : j b o s s / d a t a s o u r c e s / M y S q l D S < / j t a d a t a s o u r c e >

() voc vai referenciar o Data Source que voc configurou dentro do seu standalone.xml. Quando utilizamos CDI, precisamos colocar um arquivo chamado beans.xml dentro do WEB-INF da sua aplicao, mesmo que vazio. 1 2 3 4 5

< ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " U T F 8 " ? > < b e a n sx m l n s = " h t t p : / / j a v a . s u n . c o m / x m l / n s / j a v a e e( h t t p : / / j a v a . s u n . c o m / x m l / n x s i : s c h e m a L o c a t i o n = " h t t p : / / j a v a . s u n . c o m / x m l / n s / j a v a e e( h t t p : / / j a v a . s u n < / b e a n s >

OBS.:Caso sua aplicao no seja WEB, como por exemplo, seja um EJB Project, voc deve colocar o beans.xml dentro da pasta /src/META-INF/ Por mais que eu no tenha alterado nada no web.xml, c est ele: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6

< ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " U T F 8 " ? > < w e b a p px m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a i n s t a n c e( h t t p : / / w w w < d i s p l a y n a m e > C a d a s t r o C l i e n t e s W E B < / d i s p l a y n a m e > < w e l c o m e f i l e l i s t > < w e l c o m e f i l e > i n d e x . h t m l < / w e l c o m e f i l e > < / w e l c o m e f i l e l i s t > < s e r v l e t > < s e r v l e t n a m e > F a c e sS e r v l e t < / s e r v l e t n a m e > < s e r v l e t c l a s s > j a v a x . f a c e s . w e b a p p . F a c e s S e r v l e t < / s e r v l e t c l a s s > < l o a d o n s t a r t u p > 1 < / l o a d o n s t a r t u p > < / s e r v l e t > < s e r v l e t m a p p i n g > < s e r v l e t n a m e > F a c e sS e r v l e t < / s e r v l e t n a m e > < u r l p a t t e r n > * . j s f < / u r l p a t t e r n > < / s e r v l e t m a p p i n g > < / w e b a p p >

E o faces-config.xml 1 2 3 4 5 6 7 8 9 < ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " U T F 8 " ? >

< f a c e s c o n f i g x m l n s = " h t t p : / / j a v a . s u n . c o m / x m l / n s / j a v a e e( h t t p : / / j a v a . s u n . c o m / x m l / n s / j x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a i n s t a n c e( h t t p : / / w w w . w 3 . o r x s i : s c h e m a L o c a t i o n = " h t t p : / / j a v a . s u n . c o m / x m l / n s / j a v a e e( h t t p : / / j a v a . s u n v e r s i o n = " 2 . 0 " > < / f a c e s c o n f i g >

Por ltimo, a pgina gerenciamentoClientes.xhtml, que ficar localizada dentro de WebContent/


wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/ 13/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7

< ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " U T F 8 " ? > < ! D O C T Y P Eh t m lP U B L I C" / / W 3 C / / D T DX H T M L1 . 0T r a n s i t i o n a l / / E N "" h t t p : / / w < h t m lx m l n s = " h t t p : / / w w w . w 3 . o r g / 1 9 9 9 / x h t m l( h t t p : / / w w w . w 3 . o r g / 1 9 9 9 / x h t m l ) x m l n s : h = " h t t p : / / j a v a . s u n . c o m / j s f / h t m l( h t t p : / / j a v a . s u n . c o m / j s f / h t m l ) x m l n s : f = " h t t p : / / j a v a . s u n . c o m / j s f / c o r e( h t t p : / / j a v a . s u n . c o m / j s f / c o r e ) x m l n s : p = " h t t p : / / p r i m e f a c e s . o r g / u i( h t t p : / / p r i m e f a c e s . o r g / u i ) " > < h : h e a d > < t i t l e > w e h a v e s c i e n c e . c o m-G e r e n c i a m e n t od eC l i e n t e s < / t i t l e > < / h : h e a d > < h : b o d y > < h : f o r mi d = " f o r m " > < p : g r o w li d = " m e s s a g e s "/ >

< p : d a t a T a b l ee d i t a b l e = " t r u e "i d = " t a b e l a C l i e n t e s "v a l u e = " # { g e r e n c < p : a j a xe v e n t = " r o w E d i t "l i s t e n e r = " # { g e r e n c i a m e n t o C l i e n t e s M B . u p d a t e = " : f o r m : t a b e l a C l i e n t e s: f o r m : m e s s a g e s "/ >

< p : c o l u m nh e a d e r T e x t = " I D "s t y l e = " w i d t h : 5 % " > < p : c e l l E d i t o r > < f : f a c e tn a m e = " o u t p u t " > < h : o u t p u t T e x tv a l u e = " # { c l i e n t e . i d } "/ > < / f : f a c e t > < f : f a c e tn a m e = " i n p u t " > < p : i n p u t T e x tv a l u e = " # { c l i e n t e . i d } "s t y l e = " w i d t h : < / f : f a c e t > < / p : c e l l E d i t o r > < / p : c o l u m n >

< p : c o l u m nh e a d e r T e x t = " N o m e "s t y l e = " w i d t h : 3 0 % " > < p : c e l l E d i t o r > < f : f a c e tn a m e = " o u t p u t " > < h : o u t p u t T e x tv a l u e = " # { c l i e n t e . n o m e } "/ > < / f : f a c e t > < f : f a c e tn a m e = " i n p u t " > < p : i n p u t T e x tv a l u e = " # { c l i e n t e . n o m e } "s t y l e = " w i d t < / f : f a c e t > < / p : c e l l E d i t o r > < / p : c o l u m n > < p : c o l u m nh e a d e r T e x t = " I d a d e "s t y l e = " w i d t h : 5 % " > < p : c e l l E d i t o r > < f : f a c e tn a m e = " o u t p u t " > < h : o u t p u t T e x tv a l u e = " # { c l i e n t e . i d a d e } "/ > < / f : f a c e t > < f : f a c e tn a m e = " i n p u t " > < p : i n p u t T e x tv a l u e = " # { c l i e n t e . i d a d e } "s t y l e = < / f : f a c e t > < / p : c e l l E d i t o r > < / p : c o l u m n > < p : c o l u m nh e a d e r T e x t = " P r o f i s s o "s t y l e = " w i d t h : 3 0 % " > < p : c e l l E d i t o r > < f : f a c e tn a m e = " o u t p u t " > < h : o u t p u t T e x tv a l u e = " # { c l i e n t e . p r o f i s s a o } "/ > < / f : f a c e t >
14/19

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 9 0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 1 0 0 1 0 1 1 0 2 1 0 3 1 0 4 1 0 5 1 0 6 1 0 7 1 0 8 1 0 9 1 1 0

< f : f a c e tn a m e = " i n p u t " > < p : i n p u t T e x tv a l u e = " # { c l i e n t e . p r o f i s s a o } "s t y l e < / f : f a c e t > < / p : c e l l E d i t o r > < / p : c o l u m n > < p : c o l u m nh e a d e r T e x t = " T e l e f o n e "s t y l e = " w i d t h : 2 5 % " > < p : c e l l E d i t o r > < f : f a c e tn a m e = " o u t p u t " > < h : o u t p u t T e x tv a l u e = " # { c l i e n t e . t e l e f o n e } "/ > < / f : f a c e t > < f : f a c e tn a m e = " i n p u t " > < p : i n p u t T e x tv a l u e = " # { c l i e n t e . t e l e f o n e } "s t y l e < / f : f a c e t > < / p : c e l l E d i t o r > < / p : c o l u m n >

< p : c o l u m n > < p : c o m m a n d B u t t o ni c o n = " u i i c o n c l o s e "u p d a t e = " : f o r m : t a b e a c t i o n = " # { g e r e n c i a m e n t o C l i e n t e s M B . e x c l u i r } " > < f : s e t P r o p e r t y A c t i o n L i s t e n e r t a r g e t = " # { g e r e n c i a m e n t o C l i e n t e s M B . c l i e n t e } " < / p : c o m m a n d B u t t o n > < / p : c o l u m n > < p : c o l u m ns t y l e = " w i d t h : 5 % " > < p : r o w E d i t o r/ > < / p : c o l u m n > < / p : d a t a T a b l e > < b r/ > < b r/ > < p : p a n e l G r i dc o l u m n s = " 2 " > < f : f a c e tn a m e = " h e a d e r " > C a d a s t r a rn o v oc l i e n t e < / f : f a c e t >

< h : o u t p u t T e x tv a l u e = " N o m e :"/ > < p : i n p u t T e x tv a l u e = " # { g e r e n c i a m e n t o C l i e n t e s M B . c l i e n t e . n o m e } " < h : o u t p u t T e x tv a l u e = " I d a d e :"/ > < p : i n p u t T e x tv a l u e = " # { g e r e n c i a m e n t o C l i e n t e s M B . c l i e n t e . i d a d e } < h : o u t p u t T e x tv a l u e = " P r o f i s s o :"/ > < p : i n p u t T e x tv a l u e = " # { g e r e n c i a m e n t o C l i e n t e s M B . c l i e n t e . p r o f i s < h : o u t p u t T e x tv a l u e = " T e l e f o n e :"/ > < p : i n p u t T e x tv a l u e = " # { g e r e n c i a m e n t o C l i e n t e s M B . c l i e n t e . t e l e f o

< p : c o m m a n d B u t t o nv a l u e = " C a d a s t r a r ! "a c t i o n = " # { g e r e n c i a m e n t o C u p d a t e = " : f o r m : t a b e l a C l i e n t e s: f o r m : m e s s a g e s "/ > < / p : p a n e l G r i d > < / h : f o r m > < / h : b o d y > < / h t m l >

Rode sua aplicao no JBoss e faa os testes:


wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/ 15/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

http://localhost:8080/CadastroClientesWEB/gerenciamentoClientes.jsf (http://localhost:8080/CadastroClientesWEB/gerenciamentoClientes.jsf) Qualquer dvida ou erro, no deixe de comentar! E tambm: Faa um blogueiro feliz, funcionou, gostou, ajudou, por favor, comente ou d um rate no artigo!

Voc pode estar baixando a aplicao completa aqui! (http://www.4shared.com/zip/x0Ei1WAs/APLICAO_UTILIZAND O_CDI_EJB_3_J.html?)


Um grande abrao e bons estudos! []s

You May Like


1.

About these ads (http://en.wordpress.com/aboutthese-ads/)

cdi (http://wehavescience.com/tag/cdi-2/) dependency injection (http://wehavescience.com/tag/dependency-injection/) di (http://wehavescience.com/tag/di/) ejb (http://wehavescience.com/tag/ejb/) ejb 3 (http://wehavescience.com/tag/ejb-3-2/) hibernate (http://wehavescience.com/tag/hibernate-2/) id (http://wehavescience.com/tag/id/) injecao de dependencia (http://wehavescience.com/tag/injecao-de-dependencia/) jboss (http://wehavescience.com/tag/jboss/) jboss 7 (http://wehavescience.com/tag/jboss-7/) jboss as (http://wehavescience.com/tag/jboss-as/) jboss as 7 (http://wehavescience.com/tag/jboss-as-7/) jpa (http://wehavescience.com/tag/jpa/) jsf (http://wehavescience.com/tag/jsf-2/) primefaces (http://wehavescience.com/tag/primefaces/)
wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/ 16/19

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

weld (http://wehavescience.com/tag/weld/)

8 thoughts on Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7
1. marcell says: July 24, 2013 at 1:20 am e como se cria uma query? Reply wehavescience says: July 24, 2013 at 1:34 am No entendi muito bem sua pergunta, se entendi, no muito o escopo desse artigo, mas voc pode criar uma Query da seguinte forma: 1 2 3 4 5 6 7 8 9 1 0 1 1 2. Reply MARCELL says: September 18, 2013 at 1:57 pm O mtodo: public Query createQuery(String query, Object parameters); No entendi Na interface GenericDAO no poderia ter um mtodo: public EntityManager getEntityManager(); ? Reply
wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/ 17/19

S t r i n gq u e r y=" S U AQ U E R YA Q U I " ; Q u e r yq=e n t i t y M a n a g e r . c r e a t e Q u e r y ( q u e r y ) ; / / C a s oe s t e j ab u s c a n d ou m al i s t a q . g e t R e s u l t L i s t ( ) ; / / C a s oe s t e j ab u s c a n d ou m n i c or e s u l t a d o q . g e t S i n g l e R e s u l t ( ) ; / / C a s oe s t e j ai n s e r i n d o / a t u a l i z a n d o q . e x e c u t e U p d a t e ( ) ;

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

wehavescience says: September 18, 2013 at 2:09 pm Isso voc quem define, caso queira deixar o entityManager pblico para outras classes acessarem, acho que o mais recomendvel seria deix-lo protected, assim apenas outros DAOs visualizariam ele, no qualquer classe. []s 3. Reply Marcelo says: October 2, 2013 at 12:42 am Boa noite, Tentei implementar essa aplicao utilizando um tabela bairro do meu banco de dados, mas quando tento executar o mtodo findAll() recebe o seguinte erro abaixo, qual o problema, procurei no google e no encontrei nada que pudesse ajudar. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 Reply wehavescience says: October 2, 2013 at 1:28 am Primeiramente, voc precisa ver se voc mapeou a entidade corretamente de acordo com sua tabela. Esse erro ocorre apenas quando voc utiliza o mtodo findAll? Caso voc d um getById funciona? Reply
wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/ 18/19

2 1 : 3 5 : 1 0 , 5 0 0E R R O R[ o r g . j b o s s . e j b 3 . i n v o c a t i o n ]( h t t p l o c a l h o s t 1 2 7 . 0 . 0 a to r g . j b o s s . a s . e j b 3 . t x . C M T T x I n t e r c e p t o r . h a n d l e E x c e p t i o n I n O u r T x ( C M a to r g . j b o s s . a s . e j b 3 . t x . C M T T x I n t e r c e p t o r . i n v o k e I n O u r T x ( C M T T x I n t e r c a to r g . j b o s s . a s . e j b 3 . t x . C M T T x I n t e r c e p t o r . r e q u i r e d ( C M T T x I n t e r c e p t o r a to r g . j b o s s . a s . e j b 3 . t x . C M T T x I n t e r c e p t o r . p r o c e s s I n v o c a t i o n ( C M T T x I n a to r g . j b o s s . i n v o c a t i o n . I n t e r c e p t o r C o n t e x t . p r o c e e d ( I n t e r c e p t o r C o n t a to r g . j b o s s . a s . e j b 3 . c o m p o n e n t . i n t e r c e p t o r s . C u r r e n t I n v o c a t i o n C o n t e a to r g . j b o s s . i n v o c a t i o n . I n t e r c e p t o r C o n t e x t . p r o c e e d ( I n t e r c e p t o r C o n t a to r g . j b o s s . a s . e j b 3 . c o m p o n e n t . i n t e r c e p t o r s . L o g g i n g I n t e r c e p t o r . p r o a to r g . j b o s s . i n v o c a t i o n . I n t e r c e p t o r C o n t e x t . p r o c e e d ( I n t e r c e p t o r C o n t a to r g . j b o s s . a s . e e . c o m p o n e n t . N a m e s p a c e C o n t e x t I n t e r c e p t o r . p r o c e s s I n a to r g . j b o s s . i n v o c a t i o n . I n t e r c e p t o r C o n t e x t . p r o c e e d ( I n t e r c e p t o r C o n t a to r g . j b o s s . a s . e j b 3 . c o m p o n e n t . i n t e r c e p t o r s . A d d i t i o n a l S e t u p I n t e r c e a to r g . j b o s s . i n v o c a t i o n . I n t e r c e p t o r C o n t e x t . p r o c e e d ( I n t e r c e p t o r C o n t a to r g . j b o s s . a s . e e . c o m p o n e n t . T C C L I n t e r c e p t o r . p r o c e s s I n v o c a t i o n ( T C C a to r g . j b o s s . i n v o c a t i o n . I n t e r c e p t o r C o n t e x t . p r o c e e d ( I n t e r c e p t o r C o n t a to r g . j b o s s . i n v o c a t i o n . C h a i n e d I n t e r c e p t o r . p r o c e s s I n v o c a t i o n ( C h a i n a to r g . j b o s s . a s . e e . c o m p o n e n t . V i e w S e r v i c e $ V i e w . i n v o k e ( V i e w S e r v i c e . j a to r g . j b o s s . a s . e e . c o m p o n e n t . V i e w D e s c r i p t i o n $ 1 . p r o c e s s I n v o c a t i o n ( V a to r g . j b o s s . i n v o c a t i o n . I n t e r c e p t o r C o n t e x t . p r o c e e d ( I n t e r c e p t o r C o n t a to r g . j b o s s . i n v o c a t i o n . C h a i n e d I n t e r c e p t o r . p r o c e s s I n v o c a t i o n ( C h a i n a to r g . j b o s s . a s . e e . c o m p o n e n t . P r o x y I n v o c a t i o n H a n d l e r . i n v o k e ( P r o x y I n a tb r . c o m . j a p a k o m b o c r m . e j b s . B a i r r o L o c a l $ $ $ v i e w 1 . f i n d A l l ( U n k n o w nS o

27/10/13

Criando uma aplicao utilizando CDI, EJB 3, JPA 2, PrimeFaces 3 e JBoss AS 7 | we have science

Marcelo says: October 11, 2013 at 6:03 pm D erro tambm com getById. 4. Gabriel says: October 17, 2013 at 6:29 am Reblogged this on Blog Newbe Sources. Reply

Blog at WordPress.com. | The Zoren Theme.

wehavescience.com/2013/06/14/criando-uma-aplicacao-utilizando-cdi-ejb-3-jpa-2-primefaces-3-e-jboss-as-7/

19/19

You might also like