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 11:03:37 GMT
Yes, we started with the ones from JCIP, but these had runtime
retention, which caused issues.
I e-mailed JCIP asking if the retention could be changed, but no joy.

We therefore created our own from elsewhere.
Not sure why we eventually dropped them.

On 28 November 2016 at 04:06, 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>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message