Reviewing src zip. MD5, ASC OK.

Reviewing with BUILDING.md.

With:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
2015-11-10T08:41:47-08:00)
Maven home: C:\Java\apache-maven-3.3.9\bin\..
Java version: 1.8.0_112, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_112\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

RAT check fails on Docker ignore file. Not a blocker.

CLIRR check OK.

mvn clean install

gives me:

Failed tests:

AsyncLoggerThreadContextDefaultTest>AbstractAsyncThreadContextTestBase.testAsyncLogWritesToLog:161->AbstractAsyncThreadContextTestBase.checkResult:184
AsyncLoggerAndAsyncAppenderTest.log: line 0 expected:<...syncLoggerContext
i=[0]> but was:<...syncLoggerContext i=[128]>

Thoughts?

Gary



On Mon, Jan 23, 2017 at 11:04 AM, Apache <ralph.go...@dslextreme.com> wrote:

> My view is that trying to keep the releases in synch is going to be more
> trouble than it is worth.
>
> Ralph
>
> On Jan 23, 2017, at 9:06 AM, Matt Sicker <boa...@gmail.com> wrote:
>
> The Scala API doesn't have to be versioned exactly the same as Log4j API
> here (if it's 2.8.1 while Log4j API is 2.8, I don't see that being a big
> deal). I feel as though it should maintain a similar release cycle, but as
> it doesn't change a lot, it might not be completely necessary all the time.
>
> On 23 January 2017 at 09:42, Mikael Ståldal <mikael.stal...@magine.com>
> wrote:
>
>> But currently some Scala modules are duplicated in main repo and Scala
>> repo.
>>
>> On Mon, Jan 23, 2017 at 4:33 PM, Apache <ralph.go...@dslextreme.com>
>> wrote:
>>
>>> We don’t really need a 2.8.1 release of core to update the web page. I
>>> can do that manually.
>>>
>>> Ralph
>>>
>>> On Jan 23, 2017, at 8:24 AM, Mikael Ståldal <mikael.stal...@magine.com>
>>> wrote:
>>>
>>> I don't want to delay the 2.8 release, but I  also want to get Scala
>>> 2.12 support out before we release 2.9.
>>>
>>> Maybe we can release 2.8 now as is, and then when the Scala repo is
>>> ready, we can release it and at the same time do a 2.8.1 release of the
>>> main repo with the current Scala modules removed?
>>>
>>> On Mon, Jan 23, 2017 at 4:16 PM, Matt Sicker <boa...@gmail.com> wrote:
>>>
>>>> I think the issue is that this RC has three of the four modules from
>>>> the logging-log4j-scala repo (if you include the sample jar as a released
>>>> artifact that is). When we cut a release from there, we can either try to
>>>> release just the last module as version 2.8, or we could release the whole
>>>> log4j-scala repo as 2.8.1.
>>>>
>>>> On 23 January 2017 at 09:13, Apache <ralph.go...@dslextreme.com> wrote:
>>>>
>>>>> Every git repo has to be released separately.
>>>>>
>>>>> Ralph
>>>>>
>>>>> On Jan 23, 2017, at 7:35 AM, Mikael Ståldal <mikael.stal...@magine.com>
>>>>> wrote:
>>>>>
>>>>> What about LOG4J2-1691, the new Scala API repo? Is that ready now?
>>>>> Should that be part of this release, or will it be released separately?
>>>>>
>>>>>
>>>>> On Mon, Jan 23, 2017 at 5:04 AM, Matt Sicker <boa...@gmail.com> wrote:
>>>>>
>>>>>> Do you mean the line at the end about binary compatibility? I don't
>>>>>> think that was ever templatised yet as it was a new note since the source
>>>>>> issue I thought. Oh well, that's certainly not a blocker. :)
>>>>>>
>>>>>> On 22 January 2017 at 00:14, Apache <ralph.go...@dslextreme.com>
>>>>>> wrote:
>>>>>>
>>>>>>> It appears that when the main page was converted to Markdown one of
>>>>>>> the version numbers was left hard-coded. That isn’t a big deal. I will 
>>>>>>> fix
>>>>>>> that before the site is deployed live. I have already updated the 
>>>>>>> template.
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> On Jan 21, 2017, at 11:08 PM, Ralph Goers <
>>>>>>> ralph.go...@dslextreme.com> wrote:
>>>>>>>
>>>>>>> This is a vote to release Log4j 2.8 the next version of the Log4j 2
>>>>>>> project.
>>>>>>>
>>>>>>> Please download, test, and cast your votes on the log4j developers
>>>>>>> list.
>>>>>>> [] +1, release the artifacts
>>>>>>> [] -1, don't release because...
>>>>>>>
>>>>>>> The vote will remain open for 72 hours (or more if required). All
>>>>>>> votes are welcome and we encourage everyone to test the release, but 
>>>>>>> only
>>>>>>> Logging PMC votes are “officially” counted. As always, at least 3 +1 
>>>>>>> votes
>>>>>>> and more positive than negative votes are required.
>>>>>>>
>>>>>>> Changes in this version include:
>>>>>>>
>>>>>>> New features:
>>>>>>> o LOG4J2-1032:  Make DefaultRolloverStrategy more efficent when 
>>>>>>> renaming files. Add nomax option to the fileIndex attribute.
>>>>>>> o LOG4J2-1101:  RollingFileAppender now supports omitting the file name 
>>>>>>> and writing directly to the archive files.
>>>>>>> o LOG4J2-1243:  Allow default value in property to be a Lookup.
>>>>>>> o LOG4J2-1787:  Document how to exclude transitive conflicting 
>>>>>>> dependencies in Maven and Gradle.
>>>>>>> o LOG4J2-1773:  Add StatusLoggerRule to allow unit tests to set a 
>>>>>>> status level.
>>>>>>> o LOG4J2-424:  Add non-string data type support to JdbcAppender via new 
>>>>>>> ColumnMapping plugin.
>>>>>>> o LOG4J2-1771:  Add a Builder to ColumnConfig and deprecate 
>>>>>>> ColumnConfig.createColumnConfig().
>>>>>>> o LOG4J2-1770:  Add a Builder to JdbcAppender and deprecate 
>>>>>>> JdbcAppender.createAppender().
>>>>>>> o LOG4J2-1764:  Use MethodHandle in ContextDataFactory cached 
>>>>>>> constructor.
>>>>>>> o LOG4J2-1730:  Add Apache Cassandra appender and ColumnMapping plugin.
>>>>>>> o LOG4J2-1759:  Add TypeConverter for java.util.UUID.
>>>>>>> o LOG4J2-1758:  Add TypeConverter for java.nio.file.Path.
>>>>>>> o LOG4J2-1755:  Add TypeConverter and constraint validators for 
>>>>>>> java.net.InetAddress and port numbers.
>>>>>>> o LOG4J2-969:  Refactor SyslogAppender so that Layout is a Plugin 
>>>>>>> element.
>>>>>>> o LOG4J2-1660:  Added public method ThreadContext::getThreadContextMap; 
>>>>>>> removed class ThreadContextAccess.
>>>>>>> o LOG4J2-1379:  Add documentation regarding YAML configuration format.
>>>>>>> o LOG4J2-1718:  Introduce marker interface AsynchronouslyFormattable.
>>>>>>> o LOG4J2-1681:  Introduce interfaces IndexedStringMap and 
>>>>>>> IndexedReadOnlyStringMap, supporting garbage-free iteration over sorted 
>>>>>>> map.
>>>>>>> o LOG4J2-1695:  Add a Builder to ScriptPatternSelector and deprecate 
>>>>>>> ScriptPatternSelector.createSelector().
>>>>>>> o LOG4J2-1696:  Add a Builder to MarkerPatternSelector and deprecate 
>>>>>>> MarkerPatternSelector.createSelector().
>>>>>>> o LOG4J2-1697:  Add a SerializerBuilder to PatternLayout and deprecate 
>>>>>>> PatternLayout.createSerializer().
>>>>>>> o LOG4J2-1701:  Add a Builder to RandomAccessFileAppender and deprecate 
>>>>>>> RandomAccessFileAppender.createAppender().
>>>>>>> o LOG4J2-1703:  Add a Builder to MemoryMappedFileAppender and deprecate 
>>>>>>> MemoryMappedFileAppender.createAppender().
>>>>>>> o LOG4J2-1704:  Add a Builder to RollingRandomAccessFileAppender and 
>>>>>>> deprecate RollingRandomAccessFileAppender.createAppender().
>>>>>>> o LOG4J2-1709:  Add a Builder to SyslogAppender and deprecate 
>>>>>>> SyslogAppender.createAppender().
>>>>>>> o LOG4J2-1707:  Allow TCP Socket Appender to set socket options.
>>>>>>> o LOG4J2-1708:  Allow Secure Socket Appender to set socket options.
>>>>>>> o LOG4J2-1737:  Add a Builder to SyslogLayout and deprecate 
>>>>>>> SyslogLayout.createLayout(Facility, boolean, String, Charset).
>>>>>>> o LOG4J2-1738:  Add a Builder to JsonLayout and deprecate 
>>>>>>> org.apache.logging.log4j.core.layout.JsonLayout.createLayout(Configuration,
>>>>>>>  boolean, boolean, boolean, boolean, boolean, boolean, String, String, 
>>>>>>> Charset, boolean).
>>>>>>> o LOG4J2-1739:  Add Builder to KafkaAppender and deprecate 
>>>>>>> KafkaAppender.createAppender(Layout, Filter, String, boolean, String, 
>>>>>>> Property[], Configuration).
>>>>>>> o LOG4J2-1733:  Add SyncSend attribute to KafkaAppender (as in 
>>>>>>> KafkaLog4jAppender). Thanks to Vincent Tieleman.
>>>>>>>
>>>>>>> Fixed Bugs:
>>>>>>> o LOG4J2-1780:  Eliminate the use of the ExecutorServices in the 
>>>>>>> LoggerContext.
>>>>>>> o LOG4J2-1786:  ConfigurationScheduler now preserves interrupt flag 
>>>>>>> during stop.
>>>>>>> o LOG4J2-1779:  Fixed bug where AsyncLogger did not resolve 
>>>>>>> configuration properties.
>>>>>>> o LOG4J2-1769:  Fixed concurrency issue affecting all layouts except 
>>>>>>> PatternLayout and GelfLayout, which caused scrambled output and 
>>>>>>> exceptions when logging synchronously from multiple threads. Thanks to 
>>>>>>> Brandon Goodin.
>>>>>>> o LOG4J2-1724:  Using variables in GelfLayout's additional fields at 
>>>>>>> runtime. Thanks to Alexander Krasnostavsky.
>>>>>>> o LOG4J2-1762:  Add Builder to GelfLayout.
>>>>>>> o LOG4J2-1649:  Insure the ConfigurationScheduler shuts down without 
>>>>>>> blocking. Thanks to Georg Friedrich.
>>>>>>> o LOG4J2-1653:  CronTriggeringPolicy would use the wrong date/time when 
>>>>>>> rolling over and create multiple triggering policies on 
>>>>>>> reconfiguration. Thanks to Georg Friedrich.
>>>>>>> o LOG4J2-1748:  Do not use non-daemon thread pool for rollover tasks.
>>>>>>> o LOG4J2-1628:  Fixed file locking regression in FileAppender 
>>>>>>> introduced in 2.6.
>>>>>>> o LOG4J2-1744:  The custom logger Generate tool no longer requires the 
>>>>>>> log4j-api module on the classpath.
>>>>>>> o LOG4J2-1731:  SslSocketManager now respects connectTimeoutMillis. 
>>>>>>> Thanks to Chris Ribble.
>>>>>>> o LOG4J2-1682:  Logger using LocalizedMessageFactory prints key instead 
>>>>>>> of message. Thanks to Markus Waidhofer.
>>>>>>> o LOG4J2-1720:  Make GelfLayout independent of Jackson.
>>>>>>> o LOG4J2-1719:  Fixed race condition in ObjectMessage and 
>>>>>>> SimpleMessage, ensuring that the log message contains the value the 
>>>>>>> object has during the logging call.
>>>>>>> o LOG4J2-1688:  Fixed bug where elements of a log message parameter 
>>>>>>> array were nulled out in garbage-free mode.
>>>>>>> o LOG4J2-1692:  Add putAll() method to CloseableThreadContext. Thanks 
>>>>>>> to Greg Thomas.
>>>>>>> o LOG4J2-1689:  Add CleanableThreadContextMap interface supporting 
>>>>>>> method removeAll(Iterable<String>).
>>>>>>> o LOG4J2-1685:  Option 'disableAnsi' in PatternLayout to 
>>>>>>> unconditionally disable ANSI escape codes. Thanks to Raman Gupta.
>>>>>>> o LOG4J2-1706:  Make TimeFilter usable as global filter and as logger 
>>>>>>> filter.
>>>>>>> o LOG4J2-1722:  (GC) Avoid allocating temporary objects in 
>>>>>>> VariablesNotEmptyReplacementConverter.
>>>>>>> o LOG4J2-1717:  (GC) Avoid allocating temporary objects in 
>>>>>>> EncodingPatternConverter.
>>>>>>> o LOG4J2-1716:  (GC) Avoid allocating temporary objects in 
>>>>>>> MapPatternConverter. (Note that constructing a MapMessage is not 
>>>>>>> garbage-free.)
>>>>>>> o LOG4J2-1683:  (GC) Avoid allocating temporary objects in MapMessage.
>>>>>>> o LOG4J2-1715:  (GC) Avoid allocating temporary objects in 
>>>>>>> NdcPatternConverter. (Note that use of the ThreadContext stack is not 
>>>>>>> garbage-free.)
>>>>>>> o LOG4J2-1714:  (GC) Avoid allocating temporary objects in 
>>>>>>> AbstractStyleNameConverter.
>>>>>>> o LOG4J2-1680:  (GC) Avoid allocating temporary objects in TimeFilter.
>>>>>>> o LOG4J2-1679:  (GC) Avoid allocating temporary objects in 
>>>>>>> StructuredDataFilter.
>>>>>>> o LOG4J2-1678:  (GC) Avoid allocating temporary objects in 
>>>>>>> ThreadContextMapFilter.
>>>>>>> o LOG4J2-1677:  (GC) Avoid allocating temporary objects in MapFilter.
>>>>>>> o LOG4J2-1674:  (GC) Avoid allocating temporary objects in 
>>>>>>> ThresholdFilter.
>>>>>>> o LOG4J2-1673:  (GC) Avoid allocating temporary objects in MarkerFilter.
>>>>>>> o LOG4J2-1672:  (GC) Avoid allocating temporary objects in 
>>>>>>> LevelRangeFilter.
>>>>>>> o LOG4J2-1671:  (GC) Avoid allocating temporary objects in 
>>>>>>> EqualsIgnoreCaseReplacementConverter.
>>>>>>> o LOG4J2-1670:  (GC) Avoid allocating temporary objects in 
>>>>>>> EqualsReplacementConverter.
>>>>>>> o LOG4J2-1669:  (GC) Avoid allocating temporary objects in 
>>>>>>> MaxLengthConverter.
>>>>>>> o LOG4J2-1668:  (GC) Avoid allocating temporary objects in 
>>>>>>> MarkerPatternConverter.
>>>>>>> o LOG4J2-1667:  (GC) Avoid allocating temporary objects in 
>>>>>>> SequenceNumberPatternConverter.
>>>>>>> o LOG4J2-1666:  (GC) Avoid allocating temporary objects in 
>>>>>>> RelativeTimePatternConverter.
>>>>>>> o LOG4J2-1665:  (GC) Avoid allocating temporary objects in 
>>>>>>> IntegerPatternConverter.
>>>>>>> o LOG4J2-1637:  Fixed problems when used in OSGi containers 
>>>>>>> (IllegalAccessError, NoClassDefFoundError).
>>>>>>> o LOG4J2-1226:  Improve LogEvent serialization to handle 
>>>>>>> non-serializable Messages and deserializing when required classes are 
>>>>>>> missing.
>>>>>>> o LOG4J2-1663:  Ensure SortedArrayStringMap can be serialized and 
>>>>>>> deserialized without errors regardless of content.
>>>>>>> o LOG4J2-1658:  Prevent NPE in 
>>>>>>> ThreadContextMapFactory::createThreadContextMap when initializing Log4j 
>>>>>>> with Configurator::initialize and the BasicContextSelector is used.
>>>>>>> o LOG4J2-1645:  Immutable empty StringMap.
>>>>>>> o LOG4J2-1623:  Configurable JVM shutdown hook timeout.
>>>>>>> o LOG4J2-1712:  Pick up bug fixes from Apache Commons Lang's 
>>>>>>> org.apache.commons.lang3.time package.
>>>>>>> o LOG4J2-1636:  Console Appender does not pick up Oracle Java 8's 
>>>>>>> sun.stdout.encoding and sun.stderr.encoding. Thanks to Eldar Gabdullin.
>>>>>>> o LOG4J2-1639:  Fix MemoryMappedFileAppender.createAppender() Javadoc 
>>>>>>> for immediateFlush. Thanks to Sridhar Gopinath.
>>>>>>> o LOG4J2-1676:  Some LogEvents may not carry a Throwable (Use 
>>>>>>> Message.getThrowable() in log(Message) methods.) Thanks to Joern 
>>>>>>> Huxhorn.
>>>>>>> o LOG4J2-1723:  Unwanted transitive dependency on geronimo-jms_1.1_spec 
>>>>>>> causes OSGi tests to fail. Thanks to Ludovic HOCHET.
>>>>>>> o LOG4J2-1664:  Improve OSGi unit tests. Thanks to Ludovic HOCHET.
>>>>>>> o LOG4J2-1687:  NPE in ThrowableProxy when resolving stack in Java 
>>>>>>> EE/OSGi environment. Thanks to Robert Christiansen.
>>>>>>> o LOG4J2-1642:  DefaultShutdownCallbackRegistry can throw a 
>>>>>>> NoClassDefFoundError. Thanks to Johno Crawford.
>>>>>>> o LOG4J2-1474:  CronTriggeringPolicy raise exception and fail to 
>>>>>>> rollover log file when evaluateOnStartup is true. Thanks to yin 
>>>>>>> mingjun, Neon.
>>>>>>> o LOG4J2-1734:  SslSocketManagerFactory might leak Sockets when certain 
>>>>>>> startup errors occur.
>>>>>>> o LOG4J2-1736:  TcpSocketManagerFactory might leak Sockets when certain 
>>>>>>> startup errors occur.
>>>>>>> o LOG4J2-1740:  Add CronTriggeringPolicy programmatically leads to NPE.
>>>>>>> o LOG4J2-1743:  CompositeConfiguration does not add filters to 
>>>>>>> appenderRefs. Thanks to Toby Shepheard.
>>>>>>> o LOG4J2-1756:  Adds xmlns in schema and some other tags. Thanks to 
>>>>>>> shubhankar1100.
>>>>>>>
>>>>>>> Changes:
>>>>>>> o LOG4J2-1781:  Update Conversant Disruptor from 1.2.7 to 1.2.10
>>>>>>> o LOG4J2-1774:  Replace MockEJB dependency in unit tests with Spring 
>>>>>>> Test and Mockito.
>>>>>>> o LOG4J2-1644:  Inefficient locking in AbstractLoggerAdapter. Thanks to 
>>>>>>> Tim Gokcen, Pavel Sivolobtchik.
>>>>>>> o LOG4J2-1641:  Update JeroMQ from 0.3.5 to 0.3.6.
>>>>>>> o LOG4J2-1647:  Update Commons Lang from 3.4 to 3.5.
>>>>>>> o LOG4J2-1646:  Migrate to Mockito 2.x in unit tests.
>>>>>>> o LOG4J2-1655:  Update Jackson from 2.8.3 to 2.8.4.
>>>>>>> o LOG4J2-1735:  Update Jackson from 2.8.4 to 2.8.5.
>>>>>>> o LOG4J2-1656:  Update Apache Flume from 1.6.0 to 1.7.0.
>>>>>>> o LOG4J2-1698:  Update LMAX Disruptor from 3.3.5 to 3.3.6.
>>>>>>> o LOG4J2-1700:  Update Jansi from 1.13 to 1.14.
>>>>>>> o LOG4J2-1750:  Update Kafka from 0.10.0.1 to 0.10.1.1.
>>>>>>> o LOG4J2-1751:  Update liquibase-core from 3.5.1 to 3.5.3.
>>>>>>> o LOG4J2-1302:  The log4j-slf4j-impl module now declares a runtime 
>>>>>>> dependency on log4j-core. While not technically required, this makes 
>>>>>>> the log4j-slf4j-impl module behave similarly to slf4j-log4j12, and 
>>>>>>> facilitates migration to Log4j 2.
>>>>>>>
>>>>>>> Tag:
>>>>>>>
>>>>>>> a)  for a new copy do "git clone 
>>>>>>> https://git-wip-us.apache.org/repos/asf/logging-log4j2.git"; and then 
>>>>>>> "git checkout tags/log4j-2.8-rc1”
>>>>>>> b) for an existing working copy to “git pull” and then “git checkout 
>>>>>>> tags/log4j-2.8-rc1”
>>>>>>>
>>>>>>> Web Site:  
>>>>>>> <http://rgoers.github.io/log4j2-site/index.html>http://rgoers.github.io/log4j2-site/index.html
>>>>>>>
>>>>>>> Artifacts: 
>>>>>>> https://repository.apache.org/content/repositories/orgapachelogging-1024
>>>>>>>
>>>>>>> You may download all the artifacts by executing:
>>>>>>>
>>>>>>> wget -e robots=off --cut-dirs=7 -nH -r -p -np --no-check-certificate 
>>>>>>> https://repository.apache.org/content/repositories/orgapachelogging-1024/org/apache/logging/log4j/
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Matt Sicker <boa...@gmail.com>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> [image: MagineTV]
>>>>>
>>>>> *Mikael Ståldal*
>>>>> Senior software developer
>>>>>
>>>>> *Magine TV*
>>>>> mikael.stal...@magine.com
>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>> <http://www.magine.com/>
>>>>>
>>>>> Privileged and/or Confidential Information may be contained in this
>>>>> message. If you are not the addressee indicated in this message
>>>>> (or responsible for delivery of the message to such a person), you may
>>>>> not copy or deliver this message to anyone. In such case,
>>>>> you should destroy this message and kindly notify the sender by reply
>>>>> email.
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Matt Sicker <boa...@gmail.com>
>>>>
>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.stal...@magine.com
>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>> <http://www.magine.com/>
>>>
>>> Privileged and/or Confidential Information may be contained in this
>>> message. If you are not the addressee indicated in this message
>>> (or responsible for delivery of the message to such a person), you may
>>> not copy or deliver this message to anyone. In such case,
>>> you should destroy this message and kindly notify the sender by reply
>>> email.
>>>
>>>
>>>
>>
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.stal...@magine.com
>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>> <http://www.magine.com/>
>>
>> Privileged and/or Confidential Information may be contained in this
>> message. If you are not the addressee indicated in this message
>> (or responsible for delivery of the message to such a person), you may
>> not copy or deliver this message to anyone. In such case,
>> you should destroy this message and kindly notify the sender by reply
>> email.
>>
>
>
>
> --
> Matt Sicker <boa...@gmail.com>
>
>
>


-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
Java Persistence with Hibernate, Second Edition
<https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
JUnit in Action, Second Edition
<https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=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

Reply via email to