commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: [lang] Thread safety annotations
Date Mon, 28 Nov 2016 04:12:20 GMT
Ah, ok, what I have in there now is in our own package.

Gary

On Nov 27, 2016 8:06 PM, "Matt Sicker" <boards@gmail.com> wrote:

> Well, HttpClient used to have the same (or similar) thread safety
> annotations for documentation purposes, and I think they were just custom
> annotations and not the javax ones.
>
> On 27 November 2016 at 20:50, Gary Gregory <garydgregory@gmail.com> wrote:
>
> > On Nov 27, 2016 6:46 PM, "Matt Sicker" <boards@gmail.com> wrote:
> > >
> > > I'd be in favor of just including this as an internal annotation
> similar
> > to
> > > how it's done in HttpClient.
> >
> > What does that mean specifically? FWIW, I think those annotations might
> be
> > gone in the current svn trunk.
> >
> > Gary
> > >
> > > On 27 November 2016 at 20:44, Gary Gregory <garydgregory@gmail.com>
> > wrote:
> > >
> > > > I do not think we should use an official Java package because the JSR
> > 305
> > > > page says "The Executive Committee voted to list this JSR as dormant
> in
> > May
> > > > 2012."
> > > >
> > > > Gary
> > > >
> > > > On Nov 27, 2016 6:39 PM, "Matt Sicker" <boards@gmail.com> wrote:
> > > >
> > > > > If you're going to share the annotations between projects, why not
> > use a
> > > > > JSR package for it like the google one? I thought the idea of
> > embedding
> > > > the
> > > > > annotations in [lang] was to prevent the need for the dependency
> and
> > to
> > > > use
> > > > > it internally, not as a public annotation for other projects to
> use.
> > > > >
> > > > > On 27 November 2016 at 19:55, Gary Gregory <garydgregory@gmail.com
> >
> > > > wrote:
> > > > >
> > > > > > Are you suggesting [lang] becomes a multi-module project?
> > > > > >
> > > > > > Gary
> > > > > >
> > > > > > On Nov 27, 2016 5:01 PM, "sebb" <sebbaz@gmail.com> wrote:
> > > > > >
> > > > > > > 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=
> > > > > 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
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Matt Sicker <boards@gmail.com>
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Matt Sicker <boards@gmail.com>
> >
>
>
>
> --
> Matt Sicker <boards@gmail.com>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message