From 9142f14bfd95798028051e53d11b0af2882a40be Mon Sep 17 00:00:00 2001 From: Arthur Kato Date: Tue, 31 Mar 2015 13:38:15 +0000 Subject: [PATCH 1/4] =?UTF-8?q?Parte=20que=20envolve=20CGLIB=20e=20m=C3=A9?= =?UTF-8?q?todos=20proxiados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 10 -------- pom.xml | 5 ++++ .../java/br/com/akato/hibernate/Pessoa.java | 5 ++++ .../com/akato/hibernate/proxy/MyFakeList.java | 18 ++++++++++++++ .../akato/hibernate/proxy/MyInterceptor.java | 10 ++++++++ .../hibernate/proxy/MyProxyCGLIBService.java | 22 ++++++++++++++++++ .../br/com/akato/hibernate/Endereco.class | Bin 1511 -> 2214 bytes .../br/com/akato/hibernate/GeraTabelas.class | Bin 940 -> 1000 bytes .../com/akato/hibernate/HibernateUtil.class | Bin 986 -> 1129 bytes .../br/com/akato/hibernate/Pessoa.class | Bin 1968 -> 2371 bytes .../br/com/akato/hibernate/PessoaDAO.class | Bin 2122 -> 1861 bytes .../com/akato/hibernate/TestaPessoaDAO.class | Bin 1869 -> 828 bytes .../akato/hibernate/proxy/MyFakeList.class | Bin 0 -> 1013 bytes .../akato/hibernate/proxy/MyInterceptor.class | Bin 0 -> 1362 bytes .../hibernate/proxy/MyProxyCGLIBService.class | Bin 0 -> 954 bytes 15 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 src/main/java/br/com/akato/hibernate/proxy/MyFakeList.java create mode 100644 src/main/java/br/com/akato/hibernate/proxy/MyInterceptor.java create mode 100644 src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java create mode 100644 target/classes/br/com/akato/hibernate/proxy/MyFakeList.class create mode 100644 target/classes/br/com/akato/hibernate/proxy/MyInterceptor.class create mode 100644 target/classes/br/com/akato/hibernate/proxy/MyProxyCGLIBService.class diff --git a/.classpath b/.classpath index 9fc2de7..0a1dadd 100644 --- a/.classpath +++ b/.classpath @@ -6,22 +6,12 @@ - - - - - - - - - - diff --git a/pom.xml b/pom.xml index 0c971a1..38908db 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,11 @@ 5.1.10 + + cglib + cglib + 3.1 + \ No newline at end of file diff --git a/src/main/java/br/com/akato/hibernate/Pessoa.java b/src/main/java/br/com/akato/hibernate/Pessoa.java index dd959c9..7b9868f 100644 --- a/src/main/java/br/com/akato/hibernate/Pessoa.java +++ b/src/main/java/br/com/akato/hibernate/Pessoa.java @@ -32,6 +32,11 @@ public Pessoa(String nome,Long cpf){ this.enderecos = new HashSet(); } + //apenas para o exemplo de CGLIB + public Pessoa(Long id){ + this.id = id; + } + // public String getNome() { return this.nome; } diff --git a/src/main/java/br/com/akato/hibernate/proxy/MyFakeList.java b/src/main/java/br/com/akato/hibernate/proxy/MyFakeList.java new file mode 100644 index 0000000..17b8ed7 --- /dev/null +++ b/src/main/java/br/com/akato/hibernate/proxy/MyFakeList.java @@ -0,0 +1,18 @@ +package br.com.akato.hibernate.proxy; + +public class MyFakeList { + private Object[] objetos = new Object[10]; + private int size = 0; + + public void add(T t){ + this.objetos[size] = t; + size++; + } + public int getSize(){ + return this.size; + } + @SuppressWarnings("unchecked") + public T get(int ref){ + return (T) this.objetos[ref]; + } +} diff --git a/src/main/java/br/com/akato/hibernate/proxy/MyInterceptor.java b/src/main/java/br/com/akato/hibernate/proxy/MyInterceptor.java new file mode 100644 index 0000000..dc7df37 --- /dev/null +++ b/src/main/java/br/com/akato/hibernate/proxy/MyInterceptor.java @@ -0,0 +1,10 @@ +package br.com.akato.hibernate.proxy; + +import java.lang.reflect.Method; + +public class MyInterceptor implements MethodInterceptor {}{ + public Object intercept(Object object, Method method, Object[]args,MethodProxy methodProxy){ + System.out.println("--------------Meu Proxy em Ação--------------------"); + System.out.println("Excutando método interceptado : " + method.getName()); + } +} diff --git a/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java b/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java new file mode 100644 index 0000000..e0cc85a --- /dev/null +++ b/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java @@ -0,0 +1,22 @@ +package br.com.akato.hibernate.proxy; + +import br.com.akato.hibernate.Pessoa; + +public class MyProxyCGLIBService { + public MyFakeList criarListaFake(){ + final MyInterceptor c = new MyInterceptor(); + MyFakeList objetoProxiado = (MyFakeList) Enhancer.create(MyFakeList.class,c); + return objetoProxiado; + } + + public static void main(String[] args) { + MyFakeList list = new MyProxyCGLIBService().criarListaFake(); + list.add(new Pessoa(4l)); + list.add(new Pessoa(5l)); + list.add(new Pessoa(6l)); + int qtdeItens = list.getSize(); + Pessoa p = list.get(6); + System.out.println(String.format("Id: %d ", p.getId())); + System.out.println(String.format("Qtde Itens na lista: %d ", qtdeItens)); + } +} diff --git a/target/classes/br/com/akato/hibernate/Endereco.class b/target/classes/br/com/akato/hibernate/Endereco.class index 806a1190b38fd30789fd9cbd4b466465e09c4763..078fc17abb8275a4961bcc59870aec9a5160a737 100644 GIT binary patch literal 2214 zcmeHITTc@~6h2!@FKa8v%?l`l3Q|Qj7=00AVn{VLix@!?A7{Hm8Qh&|W@m}~9)E<1 zCi?D=GM?Gec9EqO65o92?3|f1-#PQmIbVPN`uZIJ)?lp&ISb}J7d}(0DT|P|VElj{QYWCIYu$p`cd^hsWDRl1Bkl$4 zg%DCx&83Je$h!?6oyOf)OfZFU{9PKv43|poh796R;5092$Skk}*;3S(v62={q#|u= z#gkYC5r@p|7TPR|B*ojfXI$rP;(*|n+)XNucI1{YQ7i6i$we=6;TacPKeu3U`E3L^ zLmYSh#s^=XYAj|i){K~IblGn1R^}Ov0Q6(;01V+I-B#2YD0YX@7&64-?nEz>Octxtlne6M(z7aI7SA8|Hzah2+BR6oT>VAl%77Sjt3L zgryWhZXiM}6X6~#rw|6`u#$;TgSiyK;2fMxg!|{<;ZY{SgLClkBm*G_E680A9`>qX I6>SILH-I%vIRF3v literal 1511 zcmZ`(TTc@~6h5=Gg_hQ0xhRx!Q?xCY1@ZErAu$9Ariu~L#3wWDPRd|ALw2`D{*@*Y z6CeBm{wU)&+ih9v_F?C8&Y5$*^L?lN{paT|BHE=V<76>fZn$<+cWnNN``SL24dE*8 z3;R$x!WB(DP6Z) zgs?vvc$v0tx!loRS2HR^u%7y^4A7=jw}zVqxJIt_#&2o-AWye9%x5oXpH8wG)oJN#>$m?niwr+ zDMz==X(>y2N-@gUq!Mqt9Y}h{p@rco>7&1~z_{4l%d>)d&F(!J^|B)(|isqi{ebd=vc%q*X97hF@BOEJF)! zm8Usz-_AJt3T*& zb>o_f)y-=veG9TIV=VvxQ4#ARik47kiB@1)={*C?HQbOOz`%l&L1Cf5J-Q#3v9TLp zvihCYzv5t#Np89#dWd9%HiCdKA%nFHi@~^$XbXGF;9I|emIP;$zVrXu`fayi&hR< zhSHh15J4<-J=hD+WaJnI)|6ImouRKXf5?#CG$%3#kD>U1-Llr$JO&wCKhRdTOnf0v zI0-gYESxf$H?0X{nY328@9j4vS4q=Y$BnHozQ2Y?LTlrADES-5KfxPmeMfN9=u=g1 z+ZXlk#M~J!xVvgf-|MZa7Byrdwk|vW_+6lTsE<5`3h2i$!+53o(czl2O4nCY2Z~jt z8(! literal 940 zcma)4T~8B16g^Y6EM2Sp0IPyfK!hzNZuGT=gf!?&{YXk`z^Cc%upQXWklC%_Z}~zK zN&Er+DC6CQgksw0%iOtl?wot>z312OA3p)S#-5EF!)D)jz8-q~oG02F$i6U&C&GI# z3_s$15%JiD#ZW%u-?$fX6?&igXTnby=HE&slYNFcx6xy;+By&p=1?dik9metM=J4g zG$cquiUdQoqkSIrxRI%U8?=&vj2X5%|7OynDnl+6L(To#xntB#j8tK((X&xuXlN5o zbmE_e-hom&;fd6$t<|XvM<#O|lu@v;#IQP}_-7Hvnx}cSBA(zWLxl&yEu0A2G#=u< z?@o}(Vy#B!zge_wEHl(+FgR3!Fv8b1o-^#+2Tin&yg`5XCI}+0>kq_`A6{N)lQ>wx zTDpch4c47P<=z-*aOsDQA~x}Y_Uao!5@5)?Cnwov4@^j1E>0OaEuZGg(410Z#?Wbr zxtP%Zp3ux@=!4VMBjbyAGF4G|LYuEr5nuzvgG3GF=tknB(mfJZ1%B>j9zkSXZ)HOj|h(r&Z5c!kGbn$>5ixyH(IbBxswdzN*D y^*i)s!Ur5I5N3%`Yb2gJDtL*dtm66&Dz+#B%38xVcBp2Zs=8=oE$q@u4$VJ%KJ6#~ diff --git a/target/classes/br/com/akato/hibernate/HibernateUtil.class b/target/classes/br/com/akato/hibernate/HibernateUtil.class index 76c6e19f467e656d2d7f499a0b2cca747ce25eca..4156eb6e87a0cc90047aecb19a46aeefafa9a476 100644 GIT binary patch literal 1129 zcmcIj-)j>=5dJ2Ox#Sv~HrC%ix`Igh(nIjch#JER3qI~$x0kJ#-LSVQ^e-zY zDER0fB~C7hB{X1*`Z71OJNL~uv)}yq`S~k=XAl7@geQrMQag;~C+Tf8(1~(JdKJB$ zd;4DJ0jh-cV|gN@T$(KUkQ}Sj6M`d|dh1U4GVZCO(AMltPr8KKOKr4&MOf)<9}ud$ z_D}^_CA7|g-Z*Dn9oLDz?;EEIo1dsd!F)zKm!9Fo$k`-U!{UVq8~uS2dN{Jq3+u9- z-(*E9jj>)NO3X3-XYyjFONt9`g%tjDq{7DQ3A3`5U2BeXHg?m#E>iyczpg}Vmi!0$ zSAh%>qSZuzb;8X~eE!Nk@3hIf6BV>#ZPfemkY(1F{IG;}Y*U#ZNT(<9?6B$wx*$A_ zFQZP@T9_$6qe@uqY|qu$t>X@1do(nH+o?hPvtuB|Ay`zHPW|&WdClI;@+3_Kzm-2= zLj^y8A4$Tgw+`$ zUN8$Sk}BK6BCZl@!t*BJ((49dI3(;fd*{;9Sf_PK&ObPH3@j1WW-xdhdNPu(PB>h* zu#6jo#r{YIUUou+_2%WK*^EvJgqs%TQ6N-$DwNMgC%mnfq8~_t-P5iJ4n?FAe-g|y zZ^F)hh%u4J0xu^%QaqXM-V9lp+ris4eHl;a5|(Ev>6CE?Edxy!lHGY$s)aVT2xa|V zhEr7YK#w9C{>F*TRzGCGwXXLQT-z7#ta@SDdr^sKAaSnzF_4Wwh5m&IA${js9yjmO#yb&th;{zk#6yJ diff --git a/target/classes/br/com/akato/hibernate/Pessoa.class b/target/classes/br/com/akato/hibernate/Pessoa.class index ed1c851be497c2ad40752f18f0365fa874e99c63..daaa1b20d99282b1bf70bd3b2d3c64d5058efadd 100644 GIT binary patch literal 2371 zcmd^>TTc@~6vxk&+RIV}%Eb#HgMt>(u3*)~5)vh7NGceMBtA~NLmAx8Y<6dfd@>VF z^xco+2QZ%5Uf9C6MPGejc4y}7Z_fPBrTqN;^*aEp!Lu|Z44AKZR$VqN`iUxO9q}6T z1Xav>$9!MXG$aieKc*+ta;Rund$nU$R|X`wjq8=OjfxbFvH`R21EF}6?T8cZ^P0n6 z3LzC$TngWSWM#)jqw&fcCYXn(*ay@J7%pWhTha-d0$-DYHkp1%{m4hos49<#r;OCy zLj$r**vw;fiR7`CS)jOMRhdFew#plLk-$U9dhhN=rO%zW+raWB0#X}XaJ6Z`a^a#6 zk(Kb~D+lQDmb6(KuA?_+x@>!%^fGYMNc{RBJmyR1gxLfIcexYFLR?RxPEG#>F|+$e zjPRx_Jw-I)bJ1m<&wa&2osl}#T9O(g9nOFH!8WFtI*rkTC`l+$r!GTfD5^Tl2IZy- zv#J&-Ms(g0?vnts;E)Rp)1mZ;(l*^B4&fwZo7o)<8|Ks~NQ*j`MkBaU^x(64k`?F!3wGI~z8Hq#BJcEg4;Ral7>Z@Z;rVA+7h!3B!- zX+YZVa8gLz(rqZ;18n!f6xxNmIW+6E74(0iV;t#JrSof->rXj6B0|o$@7)D!ai5-B zybM`?H%e{0!!}^4&`r!Fx)VO<20_6kfwR&H<?2`sfhn!&)ri0jy$-TG4sfRdlc~rC8DWFpbmMMSjv*vq9pjmRCt-H#JSqYF0h7B_$p8QV literal 1968 zcma)7VQ(8n5Pf@b?Z&>6CTR_6ah(*G+D@A*ZAt-$KpWD66xxbZM(_n~>?OHk?^$L=_LdYz!}$)98# zct`$$3bl-t_gqC$APdL|Tzn~imR?WlL+{zaOVx=59KTEZ-l=0R(1$I7m2ZYR_WP>s zNB%)iJ=8jgW$Xt!5-8j7U%Y_|BR`6j?kMl8E)QMLa6D03h2+s~%id5i=t@S=PS6|n zHJv#v`$}MbU`hXA$mMikOiL3S_v6sFEay6d9~rH5SB0t*klR8MHjMqAx36MC&hPt& z6k-?>^vyms=HertvQ=j(kxUP(EF7x%sqMt2 zdSjx3aW4wdDByBN&8EgYA$Cl|md+rg6PM?C>s_8aJ{HL3;Za*icyR* zW#S3sr8NB**igSeWqcE4bFO?=^W(ut_mb>(M@a>0^;!ClVp@%M30v4M;8TGMr|oC! zU3`YmIWR;NIHP@X$y<%@IixBbX@Rx>%_UIW4~Ah!J@(Dul#(IXFj=$j?=HU;vAGK? z8F$4_T8r~Zj{IKb;NTqc+!eT6rtLi6^L&c5l_Izd;KhW!S=bFEx@+%h(OafCVP_uw;5|9E4 z+`?^I4CQS`J0{xFJ*8K))|(_*w+Q7VYD_7gQWDsJAz-j3iBzYFG&70Z;lD@*k?J&& z+a$6vgNRYYC~z0|NHS^F=4*s%(}eD161tBM#~=?Z$aC(;3fTtES$z|Q?vdE$3}R+> z1U{lNiT-(hAeSxGkMRlLMzb$cbeGMmt^a|RgKwvce}EEE%wQy4aK~M6@eq%Q+*loTbZl? diff --git a/target/classes/br/com/akato/hibernate/PessoaDAO.class b/target/classes/br/com/akato/hibernate/PessoaDAO.class index 721065fcee9351f8c54539a636556de5de431edf..0c9a68976952a47feb790512d75acf2c85fffb1a 100644 GIT binary patch literal 1861 zcmd^<-)_?|6vjV?wrRR<9fbko-@+KsGPG!dD>h9+Ft`b9Qp+SR-PGzl(ztS*O7K2B z0}@DZ&qE-X{z|E7dtKr4D$zk$b*7-hh+(GDJh4=G zsk*|&3`6ahwym|&Wy~@p?-MOj6%R$%CqV-lb3=H4pj9Up{q(tC@s7xT#FIoBza#wo z6Qg|Yn@z1@yXjsS7;F_Dq=1AYDlG7>||*~ zlGaZabErn8JV7HvnVXEq@-uzz#WFR#opp&_r;9wk7@3iA5Yhrwu-B43Y89ELGoPN? zusPwZtB(9vCiB6Ju~tM2Th| z&0Umf^eB2ptBjtN@2GsJSHEKJCq)kGG?vCIGq^(Y>ftV2#R5eP*KnQ2zXXTgolU4& z3G-(VZdf!Ft%RGnWz}%oLRhpA9NfJCVaY;ZSh@gV#Y*tUIXdm6?JpWu!tw<)tXc{8 iu|he2Kv{I~Fwg37UD&h)7LtQUV@3n3^ej+zntuS-bhL*6 literal 2122 zcmah}+j84f6kW%0qDEFz+s&m(X_^)nd}~E0cZEQ4nl|7h1&0(0Jjk}jQBkapBzqV> zg&*J*W`It3VEW8|@EgE7vaBdh+`LFS=j^lg+G{WEzyJO7F956fPC-gwrRnJ{_fR*# zHv?Bcu$z|GH3Lh3Wcj{pZrs~dkQT^3HT$OSnB9)P+k9%Z0s+Nmgza_(7V56oNnC9V z4h#XcV+GMlV6j*l8u$?*_D#>0>u56_ z9N50V&H8y&NHTtc%u;a-m(sq#)SBJ3gLM@XnAMQSoWMj;9!&bC(>Ix~`0|8CX+MKS zTvf0nFn6Xp8eYLQfwXV-SzNhTA63{W4Yq7oZ&)nav450>8!A=0u3-fW0vAI*_q%P& zvs$izc*e7HsHrI6H3hc>uDw(=4X>jpps|I+1XMc5CWcIVf$fl3U}R86RY8SpP8?{s zjXMGt?7;G9El*(n#NDlEp8#**O$DoL@iD;gRKs1oMVY$R5A@vZ5Fz12L%}<&dQ2@t z>N3fD8s5hTbnb!a?}T{l>Jw75VgYZA6K{w^A5D4Iq1(4)gFn*nG464zZ8=uJKF*!h zM`@g9&u`H_X^)IuEGIbi?j&aP&L| z-#rzuc21S+VVw;Pd-zgdrsY}8TJxlLY|2(SUGeBF83q&RF}_yt75#Sd#~Vgyc!FIi zCW&(@G~AxovNmlwV`k#1cSl+gH~6nja9C0`IhOb(XOw~qd`@$v^DX$EEdK`e7k;Fm z@i`T4YPiU6Z4iJNT;ht#Bgdz_yw2#9j4oGxhx#kO2DjC4H_L>%5Mh206(LA;Nkt~k z$5@+;kyvW^IWCXj&4eXfMjErsJDJ(UxRS!-a^*RekEsrz z7m>jd3%i8<^}RIu*RGMAI2PNQF)oDy!8~0Qw(}g zfQnm*qB1dbCW03D1huHB4W^ep$V$L`fr@QRu$scCFNz7oY>b%2Lu?UA;M1`bKRZpa zLWT{{eIH Bw+8?K diff --git a/target/classes/br/com/akato/hibernate/TestaPessoaDAO.class b/target/classes/br/com/akato/hibernate/TestaPessoaDAO.class index 14c9511d877f50c28d052b3758cd371f3c4efafd..9278ffac1cd589a4566dc97f84d9133ce6279da0 100644 GIT binary patch literal 828 zcmc&y!A=`75PePqn`{H2p+I{x2Smbw6;e-7RYGkMho~SWAXPniH$!6BwIi=V;&1vF zm0GFXEA^KUV-ku`IdJ1L_SkRU^E}U=>z}^?Y~gK$iojaxlFSx~I#b>zBb|~n%2U#( z(yK!%ORGNZ9z>`LES#zfmE_6{lY{h>GA}UuUK{N{2)t-_js>b8?SLZG1)BHR&(2v_ z!%Km`N5)ZU^9veC)*S0xd2NjxJDcWIl-n|{_eUgkF}BW2>xP^E9wakmjP)`ldB+jg zd;GpY@c*6kRx0T)$26fV$dBwm4#`hz+8ue~Y#}}C1(@8wYyHUUoHb6!m4PJy3e7rZ zH~~%x;utl|H86vDfu(l$zTuvC4BiQbG`rf+m-B*M?JMq4pw+dR%8!-PA)g*r{YaMr z>)j`P#ts`@C~X9m+ut73tzlW<`xDH5R{sRzo;`ON?df35;=_sC41Qu2JX$=hK!tZR znB^F8_Kr^lukkO`zP92YXk6W5nj8ZLe80f4F+t%KTAbCfh}TnwjRy=%k1#~H3>B^u JSm9W~n;VFy=wAQ; literal 1869 zcma)6>sAw27~Ka0lT4lpBx4wy%;3y~wfeJ< z)c#0nvsNFV@6uQ3>OPYoL7BChA18Cp_nq(Ty}!%f|Ni+GfF-mv3<+GXdik2$%*$6Y zaP#|C)$|-0nE74P59GG#`>uSrvZWy=Fm@o1WZsreBfnKWFl&Lp$UV!kg8KsJvbnNA zY}KusI?f?sU>G9;=ZltOmRe0l-IZ0_6c{hMHEEZnXQ_SvFc$1vzQE1m{{pkjhnmuI z1TJP@6i-0y1fJzImUCqd7X)S_Vr?E%d=^-?jxi+Ek}@!fivoJX40g!cav6Rqn=86r zV?dR@X<5UE0y7aW^i+%El0b6B3-()H<}t+`rs|2|!mkrLK0-#rWr5KX@I}{Y7`TF~ z0@{(ZTjthFfr;#++yFu4v#cYHStajvCNDc+?b9DP3H_BEHw7+7fL(Lyrf1gNIC27s zHG6TxlLxY;!15<%b=&}#G!_lyahsH6y?%U&Drci|cI*@8<70tL1c0|Srn4sRC}N)q zT*^iWpDQQvIqqusLSXXD+!!c;6*5*e88`v94i_g>)L}fRBL<)h8ot!KM`?@C_bocyy}Q zc7E{#vuU7+C+st~#kQO5CE0TG+bsEjnKxyVMY$!AJ}IeQK|E+#Hd7qOw*u3db=S(s zx>chfvhHSN<}hsWOd+GAgdHXSF5{n3SGlsPg0g`G*sCd;hU!wFi=L}?Woke zG|<34Gg`Ay^X#LlAe${mxjxlPXM#_rU;0&5LW1=vme>@Y?5rs*fJt^60Q7zFg z8uFnYVb=*ZIYVCb2Q;lggI=&#UV8-;4WVCW{h^9-a`of1KZT(hX4Qo diff --git a/target/classes/br/com/akato/hibernate/proxy/MyFakeList.class b/target/classes/br/com/akato/hibernate/proxy/MyFakeList.class new file mode 100644 index 0000000000000000000000000000000000000000..98d0d27e1e3c6373c09522642fe2cc4ad823601b GIT binary patch literal 1013 zcma)4ZEMp|6n<`!Cbni$C8aa3V8^u*vP?D-VGZTt`YHqk^g2gH|J#UvllOLseM0gC41wlxH+A%V%V+yuf`;vli@~ZZZ!Ltn#MLO5it#<*NRC(k*G z&sy~Z9>%)`%4J>y=Phv7Ra!+?NegFmY=OJDM-oLm&neYx15FMvUHrWQ!1`3o<(^G;XR!E#!#DNM#r38>tDxqF*HbdfeV@I}IWe@xw zegYCmaOX!MX0wDYv_XL*haK&$&PYpBAhsFJSZ|)I}pbrh=m#kFZu@p|lCP=RwbD8YFK8_muM zl|5&q8ipy=^^R2d{Af&~*%ibdgGNV3BHj~5rv8t~Vp@F$?auOA3mH`9TzU-NeDuT1_`xc(iz2a%Nk literal 0 HcmV?d00001 diff --git a/target/classes/br/com/akato/hibernate/proxy/MyProxyCGLIBService.class b/target/classes/br/com/akato/hibernate/proxy/MyProxyCGLIBService.class new file mode 100644 index 0000000000000000000000000000000000000000..c2ba0f6aadbe178c66122fec16d8b163c9e0dd34 GIT binary patch literal 954 zcmb7?UuzRV6vfXZX_KtA)zsGdfBLqm;Hob|69QTqDXdyZ3>2RxyVGRaWG2i`g85iJ z6%_Q{4<+7RQ<7kz^yS{YcV>Qb_sseI=lf3pudrK0j^Sn329X&C;#@cr^i@|{Eu0KS z)_k1?AEw7?K6oDsI>ez9?}JE(H%&JN@yZ6=m@LQde$tszDgKghc}(8#<0B%oQ^J`Z*EMh zx7)P_A=e|C&W0*+qAAX4=;wa*I#{|fJy9!Slm2@y)uFYgF+LmKK;E mv6q=?CuNrL01s!(y(Q+O88f%Q+{~CcI+w$fEI!4vEc3rB8tVA~ literal 0 HcmV?d00001 From 210103b9eabfb2e5c02ac0d3dd34b68f2627d149 Mon Sep 17 00:00:00 2001 From: Arthur Kato Date: Tue, 31 Mar 2015 13:39:05 +0000 Subject: [PATCH 2/4] =?UTF-8?q?Parte=20que=20envolve=20CGLIB=20e=20m=C3=A9?= =?UTF-8?q?todos=20proxiados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/br/com/akato/hibernate/Pessoa.java | 8 ++++++++ .../hibernate/proxy/MyProxyCGLIBService.java | 2 +- .../br/com/akato/hibernate/Pessoa.class | Bin 2371 -> 2519 bytes .../hibernate/proxy/MyProxyCGLIBService.class | Bin 954 -> 1949 bytes 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/br/com/akato/hibernate/Pessoa.java b/src/main/java/br/com/akato/hibernate/Pessoa.java index 7b9868f..d94d043 100644 --- a/src/main/java/br/com/akato/hibernate/Pessoa.java +++ b/src/main/java/br/com/akato/hibernate/Pessoa.java @@ -13,6 +13,14 @@ @Entity @Table(name="pessoa") public class Pessoa { + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + @Id @GeneratedValue @Column(name="pessoa_id") diff --git a/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java b/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java index e0cc85a..69aad43 100644 --- a/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java +++ b/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java @@ -16,7 +16,7 @@ public static void main(String[] args) { list.add(new Pessoa(6l)); int qtdeItens = list.getSize(); Pessoa p = list.get(6); - System.out.println(String.format("Id: %d ", p.getId())); + System.out.println(String.format("Id: %d ", p.getNome())); System.out.println(String.format("Qtde Itens na lista: %d ", qtdeItens)); } } diff --git a/target/classes/br/com/akato/hibernate/Pessoa.class b/target/classes/br/com/akato/hibernate/Pessoa.class index daaa1b20d99282b1bf70bd3b2d3c64d5058efadd..99da44e2429dd0f238389263a68dcfa03f114e7c 100644 GIT binary patch delta 755 zcmb7?zfZzY5XZl-wy#ZPP)e~us3Jn*k17={0Y;s#X5k%FqG26!jn^4MqqB;RXb&d6(HT{N EA6aly5dZ)H delta 629 zcmcaEd{~I<)W2Q(7#J7~8O%0v$uY9C*<|Krme@^}XVQ>oWMFa5Pf2BG5NBlI&q^#y z)Xz!GOV@WTD#|b7V36GG#q^bli;F>wL7Im_m_cUpOvWq`VGSRIN}v3^bZgD9$@Z*@ zY#a=#j0}pCeVOE#trWN>C$Nf6HeeLpT*{itD9p*g2sA(hNQwfTV#2`8z&v>(r?9dt zkjDlT1(9+<*Xrt?x{E%H1tJ!+!D#5PS1iM`AxVuI(^dNdiRrd_v^G$*rAZ}jURr1r>)WtQ$hI(x%aSAg zSNehEnB&W5e~+I%y#vbuVmMmPVRq);x%WQzxp(eg|NQzpfLl1!Fu`!M>|2gkxA=1& zc-Em?7QWcnTQx4L)^7QkZ~}&@j4RzB z%MeMX_8Fo%uOf6r5H~Q1DTa%-E5%N$P63L%ToVil+jDqrpZl&lhr(!Z=r$QXuwNBd zn&Hx@!*-+Z^!6)z%M^?0EV;bk5IWy>n*rbC&k6KuGWB21)J0{H)-XqT52)Jkeb0|! zfg$@u`l9L8jzq;I_8V@E2d*bgVx6d{ubX;&LmqPJ2;X$LlwM$#h1oaJbtLe*;&qW> zA!!dH6awFs)pWN2b?!>yB>D6_y$*)BTHZD=gINuiX*-7UJ<)7>e3F_*{h~VF!&MDe zh@3%S+mlrT*KnOdJL0vL*gasFOKzoxf~z}e9m_~5=qpNpR-4+_@jh;7SYx<822Q^- z`!pM{aFg1OS1M=N=(Q%X(Z@d7-%P169~-!hPY7^T1O@j66_;8!uQclh(#X)6G|Fdw zIE~P299ev(;nR`FP-r&;Q8#c8_sQC8DeGR2u4nC0Z33#0;PrG24=8ZHvTk0jn2M84 z0}t_e56q5NCouEWX#;}8%IesHt>KH&sNJd?*v1aM!voK+a|(QCnBCBPxEK2DoEKyd zk2O4^3UvXDVmDAweWx{4IyD)?6Nbe{K}DGPK***kxmi>1B~0y0lr((BFgwU4F9T5( zzUr5+Rfmqy8!GATMY&(4Q7|_QI?RKVDh9*DmrFL*8A5u2`>e~af#*Bgo@f?9B^G=^I~T}x()>q9jP%a;AO2=CB) zj&vVsgmyG_Y1Qa_kG_n)lPkxF{Y;w(bXt{~gqWt)2=@kFqtk^E$wfL*zhRbE~l1Aw=o9?^JrtCo8w9kHJ;)dvYCd5Z}A=Fl%vt| fJ$}FhS*(GhO#Jj&?cH+d)&weKH35Nx?zj39W~Jl5 delta 150 zcmbQszl)vg)W2Q(7#J7~85B2i{b6L|V31*C2%Fr-sALk7k*biJT9T2UqL7|i;+dkM zsgPN$P@0#LnwFWDnxc@FU!+h1R8vw}kg5=nT3no;$hEneRhrROi-DPe5ojpaZU&)9 jA?fW5V*7zSCI&7b$p)4YX5a>kfJ9}%EI9^wFs%RpS2iFv From aa5f8e474c1ae3435f3c22886d6ad5c85f22f0a5 Mon Sep 17 00:00:00 2001 From: Arthur Kato Date: Tue, 31 Mar 2015 13:49:29 -0300 Subject: [PATCH 3/4] Entendendo o proxiamento com CGLIB e explorando o fucionamento do Hibernate em cima metodos proxiados na persistencia de Objetos do modelo --- .classpath | 10 ++++ .../com/akato/hibernate/TestaPessoaDAO.java | 47 ++++++++++++------ .../akato/hibernate/proxy/MyInterceptor.java | 19 ++++++- .../hibernate/proxy/MyProxyCGLIBService.java | 16 +++--- .../br/com/akato/hibernate/Endereco.class | Bin 2214 -> 1511 bytes .../br/com/akato/hibernate/GeraTabelas.class | Bin 1000 -> 940 bytes .../com/akato/hibernate/HibernateUtil.class | Bin 1129 -> 986 bytes .../br/com/akato/hibernate/Pessoa.class | Bin 2519 -> 2215 bytes .../br/com/akato/hibernate/PessoaDAO.class | Bin 1861 -> 2122 bytes .../com/akato/hibernate/TestaPessoaDAO.class | Bin 828 -> 3157 bytes .../akato/hibernate/proxy/MyInterceptor.class | Bin 1362 -> 1660 bytes .../hibernate/proxy/MyProxyCGLIBService.class | Bin 1949 -> 2322 bytes 12 files changed, 67 insertions(+), 25 deletions(-) diff --git a/.classpath b/.classpath index 0a1dadd..de70241 100644 --- a/.classpath +++ b/.classpath @@ -22,5 +22,15 @@ + + + + + + + + + + diff --git a/src/main/java/br/com/akato/hibernate/TestaPessoaDAO.java b/src/main/java/br/com/akato/hibernate/TestaPessoaDAO.java index 98cf7a8..b2ab80a 100644 --- a/src/main/java/br/com/akato/hibernate/TestaPessoaDAO.java +++ b/src/main/java/br/com/akato/hibernate/TestaPessoaDAO.java @@ -4,26 +4,41 @@ public class TestaPessoaDAO { public static void main(String[]Args){ + executaProxyamentoParaAcessarObjetoNaoCarregado(); + lancaLazyException(); + } + static void executaProxyamentoParaAcessarObjetoNaoCarregado(){ Session session = new HibernateUtil().getSession(); - Pessoa pessoa = new Pessoa("Arthur Kato",38742425875L); - Endereco endereco = new Endereco("El.Grajau",292L); - pessoa.addEndereco(endereco); - PessoaDAO dao = new PessoaDAO(session); - session.beginTransaction(); - dao.salva(pessoa); - session.getTransaction().commit(); - System.out.println(" Foi adicionado a pessoa : " + pessoa.getNome()); - + System.out.println("Sessao Aberta"); + PessoaDAO pessoadao = new PessoaDAO(session); + Pessoa pessoa = pessoadao.busca(3l); + Object enderecoProxy = pessoa.getEnderecos(); + System.out.println("O objeto de persistencia com inicializacao `tardia` esta sendo proxyado"); + org.hibernate.proxy.HibernateProxy objeto = (org.hibernate.proxy.HibernateProxy) pessoa; + System.out.println("Para o o objet Pessoa foi gerado um objeto Proxy" + objeto.getClass()); + org.hibernate.collection.internal.PersistentSet persistentSet = (org.hibernate.collection.internal.PersistentSet) enderecoProxy; + System.out.println("O Set de Enderecos foi proxiado pela classe : " + persistentSet.getClass() + " , valor : "+ persistentSet.toString()); session.close(); - - + System.out.println("Sessao Fechada"); + System.out.println(""+pessoa.getNome()+":"); + for(Endereco endereco:pessoa.getEnderecos()){ + System.out.println(" Endereco de Id : " + endereco.getId() +", : " + endereco.getLogradouro() + endereco.getNumero()); + } } + static void lancaLazyException(){ + Session session = new HibernateUtil().getSession(); + PessoaDAO pessoadao = new PessoaDAO(session); + Pessoa pessoa = pessoadao.busca(3l); + session.close(); + System.out.println("-------------------------------"); + System.out.println("Sessao Fechada"); + System.out.println(""+pessoa.getNome()+":"); + for(Endereco endereco:pessoa.getEnderecos()){ + System.out.println(" Endereco de Id : " + endereco.getId() +", : " + endereco.getLogradouro() + endereco.getNumero()); + } -} -//System.out.println(" Foi adicionada a pessoa : " + p.getNome()); + } -//pessoa.setNome("Arthur Kato"); -//pessoa.setCpf(38742425875L); -// +} diff --git a/src/main/java/br/com/akato/hibernate/proxy/MyInterceptor.java b/src/main/java/br/com/akato/hibernate/proxy/MyInterceptor.java index dc7df37..a62104b 100644 --- a/src/main/java/br/com/akato/hibernate/proxy/MyInterceptor.java +++ b/src/main/java/br/com/akato/hibernate/proxy/MyInterceptor.java @@ -1,10 +1,25 @@ package br.com.akato.hibernate.proxy; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -public class MyInterceptor implements MethodInterceptor {}{ - public Object intercept(Object object, Method method, Object[]args,MethodProxy methodProxy){ +import net.sf.cglib.proxy.MethodInterceptor; +import net.sf.cglib.proxy.MethodProxy; + +public class MyInterceptor implements MethodInterceptor { + public MyInterceptor(){} + + public MyInterceptor(MyFakeList fakeList){ + this(); + this.fakeList = fakeList; + + } + + private MyFakeList fakeList; + + public Object intercept(Object object, Method method, Object[]args,MethodProxy methodProxy) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{ System.out.println("--------------Meu Proxy em Ação--------------------"); System.out.println("Excutando método interceptado : " + method.getName()); + return method.invoke(fakeList, args); } } diff --git a/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java b/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java index 69aad43..f67f131 100644 --- a/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java +++ b/src/main/java/br/com/akato/hibernate/proxy/MyProxyCGLIBService.java @@ -1,22 +1,24 @@ package br.com.akato.hibernate.proxy; +import net.sf.cglib.proxy.Enhancer; import br.com.akato.hibernate.Pessoa; public class MyProxyCGLIBService { - public MyFakeList criarListaFake(){ - final MyInterceptor c = new MyInterceptor(); + public MyFakeList criarListaFake(){ + final MyFakeList exemplo = new MyFakeList(); + MyInterceptor c = new MyInterceptor(exemplo); MyFakeList objetoProxiado = (MyFakeList) Enhancer.create(MyFakeList.class,c); return objetoProxiado; } public static void main(String[] args) { MyFakeList list = new MyProxyCGLIBService().criarListaFake(); - list.add(new Pessoa(4l)); - list.add(new Pessoa(5l)); - list.add(new Pessoa(6l)); + list.add(new Pessoa(1l)); + list.add(new Pessoa(2l)); + list.add(new Pessoa(3l)); int qtdeItens = list.getSize(); - Pessoa p = list.get(6); - System.out.println(String.format("Id: %d ", p.getNome())); + Pessoa p = list.get(2); + System.out.println(String.format("Id: %d ", p.getId())); System.out.println(String.format("Qtde Itens na lista: %d ", qtdeItens)); } } diff --git a/target/classes/br/com/akato/hibernate/Endereco.class b/target/classes/br/com/akato/hibernate/Endereco.class index 078fc17abb8275a4961bcc59870aec9a5160a737..806a1190b38fd30789fd9cbd4b466465e09c4763 100644 GIT binary patch literal 1511 zcmZ`(TTc@~6h5=Gg_hQ0xhRx!Q?xCY1@ZErAu$9Ariu~L#3wWDPRd|ALw2`D{*@*Y z6CeBm{wU)&+ih9v_F?C8&Y5$*^L?lN{paT|BHE=V<76>fZn$<+cWnNN``SL24dE*8 z3;R$x!WB(DP6Z) zgs?vvc$v0tx!loRS2HR^u%7y^4A7=jw}zVqxJIt_#&2o-AWye9%x5oXpH8wG)oJN#>$m?niwr+ zDMz==X(>y2N-@gUq!Mqt9Y}h{p@rco>7&1~z_{4l%d>)d&F(!J^|B)(|isqi{ebd=vc%q*X97hF@BOEJF)! zm8Usz-_AJt3T*& zb>o_f)y-=veG9TIV=VvxQ4#ARik47kiB@1)={*C?HQbOOz`%l&L1Cf5J-Q#3v9TLp zvihCYzv5t#Np89#dWd9%HiCdKA%nFHi@~^$XbXGF;9I|emI7d}(0DT|P|VElj{QYWCIYu$p`cd^hsWDRl1Bkl$4 zg%DCx&83Je$h!?6oyOf)OfZFU{9PKv43|poh796R;5092$Skk}*;3S(v62={q#|u= z#gkYC5r@p|7TPR|B*ojfXI$rP;(*|n+)XNucI1{YQ7i6i$we=6;TacPKeu3U`E3L^ zLmYSh#s^=XYAj|i){K~IblGn1R^}Ov0Q6(;01V+I-B#2YD0YX@7&64-?nEz>Octxtlne6M(z7aI7SA8|Hzah2+BR6oT>VAl%77Sjt3L zgryWhZXiM}6X6~#rw|6`u#$;TgSiyK;2fMxg!|{<;ZY{SgLClkBm*G_E680A9`>qX I6>SILH-I%vIRF3v diff --git a/target/classes/br/com/akato/hibernate/GeraTabelas.class b/target/classes/br/com/akato/hibernate/GeraTabelas.class index d5fc8d5e290f031eae6878eda56d7727eef6a1f1..466cc68beb16c564377811a113148fab3edde83a 100644 GIT binary patch literal 940 zcma)4T~8B16g^Y6EM2Sp0IPyfK!hzNZuGT=gf!?&{YXk`z^Cc%upQXWklC%_Z}~zK zN&Er+DC6CQgksw0%iOtl?wot>z312OA3p)S#-5EF!)D)jz8-q~oG02F$i6U&C&GI# z3_s$15%JiD#ZW%u-?$fX6?&igXTnby=HE&slYNFcx6xy;+By&p=1?dik9metM=J4g zG$cquiUdQoqkSIrxRI%U8?=&vj2X5%|7OynDnl+6L(To#xntB#j8tK((X&xuXlN5o zbmE_e-hom&;fd6$t<|XvM<#O|lu@v;#IQP}_-7Hvnx}cSBA(zWLxl&yEu0A2G#=u< z?@o}(Vy#B!zge_wEHl(+FgR3!Fv8b1o-^#+2Tin&yg`5XCI}+0>kq_`A6{N)lQ>wx zTDpch4c47P<=z-*aOsDQA~x}Y_Uao!5@5)?Cnwov4@^j1E>0OaEuZGg(410Z#?Wbr zxtP%Zp3ux@=!4VMBjbyAGF4G|LYuEr5nuzvgG3GF=tknB(mfJZ1%B>j9zkSXZ)HOj|h(r&Z5c!kGbn$>5ixyH(IbBxswdzN*D y^*i)s!Ur5I5N3%`Yb2gJDtL*dtm66&Dz+#B%38xVcBp2Zs=8=oE$q@u4$VJ%KJ6#~ literal 1000 zcmbVLO)o=16g^X=eNSoC_il(qS$L6HArcX68Wu$&R`Z_G4)4u0)2Z;wBqZ$p4!=X( zSKlF2H+SaFoO{m9J-H80H+KM*Fr7n&VK%fuWRgIf3ul6c3Z>P;$zVrXu`fayi&hR< zhSHh15J4<-J=hD+WaJnI)|6ImouRKXf5?#CG$%3#kD>U1-Llr$JO&wCKhRdTOnf0v zI0-gYESxf$H?0X{nY328@9j4vS4q=Y$BnHozQ2Y?LTlrADES-5KfxPmeMfN9=u=g1 z+ZXlk#M~J!xVvgf-|MZa7Byrdwk|vW_+6lTsE<5`3h2i$!+53o(czl2O4nCY2Z~jt z8(! diff --git a/target/classes/br/com/akato/hibernate/HibernateUtil.class b/target/classes/br/com/akato/hibernate/HibernateUtil.class index 4156eb6e87a0cc90047aecb19a46aeefafa9a476..76c6e19f467e656d2d7f499a0b2cca747ce25eca 100644 GIT binary patch literal 986 zcmb7Ce{0iF6g{`ynl{aBo7w4{>o(nH+o?hPvtuB|Ay`zHPW|&WdClI;@+3_Kzm-2= zLj^y8A4$Tgw+`$ zUN8$Sk}BK6BCZl@!t*BJ((49dI3(;fd*{;9Sf_PK&ObPH3@j1WW-xdhdNPu(PB>h* zu#6jo#r{YIUUou+_2%WK*^EvJgqs%TQ6N-$DwNMgC%mnfq8~_t-P5iJ4n?FAe-g|y zZ^F)hh%u4J0xu^%QaqXM-V9lp+ris4eHl;a5|(Ev>6CE?Edxy!lHGY$s)aVT2xa|V zhEr7YK#w9C{>F*TRzGCGwXXLQT-z7#ta@SDdr^sKAaSnzF_4Wwh5m&IA${js9yjmO#yb&th;{zk#6yJ literal 1129 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 Bw+8?K literal 1861 zcmd^<-)_?|6vjV?wrRR<9fbko-@+KsGPG!dD>h9+Ft`b9Qp+SR-PGzl(ztS*O7K2B z0}@DZ&qE-X{z|E7dtKr4D$zk$b*7-hh+(GDJh4=G zsk*|&3`6ahwym|&Wy~@p?-MOj6%R$%CqV-lb3=H4pj9Up{q(tC@s7xT#FIoBza#wo z6Qg|Yn@z1@yXjsS7;F_Dq=1AYDlG7>||*~ zlGaZabErn8JV7HvnVXEq@-uzz#WFR#opp&_r;9wk7@3iA5Yhrwu-B43Y89ELGoPN? zusPwZtB(9vCiB6Ju~tM2Th| z&0Umf^eB2ptBjtN@2GsJSHEKJCq)kGG?vCIGq^(Y>ftV2#R5eP*KnQ2zXXTgolU4& z3G-(VZdf!Ft%RGnWz}%oLRhpA9NfJCVaY;ZSh@gV#Y*tUIXdm6?JpWu!tw<)tXc{8 iu|he2Kv{I~Fwg37UD&h)7LtQUV@3n3^ej+zntuS-bhL*6 diff --git a/target/classes/br/com/akato/hibernate/TestaPessoaDAO.class b/target/classes/br/com/akato/hibernate/TestaPessoaDAO.class index 9278ffac1cd589a4566dc97f84d9133ce6279da0..79e18197a10eea5d3d91afbb883497182910d328 100644 GIT binary patch literal 3157 zcmb7G*>@9F9R4m%J83#)358l^8L&VLZ37-R5(G;HiiEaWC{kRwO@?%6k{c%zY*A6f zeZhUh74*o9FZz&zoWtSxz=O}e`0l^ptN7hX(k2{QwK<)cyZpBA`~80R{`U7TR{?Cn z_XZXStQ&J936+V+3F)cGxHD$ES?Sr419sk%Lv}u|l9t(2WN_@b zo$v%2wmDhH+b&So(K#Xz=u=5MggP{us7HgqqPUZ_2MQT#Js`)@wm>+p5;8p^T}O}0 zlL2qs$qQ_V|0ic+G?bA}R$zI@k@&1r!=CG8Q?bsG5CoQ(2x|`__N1LCFceo!PRWd& z_0*7bWp9F^Nms|=sR60_r0d!#nN(V~#l$i#8)mEt8J8!gc1*%=deqMbyj0(n_hg2hphA!6bY8CzyzL97>O*1Dv!ddZ0=L+HRp1Dy=W2eMYe z#3pnJ7&)yZ&ES`H+zM|4Jp$GoanIyX2;JDM^J0s@?HzLj*f~4!e4BRWQ zaF*k^%BD=*kFE6TgiIIg!DDp2DX^v5dw*BwTp3sL znp$?C*T91UE9VW*#7^`Hm}GHRHfg(dLNP~{kVoJ30x6FS+a4L%C9r4EQhwf9N!!ZV zZr&k(*@Po47NW(1;%C}9DHCMrs3+Z|Bad3T9Id>aO)4wrr*cvm*dwsEHc|Yw$V{&J zS#MykK8@~Y>lak0uG%xK-}(vhJG11vxY`*wLai|G4QU;jV%WAzZ zcL5XQaG2GJw92!iwpN1AKb?;Bscg0sAaiYkrBkl<-F9MJCRy(Ny6@~j)`Zd^8l-GM zW$YlH77)=Ujn zo*gu6PtrmyX=UmSydbc8j#{g*5yWZgpCLyRwKwVGehOzyyo^_f4g=fE{0dk6^b^r9 z`XFB8dKU%A)G54S;!O=jGbQ3GrPICO@*FsYw@tjGbv0^`3K`o~I=pvHyodJ*-MGvT z_>u7N8|64(>EEq$G&gF>agQPqij_Nm@8PM-gRY?@KuqS}&8^L>C%^Of70Sq~T4EVp z>hlYn*4uCLQRnv5O^rhNHExeWgdY^F#i!Wj6toTCTmceI`sv4`*7+8*0iUjq2q@+gtfB?rFT)}OJ zr*V4`ckKHatHbMx*l-2ihv`}*zNrOwUBcZ(ME7?Uv3)>qc!(Riu3>jHz|j@-9}Yh} zjd)w2h=C#=En)|JhII0H;zDt`oUIvTgkk);ivSq1hq-iq4 zUE$o!R_(-Pu=JzGMQm>~E@M*Q8cszUDz;wKwi=3fiN1ti)wVczz5IS_#z8H5R^Z%? ztF!p+#u8%G#Gi?!gnb1;-$2;Auo!o9ElTtbaAg!NIL+JH>qPZE;`$@+P}k9hzxcj^ zJAB;xNmUbPKEQ|6xdMOUBYaG-H{cI^f=@|!7kLHsm6bwuU@B^Kbje*hJDMm_)l literal 828 zcmc&y!A=`75PePqn`{H2p+I{x2Smbw6;e-7RYGkMho~SWAXPniH$!6BwIi=V;&1vF zm0GFXEA^KUV-ku`IdJ1L_SkRU^E}U=>z}^?Y~gK$iojaxlFSx~I#b>zBb|~n%2U#( z(yK!%ORGNZ9z>`LES#zfmE_6{lY{h>GA}UuUK{N{2)t-_js>b8?SLZG1)BHR&(2v_ z!%Km`N5)ZU^9veC)*S0xd2NjxJDcWIl-n|{_eUgkF}BW2>xP^E9wakmjP)`ldB+jg zd;GpY@c*6kRx0T)$26fV$dBwm4#`hz+8ue~Y#}}C1(@8wYyHUUoHb6!m4PJy3e7rZ zH~~%x;utl|H86vDfu(l$zTuvC4BiQbG`rf+m-B*M?JMq4pw+dR%8!-PA)g*r{YaMr z>)j`P#ts`@C~X9m+ut73tzlW<`xDH5R{sRzo;`ON?df35;=_sC41Qu2JX$=hK!tZR znB^F8_Kr^lukkO`zP92YXk6W5nj8ZLe80f4F+t%KTAbCfh}TnwjRy=%k1#~H3>B^u JSm9W~n;VFy=wAQ; diff --git a/target/classes/br/com/akato/hibernate/proxy/MyInterceptor.class b/target/classes/br/com/akato/hibernate/proxy/MyInterceptor.class index fe17f0eed8e24a58f2463dc91d5ecc2632bbced8..5c2c56e71f2cdb73d18684d9a2f47c5bbe996663 100644 GIT binary patch literal 1660 zcmah}Sx*yD6#gz0rX2^-vbkGu>&m!q;|3^-wnzdYF+Sb4mohL*Go2dw0saynjBjeR zCYt!dn?K5U?o4T?f@zc9JNKS*zVn^!{{Hjh7l12RRxrSjEqi*!wROJDeOKQ!%ffTG zFZ8+oEVTe1=T1kK@I*s=+XP&vZ=x0mEQAv(6A(aH~SaAVxGKpfZdWO-C#@ zZQ{Ph%a&kB7TpTB*12cObNe#pZ<-B;d_T_-%H%ws?x){jnps!DFp{8ULW6=hL&Dt4 zA44Nu{5N?<--x!n)D@7*4G z`=BC?tbz=~SU|TISwjwa2Bj{YSq}M+)``5EPR+=yE0|@N>V_K%=9{Kf6d8Kx;U zO`kheH)ZdB^j+FJ)#r4$n^IB0RoS$871wc7!3~CEUC6x*h8>{c7H$(SO5rlMsj0`) z(E_)LNyxhz4BVqR;q|(3stkpLB8W6c4|hXCJkan^dW-vRD3k=}G|Xdxa7`-dHZiyp z#cem`0eu>!+14TuH+U}OY<45=O6{QQ8BRo`z4@S7j8Q|;1dkoyli^SZ5%dGKdB0(y z$yjxp^t3IS!Hd!J)XhqYn5IDvSXwZC%fY~iPM3HcVs_Ax4ADko4nA%CE9rlwyF`fhg<|v$}0l^%eVJV=W!*jeK3Jk>nwe%Mb C53TV4 literal 1362 zcmds1O>Yx15FMvUHrWQ!1`3o<(^G;XR!E#!#DNM#r38>tDxqF*HbdfeV@I}IWe@xw zegYCmaOX!MX0wDYv_XL*haK&$&PYpBAhsFJSZ|)I}pbrh=m#kFZu@p|lCP=RwbD8YFK8_muM zl|5&q8ipy=^^R2d{Af&~*%ibdgGNV3BHj~5rv8t~Vp@F$?auOA3mH`9TzU-NeDuT1_`xc(iz2a%Nk diff --git a/target/classes/br/com/akato/hibernate/proxy/MyProxyCGLIBService.class b/target/classes/br/com/akato/hibernate/proxy/MyProxyCGLIBService.class index 4bd154730d35d7b0203713cd5fc989ffd3ec1da5..81a438bb82b7f5eaccec9733d21ba74c183af31c 100644 GIT binary patch literal 2322 zcmb7F?N%FA6x}xoog~Dzgg~(ro2qRS0))2OT7oPAOAUsP8bq;v^d=d?z+@(!47B(T zzKi-Juw?1#Z{NljaJg?XF%vC|lC?7T>zuRC+2`DI|NQ&6KLFf;qah$LU2?KzyOx!E z(zUZYMoD)p>FU|KW4}Dit{kqbaq)2>zfjbj1EZ{K2nk%?l?O6wN~@Y(EA8rKSKz{| zVHxh6Krofw6bLQa6+Ma|A~E#gg21JMVd<;;H3DqNlBo;C3wBwWo6<4V+S?4dJ4Qp` zZsELs1JRA3_Y#&M-LqZq?= z4etnyTDqHUY-h_=()udsu zEK^T?ffQZGu&O!5A?rhZCStgZ0S!|EW2fY9U2imO8O1d2YPdt+x;z$as~W>Sd_Zar zq`9xJZ3_&hmi^=@nOqc;xUZ7^K%M(MYMm;75_lNH3>bS*Rw@ERekm^j>CHZN5A_Rl zCPAe+AHxC`=|fd_i^h-4Hv2$coji(R36HtviL#mZd*)eDi2%N9XByU!dD$FM_e1W1sA0hJ$B+jeX%NW`C5?^Ux zr}Fi(c5Y($8e1&eZQH3yf(GD{{2u~`Cr}$38wi96Stx#^R8|+l9o)Gsv&vdmcgFPAP2e;szR=+`*#m4hT&eyy+dX> zB%LaI?Vvvx50-}tgBALmz%5(>k>|fIaQ(E4&@NM2UOr8t^Q`=PRZbK1OsO6mE!z8R zSWAX_G)7+YBu%Nv1yZvcGrk;nX_@=~7H;s?1zSZN(F*m7)` zD}wS=Io6iHP5B5?NOM#X|HZJBYcEb9=-PM_nL_3SlUvbaWRLJ+6Cbsf3C#X?W3Ic= z#3vtT`kMIk6((1I#b@!=(C-Lt1t*(WFCJr~iEq^Iv-a+_W0btzF2}d%7U*a{`Mb)H zGGuU;{LQn2EHl(+7{&pgt1b~QP{j^)`eDLo5iyVZ*u@^hUS<<8QS*pUIcrNTdi#b% zGUz@Y83P!UaGIf`Ss-H?x`HrxJJ6qi53_>KDc5jjj#&Ows;ZZ{=T#+!z(AhMS-KyBUtY8XP zo%bF!b&X1-3rTgbpvnkgR>2&u*UK)LWhxtpME@Uzj2p;Exas)BpfHaGXGok|U&L(* zOVm?Mt!O3|X=pZ$j%y^Cb%!c#xKPPx#WF+Bl3n0x+U7<@H8izUtk_z^$X(V%bgcjam!awc#2q7oLtC-2|BVENU7rj$Q zd-t)@KzB*L-b9$JflRlP>0bB{r=?7x3;Ai<j{vq1taUkD_l*a5NJ;H5@d%Hp jt7+P#CwPh$%7{b5DiuGRL7kN+RtpN0)dG%ZwW$9FoSnM8 From b3bc7442ead2b1bbab050451227fb1fb11157c1b Mon Sep 17 00:00:00 2001 From: Arthur Kato Date: Tue, 31 Mar 2015 22:07:52 -0300 Subject: [PATCH 4/4] Script de inclusao de registro de pessoas que estava faltando --- .../java/br/com/akato/hibernate/Endereco.java | 7 +++ .../java/br/com/akato/hibernate/Pessoa.java | 43 ++++++++++-------- .../br/com/akato/hibernate/PessoaDAO.java | 2 +- .../com/akato/hibernate/TestaPessoaDAO.java | 14 ++++++ .../br/com/akato/hibernate/Endereco.class | Bin 1511 -> 1779 bytes .../br/com/akato/hibernate/Pessoa.class | Bin 2215 -> 2280 bytes .../com/akato/hibernate/TestaPessoaDAO.class | Bin 3157 -> 3919 bytes 7 files changed, 47 insertions(+), 19 deletions(-) diff --git a/src/main/java/br/com/akato/hibernate/Endereco.java b/src/main/java/br/com/akato/hibernate/Endereco.java index 218bf2e..6e19827 100644 --- a/src/main/java/br/com/akato/hibernate/Endereco.java +++ b/src/main/java/br/com/akato/hibernate/Endereco.java @@ -29,7 +29,14 @@ public Endereco(String logradouro,Long numero){ this.numero = numero; } + public Endereco(String logradouro,Long numero, Pessoa pessoa){ + this.logradouro = logradouro; + this.numero = numero; + this.pessoa = pessoa; + } + public Endereco(){ + } diff --git a/src/main/java/br/com/akato/hibernate/Pessoa.java b/src/main/java/br/com/akato/hibernate/Pessoa.java index d94d043..4b78243 100644 --- a/src/main/java/br/com/akato/hibernate/Pessoa.java +++ b/src/main/java/br/com/akato/hibernate/Pessoa.java @@ -11,61 +11,68 @@ import javax.persistence.Table; @Entity -@Table(name="pessoa") +@Table(name = "pessoa") public class Pessoa { - public Long getId() { - return id; - } + public Pessoa() { - public void setId(Long id) { - this.id = id; } @Id @GeneratedValue - @Column(name="pessoa_id") + @Column(name = "pessoa_id") private Long id; - + private String nome; private Long cpf; - - @OneToMany(mappedBy="pessoa") + + @OneToMany(mappedBy = "pessoa") private Set enderecos; - - - - public Pessoa(String nome,Long cpf){ + + public Pessoa(String nome, Long cpf) { this.nome = nome; this.cpf = cpf; this.enderecos = new HashSet(); } - - //apenas para o exemplo de CGLIB - public Pessoa(Long id){ + + // apenas para o exemplo de CGLIB + public Pessoa(Long id) { this.id = id; } + // public String getNome() { return this.nome; } + public void setNome(String nome) { this.nome = nome; } + public Long getCpf() { return cpf; } + public void setCpf(Long cpf) { this.cpf = cpf; } + public Set getEnderecos() { return enderecos; } + public void setEnderecos(Set enderecos) { this.enderecos = enderecos; } - + public void addEndereco(Endereco endereco) { this.enderecos.add(endereco); } + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } } diff --git a/src/main/java/br/com/akato/hibernate/PessoaDAO.java b/src/main/java/br/com/akato/hibernate/PessoaDAO.java index c9d76aa..333dfa8 100644 --- a/src/main/java/br/com/akato/hibernate/PessoaDAO.java +++ b/src/main/java/br/com/akato/hibernate/PessoaDAO.java @@ -23,7 +23,7 @@ public PessoaDAO(Session session){ public void salva(Pessoa p){ this.session.save(p); - this.salvaEndereco(p);; //adicionado agora + this.salvaEndereco(p); } private void salvaEndereco(Pessoa p){ diff --git a/src/main/java/br/com/akato/hibernate/TestaPessoaDAO.java b/src/main/java/br/com/akato/hibernate/TestaPessoaDAO.java index b2ab80a..234d5f3 100644 --- a/src/main/java/br/com/akato/hibernate/TestaPessoaDAO.java +++ b/src/main/java/br/com/akato/hibernate/TestaPessoaDAO.java @@ -4,9 +4,23 @@ public class TestaPessoaDAO { public static void main(String[]Args){ + criarContatosNaBase(); executaProxyamentoParaAcessarObjetoNaoCarregado(); lancaLazyException(); } + + static void criarContatosNaBase(){ + Session session = new HibernateUtil().getSession(); + PessoaDAO pessoadao = new PessoaDAO(session); + Pessoa pessoa = new Pessoa("Renato De Melo",31180069279l); + Endereco endereco = new Endereco("Al. Rio Negro",291l,pessoa); + Endereco enderecoB = new Endereco("Al. Cauaxi",721l,pessoa); + pessoa.addEndereco(endereco); + pessoa.addEndereco(enderecoB); + session.beginTransaction(); + pessoadao.salva(pessoa); + session.getTransaction().commit(); + } static void executaProxyamentoParaAcessarObjetoNaoCarregado(){ Session session = new HibernateUtil().getSession(); System.out.println("Sessao Aberta"); diff --git a/target/classes/br/com/akato/hibernate/Endereco.class b/target/classes/br/com/akato/hibernate/Endereco.class index 806a1190b38fd30789fd9cbd4b466465e09c4763..07616b8020894fa00ea1edf34988071f5b5fbfb9 100644 GIT binary patch delta 495 zcmZut%SyvQ6g`t<($=QhQfsXuY5H#Z&_1-KU`6l~#Fg7_#GQNnh}rlPf<=npLcyhe zh#w$s#WNE@kS;QJ=HBzV`AB}I(r@2S&j5ND$6yKgDiHa3J!gp%bt}rMD15JZmViLj zLmC-1u>#S2IJag(B-E>Yag#%t(>ygUVZmWt4N7y~xDIcz~38S4R`8YZ>%pVx|E)TmlF z`d$S3)fcFtu8w8)v~f>v6wft~?oxP&7N>gEDbYHNtJiG&H|%l6zVc;W-8pf)jgB@^ z?@p#LT&ml}uKIGSazx&kJm20k!77ExQhX0BbuFv%koc+bd6DsA-|R3zj5W(2G-Tc9 LcficaD~x^sDV{SI delta 277 zcmZ`!F;2rk5S+csoh70upu}-$9L_P=39)fP@&H=?kcNhqccj`rKZt|{6$KR)AISsK zN30Ktj^cK9Z|3G^kG(_p{QLCr382C=Y>{9rQ~TI>1Huh*{xXhc zyfL9JFcquRl)_hB*jUft_|ZD5J%9WA74PiD!@X!$|G4+PyOQi}+!BG{09qCY?&Q=G IzWaj34>O)0=Kufz diff --git a/target/classes/br/com/akato/hibernate/Pessoa.class b/target/classes/br/com/akato/hibernate/Pessoa.class index c309a1d3ba21a3bdcb262650d924ed9d785e2d1d..41a7d5cfe20120ec2c7b0e7550971dfde27a8bc5 100644 GIT binary patch delta 823 zcmZva&2JJx7{;Gj*oBgX78+SCra-YUEY#h8X+J31Ph-SyW8%RBNeN;aIJo*Jc=R&Y z-g_;vq%r*m`lopBxoO`S)`Fy$d1q(leSXg~vq$m2@#8}_ZB$zAmRDs6@Zv{?;C5%f z5kUYc6Bh1@bM{VbYI$o63^OL8h{@Rl6XP&K$ctZEGCGTtTr8THKwM*?;Kkb4`j5JEP;WP#TBqGy|9z>Avs4vNLwLdvRlDE4)`9cB;hEUPmM8>Y$Mj~y zd%n-0f0I>s!LDnPG#R7u9)LxvjH+&*Vya6M4fkn`PzAXOA|c-DcV1e^_zhnuT7dSZ zWP@GmA#0a=$k}I@{d9^#4}74KqyRvgR5BPt7BS2aG$*d~;<5$XSKK3(q(%NImIewj z#mbXHffTs-Y^3=d9{QaQ)xP-?WRFRrZ{ARgWodlQf$JZx`WQo*9w7QrU9vhaIw4D3 z8eu+<1;1+;ksC!UDa7JUlK&97QN#)%Rtb@Im#|D`63Xx+^$f!pK8mSGOy)6GZkkqA z)0^Q$TwH_}oHf#v4-6RedXqF`SVzSVv*S0I_6d0D4>rVyu;XrHN1fZfHFRmz%`+8x Y@Al9`PuIWK7ZkcC?=>L*<)7i~HOjeT`~Uy| delta 894 zcmZuvO;giQ6g@9(k`iC5fuYp`B4}xnmPC-sN1=isqYk5vj?B3144qPjDGMrF|A4!< zb??H3INIq58+NYzAME%G+`PmVVmB{0Z|?cH=iPJjt9kr|71esJ^R4k)_8`>Gv5pOqiN6*{@$bzWgv;PIop%6u^kwu_onOcvQ=wp#PEB5#7^9j84Y-SO z`eV3<2|9gng}N2L+bOh>{XtcLHstLvg_0I$dgeWaLkLE*-Vc$xG<=NuvrY#Oe01I^ zwqZM`D17K(x(&C-mL?t`hd8D%fIL#LNZl44)hW z_})XzgkG*jkdH<%(>H=yJPN_rBFOhl2NBGX^^zaKCwf*wFwFH$-j2%7_mwSmr@ba? zM`f2twk#Ra!TUh`)eTY66Sc>fr>jBvR15!YfE)F(($~i#mbxTmN%AI4Uv7dczUi~x nGHC>>qtTKM$>~>UWrEe&2mze-&Mo}L6TuT+>=`!2pTxu^k-und diff --git a/target/classes/br/com/akato/hibernate/TestaPessoaDAO.class b/target/classes/br/com/akato/hibernate/TestaPessoaDAO.class index 79e18197a10eea5d3d91afbb883497182910d328..42847ff497225ce02ef9888078a05c3785960056 100644 GIT binary patch literal 3919 zcmb7H`+FNl6+IKnURheFiR>h}O`1*O)OI3UeIy3tQtCKyl2(z8?YcMxnz6KzH(6=T zY8C7Nfl?mj(Gs48@+d8k@FJSP*jEaVd7b7#zqC(w4URj|DK1X}v~X9Pl{PS%W|1?@Uo(I#+9$|{)YQl7I; z%Q@Q=h^3s2v}dGisrR5U`a%Pwd<)u{+*xL6-PfOT+*}=7LD#T`Jpx9P6>4loup4_7Lw5+=+Sg>N z{uvE@0y}OxSs42SHcpz9jAI-&jT5Hrv{GH#q4V9(MlgswH6&=UPEyJ#Usm3>sow!>}6S^=6u4C8)MrxqKPCAnxRX!y6`?<%;% zI*wpWAS$!js&|w}U$a@OHk>z#V|YNrae*y2)Par%k>ZA(Gjmp9+LeW(%v995sbfm5xsgJxn=*=r@URBvhVDjB>uhwqQ|+cU zrlGvWq@oq8Lf_Uzn*!|%ern1}haNUVtR{G7jJC=E3gqV2G!2`9Rs?o6Gp>8U7dSd@IDQ^AvZk?Mxlh1uYR)&*LPf#cf zf7F&mmF}yd`{mJZPk^u?G$-T z*jA0O_+C4~>RqTrK|wvs920DkF*7qSv)m;YRI%*E^E$q*kkZIY+R2+?d{;muqqvOk zYxo{_SA#lr`~W{Bt`>n|{c_cLqF%tqgZAMleuSTB_%SQ~`UKTp9Y4j3Ec*p>kz2cw znSkFge#W6Sa23$Uvp#M^_=S!#mKivGK2CkasxJ6K@^@qytL%?+0FfTTnvP$pC_6YJ z<>ZuHOD=Uegey9Jt>$W1@t5+Z>nP8EqvI9)mZ;3jV%m3-hqaR&Pd)l2(N{QEuB)hl z%M|suwp5R^Z-nwrY;TKgoMub<@%|=9d)q`gp9eiuYM%=;{ zHTZu1E4#=FHm#s@1zXo=h#|xtjf;jkTRVS|y4fP=#;xoRt8-~E+iP4;rROtixNUYB zJIc8I!8PojrDr{iXFXIHC-yyJyX@PZb2YufEC1GB{6z_*Hx$8RFX-F3iS0yo`^iP(ND66J>mc z{R3BVG1*$}|GesNt@OvfSjLyt%U5}?7!#Cd2#}iln;aXATE@4ym%!G{t<9)%!7G`UKIwh`o3Lci*&V7Pt0?zLR=`pSHC*|uVCAh2RSxq}ePtchin{j`jW~5W zKpY2&Q$l@_V2Ga|len8_t9$S?@6WMC?fQL;Gs>2#x}OTr+lj{m^v-g∈~vE%O~a2YE(;c` zAgxte6hTC29zXB3ukre3}(qi2TI!Sfdb9P{#pNwLZC@4i4 z|C-gRKB%Y=v4tUjKp)p*LwY6^OHPd1#;}5|sN^R-YGXA+AZd(_>ZZE4*RX6|Mh)sj z)G`$0ywYZ@!%AoDq-_~GIc`Ig-|(&BC(KMr!9&=^XIvHJ*sNeT9_E6##kU80MLfb#>Qw0OpoC0a!9G07+q_lm03Y!t z*g^iSH&WKhP_(usWtGmP_Kl^7`VC9MA?^})2IDyFq!g9m#t{V_c$~M2TctRX3Oexw zx5Z`>x)eNxZaybg3Qse{_=p^HOE|_iN)LpeWALj{bzC1ZEmc!x#6jtFqL&|&cKCbH z<%fZkh!^-T?oICFNb@UFB^%`5O9jnwrxAOQQDCB*K};ETyE$w~c#(l=evD#FgiY9U zRgBr`p;*$e6^!F0p69FHKY^1XUS052X(rwdH@CsgK5HiLI+8|U@n^+@pq<6sR zvztXsF_b$L>kedyiP2|Dn5Ny-RZ;CX)Ykr7Rg*Za;B}ng7k%Z)HyJ!pTBd3zaaO@O zC;I?ppD?A-*Jga?g))j0yZNxov6}9U4ZDIFI~!6x^a$7i1bYP!DODMhRZ{ z;3r90HpP7?B1uA!G!&Y4xB-D=5*AV1J%>$MY(DfA%7ax|L>5usT{nkVVp|A1=Fymi zb~u_vOFJ1%1^1IhbP11X0*Q-=cL&?%kO&J|v}bWNizi86zl0vmv#Ni_(R-Hl!Dq90 z-Vyp}UN){tm zA!dlp#jp4fA5nia z^1h6ZsRKQ@F@-DmgucPsh~ZOwMh%iE)M}f8WaL~G*Vnb_zuL2o;nih^|AS=?C4B^% za1&ZsSY_$7IoDSQW&Jvm^zMM9X&py$n`O9s_lLEU*pMSqN@E$3E2qDTYHUFRD$qpt x=}}Z-5LHB_64!RqE$STAI;zx9OUnR5m|X!_j?*gu2MM7=$W2(UlZOkR{|f+*RxAJj