I've also only seen that failure in Jenkins. On 24 January 2017 at 19:39, Apache <ralph.go...@dslextreme.com> wrote:
> If you run the rat check with -P rat the docker files will be ignored. > > I have never seen that test failure before on my computers but I do see > that failure in Jenkins. I’ve never looked at that test though. It started > recently. I don’t see it as a release blocker though. > > Ralph > > On Jan 24, 2017, at 6:29 PM, Gary Gregory <garydgreg...@gmail.com> wrote: > > 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>AbstractAsyncThreadContextTest > Base.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> wrot >>>>>> e: >>>>>> >>>>>>> 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 > > > -- Matt Sicker <boa...@gmail.com>