From 1fa5250338e5da5b3707482678d8a36937ac3bad Mon Sep 17 00:00:00 2001 From: Greg Burd Date: Wed, 5 Apr 2017 15:50:37 -0400 Subject: [PATCH] Functional, not fully understood, but functional. --- .gitignore | 2 + .../2.2/taskArtifacts/cache.properties.lock | Bin 17 -> 17 bytes .gradle/2.2/taskArtifacts/fileHashes.bin | Bin 21232 -> 26279 bytes .gradle/2.2/taskArtifacts/fileSnapshots.bin | Bin 26241 -> 126726 bytes .../2.2/taskArtifacts/outputFileStates.bin | Bin 18692 -> 18842 bytes .gradle/2.2/taskArtifacts/taskArtifacts.bin | Bin 20625 -> 33930 bytes .idea/modules/farsite_main.iml | 12 + .idea/modules/farsite_test.iml | 9 +- NOTES | 50 + build.gradle | 46 +- dependencies.lock | 72 +- farsite.ipr | 184 ++ farsite.iws | 1649 +++++++++++++++-- src/META-INF/persistence.xml | 47 - src/main/java/com/example/farsite/Main.java | 36 - .../example/farsite/model/AbstractModel.java | 24 + .../com/example/farsite/model/Address.java | 49 + .../com/example/farsite/model/Employee.java | 127 ++ .../farsite/model/EmploymentPeriod.java | 38 + .../com/example/farsite/model/Family.java | 19 - .../com/example/farsite/model/Gender.java | 5 + .../farsite/model/GenderConverter.java | 36 + .../java/com/example/farsite/model/Job.java | 16 - .../java/com/example/farsite/model/Model.java | 9 + .../com/example/farsite/model/Person.java | 32 - .../example/farsite/model/PhoneNumber.java | 59 + .../java/com/example/farsite/model/Todo.java | 18 - .../farsite/util/CockroachDBPlatform.java | 39 + .../farsite/util/CrDBSessionCustomizer.java | 24 + .../example/farsite/util/FlakeSequence.java | 74 + .../farsite/util/GeneratedIdentityValue.java | 73 + .../farsite/util/MersenneTwisterFast.java | 1439 ++++++++++++++ .../example/farsite/util/PSRNSequence.java | 50 + .../com/example/farsite/util/Password.java | 50 + .../com/example/farsite/util/Randomness.java | 190 ++ .../farsite/util/ReseedingSecureRandom.java | 41 + .../farsite/util/SamplePopulation.java | 49 + .../farsite/util/SerialVersionUID.java | 104 ++ .../example/farsite/util/UUIDSequence.java | 55 + src/main/resources/META-INF/persistence.xml | 66 + .../com/example/farsite/model/JpaTest.java | 107 -- .../com/example/farsite/test/ConfigTest.java | 38 + .../com/example/farsite/test/ExampleTest.java | 12 + .../java/com/example/farsite/test/Main.java | 108 ++ .../farsite/test/PersistenceTesting.java | 63 + 45 files changed, 4680 insertions(+), 441 deletions(-) create mode 100644 NOTES delete mode 100644 src/META-INF/persistence.xml delete mode 100644 src/main/java/com/example/farsite/Main.java create mode 100644 src/main/java/com/example/farsite/model/AbstractModel.java create mode 100644 src/main/java/com/example/farsite/model/Address.java create mode 100644 src/main/java/com/example/farsite/model/Employee.java create mode 100644 src/main/java/com/example/farsite/model/EmploymentPeriod.java delete mode 100644 src/main/java/com/example/farsite/model/Family.java create mode 100644 src/main/java/com/example/farsite/model/Gender.java create mode 100644 src/main/java/com/example/farsite/model/GenderConverter.java delete mode 100644 src/main/java/com/example/farsite/model/Job.java create mode 100644 src/main/java/com/example/farsite/model/Model.java delete mode 100644 src/main/java/com/example/farsite/model/Person.java create mode 100644 src/main/java/com/example/farsite/model/PhoneNumber.java delete mode 100644 src/main/java/com/example/farsite/model/Todo.java create mode 100644 src/main/java/com/example/farsite/util/CockroachDBPlatform.java create mode 100644 src/main/java/com/example/farsite/util/CrDBSessionCustomizer.java create mode 100644 src/main/java/com/example/farsite/util/FlakeSequence.java create mode 100644 src/main/java/com/example/farsite/util/GeneratedIdentityValue.java create mode 100644 src/main/java/com/example/farsite/util/MersenneTwisterFast.java create mode 100644 src/main/java/com/example/farsite/util/PSRNSequence.java create mode 100644 src/main/java/com/example/farsite/util/Password.java create mode 100644 src/main/java/com/example/farsite/util/Randomness.java create mode 100644 src/main/java/com/example/farsite/util/ReseedingSecureRandom.java create mode 100644 src/main/java/com/example/farsite/util/SamplePopulation.java create mode 100644 src/main/java/com/example/farsite/util/SerialVersionUID.java create mode 100644 src/main/java/com/example/farsite/util/UUIDSequence.java create mode 100644 src/main/resources/META-INF/persistence.xml delete mode 100644 src/test/java/com/example/farsite/model/JpaTest.java create mode 100644 src/test/java/com/example/farsite/test/ConfigTest.java create mode 100644 src/test/java/com/example/farsite/test/ExampleTest.java create mode 100644 src/test/java/com/example/farsite/test/Main.java create mode 100644 src/test/java/com/example/farsite/test/PersistenceTesting.java diff --git a/.gitignore b/.gitignore index 99c2a80..1714682 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +build + .gradle gradlew* gradle/ diff --git a/.gradle/2.2/taskArtifacts/cache.properties.lock b/.gradle/2.2/taskArtifacts/cache.properties.lock index e244035015401141a6352dbf83e16254b50020c4..32044f7a4a1e6fbaa0f43cdd01b0c6d3a4088d33 100644 GIT binary patch literal 17 UcmZRc=%qU&FpgW50SuTr03r1Q4FCWD literal 17 TcmZRc=%qU&FpgW50Rs8~A@~Cl diff --git a/.gradle/2.2/taskArtifacts/fileHashes.bin b/.gradle/2.2/taskArtifacts/fileHashes.bin index 402cf5cee23e968d9578c1da1660b8794fbe6471..0f7e9d14937e08cbd65106b7a2f3bed0b7612573 100644 GIT binary patch literal 26279 zcmeI3c~nka`1em~RC*dIM587u4TLl*X`bhKCK3{QkV={~YQiIlGG(ZgN~s7LGD@V7c%E7 zv#Mbf{c$~ziuUWSz`q~dcV7x<^e?&tbO-1T&>f&VKzD%d0Nnw)19S)I4$vK-J3x1U z?f~5Zx&w3v=nl{wpgTZ!;D4tB%{FM=3t{bo>lm?b-cy*5HXlF`MNag`lgFg?-1*_i zdl|-f-ot;B5N_Xf)N1yE7t|fz;CciE(mELm;ll*{VOjmvS};>L&bz-a$de znZ?_n?l_9;@tNAioZAf}pl+Uk>j@KF9y4vR@=!O<$MwXAM=Q>UGs!~T)(_W{+}v#! zuBj}9x|KVwr!r1B+*H2(H`EPkaQ#%4Sg(KKQ)j4K-@x^BZ;E<+zszf>yPhNT_wlWH zB|RZfw@=0OjK~#>Hk57Vpz2Pzo)s9|78iJOG1MLTaQ)0;b@jrIfbZ1nx8wRbnMIc> z{UoTr@iB=cbe}vkb8iY&cP08I$0Ek}cFN`(}3Hoye+?ehlO7ju86D;7x?-H}yJ}Be;IEGE#}m;^LT#^iKdzTQemn`r+e{Mr9>b~AQyNqs>>F_XZY^VY z@r>Ga7;nvr>t%h*ls6i*YeU_04A<|mpQ)>HZkvJnHewuBmiMR~Xf@A;y45p0{=VAt zqvJe3!k})r2-j=ar5SnoI;r=gO)a7C(~(@Y)Qvh$OwZtYU8XZ9|V7!+cuD1(pcXGJ*XdLQxgby!M z7e~f_GE{=PdkP*;2?(-THM=<(>h|Ke-ckEbN~bzG8tUE)alJEX|Bq_#)rwFz?!xu% zOYY*XO3wCBx8%k351QP4Y^=>x-z*IY{o=Eh?Ezh@V7&8nT<_Vd#2{*aaUbJdaQv9FtcyB}9mV)b_pRPR>$o=L9)J=$a zzE^LhaGut`6;St8!{Z0f336l;Qvd0881L$f>tlIuT~Ae7ZG^hH zEv`>gdsZLxDHVmf*&$s2*<{(jtXFvl)E)A0{Z~>#;=r-znp7RZ^(ijB#$ro8>ip?W zjJH|VjSi{Z8PtC9CE{mgR%wW`xb?#8_y*zEnN3Wp-eWJDLcRWaTwjnrY-$N!wZ{YMHgSZmX|_zkLEH%H7Am;T$t$u~H)TQ@>PBLOo>#|xzABJfk0EjW zMW@s9C~|U+Fy0*xpIvm}x9q=bABjWVlo;nc+N>eMlA)4N_YuVbo@bFx)9X=U#?vI*+mg#UsY9YPh0)y$!8b{mghdg>f|qNchn)IHV_dehDOteiICQ1`LN z^<|05a_>I8VuQNf9b6aw-c_OZ_p7~7cPqyA6{*t={bR8LPLy0GzDmKs$xSWW5b7SpeY&dr!NvMdS=9By zZ2*s#n$8ZEXIYR1+_^h}@CA?$=>NZxmzIJFu`L`0URH%DvgJDdUAOM*p)UoB)Op6N57+fY)^$%Cyrs??hD3iEEaUfiNGUOe*YWbg<4v87hoaRt z)Ir_A9M{bmZ~4yDeaV6PHsZO(!eDcfzJE*&)Qytyc#GlegBq)#?ihjVc9RXcF`DULOj5j03oA>*^=i0Vc;j01SMyw+~l57T>&NT4BcxPt(Isq>R&P6=%p|00f&VKzD%d0Nnw)19S)I4$vK- zJ3x1U?f~5Zx&w3v=nl{wpgTZ!fbIa@0lEWp2j~va9iTfvcYy8y-2u7-|1%wE20ItQ zE_gBUj|XY{V!1}kxP-}0H{7$xieoo|FgR&cz6gTVD`NY4Ca>R-{{P}+(5r!+UZUL6 z$@@RXCue5|e{K*c_7au{>7+JVNW*mOwcwncH*P{s*VVAH!~B=Wfrh2mT}(|@=A)cr z+cgCPj9Yb32%I-c^*58bFPGHno8^Ri5~Vwi-yL;9w@ZV3HryD;UQh$hftj_dG44;9 zN<2pv+LSypZ!s#`7H47F2(YEfB^ZSWjAOgp?&g|jlhZxk4}w8=N<>^oNizZ=vH9ooBo*Or;mE zZ8b^rrp2tVu6wPrt%+P^g~GO8v+AmQ>zM3p{LNwmX*pYL$gEXh(42E|RV$~pI4-!+ja=rVq7n^LcyA&#ckY ztv{_!gCUlGfwYt}$zvqUSTf8~U)sG?w)p9Fy&sAZ5ZieSs}lK%ZTfUiwOc{LY_o!X z?teQ}x_xES*&5k&8_>8{C7f_?A%pQ*fDhgMoJYd!-7CeF6Ma&`XY07jbaRhvkpNRlnSE6>?|YG0r02 z9-L2A^jDL)ZV$FhnL0MHe0I0kQ0K+y2%a;d8B7`gcPLdXo@C3`#4?H7Rh`X!UkrAa zXp|3Pm>OK-MH#Z>WVMb|qbD>hzkErtDIFIpAa=XmF_ zFUPyJCNlR$O~j>r zT>j^S4cQvPaX-;bx#*o|RU!@I5rhvLVoRH3ACSt_u<4Avw0pBC2!-JFVJ#KUjbLJnbJ-w)BLk4yb8uLX77!lDc}r_TH?gLAY+Ne~D}FM$n}0|nP>NSM69-Odudt1&X; zVahLjl-RLs2F;38EE1f5*$Q38usKzRkMxO8B{u3FYq_{Yut~8Pa;K?%!1xVtVOvwe z$y`-I!e4QSy3#(~{ThN^JNE!?L!Yw&h)0kG*go=@^r`MX zY9in?iV|ZW$BoWv2%?afGD2$Jx=LXk1C?h;yA{RNNpf!vz*ObOTOqdKA8@|a7ZgV> zv%ARhSy#`{t9YAVQ|gqj*??1dS5gBx#2B38KTODyxuk)c{vTf7>Jabq=93>iJO;U! zRE)6^e3Nf@ERs~FSwNVXUVN>v;X2)$>6dnk0Bl1y3w*7 ztyoTL+RwKSq7)o3S5(cXYd}28NrR((w){3yI-zz4p?`PkJf3X`>Kz~T>;vgEuCLDl z;RwRm1&+hBrTpY{*_&I>-;%Hlu0B8R+gdLE11s~QGhBiYRvEw*FB2Rjr3-zlkFba= zmI^gi+R8Y2552$9PEgW62*S}NVI4TSw@+%3u)kQQI!ipg3MQKtvn4kwnP63(S#1x( zQ4Gr#JuNas!Z^J)L@|{KJatWP+1=`M3%xqpI09RZ-L5(>vx7;PQ^$kTdG#a7Ub63_ z_9o0gPY8^C6yz-0?YxJCEe_kO7{B02!ts}duF)GJb5f5oGHgSMG^mx0L zgmIs3?s=xOr-JvZy2{2+ObjIKCcymu>3m79vZdJMxW9=~Mc$BK*zD^MF|-`l4B*td zGsv%7uF+a+3Kd!8K1NB;g!p~BMT@cd08A`0-kzMUD$r&1mXpkj&zNNtkJyw7&~i+6 zfUBKS*+}LFgc`=H@_)0~_uTQkQnhkFEyp4OIKzJ#o{?N(Ty=GW(=b=_`x4g`!A5WR zXfY=2)uOq4fRluU+~)|rcq1gbHfu|rS zaq#J8PL=ac4Fm_LhMz1?xJc>dof-%XP7OUiuR}@L`a4|3;U4~m*4EP(<06-$k0t0h zAx5QaJ?QvBhFv@uHmAyr11V}zhg^?diw``pL+}@zW(m$L4RCytf=Z-xUSV6-k92-6 zj>$;UOCKm$Pn&Kzc8h!FtWF?d^Y%EAjoRayQnBPJ!{=KJ2#(t0s}<8p>E`Wm0;BeL zc_aC4e%>DcgTWr(@(jLd{kc{7+T|=n)k-RI-VXnh z4OGhGA*D})w zCq7C)p~ZG#>nhi5z@!tYOeeKE&djOS8$&WbSGa5097j3FS9e&BfmR_*E$Ay0f|xOj z|L2jYHY04Ig|kt(&A7zDFA*x}(*-&(os_jeJi_y744f`&$&%*=uT$$bZS88Rh*09; ze%QSqZOxo?$gOUGT|2O8J*i5i=EAmxIwjW%29q1uWaYtI>z{1M#bp31zIK0ftXPp$%N!_Mv0m1p4rfCap1xI)6%BTu(&=8;NJ-L~)~$LE#F08{CG z(G9}UXLU|+G|KYU!>~Cw-SEF@e|OaSMwxv2th?6I^Iwb`Hl)tZNE_f1u8t&=x$4s| zlb=66!5}wXwx;rq1o%+cN!8a^4aB31K?gYQwrf=+b9c>ZSl=qi41^v#`k}08au?t< zVlPaBcm!d`jtkm*R+5^x`Eu3Rl-Q{it9r92qc(zQ*j$VWea}OX#i!I1NZ5wfgLT`G z{z1V@&eqzNL)gbff3h)RBW3yRT?a_m>Q-O={*=p8MWb5JY^vAz(Pk6C8mZ{fRX}cB zteas<U{;bHp@16PZwmbP2l#70`1%cymriAAI6Zhx7!?;{24+^PF=JcffGs68m zADNqDN*7@tr_5Q$7c2nje!FJ%lQ2ckuX*in531dkxJS9sSnGtfj;Io82iT$|0+u9f z>C?c)Tp>qe*61ZiS9f+xVpziZ5fF|b0=nSX$FDO@Zd@IIXiM#G6TgOlk1Lj*tH`3| z*d_tTv|s{G>vKlt+i}iDw#XdY)+c+G2$(XSq2-vckr_wPHzk!Rr_XA8(%#olX27&4 z#NjOZl8TNLqD)3rkgmY%>^E|mnc20wrAkY*r4qTGau2`4UUoH--(%h*ycG0v5_HNu zy@i96Zh2@%_8?DBSCrunH|;QI@KEH~Hj+^W!V#`fS8$5kv>pD|VNUBZU)F~|3eQtY zZ{TEgxhC3#m6`m>9>gO^D)te;_rgwAQn~}X&hx2Wc-}1bOXytmOpzLfr3i{(6l+TY zIQKqxKSgfc(7ndt3-?Z4xn8-Xqp($~6ywsD9mF_>nQm|ndJ(dQ%vJkMhxaX6#$>eO zvr^-Y6!g^{b(47JW1I#YXJkH{GUqh!`qfQone7geg`xH=Ard{XmP zB{hnAJwL)aJzCQh(RA$&hMirY2*S~q-522KoBYU;T;~0LtANN0Uznv&@jo}qKaVa{ zXqg0u6ar38pQne+Jt@`YT5*^oqWOyUrzJWL=u697juZPZY@?G6d7aeu+tHYy|8umm zL-yQV&czk9*h0)z=3g;cH0eaS58q-{cr~1B-Jc-G{`@p048w@qTmowy!$f_fD-DPK zqVRa!nE+PCVuZO*CQbY7lU!Pm=_P2M6ho95nXBbqvS+O3&g{nY)p;ww9O9+r7}3## zAi|vN>SQkG&;tGgk`!i+Mg6KpPGx8mY70@QfFgDlGCM?djI&``}7vW>>!Wd#5ZOv-QAyBARa+F!6GH7p5ShD6 z5OTh@va{Cb->llFRk&u)GSGS VhhcYGuYhm_VX*~AhOL<){|C?y@Gt-X delta 275 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 delta 149 zcmbO=nXzRO;{;Jo1`wFO_vFWofoH`hCKykalTc)2o4i26K;X+AzCZ^7w>@Ab3?6xt zPe>>TxOv;pD^GP=3l;2{{6IosvVk5sGYLLo5 kleYdnV+>>n05Jy$PubzRZLa;64j`N1k*n;h$*Vk~0OFG{6#xJL diff --git a/.gradle/2.2/taskArtifacts/taskArtifacts.bin b/.gradle/2.2/taskArtifacts/taskArtifacts.bin index de9a0847d83a643f4be3fb12b334c57c2b771b9f..045fb260d5336ef50abd42ac4bb03c0e65f6d2c7 100644 GIT binary patch literal 33930 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 diff --git a/.idea/modules/farsite_main.iml b/.idea/modules/farsite_main.iml index bc58c18..37c6e62 100644 --- a/.idea/modules/farsite_main.iml +++ b/.idea/modules/farsite_main.iml @@ -39,6 +39,16 @@ + + + + + + + + + + @@ -50,8 +60,10 @@ + + diff --git a/.idea/modules/farsite_test.iml b/.idea/modules/farsite_test.iml index 85b0f87..d09bb0b 100644 --- a/.idea/modules/farsite_test.iml +++ b/.idea/modules/farsite_test.iml @@ -51,8 +51,10 @@ + + @@ -68,6 +70,12 @@ + + + + + + @@ -84,7 +92,6 @@ - diff --git a/NOTES b/NOTES new file mode 100644 index 0000000..4cbded8 --- /dev/null +++ b/NOTES @@ -0,0 +1,50 @@ +http://wiki.eclipse.org/EclipseLink/Examples/JPA/Employee +http://java-persistence-performance.blogspot.com/2013/06/cool-performance-features-of.html + +pkill -9 crdb && rm -rf /tmp/far/* && (cd /tmp/far; crdb start --background --http-port=9090 --vmodule=executor=2; sleep 1) && echo "create database farsite;" | crdb sql && tail -f /tmp/far/cockroach-data/logs/crdb.log + + +// jpa weaving +def entitiesBasePackage = 'com.example.farsite.model' + +compileJava { + destinationDir file("$buildDir/compiled-classes") +} + +task copyNonPersistentClasses(type: Copy, dependsOn: compileJava) { + from "$buildDir/compiled-classes" + into sourceSets.main.output.classesDir + exclude '**/' + entitiesBasePackage.replaceAll('\\.','/') + '/**' + includeEmptyDirs = false +} +task copyPersistentClasses(type: Copy, dependsOn: compileJava) { + from "$buildDir/compiled-classes" + into "$buildDir/unwoven-persistent-classes" + include '**/' + entitiesBasePackage.replaceAll('\\.','/') + '/**' + includeEmptyDirs = false +} +task weaveJpaEntities(type: JavaExec, dependsOn: [copyPersistentClasses,processResources]) { + main = 'org.eclipse.persistence.tools.weaving.jpa.StaticWeave' + classpath configurations.weave.incoming.files + args '-persistenceinfo' + args processResources.destinationDir.absolutePath + args '-classpath' + args configurations.compile.incoming.files.asPath + args '-loglevel' + args 'INFO' + args copyPersistentClasses.destinationDir.absolutePath + args sourceSets.main.output.classesDir.absolutePath + + inputs.files fileTree(copyPersistentClasses.destinationDir),fileTree(processResources.destinationDir).matching({pattern -> pattern.include('**/META-INF/persistence.xml')}) + outputs.dir sourceSets.main.output.classesDir +} +//classes.dependsOn copyNonPersistentClasses,weaveJpaEntities + +dependencies + weave group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.+' + weave group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.jpa', version: '2.+' + +configurations + weave + +mainClassName = "com.example.farsite.Main" diff --git a/build.gradle b/build.gradle index 07cdd16..63c5119 100644 --- a/build.gradle +++ b/build.gradle @@ -24,20 +24,19 @@ apply plugin: 'com.uber.okbuck' apply plugin: 'nebula.dependency-lock' apply plugin: 'application' -mainClassName = "com.example.farsite.Main" applicationDefaultJvmArgs = ["-Dgreeting.language=en"] +task wrapper(type: Wrapper) { + gradleVersion = '2.2' +} + task execute(type:JavaExec) { classpath = sourceSets.main.runtimeClasspath - main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "com.example.farsite.Main" -} - -dependencies { - testCompile 'junit:junit:4.12' + main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "com.example.farsite.test.Main" } jar { - baseName = '' + baseName = 'farsite' version = '0.0.1-SNAPSHOT' } @@ -65,12 +64,18 @@ dependencies { // Some Java Extras compile group: 'javax.inject', name: 'javax.inject', version: '1' + // Apache Commons + compile group: 'commons-codec', name: 'commons-codec', version: '1.+' + // Google Guava, "For all the Goodness(TM)" compile group: 'com.google.guava', name: 'guava', version: '21.+' // Joda Time, "Because time is hard(TM)" compile group: 'joda-time', name: 'joda-time', version: '2.+' + // Flake ID generation + compile group: 'com.github.rholder.fauxflake', name: 'fauxflake-core', version: '1.+' + // Lombok, "Where less is more(TM)" compile group: 'org.projectlombok', name: 'lombok', version: '1.+' @@ -83,7 +88,6 @@ dependencies { compile group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.+' compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.jpa', version: '2.+' - // Dropwizard (aka. CodaHale) Metrics, "Measure all the things!(TM)" compile group: 'io.dropwizard.metrics', name: 'metrics-core', version: '3.+' compile group: 'io.dropwizard.metrics', name: 'metrics-jvm', version: '3.+' @@ -96,11 +100,31 @@ dependencies { compile group: 'org.slf4j', name: 'log4j-over-slf4j', version: '1.+' compile group: 'org.zalando', name: 'logbook-core', version: '1.+' - // Fake data generator compile group: 'com.github.javafaker', name: 'javafaker', version: '0.+' + // Testing + testCompile group: 'junit', name: 'junit', version: '4.+' + testCompile group: 'org.mockito', name: 'mockito-all', version: '1.+' + testCompile group: 'org.assertj', name: 'assertj-core', version: '2.+' + testCompile group: 'com.github.stefanbirkner', name: 'system-rules', version: '1.+' + testCompile group: 'nl.jqno.equalsverifier', name: 'equalsverifier', version: '1.+' + testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3' + testCompile group: 'org.quicktheories', name: 'quicktheories', version: '0.+' } -task wrapper(type: Wrapper) { - gradleVersion = '2.2' +task performJPAWeaving(type: JavaExec, dependsOn: "compileJava"){ + inputs.dir compileJava.destinationDir + outputs.dir compileJava.destinationDir + main "org.eclipse.persistence.tools.weaving.jpa.StaticWeave" + args "-persistenceinfo", + "src/main/resources", + compileJava.destinationDir.getAbsolutePath(), + compileJava.destinationDir.getAbsolutePath() + classpath = configurations.compile +} + +tasks.withType(JavaCompile){ + doLast{ + tasks.performJPAWeaving.execute() + } } diff --git a/dependencies.lock b/dependencies.lock index f01cd66..4abc3d8 100644 --- a/dependencies.lock +++ b/dependencies.lock @@ -12,6 +12,10 @@ "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -82,6 +86,10 @@ "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -152,6 +160,10 @@ "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -218,10 +230,18 @@ "locked": "0.13", "requested": "0.+" }, + "com.github.stefanbirkner:system-rules": { + "locked": "1.16.1", + "requested": "1.+" + }, "com.google.guava:guava": { "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -252,7 +272,15 @@ }, "junit:junit": { "locked": "4.12", - "requested": "4.12" + "requested": "4.+" + }, + "nl.jqno.equalsverifier:equalsverifier": { + "locked": "1.7.8", + "requested": "1.+" + }, + "org.assertj:assertj-core": { + "locked": "2.6.0", + "requested": "2.+" }, "org.eclipse.persistence:eclipselink": { "locked": "2.6.4", @@ -266,6 +294,14 @@ "locked": "2.6.4", "requested": "2.+" }, + "org.hamcrest:hamcrest-core": { + "locked": "1.3", + "requested": "1.3" + }, + "org.mockito:mockito-all": { + "locked": "1.10.19", + "requested": "1.+" + }, "org.postgresql:postgresql": { "locked": "42.0.0", "requested": "42.+" @@ -274,6 +310,10 @@ "locked": "1.16.16", "requested": "1.+" }, + "org.quicktheories:quicktheories": { + "locked": "0.13", + "requested": "0.+" + }, "org.slf4j:log4j-over-slf4j": { "locked": "1.7.25", "requested": "1.+" @@ -292,10 +332,18 @@ "locked": "0.13", "requested": "0.+" }, + "com.github.stefanbirkner:system-rules": { + "locked": "1.16.1", + "requested": "1.+" + }, "com.google.guava:guava": { "locked": "21.0", "requested": "21.+" }, + "commons-codec:commons-codec": { + "locked": "1.10", + "requested": "1.+" + }, "io.dropwizard.metrics:metrics-core": { "locked": "3.2.2", "requested": "3.+" @@ -326,7 +374,15 @@ }, "junit:junit": { "locked": "4.12", - "requested": "4.12" + "requested": "4.+" + }, + "nl.jqno.equalsverifier:equalsverifier": { + "locked": "1.7.8", + "requested": "1.+" + }, + "org.assertj:assertj-core": { + "locked": "2.6.0", + "requested": "2.+" }, "org.eclipse.persistence:eclipselink": { "locked": "2.6.4", @@ -340,6 +396,14 @@ "locked": "2.6.4", "requested": "2.+" }, + "org.hamcrest:hamcrest-core": { + "locked": "1.3", + "requested": "1.3" + }, + "org.mockito:mockito-all": { + "locked": "1.10.19", + "requested": "1.+" + }, "org.postgresql:postgresql": { "locked": "42.0.0", "requested": "42.+" @@ -348,6 +412,10 @@ "locked": "1.16.16", "requested": "1.+" }, + "org.quicktheories:quicktheories": { + "locked": "0.13", + "requested": "0.+" + }, "org.slf4j:log4j-over-slf4j": { "locked": "1.7.25", "requested": "1.+" diff --git a/farsite.ipr b/farsite.ipr index dd3b202..f034afb 100644 --- a/farsite.ipr +++ b/farsite.ipr @@ -71,6 +71,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -133,6 +254,24 @@ + + + + + + + + + + + + + + + + + + @@ -178,6 +317,15 @@ + + + + + + + + + @@ -286,6 +434,15 @@ + + + + + + + + + @@ -295,6 +452,15 @@ + + + + + + + + + @@ -385,6 +551,15 @@ + + + + + + + + + @@ -403,6 +578,15 @@ + + + + + + + + + diff --git a/farsite.iws b/farsite.iws index b3b71b8..7702e6a 100644 --- a/farsite.iws +++ b/farsite.iws @@ -2,6 +2,22 @@ + + + + + + + + + + + + + + + + @@ -86,67 +102,700 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -154,6 +803,45 @@ + + + + + + eclipselink.example.jpa.employee + platform + native + shouldnati + shouldprintfield + isidentity + returning + lastval + should + shouldacquire + insert + select + generated + buildselectqueryforiden + compileJava + override + addphon + weave + BT + id + modifyEm + tostring + coordination + salary + + + com.example.jpa + + @@ -176,6 +864,7 @@ Assembles classes 'main'.<p><i>Task group: build<i> Delete stale configuration files generated by OkBuck<p><i>Task group: okbuck<i> Setup okbuck cache and dependencies<p><i>Task group: okbuck<i> + <i>Task group: other<i> Move the generated lock file into the project directory<p><i>Task group: Locking<i> Runs this project as a JVM application<p><i>Task group: application<i> <i>Task group: other<i> @@ -231,7 +920,7 @@ @@ -786,7 +1563,7 @@ - + - @@ -937,6 +1713,26 @@ + + + + + + @@ -1351,9 +2149,15 @@ + + + + + + - @@ -1361,38 +2165,39 @@ - - + + + - - - + + + - + - - - + + + - + + - + - + - - + @@ -1407,7 +2212,81 @@ - @@ -1416,56 +2295,522 @@