commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: [lang] Thread safety annotations
Date Mon, 28 Nov 2016 01:01:34 GMT
On 28 November 2016 at 00:11, Gary Gregory <garydgregory@gmail.com> wrote:
> On Sun, Nov 27, 2016 at 4:09 PM, sebb <sebbaz@gmail.com> wrote:
>
>> On 27 November 2016 at 23:51, Gary Gregory <garydgregory@gmail.com> wrote:
>> > On Sun, Nov 27, 2016 at 3:41 PM, sebb <sebbaz@gmail.com> wrote:
>> >
>> >> On 27 November 2016 at 22:31, Gary Gregory <garydgregory@gmail.com>
>> wrote:
>> >> > On Sun, Nov 27, 2016 at 2:14 PM, sebb <sebbaz@gmail.com> wrote:
>> >> >
>> >> >> On 27 November 2016 at 22:03, Gary Gregory <garydgregory@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 <
>> britter@apache.org>
>> >> >> wrote:
>> >> >> >
>> >> >> >> Hi,
>> >> >> >>
>> >> >> >> Gary Gregory <garydgregory@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" <boards@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
<
>> >> britter@apache.org>
>> >> >> >> > wrote:
>> >> >> >> > >
>> >> >> >> > > > I thought we decided to abstain from documenting
thread
>> safety
>> >> >> since
>> >> >> >> it
>> >> >> >> > > > would get outdated quickly anyway.
>> >> >> >> > > >
>> >> >> >> > > > Gary Gregory <garydgregory@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 <
>> >> boards@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 <
>> >> >> >> garydgregory@gmail.com
>> >> >> >> > >
>> >> >> >> > > > > wrote:
>> >> >> >> > > > > >
>> >> >> >> > > > > > > On Nov 26, 2016 8:40 PM,
"Matt Sicker" <
>> boards@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 <
>> >> >> >> > > garydgregory@gmail.com
>> >> >> >> > > > >
>> >> >> >> > > > > > > wrote:
>> >> >> >> > > > > > > >
>> >> >> >> > > > > > > > > On Sat, Nov 26,
2016 at 3:54 PM, sebb <
>> >> sebbaz@gmail.com
>> >> >> >
>> >> >> >> > > wrote:
>> >> >> >> > > > > > > > >
>> >> >> >> > > > > > > > > > On 26 November
2016 at 19:25, Gary Gregory <
>> >> >> >> > > > > garydgregory@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:
garydgregory@gmail.com |
>> >> >> ggregory@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-help@commons.apache.org
>> >> >> >> > > > > > > > > >
>> >> >> >> > > > > > > > > >
>> >> >> >> > > > > > > > >
>> >> >> >> > > > > > > > >
>> >> >> >> > > > > > > > > --
>> >> >> >> > > > > > > > > E-Mail: garydgregory@gmail.com
|
>> ggregory@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 <boards@gmail.com>
>> >> >> >> > > > > > >
>> >> >> >> > > > > >
>> >> >> >> > > > > >
>> >> >> >> > > > > >
>> >> >> >> > > > > > --
>> >> >> >> > > > > > Matt Sicker <boards@gmail.com>
>> >> >> >> > > > > >
>> >> >> >> > > > >
>> >> >> >> > > > >
>> >> >> >> > > > >
>> >> >> >> > > > > --
>> >> >> >> > > > > E-Mail: garydgregory@gmail.com | ggregory@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 <boards@gmail.com>
>> >> >> >> > >
>> >> >> >> >
>> >> >> >>
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > --
>> >> >> > E-Mail: garydgregory@gmail.com | ggregory@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-help@commons.apache.org
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >> > --
>> >> > E-Mail: garydgregory@gmail.com | ggregory@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-help@commons.apache.org
>> >>
>> >>
>> >
>> >
>> > --
>> > E-Mail: garydgregory@gmail.com | ggregory@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-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org
>>
>>
>
>
> --
> E-Mail: garydgregory@gmail.com | ggregory@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-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message