logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Sicker <boa...@gmail.com>
Subject Re: [VOTE] Release Log4j 2.8-rc1
Date Wed, 25 Jan 2017 01:54:57 GMT
I've also only seen that failure in Jenkins.

On 24 January 2017 at 19:39, Apache <ralph.goers@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 <garydgregory@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.goers@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 <boards@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.staldal@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.goers@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.staldal@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 <boards@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.goers@dslextreme.com>
>>>>> wrote:
>>>>>
>>>>>> Every git repo has to be released separately.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Jan 23, 2017, at 7:35 AM, Mikael Ståldal <
>>>>>> mikael.staldal@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 <boards@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.goers@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.goers@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 <boards@gmail.com>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> [image: MagineTV]
>>>>>>
>>>>>> *Mikael Ståldal*
>>>>>> Senior software developer
>>>>>>
>>>>>> *Magine TV*
>>>>>> mikael.staldal@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 <boards@gmail.com>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> [image: MagineTV]
>>>>
>>>> *Mikael Ståldal*
>>>> Senior software developer
>>>>
>>>> *Magine TV*
>>>> mikael.staldal@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.staldal@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 <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=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 <boards@gmail.com>

Mime
View raw message