On 28 November 2016 at 00:11, Gary Gregory <garydgreg...@gmail.com> wrote: > On Sun, Nov 27, 2016 at 4:09 PM, sebb <seb...@gmail.com> wrote: > >> On 27 November 2016 at 23:51, Gary Gregory <garydgreg...@gmail.com> wrote: >> > On Sun, Nov 27, 2016 at 3:41 PM, sebb <seb...@gmail.com> wrote: >> > >> >> On 27 November 2016 at 22:31, Gary Gregory <garydgreg...@gmail.com> >> wrote: >> >> > On Sun, Nov 27, 2016 at 2:14 PM, sebb <seb...@gmail.com> wrote: >> >> > >> >> >> On 27 November 2016 at 22:03, Gary Gregory <garydgreg...@gmail.com> >> >> wrote: >> >> >> > These annotations are the SAME as have been published all over the >> >> place, >> >> >> > so I do not think we need a PR for review. Reviewing the code in >> the >> >> repo >> >> >> > should be enough, but I'm not sure _what_ there is to review >> really. >> >> I've >> >> >> > already posted a link to the sources (a pastebin link). I'll >> create a >> >> >> Jira >> >> >> > of course. >> >> >> >> >> >> There is one aspect that needs review: does the annotation belong in >> >> LANG? >> >> >> If we want to use the annotation in other components, do they have to >> >> >> depend on LANG? >> >> >> >> >> > >> >> > No see below and previous messages. >> >> > >> >> > >> >> >> If not, do they all have their own copies? >> >> >> >> >> > >> >> > No. >> >> > >> >> > >> >> >> >> >> >> And what happens when LANG needs a non-BC release? >> >> >> >> >> > >> >> > What is the issue I am missing? >> >> > >> >> >> >> The package name for the annotation might need to change >> >> That would be a downstream nuisance. >> >> >> > >> > Hi All, >> > >> > How is that different than changing the package name for any of our other >> > lang types? >> >> It's not. >> >> > If you want move a package, you have to break BC and we have clear >> > guidelines for that task. >> >> But why should I have to change package imports for annotations just >> because they happen to be in LANG? >> >> Note that this could get confusing. >> >> Say XYZ component starts out only needing lang for the annotations. >> So they include LANG 3.x and code the annotations. >> >> Later they find they want LANG 4.x for runtime. >> They would then need to drop the LANG 3.x dependency, fix up all the >> annotation imports etc. >> Unnecessary work if the annotations were in a separate component. >> >> Also, any tool that wants to check the annotations will have to look >> for them in lots of packages. >> >> Whilst it can no doubt be made to work, it's going to cause problems later. >> > > To be on the playful side, this is what my mother calls "borrowing trouble" > ;-) > > We can future-trip ourselves in all sorts of troubles. Our imaginations > know no bounds! :-)
This is not an imaginary scenario. We know that LANG will have a non-BC release at some point. The plan is to allow non-LANG components to share the LANG annotations. We know that components which originally don't need LANG may end up needing LANG at run-time. Therefore the problem will occur. In this case, "look before you leap" is appropriate. > Gary > > >> >> > Since already have a package called org.apache.commons.lang3.concurrent, >> I >> > propose we place these annottaions in >> > org.apache.commons.lang3.concurrent.annotation. >> > >> > >> >> >> >> >> >> My expectation for such annotations is that they would be >> >> >> self-contained (or built-in to the languange, not LANG). >> >> >> >> >> > >> >> > It is _because_ they are NOT built-in the language or JRE that we are >> >> > proposing they belong in [lang]. >> >> > >> >> > Since we are providing the annotation with CLASS retention only >> >> > (initially), there is no hard dependency on [lang] at runtime. >> >> > >> >> > Is there some subtlety we are missing? >> >> >> >> Yes, the compile-time dependency. >> >> >> > >> > No surprise, right? You can't use an annotation without compiling the >> > source file. >> > >> > >> >> AFAIK it's not possible to have a Maven compile-only dependency; >> >> compile-time implies run-time. >> >> >> > >> > That's a tooling issue of course which should not invalidate the >> worthiness >> > of this feature. >> > >> > If I am a downstream user of Commons Lang's new annotations, I would >> need a >> > Maven scope that says "I need [lang] as a compile time only dependency" I >> > do not see such a scope on >> > https://maven.apache.org/guides/introduction/introduction-to-dependency- >> mechanism.html#Dependency_Scope >> > >> > Time for a Jira! >> > >> > I wonder what Gradle offers users in this dept.? >> > >> > Gary >> > >> > >> >> >> >> > Gary >> >> > >> >> > >> >> >> > Gary >> >> >> > >> >> >> > On Sun, Nov 27, 2016 at 1:20 PM, Benedikt Ritter < >> brit...@apache.org> >> >> >> wrote: >> >> >> > >> >> >> >> Hi, >> >> >> >> >> >> >> >> Gary Gregory <garydgreg...@gmail.com> schrieb am So., 27. Nov. >> 2016 >> >> um >> >> >> >> 21:01 Uhr: >> >> >> >> >> >> >> >> > So let's start with the CLASS retention annotations first. I'll >> >> commit >> >> >> >> > later today. >> >> >> >> > >> >> >> >> >> >> >> >> Maybe create a GitHub PR so people can have a look before it goes >> to >> >> >> >> master? >> >> >> >> >> >> >> >> Benedikt >> >> >> >> >> >> >> >> >> >> >> >> > >> >> >> >> > Gary >> >> >> >> > >> >> >> >> > On Nov 27, 2016 9:50 AM, "Matt Sicker" <boa...@gmail.com> >> wrote: >> >> >> >> > >> >> >> >> > > I feel like documenting thread safety in such a low level, >> widely >> >> >> used >> >> >> >> > > library like [lang] is a great idea. Whether it uses >> annotations, >> >> >> >> > javadocs, >> >> >> >> > > or some sort of informal javadoc comments isn't too big a >> deal to >> >> >> me, >> >> >> >> but >> >> >> >> > > providing some guarantees of thread safety or lack thereof >> would >> >> be >> >> >> >> > > invaluable information. >> >> >> >> > > >> >> >> >> > > On 27 November 2016 at 07:11, Benedikt Ritter < >> >> brit...@apache.org> >> >> >> >> > wrote: >> >> >> >> > > >> >> >> >> > > > I thought we decided to abstain from documenting thread >> safety >> >> >> since >> >> >> >> it >> >> >> >> > > > would get outdated quickly anyway. >> >> >> >> > > > >> >> >> >> > > > Gary Gregory <garydgreg...@gmail.com> schrieb am So., 27. >> Nov. >> >> >> 2016 >> >> >> >> um >> >> >> >> > > > 09:11 Uhr: >> >> >> >> > > > >> >> >> >> > > > > But if we then want a runtime version we had an odd >> packaging >> >> >> with >> >> >> >> > > CLASS >> >> >> >> > > > > retention in .concurrent. and RUNTIME in >> .concurrent.runtime. >> >> >> >> > > > > >> >> >> >> > > > > I might be in YAGNI territory here... >> >> >> >> > > > > >> >> >> >> > > > > Gary >> >> >> >> > > > > >> >> >> >> > > > > On Sat, Nov 26, 2016 at 10:07 PM, Matt Sicker < >> >> boa...@gmail.com >> >> >> > >> >> >> >> > > wrote: >> >> >> >> > > > > >> >> >> >> > > > > > I think adding the additional clazz/runtime package >> would >> >> be a >> >> >> >> > little >> >> >> >> > > > > > overkill if you only include one packaging option for >> now. >> >> >> >> > > > > > >> >> >> >> > > > > > On 27 November 2016 at 00:04, Gary Gregory < >> >> >> >> garydgreg...@gmail.com >> >> >> >> > > >> >> >> >> > > > > wrote: >> >> >> >> > > > > > >> >> >> >> > > > > > > On Nov 26, 2016 8:40 PM, "Matt Sicker" < >> boa...@gmail.com >> >> > >> >> >> >> wrote: >> >> >> >> > > > > > > > >> >> >> >> > > > > > > > I can think of a couple use cases for runtime >> retention >> >> >> for >> >> >> >> > > thread >> >> >> >> > > > > > safety >> >> >> >> > > > > > > > annotations, but they're not specific to commons >> lang. >> >> >> >> > > > > > > > >> >> >> >> > > > > > > > 1. A framework could choose what type of data >> >> structure or >> >> >> >> > > > algorithm >> >> >> >> > > > > to >> >> >> >> > > > > > > use >> >> >> >> > > > > > > > at runtime based on the presence of which thread >> safety >> >> >> >> > > annotation >> >> >> >> > > > is >> >> >> >> > > > > > on. >> >> >> >> > > > > > > > Same for mutability. >> >> >> >> > > > > > > > 2. A testing framework could use these annotations >> to >> >> try >> >> >> and >> >> >> >> > > > > automate >> >> >> >> > > > > > > some >> >> >> >> > > > > > > > sort of thread safety tests, though that sounds >> like a >> >> >> hard >> >> >> >> > > problem >> >> >> >> > > > > to >> >> >> >> > > > > > > > actually implement. >> >> >> >> > > > > > > > >> >> >> >> > > > > > > > However, it'd be easier to just start with class >> >> retention >> >> >> >> (or >> >> >> >> > > > source >> >> >> >> > > > > > > > retention) just for documentation purposes. Higher >> >> >> retention >> >> >> >> > > levels >> >> >> >> > > > > > could >> >> >> >> > > > > > > > be added later if an important use case came up. >> >> >> >> > > > > > > >> >> >> >> > > > > > > But which packaging option? >> >> >> >> > > > > > > >> >> >> >> > > > > > > Gary >> >> >> >> > > > > > > > >> >> >> >> > > > > > > > On 26 November 2016 at 19:56, Gary Gregory < >> >> >> >> > > garydgreg...@gmail.com >> >> >> >> > > > > >> >> >> >> > > > > > > wrote: >> >> >> >> > > > > > > > >> >> >> >> > > > > > > > > On Sat, Nov 26, 2016 at 3:54 PM, sebb < >> >> seb...@gmail.com >> >> >> > >> >> >> >> > > wrote: >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > > On 26 November 2016 at 19:25, Gary Gregory < >> >> >> >> > > > > garydgreg...@gmail.com >> >> >> >> > > > > > > >> >> >> >> > > > > > > > > wrote: >> >> >> >> > > > > > > > > > > On a [crypto] thread, I mentioned >> >> >> >> > > > http://pastebin.com/RKPGGdJ9 >> >> >> >> > > > > > to >> >> >> >> > > > > > > add >> >> >> >> > > > > > > > > > the >> >> >> >> > > > > > > > > > > "classic" four javax.annotation.concurrent >> >> >> annotations >> >> >> >> to >> >> >> >> > > two >> >> >> >> > > > > > > packages >> >> >> >> > > > > > > > > > > (.clazz and .runtime) in Commons Lang for >> CLASS >> >> and >> >> >> >> > RUNTIME >> >> >> >> > > > > > > retentions. >> >> >> >> > > > > > > > > > > >> >> >> >> > > > > > > > > > > You'd use the CLASS version to avoid a hard >> >> >> dependency >> >> >> >> on >> >> >> >> > > > > [lang]. >> >> >> >> > > > > > > > > RUNTIME >> >> >> >> > > > > > > > > > > to keep them around. >> >> >> >> > > > > > > > > > > >> >> >> >> > > > > > > > > > > We'd use the CLASS versions in all of Commons >> for >> >> >> >> > > documenting >> >> >> >> > > > > > > thread >> >> >> >> > > > > > > > > > safety. >> >> >> >> > > > > > > > > > > >> >> >> >> > > > > > > > > > > Thoughts? >> >> >> >> > > > > > > > > > >> >> >> >> > > > > > > > > > Definitely Class retention, not Runtime. >> >> >> >> > > > > > > > > > You don't want to have to include the annotation >> >> jar >> >> >> on >> >> >> >> the >> >> >> >> > > > > runtime >> >> >> >> > > > > > > > > > classpath. >> >> >> >> > > > > > > > > > >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > Hi Sebb, >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > Right now I have both of these packages: >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > - org.apache.commons.lang3. >> >> annotation.concurrent.clazz >> >> >> >> > > > > > > > > - org.apache.commons.lang3. >> >> >> annotation.concurrent.runtime >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > Each with a copy of: >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > GuardedBy >> >> >> >> > > > > > > > > Immutable >> >> >> >> > > > > > > > > NotThreadSafe >> >> >> >> > > > > > > > > ThreadSafe >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > Should we include what I have as is? >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > If we were to only provide the annotation at the >> >> CLASS >> >> >> >> > > retention >> >> >> >> > > > > > level, >> >> >> >> > > > > > > > > should we still package them in >> >> >> >> > ...annotation.concurrent.clazz >> >> >> >> > > in >> >> >> >> > > > > > case >> >> >> >> > > > > > > we >> >> >> >> > > > > > > > > want to provide annotation.concurrent.runtime >> later? >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > If we know for certain we never want to provide >> >> RUNTIME >> >> >> >> > > > retention, >> >> >> >> > > > > we >> >> >> >> > > > > > > can >> >> >> >> > > > > > > > > put them all in annotation.concurrent now. >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > Thoughts? >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > Gary >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > > [I don't know why the annotations were ever >> >> considered >> >> >> >> > > suitable >> >> >> >> > > > > for >> >> >> >> > > > > > > > > > runtime] >> >> >> >> > > > > > > > > > >> >> >> >> > > > > > > > > > > Gary >> >> >> >> > > > > > > > > > > >> >> >> >> > > > > > > > > > > -- >> >> >> >> > > > > > > > > > > E-Mail: garydgreg...@gmail.com | >> >> >> ggreg...@apache.org >> >> >> >> > > > > > > > > > > Java Persistence with Hibernate, Second >> Edition >> >> >> >> > > > > > > > > > > <https://www.amazon.com/gp/ >> >> >> >> product/1617290459/ref=as_li_ >> >> >> >> > > > > > > > > > tl?ie=UTF8&camp=1789&creative= >> >> >> >> 9325&creativeASIN=1617290459& >> >> >> >> > > > > > > > > > >> >> >> >> > > > > > > >> >> >> >> > > > > linkCode=as2&tag=garygregory-20&linkId= >> >> >> >> cadb800f39946ec62ea2b1af9fe6a2 >> >> >> >> > > b8> >> >> >> >> > > > > > > > > > > >> >> >> >> > > > > > > > > > > <http://// >> >> >> >> > > > > > > ir-na.amazon-adsystem.com/e/ >> >> ir?t=garygregory-20&l=am2&o=1& >> >> >> a= >> >> >> >> > > > > > > > > > 1617290459> >> >> >> >> > > > > > > > > > > JUnit in Action, Second Edition >> >> >> >> > > > > > > > > > > <https://www.amazon.com/gp/ >> >> >> >> product/1935182021/ref=as_li_ >> >> >> >> > > > > > > > > > tl?ie=UTF8&camp=1789&creative= >> >> >> >> 9325&creativeASIN=1935182021& >> >> >> >> > > > > > > > > > linkCode=as2&tag=garygregory-20&linkId= >> >> >> >> > > > > > > 31ecd1f6b6d1eaf8886ac902a24de4 >> >> >> >> > > > > > > > > 18%22 >> >> >> >> > > > > > > > > > > >> >> >> >> > > > > > > > > > > >> >> >> >> > > > > > > > > > > <http://// >> >> >> >> > > > > > > ir-na.amazon-adsystem.com/e/ >> >> ir?t=garygregory-20&l=am2&o=1& >> >> >> a= >> >> >> >> > > > > > > > > > 1935182021> >> >> >> >> > > > > > > > > > > Spring Batch in Action >> >> >> >> > > > > > > > > > > <https://www.amazon.com/gp/ >> >> >> >> product/1935182951/ref=as_li_ >> >> >> >> > > > > > > > > > tl?ie=UTF8&camp=1789&creative= >> >> >> >> 9325&creativeASIN=1935182951& >> >> >> >> > > > > > > > > > >> >> >> >> > linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% >> >> >> >> > > > > > > > > > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> >> >> >> >> > > > > > > > > > > <http://// >> >> >> >> > > > > > > ir-na.amazon-adsystem.com/e/ >> >> ir?t=garygregory-20&l=am2&o=1& >> >> >> a= >> >> >> >> > > > > > > > > > 1935182951> >> >> >> >> > > > > > > > > > > Blog: http://garygregory.wordpress.com >> >> >> >> > > > > > > > > > > Home: http://garygregory.com/ >> >> >> >> > > > > > > > > > > Tweet! http://twitter.com/GaryGregory >> >> >> >> > > > > > > > > > >> >> >> >> > > > > > > > > > >> >> >> >> > ------------------------------------------------------------ >> >> >> >> > > > > > > --------- >> >> >> >> > > > > > > > > > To unsubscribe, e-mail: dev-unsubscribe@commons. >> >> >> >> apache.org >> >> >> >> > > > > > > > > > For additional commands, e-mail: >> >> >> >> > dev-h...@commons.apache.org >> >> >> >> > > > > > > > > > >> >> >> >> > > > > > > > > > >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > -- >> >> >> >> > > > > > > > > E-Mail: garydgreg...@gmail.com | >> ggreg...@apache.org >> >> >> >> > > > > > > > > Java Persistence with Hibernate, Second Edition >> >> >> >> > > > > > > > > <https://www.amazon.com/gp/ >> >> >> product/1617290459/ref=as_li_ >> >> >> >> > > > > > > > > tl?ie=UTF8&camp=1789&creative= >> >> >> >> 9325&creativeASIN=1617290459& >> >> >> >> > > > > > > > > linkCode=as2&tag=garygregory-20&linkId= >> >> >> >> > > > > > cadb800f39946ec62ea2b1af9fe6a2 >> >> >> >> > > > > > > b8> >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> >> >> >> > > > > > garygregory-20&l=am2&o=1&a= >> >> >> >> > > > > > > > > 1617290459> >> >> >> >> > > > > > > > > JUnit in Action, Second Edition >> >> >> >> > > > > > > > > <https://www.amazon.com/gp/ >> >> >> product/1935182021/ref=as_li_ >> >> >> >> > > > > > > > > tl?ie=UTF8&camp=1789&creative= >> >> >> >> 9325&creativeASIN=1935182021& >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > linkCode=as2&tag=garygregory-20&linkId= >> >> >> >> > > > 31ecd1f6b6d1eaf8886ac902a24de4 >> >> >> >> > > > > > 18%22 >> >> >> >> > > > > > > > > > >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> >> >> >> > > > > > garygregory-20&l=am2&o=1&a= >> >> >> >> > > > > > > > > 1935182021> >> >> >> >> > > > > > > > > Spring Batch in Action >> >> >> >> > > > > > > > > <https://www.amazon.com/gp/ >> >> >> product/1935182951/ref=as_li_ >> >> >> >> > > > > > > > > tl?ie=UTF8&camp=1789&creative= >> >> >> >> 9325&creativeASIN=1935182951& >> >> >> >> > > > > > > > > linkCode=%7B%7BlinkCode%7D%7D& >> >> >> >> tag=garygregory-20&linkId=%7B% >> >> >> >> > > > > > > > > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> >> >> >> >> > > > > > > > > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> >> >> >> > > > > > garygregory-20&l=am2&o=1&a= >> >> >> >> > > > > > > > > 1935182951> >> >> >> >> > > > > > > > > Blog: http://garygregory.wordpress.com >> >> >> >> > > > > > > > > Home: http://garygregory.com/ >> >> >> >> > > > > > > > > Tweet! http://twitter.com/GaryGregory >> >> >> >> > > > > > > > > >> >> >> >> > > > > > > > >> >> >> >> > > > > > > > >> >> >> >> > > > > > > > >> >> >> >> > > > > > > > -- >> >> >> >> > > > > > > > Matt Sicker <boa...@gmail.com> >> >> >> >> > > > > > > >> >> >> >> > > > > > >> >> >> >> > > > > > >> >> >> >> > > > > > >> >> >> >> > > > > > -- >> >> >> >> > > > > > Matt Sicker <boa...@gmail.com> >> >> >> >> > > > > > >> >> >> >> > > > > >> >> >> >> > > > > >> >> >> >> > > > > >> >> >> >> > > > > -- >> >> >> >> > > > > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> >> >> >> > > > > Java Persistence with Hibernate, Second Edition >> >> >> >> > > > > < >> >> >> >> > > > > https://www.amazon.com/gp/product/1617290459/ref=as_li_ >> >> >> >> > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& >> >> >> >> > > > linkCode=as2&tag=garygregory-20&linkId= >> >> >> >> cadb800f39946ec62ea2b1af9fe6a2b8 >> >> >> >> > > > > > >> >> >> >> > > > > >> >> >> >> > > > > <http://// >> >> >> >> > > > > >> >> >> >> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1& >> >> >> a=1617290459 >> >> >> >> > > > >> >> >> >> > > > > JUnit in Action, Second Edition >> >> >> >> > > > > < >> >> >> >> > > > > https://www.amazon.com/gp/product/1935182021/ref=as_li_ >> >> >> >> > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& >> >> >> >> > > > linkCode=as2&tag=garygregory-20&linkId= >> >> >> >> 31ecd1f6b6d1eaf8886ac902a24de4 >> >> >> >> > > 18%22 >> >> >> >> > > > > > >> >> >> >> > > > > >> >> >> >> > > > > <http://// >> >> >> >> > > > > >> >> >> >> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1& >> >> >> a=1935182021 >> >> >> >> > > > >> >> >> >> > > > > Spring Batch in Action >> >> >> >> > > > > < >> >> >> >> > > > > https://www.amazon.com/gp/product/1935182951/ref=as_li_ >> >> >> >> > > > tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& >> >> >> >> > > > linkCode=%7B%7BlinkCode%7D%7D& >> tag=garygregory-20&linkId=%7B% >> >> >> >> > > > 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action >> >> >> >> > > > > > >> >> >> >> > > > > <http://// >> >> >> >> > > > > >> >> >> >> > ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1& >> >> >> a=1935182951 >> >> >> >> > > > >> >> >> >> > > > > Blog: http://garygregory.wordpress.com >> >> >> >> > > > > Home: http://garygregory.com/ >> >> >> >> > > > > Tweet! http://twitter.com/GaryGregory >> >> >> >> > > > > >> >> >> >> > > > >> >> >> >> > > >> >> >> >> > > >> >> >> >> > > >> >> >> >> > > -- >> >> >> >> > > Matt Sicker <boa...@gmail.com> >> >> >> >> > > >> >> >> >> > >> >> >> >> >> >> >> > >> >> >> > >> >> >> > >> >> >> > -- >> >> >> > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> >> >> > Java Persistence with Hibernate, Second Edition >> >> >> > <https://www.amazon.com/gp/product/1617290459/ref=as_li_ >> >> >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& >> >> >> linkCode=as2&tag=garygregory-20&linkId= >> cadb800f39946ec62ea2b1af9fe6a2 >> >> b8> >> >> >> > >> >> >> > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> >> garygregory-20&l=am2&o=1&a= >> >> >> 1617290459> >> >> >> > JUnit in Action, Second Edition >> >> >> > <https://www.amazon.com/gp/product/1935182021/ref=as_li_ >> >> >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& >> >> >> linkCode=as2&tag=garygregory-20&linkId= >> 31ecd1f6b6d1eaf8886ac902a24de4 >> >> 18%22 >> >> >> > >> >> >> > >> >> >> > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> >> garygregory-20&l=am2&o=1&a= >> >> >> 1935182021> >> >> >> > Spring Batch in Action >> >> >> > <https://www.amazon.com/gp/product/1935182951/ref=as_li_ >> >> >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& >> >> >> linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% >> >> >> 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> >> >> >> > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> >> garygregory-20&l=am2&o=1&a= >> >> >> 1935182951> >> >> >> > Blog: http://garygregory.wordpress.com >> >> >> > Home: http://garygregory.com/ >> >> >> > Tweet! http://twitter.com/GaryGregory >> >> >> >> >> >> ------------------------------------------------------------ >> --------- >> >> >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> >> >> For additional commands, e-mail: dev-h...@commons.apache.org >> >> >> >> >> >> >> >> > >> >> > >> >> > -- >> >> > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> >> > Java Persistence with Hibernate, Second Edition >> >> > <https://www.amazon.com/gp/product/1617290459/ref=as_li_ >> >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& >> >> linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2 >> b8> >> >> > >> >> > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> garygregory-20&l=am2&o=1&a= >> >> 1617290459> >> >> > JUnit in Action, Second Edition >> >> > <https://www.amazon.com/gp/product/1935182021/ref=as_li_ >> >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& >> >> linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de4 >> 18%22 >> >> > >> >> > >> >> > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> garygregory-20&l=am2&o=1&a= >> >> 1935182021> >> >> > Spring Batch in Action >> >> > <https://www.amazon.com/gp/product/1935182951/ref=as_li_ >> >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& >> >> linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% >> >> 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> >> >> > <http:////ir-na.amazon-adsystem.com/e/ir?t= >> garygregory-20&l=am2&o=1&a= >> >> 1935182951> >> >> > Blog: http://garygregory.wordpress.com >> >> > Home: http://garygregory.com/ >> >> > Tweet! http://twitter.com/GaryGregory >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> >> For additional commands, e-mail: dev-h...@commons.apache.org >> >> >> >> >> > >> > >> > -- >> > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> > Java Persistence with Hibernate, Second Edition >> > <https://www.amazon.com/gp/product/1617290459/ref=as_li_ >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459& >> linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8> >> > >> > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= >> 1617290459> >> > JUnit in Action, Second Edition >> > <https://www.amazon.com/gp/product/1935182021/ref=as_li_ >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021& >> linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22 >> > >> > >> > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= >> 1935182021> >> > Spring Batch in Action >> > <https://www.amazon.com/gp/product/1935182951/ref=as_li_ >> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951& >> linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B% >> 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> >> > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a= >> 1935182951> >> > Blog: http://garygregory.wordpress.com >> > Home: http://garygregory.com/ >> > Tweet! http://twitter.com/GaryGregory >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> >> > > > -- > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > Java Persistence with Hibernate, Second Edition > <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8> > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459> > JUnit in Action, Second Edition > <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22> > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021> > Spring Batch in Action > <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org